@pikku/cli 0.12.116 → 0.12.118

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 (133) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/.pikku/addon/index.d.ts +1 -1
  3. package/dist/.pikku/addon/index.js +1 -1
  4. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  5. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  6. package/dist/.pikku/agent/index.d.ts +1 -1
  7. package/dist/.pikku/agent/index.js +1 -1
  8. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  9. package/dist/.pikku/agent/pikku-model-aliases.gen.js +1 -1
  10. package/dist/.pikku/auth/index.d.ts +1 -1
  11. package/dist/.pikku/auth/index.js +1 -1
  12. package/dist/.pikku/auth/pikku-auth-types.gen.d.ts +1 -1
  13. package/dist/.pikku/auth/pikku-auth-types.gen.js +1 -1
  14. package/dist/.pikku/channel/index.d.ts +1 -1
  15. package/dist/.pikku/channel/index.js +1 -1
  16. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  17. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  18. package/dist/.pikku/cli/index.d.ts +1 -1
  19. package/dist/.pikku/cli/index.js +1 -1
  20. package/dist/.pikku/cli/pikku-cli-channel.js +6 -1
  21. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  22. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  23. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  24. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  25. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  26. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  27. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  28. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +12 -0
  29. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  30. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  31. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  32. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  33. package/dist/.pikku/error/index.d.ts +1 -1
  34. package/dist/.pikku/error/index.js +1 -1
  35. package/dist/.pikku/error/pikku-error-types.gen.d.ts +1 -1
  36. package/dist/.pikku/error/pikku-error-types.gen.js +1 -1
  37. package/dist/.pikku/function/index.d.ts +1 -1
  38. package/dist/.pikku/function/index.js +1 -1
  39. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  40. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  41. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  42. package/dist/.pikku/function/pikku-functions-meta.gen.json +18 -1
  43. package/dist/.pikku/function/pikku-functions.gen.js +1 -1
  44. package/dist/.pikku/gateway/index.d.ts +1 -1
  45. package/dist/.pikku/gateway/index.js +1 -1
  46. package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts +1 -1
  47. package/dist/.pikku/gateway/pikku-gateway-types.gen.js +1 -1
  48. package/dist/.pikku/http/index.d.ts +1 -1
  49. package/dist/.pikku/http/index.js +1 -1
  50. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  51. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  52. package/dist/.pikku/mcp/index.d.ts +1 -1
  53. package/dist/.pikku/mcp/index.js +1 -1
  54. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  55. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  56. package/dist/.pikku/middleware/index.d.ts +1 -1
  57. package/dist/.pikku/middleware/index.js +1 -1
  58. package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts +1 -1
  59. package/dist/.pikku/middleware/pikku-middleware-types.gen.js +1 -1
  60. package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  61. package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
  62. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  63. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  64. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  65. package/dist/.pikku/queue/index.d.ts +1 -1
  66. package/dist/.pikku/queue/index.js +1 -1
  67. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  68. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  69. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  70. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  71. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  72. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  73. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +1 -0
  74. package/dist/.pikku/scenarios/index.d.ts +1 -1
  75. package/dist/.pikku/scenarios/index.js +1 -1
  76. package/dist/.pikku/scenarios/pikku-personas.gen.js +1 -1
  77. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
  78. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  79. package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts +1 -1
  80. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
  81. package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  82. package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
  83. package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
  84. package/dist/.pikku/scheduler/index.d.ts +1 -1
  85. package/dist/.pikku/scheduler/index.js +1 -1
  86. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  87. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  88. package/dist/.pikku/schemas/register.gen.js +3 -1
  89. package/dist/.pikku/schemas/schemas/PikkuMetaApplyInput.schema.json +1 -0
  90. package/dist/.pikku/scopes/index.d.ts +1 -1
  91. package/dist/.pikku/scopes/index.js +1 -1
  92. package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
  93. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
  94. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  95. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  96. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  97. package/dist/.pikku/secrets/index.d.ts +1 -1
  98. package/dist/.pikku/secrets/index.js +1 -1
  99. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  100. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  101. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  102. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  103. package/dist/.pikku/services/pikku-meta-service.gen.d.ts +1 -1
  104. package/dist/.pikku/services/pikku-meta-service.gen.js +1 -1
  105. package/dist/.pikku/setup/index.d.ts +1 -1
  106. package/dist/.pikku/setup/index.js +1 -1
  107. package/dist/.pikku/setup/pikku-setup-types.gen.d.ts +1 -1
  108. package/dist/.pikku/setup/pikku-setup-types.gen.js +1 -1
  109. package/dist/.pikku/trigger/index.d.ts +1 -1
  110. package/dist/.pikku/trigger/index.js +1 -1
  111. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  112. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  113. package/dist/.pikku/variables/index.d.ts +1 -1
  114. package/dist/.pikku/variables/index.js +1 -1
  115. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  116. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  117. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  118. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  119. package/dist/.pikku/workflow/index.d.ts +1 -1
  120. package/dist/.pikku/workflow/index.js +1 -1
  121. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  122. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  123. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  124. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  125. package/dist/bin/pikku-bin.mjs +2 -2
  126. package/dist/src/cli.wiring.js +6 -1
  127. package/dist/src/fabric/functions/smoke.function.js +2 -2
  128. package/dist/src/fabric/functions/validate.function.js +2 -2
  129. package/dist/src/functions/commands/meta.d.ts +7 -0
  130. package/dist/src/functions/commands/meta.js +65 -0
  131. package/dist/src/utils/assert-single-core-version.js +63 -11
  132. package/package.json +4 -3
  133. package/surface.json +1 -1
@@ -1,5 +1,8 @@
1
1
  import { pikkuSessionlessFunc } from '#pikku/function';
2
2
  import { getSchema } from '@pikku/core/schema';
3
+ import { CodeEditService } from '@pikku/code-edit';
4
+ import { readFile } from 'node:fs/promises';
5
+ import { relative, resolve } from 'node:path';
3
6
  function out(value) {
4
7
  console.log(JSON.stringify(value));
5
8
  }
@@ -452,3 +455,65 @@ export const pikkuMetaClients = pikkuSessionlessFunc({
452
455
  });
453
456
  },
454
457
  });
458
+ async function readOperationsInput(file) {
459
+ const raw = file
460
+ ? await readFile(resolve(file), 'utf-8')
461
+ : await new Promise((res, rej) => {
462
+ let buffer = '';
463
+ process.stdin.setEncoding('utf-8');
464
+ process.stdin.on('data', (chunk) => (buffer += chunk));
465
+ process.stdin.on('end', () => res(buffer));
466
+ process.stdin.on('error', rej);
467
+ });
468
+ if (!raw.trim()) {
469
+ throw new Error(file
470
+ ? `${file} is empty`
471
+ : 'No operations on stdin. Pass a file, or pipe JSON in.');
472
+ }
473
+ try {
474
+ return JSON.parse(raw);
475
+ }
476
+ catch (e) {
477
+ throw new Error(`Could not parse operations as JSON: ${e.message}`);
478
+ }
479
+ }
480
+ function parseOperations(input) {
481
+ const operations = Array.isArray(input)
482
+ ? input
483
+ : input?.operations;
484
+ if (!Array.isArray(operations)) {
485
+ throw new Error('Expected an array of operations, or an object with an "operations" array');
486
+ }
487
+ const kinds = ['functionConfig', 'functionBody', 'agentConfig'];
488
+ operations.forEach((operation, index) => {
489
+ const at = `operations[${index}]`;
490
+ if (!operation || typeof operation !== 'object') {
491
+ throw new Error(`${at} is not an object`);
492
+ }
493
+ const { kind, sourceFile, exportedName } = operation;
494
+ if (typeof kind !== 'string' || !kinds.includes(kind)) {
495
+ throw new Error(`${at}.kind must be one of ${kinds.join(', ')}`);
496
+ }
497
+ if (typeof sourceFile !== 'string' || !sourceFile) {
498
+ throw new Error(`${at}.sourceFile must be a non-empty string`);
499
+ }
500
+ if (typeof exportedName !== 'string' || !exportedName) {
501
+ throw new Error(`${at}.exportedName must be a non-empty string`);
502
+ }
503
+ });
504
+ return operations;
505
+ }
506
+ export const pikkuMetaApply = pikkuSessionlessFunc({
507
+ func: async ({ config }, data) => {
508
+ const operations = parseOperations(await readOperationsInput(data.file));
509
+ const rootDir = config.rootDir ?? process.cwd();
510
+ const codeEdit = new CodeEditService(rootDir);
511
+ const files = await codeEdit.applyOperations(operations);
512
+ out({
513
+ schemaVersion: 'meta-apply.v1',
514
+ applied: operations.length,
515
+ files: files.map((f) => relative(rootDir, f)),
516
+ generatedMetaIsStale: operations.some((o) => o.kind !== 'functionBody'),
517
+ });
518
+ },
519
+ });
@@ -1,19 +1,68 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { realpathSync } from 'node:fs';
2
+ import { readdirSync, realpathSync } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { glob } from 'tinyglobby';
6
6
  import { ErrorCode } from '@pikku/inspector';
7
- // Bounded globs (no unbounded `**`) covering the real @pikku/core copies each
8
- // package manager keeps: hoisted root, bun (.bun), pnpm (.pnpm), and one level
9
- // of npm/yarn nesting (both plain and scoped dependents).
7
+ // Bounded globs (no unbounded `**`) covering the copies reachable without a
8
+ // content-addressed store: the hoisted root, and one level of npm/yarn nesting
9
+ // (both plain and scoped dependents).
10
10
  const PATTERNS = [
11
11
  '@pikku/core/package.json',
12
- '.bun/@pikku+core@*/node_modules/@pikku/core/package.json',
13
- '.pnpm/@pikku+core@*/node_modules/@pikku/core/package.json',
14
12
  '*/node_modules/@pikku/core/package.json',
15
13
  '@*/*/node_modules/@pikku/core/package.json',
16
14
  ];
15
+ /**
16
+ * bun and pnpm keep every version they have ever installed under `.bun`/`.pnpm`
17
+ * and neither prunes on upgrade, so globbing the store counts copies nothing can
18
+ * load: after one `@pikku/core` bump the store holds both, and the split this
19
+ * guard exists to catch is reported on a tree that has none. Walk in from the
20
+ * links instead — a store copy counts only when a live `@pikku/*` package
21
+ * resolves to it.
22
+ */
23
+ const storeCores = (nodeModules) => {
24
+ const seen = new Set();
25
+ const cores = new Set();
26
+ const queue = [];
27
+ const real = (dir) => {
28
+ try {
29
+ return realpathSync(dir);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ };
35
+ const visitScope = (scopeDir) => {
36
+ let entries;
37
+ try {
38
+ entries = readdirSync(scopeDir);
39
+ }
40
+ catch {
41
+ return;
42
+ }
43
+ for (const entry of entries) {
44
+ const resolved = real(path.join(scopeDir, entry));
45
+ if (!resolved || seen.has(resolved))
46
+ continue;
47
+ seen.add(resolved);
48
+ if (entry === 'core')
49
+ cores.add(path.join(resolved, 'package.json'));
50
+ else
51
+ queue.push(resolved);
52
+ }
53
+ };
54
+ visitScope(path.join(nodeModules, '@pikku'));
55
+ while (queue.length > 0) {
56
+ const pkg = queue.pop();
57
+ // A package's own dependencies sit either beside it (bun and pnpm put a
58
+ // package and everything it resolves into one store `node_modules`) or
59
+ // nested under it (npm/yarn). Every queued entry is a `@pikku/*` package, so
60
+ // its parent is always the scope directory.
61
+ visitScope(path.dirname(pkg));
62
+ visitScope(path.join(pkg, 'node_modules', '@pikku'));
63
+ }
64
+ return [...cores];
65
+ };
17
66
  /**
18
67
  * Minimal semver range check for the shapes @pikku/cli publishes in its own
19
68
  * peerDependencies (exact, ^, ~, >=/>/<=/< comparators, space-joined ANDs,
@@ -121,11 +170,14 @@ async function getCliManifest() {
121
170
  */
122
171
  export async function assertSingleCoreVersion(rootDir, logger) {
123
172
  const nodeModules = path.join(path.resolve(rootDir), 'node_modules');
124
- const found = await glob(PATTERNS, {
125
- cwd: nodeModules,
126
- absolute: true,
127
- onlyFiles: true,
128
- }).catch(() => []);
173
+ const found = [
174
+ ...(await glob(PATTERNS, {
175
+ cwd: nodeModules,
176
+ absolute: true,
177
+ onlyFiles: true,
178
+ }).catch(() => [])),
179
+ ...storeCores(nodeModules),
180
+ ];
129
181
  // Dedupe by real path (symlinks/hoisting surface the same copy many times),
130
182
  // then map each physical copy to its version.
131
183
  const byRealPath = new Map();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.12.116",
3
+ "version": "0.12.118",
4
4
  "description": "Pikku CLI — code generation, dev server, migrations and deployment",
5
5
  "author": "yasser.fadl@gmail.com",
6
6
  "license": "BUSL-1.1",
@@ -32,7 +32,8 @@
32
32
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.3.4",
33
33
  "@pikku/ai-vercel": "^0.12.13",
34
34
  "@pikku/better-auth": "^0.12.29",
35
- "@pikku/bun-server": "^0.12.8",
35
+ "@pikku/bun-server": "^0.12.9",
36
+ "@pikku/code-edit": "^0.12.1",
36
37
  "@pikku/deploy": "^0.12.1",
37
38
  "@pikku/deploy-cloudflare": "^0.12.13",
38
39
  "@pikku/fetch": "^0.12.9",
@@ -43,7 +44,7 @@
43
44
  "@pikku/node-http-server": "^0.12.11",
44
45
  "@pikku/openapi-parser": "^0.12.20",
45
46
  "@pikku/schedule": "^0.12.7",
46
- "@pikku/skills": "^0.12.14",
47
+ "@pikku/skills": "^0.12.15",
47
48
  "@pikku/ws": "^0.12.9",
48
49
  "@types/cookie": "^1.0.0",
49
50
  "@types/json-schema": "^7.0.15",
package/surface.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.12.116",
2
+ "version": "0.12.118",
3
3
  "entryPoints": [
4
4
  {
5
5
  "id": "app",