swallowkit 1.0.0-beta.60 → 1.0.0-beta.61

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 (41) hide show
  1. package/README.ja.md +3 -0
  2. package/README.md +3 -0
  3. package/dist/cli/commands/add-connector.d.ts.map +1 -1
  4. package/dist/cli/commands/add-connector.js +2 -1
  5. package/dist/cli/commands/add-connector.js.map +1 -1
  6. package/dist/cli/commands/create-model.js +1 -1
  7. package/dist/cli/commands/create-model.js.map +1 -1
  8. package/dist/cli/commands/init.d.ts +1 -5
  9. package/dist/cli/commands/init.d.ts.map +1 -1
  10. package/dist/cli/commands/init.js +45 -154
  11. package/dist/cli/commands/init.js.map +1 -1
  12. package/dist/cli/commands/scaffold.js +1 -1
  13. package/dist/cli/commands/scaffold.js.map +1 -1
  14. package/dist/cli/index.d.ts.map +1 -1
  15. package/dist/cli/index.js +2 -0
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/core/project/agent-instructions.d.ts.map +1 -1
  18. package/dist/core/project/agent-instructions.js +2 -1
  19. package/dist/core/project/agent-instructions.js.map +1 -1
  20. package/dist/core/scaffold/model-parser.d.ts.map +1 -1
  21. package/dist/core/scaffold/model-parser.js +43 -92
  22. package/dist/core/scaffold/model-parser.js.map +1 -1
  23. package/dist/utils/package-manager.d.ts +4 -10
  24. package/dist/utils/package-manager.d.ts.map +1 -1
  25. package/dist/utils/package-manager.js +23 -15
  26. package/dist/utils/package-manager.js.map +1 -1
  27. package/package.json +8 -13
  28. package/src/__tests__/agent-instructions.test.ts +1 -1
  29. package/src/__tests__/connector-mock-server.test.ts +45 -25
  30. package/src/__tests__/init.test.ts +2 -50
  31. package/src/__tests__/model-parser.test.ts +61 -0
  32. package/src/__tests__/package-manager.test.ts +22 -5
  33. package/src/cli/commands/add-connector.ts +2 -1
  34. package/src/cli/commands/create-model.ts +1 -1
  35. package/src/cli/commands/init.ts +46 -173
  36. package/src/cli/commands/scaffold.ts +1 -1
  37. package/src/cli/index.ts +2 -0
  38. package/src/core/project/agent-instructions.ts +2 -2
  39. package/src/core/project/agent-templates/AGENTS.md +2 -0
  40. package/src/core/scaffold/model-parser.ts +40 -113
  41. package/src/utils/package-manager.ts +22 -17
package/README.ja.md CHANGED
@@ -94,6 +94,9 @@ npx swallowkit init my-app
94
94
  cd my-app
95
95
  ```
96
96
 
97
+ pnpm 11/12 は `pnpm dlx swallowkit init my-app` で作成し、以後 project 内で `pnpm exec swallowkit …` を使います。`npx` は npm を選択し、`--package-manager npm|pnpm` で明示指定できます。Node.js 22.14 以上が必要です。MCP は選択した manager で意図的に `latest` を参照します。[コマンド・workspace・security の詳細](docs/ja/package-managers.md)を参照してください。
98
+
99
+
97
100
  モデルを作成し、スキーマを編集します。
98
101
 
99
102
  ```bash
package/README.md CHANGED
@@ -94,6 +94,9 @@ npx swallowkit init my-app
94
94
  cd my-app
95
95
  ```
96
96
 
97
+ For pnpm 11/12: bootstrap with `pnpm dlx swallowkit init my-app`, then use `pnpm exec swallowkit …` inside the project. `npx` selects npm; `--package-manager npm|pnpm` overrides detection. Node.js 22.14+ is required. MCP intentionally uses `latest` with the selected package manager. See [commands, workspace setup, and security troubleshooting](docs/en/package-managers.md).
98
+
99
+
97
100
  Create a model and customize the schema:
98
101
 
99
102
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"add-connector.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGtE,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,iBAuBrE;AAoCD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,mBAAmB,GAChC,IAAI,CAwCN"}
1
+ {"version":3,"file":"add-connector.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGtE,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,iBAuBrE;AAoCD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,mBAAmB,GAChC,IAAI,CAwCN"}
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.addConnectorCommand = addConnectorCommand;
41
41
  exports.updateConfigWithConnector = updateConfigWithConnector;
42
42
  const fs = __importStar(require("fs"));
43
+ const package_manager_1 = require("../../utils/package-manager");
43
44
  const path = __importStar(require("path"));
44
45
  const config_1 = require("../../core/config");
45
46
  const manifest_1 = require("../../core/project/manifest");
@@ -63,7 +64,7 @@ async function addConnectorCommand(options) {
63
64
  console.log("\n📝 Next steps:");
64
65
  console.log(` 1. Review the connector settings in ${configPath}`);
65
66
  console.log(` 2. Set the required environment variables in functions/local.settings.json`);
66
- console.log(` 3. Create models with: npx swallowkit create-model <name> --connector=${options.name}`);
67
+ console.log(` 3. Create models with: ${(0, package_manager_1.getCommands)((0, package_manager_1.detectFromProject)()).exec} swallowkit create-model <name> --connector=${options.name}`);
67
68
  }
68
69
  function findConfigFile() {
69
70
  const candidates = ["swallowkit.config.js", "swallowkit.config.json", ".swallowkitrc.json"];
@@ -1 +1 @@
1
- {"version":3,"file":"add-connector.js","sourceRoot":"","sources":["../../../src/cli/commands/add-connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-connector.js","sourceRoot":"","sources":["../../../src/cli/commands/add-connector.ts"],"names":[],"mappings":"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"}
@@ -81,7 +81,7 @@ async function createModelCommand(options) {
81
81
  if (result.createdFiles.length > 0) {
82
82
  console.log("\n📝 Next steps:");
83
83
  console.log(" 1. Customize the generated model fields in shared/models/");
84
- console.log(` 2. Run '${(0, package_manager_1.getCommands)((0, package_manager_1.detectFromProject)()).dlx} swallowkit scaffold <model>' to generate CRUD code`);
84
+ console.log(` 2. Run '${(0, package_manager_1.getCommands)((0, package_manager_1.detectFromProject)()).exec} swallowkit scaffold <model>' to generate CRUD code`);
85
85
  }
86
86
  }
87
87
  //# sourceMappingURL=create-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-model.js","sourceRoot":"","sources":["../../../src/cli/commands/create-model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,gDA+BC;AA7DD,mDAAqC;AACrC,qEAA0E;AAC1E,iEAA6E;AAQ7E;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAoB,EAAC;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,QAAQ,qCAAqC,CAAC;KACjH,CAAC,CAAC;IAEH,SAAS;IACT,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,CAAC,MAAM,cAAc,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,YAAY,CAAC,MAAM,cAAc,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,aAAa,IAAA,6BAAW,EAAC,IAAA,mCAAiB,GAAE,CAAC,CAAC,GAAG,qDAAqD,CAAC,CAAC;IACtH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"create-model.js","sourceRoot":"","sources":["../../../src/cli/commands/create-model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,gDA+BC;AA7DD,mDAAqC;AACrC,qEAA0E;AAC1E,iEAA6E;AAQ7E;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAoB,EAAC;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,QAAQ,qCAAqC,CAAC;KACjH,CAAC,CAAC;IAEH,SAAS;IACT,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,CAAC,MAAM,cAAc,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,YAAY,CAAC,MAAM,cAAc,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,aAAa,IAAA,6BAAW,EAAC,IAAA,mCAAiB,GAAE,CAAC,CAAC,IAAI,qDAAqD,CAAC,CAAC;IACvH,CAAC;AACH,CAAC"}
@@ -9,6 +9,7 @@ interface InitOptions {
9
9
  cosmosDbMode?: CosmosDbMode;
10
10
  vnet?: VNetOption;
11
11
  swaPlan?: StaticWebAppPlan;
12
+ packageManager?: PackageManager;
12
13
  }
13
14
  type CiCdProvider = 'github' | 'azure' | 'skip';
14
15
  type CosmosDbMode = 'freetier' | 'serverless';
@@ -47,11 +48,6 @@ export declare function withNpmLockfileSafeManifests(projectDir: string, action:
47
48
  * return the bare package names (without versions), de-duplicated.
48
49
  */
49
50
  export declare function parseIgnoredBuilds(output: string): string[];
50
- /**
51
- * pnpm-workspace.yaml の allowBuilds にパッケージを true で登録して build script を許可する。
52
- * (pnpm 11+ の正準設定。失敗時に pnpm が追記する placeholder 行も true に置き換える)
53
- */
54
- export declare function approveBuildsViaWorkspaceYaml(projectDir: string, packages: string[]): void;
55
51
  export declare function injectSwallowKitNextConfig(nextConfigContent: string, projectName: string): string;
56
52
  export declare function buildCSharpFunctionsProgramSource(): string;
57
53
  export declare function buildCSharpFunctionsProjectSource(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,6 @@ exports.buildSharedTsConfig = buildSharedTsConfig;
42
42
  exports.initCommand = initCommand;
43
43
  exports.withNpmLockfileSafeManifests = withNpmLockfileSafeManifests;
44
44
  exports.parseIgnoredBuilds = parseIgnoredBuilds;
45
- exports.approveBuildsViaWorkspaceYaml = approveBuildsViaWorkspaceYaml;
46
45
  exports.injectSwallowKitNextConfig = injectSwallowKitNextConfig;
47
46
  exports.buildCSharpFunctionsProgramSource = buildCSharpFunctionsProgramSource;
48
47
  exports.buildCSharpFunctionsProjectSource = buildCSharpFunctionsProjectSource;
@@ -259,6 +258,9 @@ const VALID_COSMOS_DB_MODE = ['freetier', 'serverless'];
259
258
  const VALID_VNET = ['none', 'outbound'];
260
259
  const VALID_SWA_PLAN = ['free', 'standard'];
261
260
  function validateInitFlags(options) {
261
+ if (options.packageManager && !['npm', 'pnpm'].includes(options.packageManager)) {
262
+ throw new Error('Invalid --package-manager: expected npm or pnpm');
263
+ }
262
264
  if (options.cicd && !VALID_CICD.includes(options.cicd)) {
263
265
  console.error(`❌ Invalid --cicd value: "${options.cicd}". Must be: ${VALID_CICD.join(', ')}`);
264
266
  process.exit(1);
@@ -286,7 +288,7 @@ async function initCommand(options) {
286
288
  console.log(`🚀 Initializing SwallowKit project: ${options.name}`);
287
289
  console.log(`📋 Template: ${options.template}`);
288
290
  // Detect package manager from invocation context (npx → npm, pnpm dlx → pnpm)
289
- const pm = (0, package_manager_1.detectFromUserAgent)();
291
+ const pm = options.packageManager || (0, package_manager_1.detectFromUserAgent)();
290
292
  const pmCmd = (0, package_manager_1.getCommands)(pm);
291
293
  console.log(`📦 Package manager: ${pm}`);
292
294
  const projectDir = path.join(process.cwd(), options.name);
@@ -379,11 +381,11 @@ async function initCommand(options) {
379
381
  console.log(`\n✅ Project "${options.name}" created successfully!`);
380
382
  console.log("\n📝 Next steps:");
381
383
  console.log(` cd ${options.name}`);
382
- console.log(` ${pmCmd.dlx} swallowkit create-model <name> # Create your first model`);
383
- console.log(` ${pmCmd.dlx} swallowkit scaffold shared/models/<name>.ts # Generate CRUD code`);
384
- console.log(` ${pmCmd.dlx} swallowkit dev # Start development servers`);
384
+ console.log(` ${pmCmd.exec} swallowkit create-model <name> # Create your first model`);
385
+ console.log(` ${pmCmd.exec} swallowkit scaffold shared/models/<name>.ts # Generate CRUD code`);
386
+ console.log(` ${pmCmd.exec} swallowkit dev # Start development servers`);
385
387
  console.log("\n🚀 Deploy to Azure:");
386
- console.log(` ${pmCmd.dlx} swallowkit provision --resource-group <name>`);
388
+ console.log(` ${pmCmd.exec} swallowkit provision --resource-group <name>`);
387
389
  if (cicdProvider !== 'skip') {
388
390
  console.log(" Configure CI/CD secrets and push to repository");
389
391
  }
@@ -405,7 +407,7 @@ async function createNextJsProject(projectName, pm) {
405
407
  // for npm use "npx create-next-app@latest ..."
406
408
  const baseArgs = pm === 'pnpm'
407
409
  ? ['dlx', 'create-next-app@latest']
408
- : ['create-next-app@latest'];
410
+ : ['--yes', '--package', 'create-next-app@latest', '--', 'create-next-app'];
409
411
  const args = [
410
412
  ...baseArgs,
411
413
  projectName,
@@ -414,6 +416,7 @@ async function createNextJsProject(projectName, pm) {
414
416
  '--app',
415
417
  '--no-src',
416
418
  '--disable-git',
419
+ '--skip-install',
417
420
  '--import-alias',
418
421
  '@/*',
419
422
  ...(pmCmd.createNextAppFlag ? [pmCmd.createNextAppFlag] : []),
@@ -442,20 +445,14 @@ async function upgradeNextJs(projectDir, version, pm) {
442
445
  console.log(`\n📦 Installing Next.js ${version} (to ensure latest security patches)...\n`);
443
446
  // pnpm: pnpm add next@... ; npm: npm install next@...
444
447
  const args = pm === 'pnpm'
445
- ? ['add', `next@${version}`, `react@latest`, `react-dom@latest`, '--save-exact']
446
- : ['install', `next@${version}`, `react@latest`, `react-dom@latest`, '--save-exact'];
448
+ ? ['add', `next@${version}`, `react@latest`, `react-dom@latest`, '--save-exact', '--lockfile-only']
449
+ : ['install', `next@${version}`, `react@latest`, `react-dom@latest`, '--save-exact', '--package-lock-only'];
447
450
  await runPackageManagerCommand(pm, args, projectDir, `${pm} add next@${version}`);
448
451
  console.log(`\n✅ Next.js ${version} installed\n`);
449
452
  }
450
453
  async function installDependencies(projectDir, pm = 'pnpm') {
451
454
  console.log('\n📦 Installing dependencies...\n');
452
- await runPackageManagerCommand(pm, ['install'], projectDir, `${pm} install`);
453
- if (pm === 'pnpm') {
454
- console.log('\n📦 Generating npm lockfile for CI/CD...\n');
455
- await withNpmLockfileSafeManifests(projectDir, async () => {
456
- await runPackageManagerCommand('npm', ['install', '--package-lock-only', '--ignore-scripts'], projectDir, 'npm install --package-lock-only');
457
- });
458
- }
455
+ await runPackageManagerCommand(pm, pm === 'pnpm' ? ['install', '--no-frozen-lockfile'] : ['install'], projectDir, `${pm} install`);
459
456
  console.log('\n✅ Dependencies installed\n');
460
457
  }
461
458
  async function withNpmLockfileSafeManifests(projectDir, action) {
@@ -530,56 +527,19 @@ async function withNpmLockfileSafeManifests(projectDir, action) {
530
527
  }
531
528
  }
532
529
  }
533
- /**
534
- * Run a package-manager command with stdio passed through to the user.
535
- *
536
- * For pnpm, additionally tee stdout/stderr to a buffer so that if the command
537
- * fails due to `ERR_PNPM_IGNORED_BUILDS`, we can:
538
- * 1. detect which packages were ignored,
539
- * 2. approve them (interactively or automatically),
540
- * 3. clean-reinstall and retry — repeating if pnpm reports further ignored
541
- * packages (pnpm does not always list every unapproved package at once).
542
- */
530
+ /** Run installs without changing the project security policy. */
543
531
  async function runPackageManagerCommand(pm, args, projectDir, label) {
544
- let { code, output } = await spawnAndCapture(pm, args, projectDir, pm === 'pnpm');
532
+ const { code, output } = await spawnAndCapture(pm, args, projectDir, pm === 'pnpm');
545
533
  if (code === 0)
546
534
  return;
547
535
  if (pm === 'pnpm') {
548
- for (let attempt = 0; attempt < 3; attempt++) {
549
- const ignoredBuilds = parseIgnoredBuilds(output);
550
- if (ignoredBuilds.length === 0)
551
- break;
552
- const approved = await maybeApproveBuilds(projectDir, ignoredBuilds);
553
- if (!approved)
554
- break;
555
- // 中断された install はパッケージ抽出が不完全なまま "Already up to date"
556
- // と判定されることがあるため、node_modules を消して決定論的に入れ直す
557
- removeWorkspaceNodeModules(projectDir);
558
- const retry = await spawnAndCapture(pm, args, projectDir, true);
559
- code = retry.code;
560
- output = retry.output;
561
- if (code === 0)
562
- return;
563
- }
564
536
  if (parseIgnoredBuilds(output).length > 0) {
565
537
  throw new Error(`${label} exited with code ${code}: pnpm still reports unapproved build scripts. ` +
566
- 'Run "pnpm approve-builds" inside the project, then re-run the command.');
538
+ 'Review the named dependencies and project security policy before allowing any scripts. SwallowKit does not auto-approve them.');
567
539
  }
568
540
  }
569
541
  throw new Error(`${label} exited with code ${code}`);
570
542
  }
571
- /** workspace root と直下パッケージの node_modules を削除する(クリーン再インストール用)。 */
572
- function removeWorkspaceNodeModules(projectDir) {
573
- const targets = [projectDir, ...fs.readdirSync(projectDir, { withFileTypes: true })
574
- .filter((entry) => entry.isDirectory() && entry.name !== 'node_modules' && !entry.name.startsWith('.'))
575
- .map((entry) => path.join(projectDir, entry.name))];
576
- for (const dir of targets) {
577
- const nodeModules = path.join(dir, 'node_modules');
578
- if (fs.existsSync(nodeModules)) {
579
- fs.rmSync(nodeModules, { recursive: true, force: true });
580
- }
581
- }
582
- }
583
543
  /**
584
544
  * Spawn a child process inheriting stdin (so interactive prompts still work)
585
545
  * while either inheriting or capturing+teeing stdout/stderr.
@@ -625,86 +585,6 @@ function parseIgnoredBuilds(output) {
625
585
  .filter((name) => name.length > 0);
626
586
  return Array.from(new Set(list));
627
587
  }
628
- /**
629
- * Prompt the user and, if approved, run `pnpm approve-builds` followed by
630
- * `pnpm rebuild <packages>`. Returns true if the user approved (regardless of
631
- * which packages they actually selected inside approve-builds).
632
- *
633
- * In non-interactive environments (CI, coding agents, piped output) prompting
634
- * would hang forever, so build scripts are approved automatically via
635
- * package.json `pnpm.onlyBuiltDependencies` instead.
636
- */
637
- async function maybeApproveBuilds(projectDir, ignoredBuilds) {
638
- console.log(`\n⚠️ pnpm refused to run build scripts for: ${ignoredBuilds.join(', ')}\n` +
639
- ' These packages (e.g. sharp) need their build scripts to run correctly.\n');
640
- const interactive = process.stdin.isTTY === true && process.stdout.isTTY === true && !process.env.CI;
641
- if (!interactive) {
642
- console.log('ℹ️ Non-interactive environment detected — approving build scripts automatically\n' +
643
- ' via "allowBuilds" in pnpm-workspace.yaml.\n');
644
- // rebuild は不要: 呼び出し側がクリーン再インストールで build script を実行する
645
- approveBuildsViaWorkspaceYaml(projectDir, ignoredBuilds);
646
- return true;
647
- }
648
- const response = await (0, prompts_1.default)({
649
- type: 'confirm',
650
- name: 'approve',
651
- message: 'Run `pnpm approve-builds` now to approve these build scripts?',
652
- initial: true,
653
- });
654
- if (!response.approve) {
655
- console.log('\nℹ️ Skipped. You can run `pnpm approve-builds` later inside the project directory.\n');
656
- return false;
657
- }
658
- await runSimple('pnpm', ['approve-builds'], projectDir);
659
- await runSimple('pnpm', ['rebuild', ...ignoredBuilds], projectDir);
660
- console.log('\n✅ Build scripts approved and packages rebuilt\n');
661
- return true;
662
- }
663
- /**
664
- * pnpm-workspace.yaml の allowBuilds にパッケージを true で登録して build script を許可する。
665
- * (pnpm 11+ の正準設定。失敗時に pnpm が追記する placeholder 行も true に置き換える)
666
- */
667
- function approveBuildsViaWorkspaceYaml(projectDir, packages) {
668
- const workspaceYamlPath = path.join(projectDir, 'pnpm-workspace.yaml');
669
- const existing = fs.existsSync(workspaceYamlPath)
670
- ? fs.readFileSync(workspaceYamlPath, 'utf-8')
671
- : '';
672
- const yamlKey = (pkg) => (/^[A-Za-z0-9_.-]+$/.test(pkg) ? pkg : `'${pkg}'`);
673
- const lines = existing.length > 0 ? existing.split(/\r?\n/) : [];
674
- const keyIndex = lines.findIndex((line) => /^allowBuilds\s*:/.test(line));
675
- if (keyIndex === -1) {
676
- const block = `allowBuilds:\n${packages.map((pkg) => ` ${yamlKey(pkg)}: true`).join('\n')}\n`;
677
- const base = existing.length > 0 && !existing.endsWith('\n') ? `${existing}\n` : existing;
678
- fs.writeFileSync(workspaceYamlPath, `${base}${block}`, 'utf-8');
679
- return;
680
- }
681
- // 既存マップ内の対象パッケージ(placeholder 含む)を true に更新し、無いものは追記する
682
- let endIndex = keyIndex + 1;
683
- const updated = new Set();
684
- while (endIndex < lines.length && /^\s+\S/.test(lines[endIndex])) {
685
- const entry = lines[endIndex].match(/^\s+['"]?([A-Za-z0-9@/_.-]+)['"]?\s*:/);
686
- if (entry && packages.includes(entry[1])) {
687
- lines[endIndex] = ` ${yamlKey(entry[1])}: true`;
688
- updated.add(entry[1]);
689
- }
690
- endIndex++;
691
- }
692
- const additions = packages.filter((pkg) => !updated.has(pkg)).map((pkg) => ` ${yamlKey(pkg)}: true`);
693
- lines.splice(endIndex, 0, ...additions);
694
- fs.writeFileSync(workspaceYamlPath, lines.join('\n'), 'utf-8');
695
- }
696
- function runSimple(command, args, cwd) {
697
- return new Promise((resolve, reject) => {
698
- const child = (0, child_process_1.spawn)(command, args, { cwd, stdio: 'inherit', shell: true });
699
- child.on('close', (code) => {
700
- if (code !== 0)
701
- reject(new Error(`${command} ${args.join(' ')} exited with code ${code}`));
702
- else
703
- resolve();
704
- });
705
- child.on('error', reject);
706
- });
707
- }
708
588
  function injectSwallowKitNextConfig(nextConfigContent, projectName) {
709
589
  return nextConfigContent.replace(/(const\s+nextConfig[:\s]*(?::\s*NextConfig\s*)?=\s*\{)(\s*\/\*[^*]*\*\/)?/, `$1\n output: 'standalone',\n agentRules: false, // SwallowKit owns the canonical root AGENTS.md contract\n transpilePackages: ['@${projectName}/shared'],\n serverExternalPackages: ['applicationinsights', 'diagnostic-channel-publishers'],$2`);
710
590
  }
@@ -822,7 +702,7 @@ async function addSwallowKitFiles(projectDir, options, cicdChoice, azureConfig,
822
702
  // 1. Update package.json to add runtime dependencies for generated projects
823
703
  const packageJsonPath = path.join(projectDir, 'package.json');
824
704
  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
825
- // zod is in the shared workspace package, not here
705
+ // Root BFF/auth code imports Zod directly; declare it as well as the shared package.
826
706
  packageJson.dependencies = {
827
707
  ...packageJson.dependencies,
828
708
  ...buildGeneratedProjectDependencies(projectName, pm),
@@ -838,8 +718,13 @@ async function addSwallowKitFiles(projectDir, options, cicdChoice, azureConfig,
838
718
  'functions:start': (0, package_manager_1.getFunctionsStartScript)(pm, backendLanguage),
839
719
  };
840
720
  packageJson.engines = {
841
- node: '20.x',
721
+ node: '>=22.14.0',
722
+ ...(pm === 'pnpm' ? { pnpm: '>=11 <13' } : {}),
723
+ };
724
+ packageJson.devEngines = {
725
+ packageManager: { name: pm, version: pm === 'pnpm' ? '>=11 <13' : '>=10', onFail: 'error' },
842
726
  };
727
+ delete packageJson.packageManager;
843
728
  // Keep package.json workspaces for npm-based CI/CD even when local development uses pnpm.
844
729
  const workspacePackages = usesNodeFunctionsProject(backendLanguage) ? ['shared', 'functions'] : ['shared'];
845
730
  const wsConfig = (0, package_manager_1.getWorkspaceConfig)(pm, workspacePackages);
@@ -1614,7 +1499,7 @@ export default function Home() {
1614
1499
  Create your first model with Zod and generate CRUD operations automatically.
1615
1500
  </p>
1616
1501
  <code className="block bg-gray-100 dark:bg-gray-900 p-4 rounded text-left text-sm">
1617
- ${pmCmd.dlx} swallowkit scaffold shared/models/your-model.ts
1502
+ ${pmCmd.exec} swallowkit scaffold shared/models/your-model.ts
1618
1503
  </code>
1619
1504
  </div>
1620
1505
  </section>
@@ -1700,7 +1585,7 @@ This project was initialized with the following settings:
1700
1585
 
1701
1586
  Before you begin, ensure you have the following installed:
1702
1587
 
1703
- 1. **Node.js 18+**: [Download](https://nodejs.org/)${pm === 'pnpm' ? `\n2. **pnpm**: \`corepack enable\` or \`npm install -g pnpm\`` : ''}
1588
+ 1. **Node.js 22.14+**: [Download](https://nodejs.org/)${pm === 'pnpm' ? `\n2. **pnpm**: \`corepack enable\` or \`npm install -g pnpm\`` : ''}
1704
1589
  ${pm === 'pnpm' ? '3' : '2'}. **Azure CLI**: Required for provisioning Azure resources
1705
1590
  - Install: \`winget install Microsoft.AzureCLI\` (Windows)
1706
1591
  - Or: [Download](https://aka.ms/installazurecliwindows)
@@ -1708,7 +1593,7 @@ ${pm === 'pnpm' ? '4' : '3'}. **Azure Cosmos DB Emulator**: Required for local d
1708
1593
  - Windows: \`winget install Microsoft.Azure.CosmosEmulator\`
1709
1594
  - Or: [Download](https://aka.ms/cosmosdb-emulator)
1710
1595
  - Docker: \`docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator\`
1711
- ${pm === 'pnpm' ? '6' : '5'}. **Azure Functions Core Tools**: Automatically installed with project dependencies
1596
+ ${pm === 'pnpm' ? '6' : '5'}. **Azure Functions Core Tools v4**: Install separately for local Azure Functions execution
1712
1597
 
1713
1598
  ## 📁 Project Structure
1714
1599
 
@@ -1734,7 +1619,7 @@ ${functionsTree}
1734
1619
  Define your data model with Zod schema:
1735
1620
 
1736
1621
  \`\`\`bash
1737
- ${pmCmd.dlx} swallowkit create-model <model-name>
1622
+ ${pmCmd.exec} swallowkit create-model <model-name>
1738
1623
  \`\`\`
1739
1624
 
1740
1625
  This creates a model file in \`shared/models/<model-name>.ts\`. Edit it to define your schema.
@@ -1744,7 +1629,7 @@ This creates a model file in \`shared/models/<model-name>.ts\`. Edit it to defin
1744
1629
  Generate complete CRUD operations (Functions, API routes, UI):
1745
1630
 
1746
1631
  \`\`\`bash
1747
- ${pmCmd.dlx} swallowkit scaffold shared/models/<model-name>.ts
1632
+ ${pmCmd.exec} swallowkit scaffold shared/models/<model-name>.ts
1748
1633
  \`\`\`
1749
1634
 
1750
1635
  This generates:
@@ -1756,7 +1641,7 @@ ${backendScaffoldNote}
1756
1641
  ### 3. Start Development Servers
1757
1642
 
1758
1643
  \`\`\`bash
1759
- ${pmCmd.dlx} swallowkit dev
1644
+ ${pmCmd.exec} swallowkit dev
1760
1645
  \`\`\`
1761
1646
 
1762
1647
  This starts:
@@ -1774,7 +1659,7 @@ ${pythonLocalDevNote}
1774
1659
  Create all required Azure resources using Bicep:
1775
1660
 
1776
1661
  \`\`\`bash
1777
- ${pmCmd.dlx} swallowkit provision --resource-group <rg-name>
1662
+ ${pmCmd.exec} swallowkit provision --resource-group <rg-name>
1778
1663
  \`\`\`
1779
1664
 
1780
1665
  This creates:
@@ -1830,10 +1715,10 @@ func azure functionapp publish func-${projectName}
1830
1715
 
1831
1716
  ## 🔧 Available Commands
1832
1717
 
1833
- - \`${pmCmd.dlx} swallowkit create-model <name>\` - Create a new data model
1834
- - \`${pmCmd.dlx} swallowkit scaffold <model-file>\` - Generate CRUD code
1835
- - \`${pmCmd.dlx} swallowkit dev\` - Start development servers
1836
- - \`${pmCmd.dlx} swallowkit provision -g <rg-name>\` - Provision Azure resources
1718
+ - \`${pmCmd.exec} swallowkit create-model <name>\` - Create a new data model
1719
+ - \`${pmCmd.exec} swallowkit scaffold <model-file>\` - Generate CRUD code
1720
+ - \`${pmCmd.exec} swallowkit dev\` - Start development servers
1721
+ - \`${pmCmd.exec} swallowkit provision -g <rg-name>\` - Provision Azure resources
1837
1722
  ${azureConfig.vnetOption !== 'none' ? `
1838
1723
  ## 🔒 Network Security (VNet Configuration)
1839
1724
 
@@ -1882,7 +1767,7 @@ This project was generated by SwallowKit. If you encounter any issues or have su
1882
1767
  }
1883
1768
  function createAiAgentFiles(projectDir, projectName, backendLanguage, pm) {
1884
1769
  console.log('🤖 Creating AI agent instruction files...\n');
1885
- const runCmd = pm === 'pnpm' ? 'pnpm' : 'npx';
1770
+ const runCmd = (0, package_manager_1.getCommands)(pm).exec;
1886
1771
  (0, agent_instructions_1.writeAgentInstructionFiles)(projectDir, {
1887
1772
  projectName,
1888
1773
  backendLanguage,
@@ -2637,11 +2522,13 @@ function getGitHubFunctionsWorkflow(pm, backendLanguage, projectPm = pm) {
2637
2522
  const npmWorkspaceNormalizationStep = getGitHubNpmWorkspaceNormalizationStep(pm, projectPm);
2638
2523
  const commonSetup = ` - uses: actions/checkout@v4
2639
2524
 
2525
+ ${pnpmSetupStep ? `${pnpmSetupStep}\n` : ''}
2640
2526
  - name: Setup Node.js
2641
2527
  uses: actions/setup-node@v4
2642
2528
  with:
2643
2529
  node-version: '22'
2644
- ${pnpmSetupStep ? `\n${pnpmSetupStep}\n` : ''}
2530
+ cache: ${pm}
2531
+ cache-dependency-path: ${pm === 'pnpm' ? 'pnpm-lock.yaml' : 'package-lock.json'}
2645
2532
  ${npmWorkspaceNormalizationStep ? `\n${npmWorkspaceNormalizationStep}` : ''}
2646
2533
  - name: Install dependencies
2647
2534
  run: |
@@ -3156,7 +3043,7 @@ async function createGitHubActionsWorkflows(projectDir, azureConfig, pm, backend
3156
3043
  console.log('📦 Creating GitHub Actions workflows...\n');
3157
3044
  const workflowsDir = path.join(projectDir, '.github', 'workflows');
3158
3045
  fs.mkdirSync(workflowsDir, { recursive: true });
3159
- const actionsPm = 'npm';
3046
+ const actionsPm = pm;
3160
3047
  const swaWorkflow = buildGitHubSwaWorkflow(actionsPm, pm);
3161
3048
  fs.writeFileSync(path.join(workflowsDir, 'deploy-swa.yml'), swaWorkflow);
3162
3049
  // deploy-functions.yml
@@ -3179,6 +3066,7 @@ on:
3179
3066
  - 'shared/**'
3180
3067
  - 'public/**'
3181
3068
  - 'package.json'
3069
+ - '${pm === 'pnpm' ? 'pnpm-lock.yaml' : 'package-lock.json'}'
3182
3070
  - 'next.config.js'
3183
3071
  - 'next.config.ts'
3184
3072
  workflow_dispatch:
@@ -3192,6 +3080,7 @@ on:
3192
3080
  - 'shared/**'
3193
3081
  - 'public/**'
3194
3082
  - 'package.json'
3083
+ - '${pm === 'pnpm' ? 'pnpm-lock.yaml' : 'package-lock.json'}'
3195
3084
  - 'next.config.js'
3196
3085
  - 'next.config.ts'
3197
3086
 
@@ -3205,11 +3094,13 @@ jobs:
3205
3094
  with:
3206
3095
  submodules: true
3207
3096
 
3097
+ ${(0, package_manager_1.getCiSetupStep)(pm) ? `${(0, package_manager_1.getCiSetupStep)(pm)}\n` : ''}
3208
3098
  - name: Setup Node.js
3209
3099
  uses: actions/setup-node@v4
3210
3100
  with:
3211
3101
  node-version: '22'
3212
- ${(0, package_manager_1.getCiSetupStep)(pm) ? `\n${(0, package_manager_1.getCiSetupStep)(pm)}\n` : ''}
3102
+ cache: ${pm}
3103
+ cache-dependency-path: ${pm === 'pnpm' ? 'pnpm-lock.yaml' : 'package-lock.json'}
3213
3104
  ${npmWorkspaceNormalizationStep ? `\n${npmWorkspaceNormalizationStep}` : ''}
3214
3105
  - name: Install and build app
3215
3106
  run: |
@@ -3232,7 +3123,7 @@ ${npmWorkspaceNormalizationStep ? `\n${npmWorkspaceNormalizationStep}` : ''}
3232
3123
  }
3233
3124
  async function createAzurePipelines(projectDir, pm, backendLanguage) {
3234
3125
  console.log('📦 Creating Azure Pipelines...\n');
3235
- const pipelinesPm = 'npm';
3126
+ const pipelinesPm = pm;
3236
3127
  const pipelinesDir = path.join(projectDir, 'pipelines');
3237
3128
  fs.mkdirSync(pipelinesDir, { recursive: true });
3238
3129
  // swa.yml