@h-ai/cli 0.1.0-alpha.67 → 0.1.0-alpha.68

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 (164) hide show
  1. package/README.en.md +40 -4
  2. package/README.ja.md +40 -4
  3. package/README.md +40 -4
  4. package/dist/{src-2V6VP4I5.js → chunk-FI56GONY.js} +32 -3103
  5. package/dist/chunk-FI56GONY.js.map +1 -0
  6. package/dist/chunk-MBPB37FR.js +1348 -0
  7. package/dist/chunk-MBPB37FR.js.map +1 -0
  8. package/dist/{chunk-7DSURTJ4.js → chunk-ZFNBUF77.js} +327 -199
  9. package/dist/chunk-ZFNBUF77.js.map +1 -0
  10. package/dist/cli-config-templates-W2LLPMB6.js +5 -0
  11. package/dist/{cli-config-templates-6AHNUGBN.js.map → cli-config-templates-W2LLPMB6.js.map} +1 -1
  12. package/dist/{cli-skill-templates-FC3QRKDO.js → cli-skill-templates-US5CCAJ4.js} +3 -3
  13. package/dist/{cli-skill-templates-FC3QRKDO.js.map → cli-skill-templates-US5CCAJ4.js.map} +1 -1
  14. package/dist/index.js +920 -336
  15. package/dist/index.js.map +1 -1
  16. package/dist/metafile-esm.json +1 -0
  17. package/dist/src-DSJJXM2F.js +3849 -0
  18. package/dist/src-DSJJXM2F.js.map +1 -0
  19. package/package.json +9 -8
  20. package/templates/apps/admin/messages/ja-JP.json +38 -0
  21. package/templates/apps/admin/src/routes/+layout.svelte.hbs +16 -6
  22. package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +3 -3
  23. package/templates/apps/api/apps/{{projectName}}-contract/src/index.ts.hbs +2 -0
  24. package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +4 -1
  25. package/templates/apps/api/apps/{{projectName}}-service/README.md.hbs +5 -1
  26. package/templates/apps/api/apps/{{projectName}}-service/config/_core.yml.hbs +0 -10
  27. package/templates/apps/api/apps/{{projectName}}-service/config/_serv.yml.hbs +2 -1
  28. package/templates/apps/api/apps/{{projectName}}-service/src/app.ts.hbs +24 -11
  29. package/templates/apps/api/apps/{{projectName}}-service/src/index.ts.hbs +8 -1
  30. package/templates/apps/api/apps/{{projectName}}-service/src/lib/server/init.ts.hbs +68 -11
  31. package/templates/apps/api/apps/{{projectName}}-service/src/server/procedures/index.ts.hbs +10 -2
  32. package/templates/apps/api/e2e/api-service.spec.ts.hbs +2 -2
  33. package/templates/apps/api/package.json.hbs +1 -1
  34. package/templates/apps/api/playwright.config.ts.hbs +15 -7
  35. package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +1 -1
  36. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/ja-JP.json.hbs +7 -0
  37. package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +7 -1
  38. package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +1 -1
  39. package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +1 -1
  40. package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/ja-JP.json.hbs +7 -0
  41. package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +1 -1
  42. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/ja-JP.json.hbs +12 -0
  43. package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +1 -1
  44. package/templates/apps/fullstack/apps/{{projectName}}-web/messages/ja-JP.json.hbs +7 -0
  45. package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +1 -1
  46. package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +19 -8
  47. package/templates/apps/fullstack/package.json.hbs +1 -1
  48. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +1 -1
  49. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/index.ts.hbs +2 -0
  50. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +3 -0
  51. package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +5 -2
  52. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +0 -6
  53. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_reach.yml.hbs +8 -0
  54. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +2 -1
  55. package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +6 -0
  56. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +9 -5
  57. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +3 -2
  58. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/messages.ts.hbs +16 -1
  59. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +7 -3
  60. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +3 -0
  61. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +58 -7
  62. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +13 -3
  63. package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +9 -4
  64. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/ja-JP.json.hbs +105 -0
  65. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AdminWorkspace.svelte.hbs +3 -3
  66. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +5 -5
  67. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +7 -7
  68. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +1 -1
  69. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +8 -8
  70. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +11 -12
  71. package/templates/apps/fullstack/playwright.config.ts.hbs +15 -6
  72. package/templates/apps/h5/messages/ja-JP.json +40 -0
  73. package/templates/apps/h5/src/routes/+layout.svelte.hbs +14 -3
  74. package/templates/apps/mobile-app/messages/ja-JP.json +36 -0
  75. package/templates/apps/mobile-app/src/App.svelte.hbs +13 -3
  76. package/templates/apps/mobile-app/src/lib/api.ts.hbs +173 -14
  77. package/templates/apps/website/messages/ja-JP.json +32 -0
  78. package/templates/apps/website/src/routes/+layout.svelte.hbs +10 -2
  79. package/templates/base/e2e/app.spec.ts.hbs +13 -8
  80. package/templates/base/package.json.hbs +4 -1
  81. package/templates/base/playwright.config.ts +15 -4
  82. package/templates/base/src/hooks.server.ts.hbs +15 -6
  83. package/templates/base/src/lib/server/init.ts.hbs +139 -30
  84. package/templates/base/vite.config.ts.hbs +2 -2
  85. package/templates/features/iam/routes-shared/api/auth/logout/+server.ts +11 -6
  86. package/templates/features/payment/routes/api/v1/payment/create/+server.ts +18 -25
  87. package/templates/features/payment/routes/api/v1/payment/notify/[provider]/+server.ts +4 -0
  88. package/templates/i18n/project.inlang/settings.json +1 -1
  89. package/templates/shared/e2e-env.ts +98 -0
  90. package/templates/shared/run-e2e.mjs +51 -12
  91. package/templates/skills/AGENTS.md +4 -0
  92. package/templates/skills/bridges/admin/AGENTS.md +5 -1
  93. package/templates/skills/bridges/api/AGENTS.md +2 -0
  94. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +4 -0
  95. package/templates/skills/bridges/h5/AGENTS.md +5 -1
  96. package/templates/skills/bridges/mobile-app/AGENTS.md +5 -1
  97. package/templates/skills/bridges/website/AGENTS.md +5 -1
  98. package/templates/skills/hai-ai/SKILL.md +8 -2
  99. package/templates/skills/hai-ai/guide.md +134 -60
  100. package/templates/skills/hai-ai/reference.md +51 -11
  101. package/templates/skills/hai-api-client/SKILL.md +2 -0
  102. package/templates/skills/hai-api-client/reference.md +17 -5
  103. package/templates/skills/hai-api-contract/SKILL.md +1 -0
  104. package/templates/skills/hai-api-contract/reference.md +4 -2
  105. package/templates/skills/hai-app-create/SKILL.md +4 -0
  106. package/templates/skills/hai-app-create/development.md +20 -4
  107. package/templates/skills/hai-app-create/reference.md +2 -1
  108. package/templates/skills/hai-app-review/SKILL.md +6 -2
  109. package/templates/skills/hai-app-review/differential.md +34 -0
  110. package/templates/skills/hai-app-tests/SKILL.md +3 -1
  111. package/templates/skills/hai-app-tests/reference.md +4 -4
  112. package/templates/skills/hai-app-tests/validation.md +10 -3
  113. package/templates/skills/hai-audit/SKILL.md +10 -8
  114. package/templates/skills/hai-audit/reference.md +3 -0
  115. package/templates/skills/hai-build/reference.md +6 -4
  116. package/templates/skills/hai-cache/SKILL.md +9 -3
  117. package/templates/skills/hai-cache/reference.md +53 -11
  118. package/templates/skills/hai-capacitor/SKILL.md +3 -1
  119. package/templates/skills/hai-capacitor/reference.md +9 -5
  120. package/templates/skills/hai-core/SKILL.md +4 -0
  121. package/templates/skills/hai-core/reference.md +25 -5
  122. package/templates/skills/hai-crypto/SKILL.md +10 -2
  123. package/templates/skills/hai-crypto/reference.md +64 -10
  124. package/templates/skills/hai-datapipe/SKILL.md +2 -0
  125. package/templates/skills/hai-datapipe/reference.md +3 -1
  126. package/templates/skills/hai-deploy/SKILL.md +9 -4
  127. package/templates/skills/hai-deploy/middleware.md +51 -37
  128. package/templates/skills/hai-iam/SKILL.md +24 -8
  129. package/templates/skills/hai-iam/reference.md +181 -154
  130. package/templates/skills/hai-kit/SKILL.md +23 -7
  131. package/templates/skills/hai-kit/reference.md +42 -24
  132. package/templates/skills/hai-payment/SKILL.md +13 -11
  133. package/templates/skills/hai-payment/reference.md +80 -41
  134. package/templates/skills/hai-pr-review/SKILL.md +21 -88
  135. package/templates/skills/hai-reach/SKILL.md +5 -2
  136. package/templates/skills/hai-reach/reference.md +83 -22
  137. package/templates/skills/hai-reldb/SKILL.md +5 -2
  138. package/templates/skills/hai-reldb/reference.md +68 -25
  139. package/templates/skills/hai-scheduler/SKILL.md +8 -5
  140. package/templates/skills/hai-scheduler/reference.md +38 -24
  141. package/templates/skills/hai-serv/SKILL.md +23 -8
  142. package/templates/skills/hai-serv/reference.md +123 -87
  143. package/templates/skills/hai-spec-implement/SKILL.md +4 -0
  144. package/templates/skills/hai-spec-implement/evaluation.md +18 -0
  145. package/templates/skills/hai-spec-implement/handoff.md +47 -0
  146. package/templates/skills/hai-spec-implement/templates.md +5 -0
  147. package/templates/skills/hai-spec-implement/workflow.md +2 -0
  148. package/templates/skills/hai-spec-review/SKILL.md +4 -0
  149. package/templates/skills/hai-storage/SKILL.md +8 -2
  150. package/templates/skills/hai-storage/reference.md +64 -25
  151. package/templates/skills/hai-ui/SKILL.md +16 -2
  152. package/templates/skills/hai-ui/guide.md +3 -3
  153. package/templates/skills/hai-ui/reference.md +17 -6
  154. package/templates/skills/hai-ui-design/SKILL.md +31 -0
  155. package/templates/skills/hai-ui-design/patterns.md +26 -0
  156. package/templates/skills/hai-ui-review/SKILL.md +30 -0
  157. package/templates/skills/hai-ui-review/checklist.md +22 -0
  158. package/templates/skills/hai-vecdb/SKILL.md +12 -8
  159. package/templates/skills/hai-vecdb/reference.md +33 -3
  160. package/dist/chunk-7DSURTJ4.js.map +0 -1
  161. package/dist/chunk-AOQ4N657.js +0 -640
  162. package/dist/chunk-AOQ4N657.js.map +0 -1
  163. package/dist/cli-config-templates-6AHNUGBN.js +0 -5
  164. package/dist/src-2V6VP4I5.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../messages/en-US.json","../messages/zh-CN.json","../src/cli-i18n.ts","../src/commands/cli-skill-templates.ts"],"names":[],"mappings":"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","file":"chunk-AOQ4N657.js","sourcesContent":["{\n \"cli_createFailed\": \"Failed to create project:\",\n \"cli_installFailed\": \"Dependency installation failed ({pm}).\",\n \"cli_commandLabel\": \"Command: {command}\",\n \"cli_exitCode\": \"Exit code: {code}\",\n \"cli_signal\": \"Signal: {signal}\",\n \"cli_selectHint\": \"- ↑/↓ select, Enter confirm\",\n \"cli_multiselectHint\": \"- Space select, Enter confirm\",\n \"cli_featuresPrompt\": \"Select features:\",\n \"cli_frontendsPrompt\": \"Select frontend targets:\",\n \"cli_invalidGenerateName\": \"Use a name starting with a letter, with only letters, digits, hyphens or underscores\",\n \"cli_generateOutsideWorkspace\": \"Generated files must remain inside the workspace, including symbolic link targets\",\n \"cli_generateExists\": \"File already exists: {path}. Use --force to overwrite it\",\n \"cli_deploy_module_missing\": \"Deploy module not found. Install @h-ai/deploy first:\",\n \"cli_deploy_load_credentials\": \"Loading credentials...\",\n \"cli_deploy_credentials_failed\": \"Failed to load credentials: {message}\",\n \"cli_deploy_credentials_loaded\": \"Loaded {count} credentials\",\n \"cli_deploy_load_config\": \"Loading deploy config...\",\n \"cli_deploy_config_missing\": \"Deploy config not found: {path}\",\n \"cli_deploy_config_hint\": \"Run: hai add deploy to generate config template\",\n \"cli_deploy_config_loaded\": \"Deploy config loaded\",\n \"cli_deploy_scanning\": \"Scanning application...\",\n \"cli_deploy_scan_failed\": \"Scan failed: {message}\",\n \"cli_deploy_scanned\": \"Scanned: {name} (SvelteKit: {sveltekit}, Services: {services})\",\n \"cli_deploy_none\": \"none\",\n \"cli_deploy_initializing\": \"Initializing deploy module...\",\n \"cli_deploy_init_failed\": \"Init failed: {message}\",\n \"cli_deploy_initialized\": \"Deploy module initialized\",\n \"cli_deploy_deploying\": \"Deploying application...\",\n \"cli_deploy_failed\": \"Deploy failed: {message}\",\n \"cli_deploy_success\": \"Deployment successful!\",\n \"cli_deploy_url\": \" URL: {url}\",\n \"cli_deploy_id\": \" ID: {id}\",\n \"cli_deploy_env\": \" Env: {names}\",\n \"cli_deploy_command_failed\": \"Deploy command failed\",\n \"cli_adminPasswordSaved\": \" Administrator: admin; the random initial password is saved as HAI_ADMIN_DEFAULT_PASSWORD in .env.local\",\n \"cli_deploy_environment\": \"Deployment environment (test / prod / other)\",\n \"cli_deploy_cancelled\": \"Deployment cancelled.\",\n \"cli_deploy_environment_hint\": \"Specify --env <environment>; non-interactive calls also require --yes, or use a terminal to select middleware.\",\n \"cli_deploy_middleware\": \"{service}: current default {backend}; {purpose}. Source: {source}\",\n \"cli_deploy_action\": \"How should {service} be configured?\",\n \"cli_deploy_default\": \"Use default configuration\",\n \"cli_deploy_custom\": \"Use custom configuration\",\n \"cli_deploy_keep\": \"Keep unchanged\",\n \"cli_deploy_backend\": \"Select the backend for {service}\",\n \"cli_deploy_field\": \"{description} ({constraint})\",\n \"cli_deploy_required\": \"This value is required\",\n \"cli_deploy_invalid_value\": \"The value does not satisfy the field constraints\",\n \"cli_deploy_cloud_unsupported\": \"No cloud provisioner is available for {backend}; use a custom connection or select a supported backend.\",\n \"cli_deploy_saved\": \"Configured {name}={value} (public values in the target environment file; credentials in .env.local)\",\n \"cli_deploy_secret\": \"[redacted]\",\n \"cli_deploy_missing_keep\": \"The target environment has no complete {service} configuration to keep.\",\n \"cli_deploy_s3_engine\": \"Select the S3 service implementation (application type remains s3)\",\n \"cli_deploy_target_reused\": \"Reusing deployment target {target}. Update connection settings in HAI_DEPLOY_PROVIDER in .env.local.\",\n \"cli_deploy_target_missing\": \"Deployment target is incomplete: {fields}. Set HAI_DEPLOY_PROVIDER in .env.local, or run interactively to complete setup.\",\n \"cli_deploy_target_platform\": \"Select the deployment platform\",\n \"cli_deploy_target_ssh\": \"SSH server (Docker / Podman Compose)\",\n \"cli_deploy_target_field\": \"{name}\",\n \"cli_deploy_target_ssh_hint\": \"Enter connection and port settings. Enter a private key file path, or leave blank for ssh-agent/default keys. Leave known_hosts blank for the OpenSSH default. New host fingerprints are trusted on first connection; changed fingerprints are rejected.\",\n \"cli_deploy_target_runtime\": \"Remote container runtime (auto prefers Podman)\",\n \"cli_deploy_target_saved\": \"Deployment target saved to Git-ignored .env.local and reused on subsequent runs.\",\n \"cli_deploy_middleware_plan\": \"Do you need to configure middleware for this deployment?\",\n \"cli_deploy_middleware_configure\": \"Review and configure each middleware service\",\n \"cli_deploy_middleware_skip\": \"Environment is complete; deploy directly\",\n \"cli_deploy_middleware_skipped\": \"Skipped all middleware configuration and provisioning. Deploying with current environment settings and existing services.\",\n \"cli_build_failed\": \"Build command {command} failed (exit {code}).\",\n \"cli_build_use_pnpm\": \"Run via pnpm build to use the project pnpm executable.\",\n \"cli_build_target_invalid\": \"target must be compile, docker or desktop.\",\n \"cli_build_options_invalid\": \"runtime, network, sqlite-prebuild-mirror and no-http-proxy require docker; platform and arch require desktop.\",\n \"cli_build_version_invalid\": \"Set a valid three-part version in the application root package.json (for example 1.2.3 or 1.2.3-beta.1; at most 80 characters).\",\n \"cli_build_native_host\": \"Build Tauri on the matching OS (windows/linux/macos), with x64 or arm64 architecture. Install the Rust target, system SDK and packaging tools first.\",\n \"cli_build_desktop_missing\": \"No desktop directories in hai.build.json. Generate a desktop frontend or add an existing Tauri project.\",\n \"cli_build_images_missing\": \"hai.build.json requires one app image and at most one web image.\",\n \"cli_build_runtime_missing\": \"Install and start Podman or Docker. auto prefers a reachable Podman engine.\",\n \"cli_build_mirror_invalid\": \"SQLite mirror must use HTTP(S) without credentials, query or fragment.\",\n \"cli_build_ready\": \"Build ready ({runtime}): {path}. Reuse these images across deployment environments.\",\n \"cli_build_native_ready\": \"Tauri build ready: {target}. Installers are under src-tauri/target/{target}/release/bundle in each project.\",\n \"cli_deploy_bundle_provider\": \"Offline packaging, integrated image builds and selected-service deployment require a docker-ssh Compose destination.\",\n \"cli_deploy_bundle_local\": \"Generate bundle only; no server connection\",\n \"cli_deploy_bundle_ready\": \"Deployment bundle ready; the server has not been deployed.\",\n \"cli_deploy_bundle_path\": \"Deployment bundle: {path}\",\n \"cli_build_selection_invalid\": \"Choose image names declared in hai.build.json: app, web or app,web.\",\n \"cli_build_dockerfile_missing\": \"Dockerfile not found: {path}. Check hai.build.json.\",\n \"cli_deploy_yaml_node\": \"Cannot update {path}: {field} must be a configuration object, not a string or array.\",\n \"cli_deploy_inputHOST\": \"Server address\",\n \"cli_deploy_services_invalid\": \"Invalid service selection. Available in this project: {services}.\",\n \"cli_deploy_build_artifact_conflict\": \"Choose --build to create new artifacts or --artifact-dir to use existing artifacts; they cannot be combined.\",\n \"cli_deploy_build_options_required\": \"Build network, proxy and SQLite binary options require --build.\",\n \"cli_deploy_artifact_invalid\": \"Image manifest or archive validation failed. Rebuild or select a valid build with --artifact-dir.\",\n \"cli_deploy_inputPORT\": \"SSH port (default 22)\",\n \"cli_deploy_inputUSERNAME\": \"SSH username\",\n \"cli_deploy_inputIDENTITYFILE\": \"SSH private key file (optional; use agent/default keys)\",\n \"cli_deploy_inputKNOWNHOSTSFILE\": \"Server fingerprint file (optional; use the OpenSSH default)\",\n \"cli_deploy_inputBASEDIR\": \"Server deployment root directory\",\n \"cli_deploy_inputHOSTPORT\": \"Public application port\",\n \"cli_deploy_inputCONTAINERPORT\": \"API container port\",\n \"cli_deploy_inputTOKEN\": \"Vercel access token\",\n \"cli_deploy_cloud_input_apiKey\": \"API access key\",\n \"cli_deploy_cloud_input_email\": \"Account email address\",\n \"cli_deploy_cloud_input_accountId\": \"Platform account ID\",\n \"cli_deploy_cloud_input_apiToken\": \"API access token\",\n \"cli_deploy_cloud_input_accessKeyId\": \"Access key ID\",\n \"cli_deploy_cloud_input_secretAccessKey\": \"Secret access key\",\n \"cli_deploy_cloud_input_accessKeySecret\": \"Secret access key\",\n \"cli_deploy_cloud_input_signName\": \"Approved SMS signature\",\n \"cli_deploy_cloud_input_from\": \"Sender address (verified domain)\",\n \"cli_deploy_port_invalid\": \"Enter an integer between 1 and 65535.\",\n \"cli_deploy_build_started\": \"Building selected application images first…\",\n \"cli_deploy_services\": \"Selected services: {services}\",\n \"cli_deploy_stage_packaging\": \"Packaging selected images and middleware\",\n \"cli_deploy_stage_preflight\": \"Checking server and deployment baseline\",\n \"cli_deploy_stage_images\": \"Loading offline images\",\n \"cli_deploy_stage_dependencies\": \"Checking existing dependency services\",\n \"cli_deploy_stage_start\": \"Updating selected services\",\n \"cli_deploy_stage_health\": \"Verifying HTTP access\",\n \"cli_deploy_stage_complete\": \"Server deployment checks passed\",\n \"cli_deploy_choose_services\": \"Choose services to update (all selected; Space to toggle)\",\n \"cli_deploy_config_invalid\": \"Deployment configuration is incomplete or invalid. File: {path}; check these fields: {fields}.\",\n \"cli_help_verbose\": \"Show detailed output\",\n \"cli_help_cwd\": \"Working directory\",\n \"cli_help_create\": \"Create a hai application\",\n \"cli_help_appType\": \"Application type (admin, website, h5, api, mobile-app, fullstack)\",\n \"cli_help_frontends\": \"Fullstack frontends, comma-separated: web,app,miniapp,desktop\",\n \"cli_help_template\": \"Module preset (minimal, default, full, custom)\",\n \"cli_help_features\": \"Application modules, comma-separated: iam,db,cache,ai,storage,crypto\",\n \"cli_help_examples\": \"Include example code\",\n \"cli_help_noExamples\": \"Omit example code\",\n \"cli_help_noInstall\": \"Skip dependency installation\",\n \"cli_help_noDeploy\": \"Omit deployment tools and commands\",\n \"cli_help_packageManager\": \"Package manager (pnpm, npm, yarn)\",\n \"cli_help_noGit\": \"Skip Git initialization\",\n \"cli_help_gitRemote\": \"Git remote URL\",\n \"cli_help_yes\": \"Use defaults without interactive prompts\",\n \"cli_help_add\": \"Add a module to an existing application\",\n \"cli_help_init\": \"Check project configuration and fill missing files\",\n \"cli_help_forceConfig\": \"Regenerate module configuration\",\n \"cli_help_generate\": \"Generate starter code\",\n \"cli_help_output\": \"Output path\",\n \"cli_help_force\": \"Overwrite existing output files\",\n \"cli_help_build\": \"Compile sources, build container images or create Tauri installers\",\n \"cli_help_target\": \"Artifact type: compile (default), docker or desktop\",\n \"cli_help_images\": \"Build selected images, such as app, web or app,web\",\n \"cli_help_buildRuntime\": \"Local container engine: auto (prefers Podman), podman or docker\",\n \"cli_help_buildNetwork\": \"Build network; defaults to the engine setting (for example, rootless Podman pasta)\",\n \"cli_help_platform\": \"Tauri system: windows, linux or macos; build on that system\",\n \"cli_help_arch\": \"Tauri architecture: x64 or arm64\",\n \"cli_help_sqliteMirror\": \"Trusted SQLite prebuilt binary mirror URL\",\n \"cli_help_noHttpProxy\": \"Do not pass the local proxy to Podman builds\",\n \"cli_help_deploy\": \"Deploy an application or create an offline bundle\",\n \"cli_help_environment\": \"Deployment environment, such as test/prod; its environment file must exist\",\n \"cli_help_envDir\": \"Environment file directory; detected automatically by default\",\n \"cli_help_deployYes\": \"Use saved/default configuration without prompts; report missing required values\",\n \"cli_help_projectName\": \"Project name; defaults to the service package or directory name, with environment suffix\",\n \"cli_help_skipMiddleware\": \"Skip middleware configuration/provisioning when already configured\",\n \"cli_help_artifactDir\": \"Existing image artifact directory containing manifest.json\",\n \"cli_help_services\": \"Update selected services, such as web, app or app,web; otherwise select from the artifact\",\n \"cli_help_deployBuild\": \"Build selected application images before packaging/deployment; supports --bundle-only\",\n \"cli_help_deployNetwork\": \"Container network for --build; defaults to the engine setting\",\n \"cli_help_deploySqliteMirror\": \"SQLite prebuilt mirror for --build\",\n \"cli_help_deployNoProxy\": \"Do not pass the local proxy to integrated Podman builds\",\n \"cli_help_deployRuntime\": \"Local engine for image builds and middleware exports: auto, podman or docker\",\n \"cli_help_bundleOnly\": \"Create an offline tar and Windows/Linux/macOS deployment scripts without connecting\",\n \"cli_help_bundleOutput\": \"Deployment tar path; application version suffix is added automatically\",\n \"cli_help_generatePage\": \"Generate a page\",\n \"cli_help_generateComponent\": \"Generate a component\",\n \"cli_help_generateApi\": \"Generate an API endpoint\",\n \"cli_help_generateModel\": \"Generate a data model\"\n}\n","{\n \"cli_createFailed\": \"创建项目失败:\",\n \"cli_installFailed\": \"安装依赖失败({pm})。\",\n \"cli_commandLabel\": \"命令: {command}\",\n \"cli_exitCode\": \"退出码: {code}\",\n \"cli_signal\": \"信号: {signal}\",\n \"cli_selectHint\": \"- ↑/↓ 选择,回车确认\",\n \"cli_multiselectHint\": \"- 空格选择,回车确认\",\n \"cli_featuresPrompt\": \"选择功能:\",\n \"cli_frontendsPrompt\": \"选择前端目标:\",\n \"cli_invalidGenerateName\": \"名称必须以字母开头,且仅包含字母、数字、短横线或下划线\",\n \"cli_generateOutsideWorkspace\": \"生成文件必须位于工作目录内,符号链接目标也不得越界\",\n \"cli_generateExists\": \"文件已存在:{path}。使用 --force 才可覆盖\",\n \"cli_deploy_module_missing\": \"未找到部署模块,请先安装 @h-ai/deploy:\",\n \"cli_deploy_load_credentials\": \"正在加载凭证…\",\n \"cli_deploy_credentials_failed\": \"加载凭证失败:{message}\",\n \"cli_deploy_credentials_loaded\": \"已加载 {count} 项凭证\",\n \"cli_deploy_load_config\": \"正在加载部署配置…\",\n \"cli_deploy_config_missing\": \"未找到部署配置:{path}\",\n \"cli_deploy_config_hint\": \"运行 hai add deploy 生成部署配置模板\",\n \"cli_deploy_config_loaded\": \"部署配置已加载\",\n \"cli_deploy_scanning\": \"正在扫描应用…\",\n \"cli_deploy_scan_failed\": \"扫描失败:{message}\",\n \"cli_deploy_scanned\": \"已扫描:{name}(SvelteKit:{sveltekit},服务:{services})\",\n \"cli_deploy_none\": \"无\",\n \"cli_deploy_initializing\": \"正在初始化部署模块…\",\n \"cli_deploy_init_failed\": \"初始化失败:{message}\",\n \"cli_deploy_initialized\": \"部署模块已初始化\",\n \"cli_deploy_deploying\": \"正在部署应用…\",\n \"cli_deploy_failed\": \"部署失败:{message}\",\n \"cli_deploy_success\": \"部署成功!\",\n \"cli_deploy_url\": \" 地址:{url}\",\n \"cli_deploy_id\": \" 标识:{id}\",\n \"cli_deploy_env\": \" 环境变量:{names}\",\n \"cli_deploy_command_failed\": \"部署命令失败\",\n \"cli_adminPasswordSaved\": \" 管理员:admin;随机初始密码已保存到 .env.local 的 HAI_ADMIN_DEFAULT_PASSWORD\",\n \"cli_deploy_environment\": \"请输入部署环境(test / prod 等)\",\n \"cli_deploy_cancelled\": \"部署已取消。\",\n \"cli_deploy_environment_hint\": \"请指定 --env <环境>;非交互调用还需 --yes,或在交互终端逐项选择中间件。\",\n \"cli_deploy_middleware\": \"{service}:当前默认 {backend};{purpose}。来源:{source}\",\n \"cli_deploy_action\": \"如何处理 {service}?\",\n \"cli_deploy_default\": \"使用默认配置\",\n \"cli_deploy_custom\": \"使用自定义配置\",\n \"cli_deploy_keep\": \"保持不变\",\n \"cli_deploy_backend\": \"请选择 {service} 的后端\",\n \"cli_deploy_field\": \"{description}({constraint})\",\n \"cli_deploy_required\": \"此项必填\",\n \"cli_deploy_invalid_value\": \"取值不满足字段约束\",\n \"cli_deploy_cloud_unsupported\": \"{backend} 没有可用的云自动开通器,请选择自定义连接或切换受支持的后端。\",\n \"cli_deploy_saved\": \"已配置 {name}={value}(公共值写目标环境文件,凭据写 .env.local)\",\n \"cli_deploy_secret\": \"[已隐藏]\",\n \"cli_deploy_missing_keep\": \"目标环境尚无 {service} 的完整配置,不能保持不变。\",\n \"cli_deploy_s3_engine\": \"选择自建 S3 服务实现(应用仍使用 type: s3)\",\n \"cli_deploy_target_reused\": \"复用部署目标 {target}。可在 .env.local 的 HAI_DEPLOY_PROVIDER 中更新连接参数。\",\n \"cli_deploy_target_missing\": \"部署目标配置不完整:{fields}。请在 .env.local 中配置 HAI_DEPLOY_PROVIDER,或使用交互终端完成引导。\",\n \"cli_deploy_target_platform\": \"选择部署平台\",\n \"cli_deploy_target_ssh\": \"SSH 服务器(Docker / Podman Compose)\",\n \"cli_deploy_target_field\": \"{name}\",\n \"cli_deploy_target_ssh_hint\": \"输入服务器连接及端口参数。私钥填写文件路径;留空使用 ssh-agent 或默认密钥。known_hosts 路径留空使用 OpenSSH 默认值。首次连接信任主机指纹,后续拒绝指纹变更。\",\n \"cli_deploy_target_runtime\": \"远程容器运行时(auto 优先使用 Podman)\",\n \"cli_deploy_target_saved\": \"部署目标已保存到 .env.local(已加入 Git 忽略),下次自动复用。\",\n \"cli_deploy_middleware_plan\": \"是否需要配置本次部署的中间件?\",\n \"cli_deploy_middleware_configure\": \"逐项检查并配置中间件\",\n \"cli_deploy_middleware_skip\": \"环境配置已完备,直接部署\",\n \"cli_deploy_middleware_skipped\": \"已跳过全部中间件配置与资源开通,使用当前环境配置及已有服务直接部署。\",\n \"cli_build_failed\": \"构建命令 {command} 失败(退出码 {code})。\",\n \"cli_build_use_pnpm\": \"请通过 pnpm build 运行构建,确保使用当前项目的 pnpm。\",\n \"cli_build_target_invalid\": \"target 必须为 compile、docker 或 desktop。\",\n \"cli_build_options_invalid\": \"runtime、network、sqlite-prebuild-mirror、no-http-proxy 仅用于 docker;platform、arch 仅用于 desktop。\",\n \"cli_build_version_invalid\": \"请在应用根 package.json 中设置有效的三段式版本(如 1.2.3 或 1.2.3-beta.1,最长 80 字符)。\",\n \"cli_build_native_host\": \"Tauri 需要在对应系统上构建(windows/linux/macos),架构为 x64 或 arm64;请先安装对应 Rust target、系统 SDK 和打包工具。\",\n \"cli_build_desktop_missing\": \"hai.build.json 未配置 desktop 目录。请生成 desktop 前端或添加已有的 Tauri 工程。\",\n \"cli_build_images_missing\": \"hai.build.json 必须包含一个 app 镜像和至多一个 web 镜像。\",\n \"cli_build_runtime_missing\": \"请安装并启动 Podman 或 Docker。auto 优先选择可用的 Podman。\",\n \"cli_build_mirror_invalid\": \"SQLite 镜像地址必须为 HTTP(S),不能包含凭据、查询或片段。\",\n \"cli_build_ready\": \"构建完成({runtime}):{path}。此镜像可用于不同部署环境。\",\n \"cli_build_native_ready\": \"Tauri 构建完成:{target},安装包位于对应工程 src-tauri/target/{target}/release/bundle。\",\n \"cli_deploy_bundle_provider\": \"离线打包、一体化镜像构建和按服务局部部署需要 docker-ssh Compose 目标。\",\n \"cli_deploy_bundle_local\": \"仅生成部署包,不连接服务器\",\n \"cli_deploy_bundle_ready\": \"部署包已生成;服务器尚未部署。\",\n \"cli_deploy_bundle_path\": \"部署包:{path}\",\n \"cli_build_selection_invalid\": \"请选择 hai.build.json 中已有的镜像名称,例如 app、web 或 app,web。\",\n \"cli_build_dockerfile_missing\": \"找不到镜像构建文件:{path}。请检查 hai.build.json。\",\n \"cli_deploy_yaml_node\": \"无法修改配置 {path}:{field} 应为配置对象,不能是字符串或数组。请修改后重试。\",\n \"cli_deploy_inputHOST\": \"服务器地址\",\n \"cli_deploy_services_invalid\": \"服务选择无效。当前项目可选:{services}。\",\n \"cli_deploy_build_artifact_conflict\": \"--build 用于构建新产物,--artifact-dir 用于选择已有产物,请二选一。\",\n \"cli_deploy_build_options_required\": \"构建网络、代理和 SQLite 预编译包参数需要配合 --build 使用。\",\n \"cli_deploy_artifact_invalid\": \"镜像清单或归档校验失败,请重新构建,或用 --artifact-dir 选择有效的构建目录。\",\n \"cli_deploy_inputPORT\": \"SSH 端口(默认 22)\",\n \"cli_deploy_inputUSERNAME\": \"SSH 登录用户\",\n \"cli_deploy_inputIDENTITYFILE\": \"SSH 私钥文件(可留空,使用代理或默认密钥)\",\n \"cli_deploy_inputKNOWNHOSTSFILE\": \"服务器指纹记录文件(可留空,使用 OpenSSH 默认位置)\",\n \"cli_deploy_inputBASEDIR\": \"服务器部署根目录\",\n \"cli_deploy_inputHOSTPORT\": \"应用对外访问端口\",\n \"cli_deploy_inputCONTAINERPORT\": \"API 容器内部端口\",\n \"cli_deploy_inputTOKEN\": \"Vercel 访问令牌\",\n \"cli_deploy_cloud_input_apiKey\": \"API 访问密钥\",\n \"cli_deploy_cloud_input_email\": \"平台注册邮箱\",\n \"cli_deploy_cloud_input_accountId\": \"平台账户编号\",\n \"cli_deploy_cloud_input_apiToken\": \"API 访问令牌\",\n \"cli_deploy_cloud_input_accessKeyId\": \"访问密钥编号\",\n \"cli_deploy_cloud_input_secretAccessKey\": \"访问密钥密码\",\n \"cli_deploy_cloud_input_accessKeySecret\": \"访问密钥密码\",\n \"cli_deploy_cloud_input_signName\": \"已审核的短信签名\",\n \"cli_deploy_cloud_input_from\": \"发件人地址(使用已验证域名)\",\n \"cli_deploy_port_invalid\": \"请输入 1~65535 之间的整数。\",\n \"cli_deploy_build_started\": \"先构建本次所选应用镜像…\",\n \"cli_deploy_services\": \"本次更新服务:{services}\",\n \"cli_deploy_stage_packaging\": \"打包所选镜像与中间件\",\n \"cli_deploy_stage_preflight\": \"检查服务器与部署基线\",\n \"cli_deploy_stage_images\": \"导入离线镜像\",\n \"cli_deploy_stage_dependencies\": \"检查未更新的依赖服务\",\n \"cli_deploy_stage_start\": \"更新所选服务\",\n \"cli_deploy_stage_health\": \"验证应用访问\",\n \"cli_deploy_stage_complete\": \"服务器部署检查通过\",\n \"cli_deploy_choose_services\": \"选择本次更新的服务(默认全部,空格切换)\",\n \"cli_deploy_config_invalid\": \"部署配置不完整或格式有误。文件:{path};请检查这些字段:{fields}。\",\n \"cli_help_verbose\": \"显示详细输出\",\n \"cli_help_cwd\": \"工作目录\",\n \"cli_help_create\": \"创建新的 hai 项目\",\n \"cli_help_appType\": \"应用类型 (admin, website, h5, api, mobile-app, fullstack)\",\n \"cli_help_frontends\": \"前后端分离工程前端目标 (逗号分隔: web,app,miniapp,desktop)\",\n \"cli_help_template\": \"项目模板 (minimal, default, full, custom)\",\n \"cli_help_features\": \"功能列表 (逗号分隔: iam,db,cache,ai,storage,crypto)\",\n \"cli_help_examples\": \"添加示例代码\",\n \"cli_help_noExamples\": \"不添加示例代码\",\n \"cli_help_noInstall\": \"不安装依赖\",\n \"cli_help_noDeploy\": \"不包含部署工具和部署命令\",\n \"cli_help_packageManager\": \"包管理器 (pnpm, npm, yarn)\",\n \"cli_help_noGit\": \"不初始化 Git\",\n \"cli_help_gitRemote\": \"Git 远程仓库地址\",\n \"cli_help_yes\": \"使用默认配置,跳过交互\",\n \"cli_help_add\": \"向现有项目添加模块\",\n \"cli_help_init\": \"初始化/校验项目配置\",\n \"cli_help_forceConfig\": \"强制重新生成配置\",\n \"cli_help_generate\": \"生成代码\",\n \"cli_help_output\": \"输出路径\",\n \"cli_help_force\": \"覆盖现有文件\",\n \"cli_help_build\": \"构建源码、Docker 镜像或 Tauri 安装包(不区分部署环境)\",\n \"cli_help_target\": \"产物类型:compile(默认)/ docker / desktop\",\n \"cli_help_images\": \"只构建指定镜像,例如 app、web 或 app,web\",\n \"cli_help_buildRuntime\": \"本地容器引擎:auto(优先 Podman)/ podman / docker\",\n \"cli_help_buildNetwork\": \"容器构建网络(默认引擎设置),例如 rootless Podman 的 pasta\",\n \"cli_help_platform\": \"Tauri 目标系统:windows / linux / macos(在对应系统构建)\",\n \"cli_help_arch\": \"Tauri 目标架构:x64 / arm64\",\n \"cli_help_sqliteMirror\": \"SQLite 预编译二进制镜像根地址\",\n \"cli_help_noHttpProxy\": \"Podman 构建不继承本机代理\",\n \"cli_help_deploy\": \"部署应用或生成离线交付包\",\n \"cli_help_environment\": \"部署环境(test / prod 等,必须存在对应环境文件)\",\n \"cli_help_envDir\": \"环境文件所在目录(默认自动查找)\",\n \"cli_help_deployYes\": \"无交互使用已有或默认配置;缺少必需参数时说明原因\",\n \"cli_help_projectName\": \"项目名称(默认服务包名,缺失时为目录名;附加环境后缀)\",\n \"cli_help_skipMiddleware\": \"配置已完备,跳过全部中间件处理,直接部署\",\n \"cli_help_artifactDir\": \"已有镜像构建产物目录(含 manifest.json)\",\n \"cli_help_services\": \"只更新指定服务,例如 web、app 或 app,web;省略时部署制品中的全部服务\",\n \"cli_help_deployBuild\": \"先构建所选应用镜像,再打包部署;可与 --bundle-only 一起使用\",\n \"cli_help_deployNetwork\": \"一体化构建使用的容器网络(默认引擎设置)\",\n \"cli_help_deploySqliteMirror\": \"一体化构建使用的 SQLite 预编译包镜像地址\",\n \"cli_help_deployNoProxy\": \"一体化 Podman 构建不继承本机代理\",\n \"cli_help_deployRuntime\": \"本地镜像构建和中间件导出引擎:auto / podman / docker\",\n \"cli_help_bundleOnly\": \"只生成离线 tar 与 Windows/Linux/macOS 部署脚本;不连接服务器\",\n \"cli_help_bundleOutput\": \"部署 tar 输出路径,自动补应用版本后缀\",\n \"cli_help_generatePage\": \"生成页面\",\n \"cli_help_generateComponent\": \"生成组件\",\n \"cli_help_generateApi\": \"生成 API\",\n \"cli_help_generateModel\": \"生成数据模型\"\n}\n","/** CLI 用户可见消息;通过 core 的全局 locale 选择语言。 */\nimport { core } from '@h-ai/core'\nimport enUS from '../messages/en-US.json'\nimport zhCN from '../messages/zh-CN.json'\n\nexport const cliM = core.i18n.createMessageGetter<keyof typeof zhCN>({ 'en-US': enUS, 'zh-CN': zhCN })\n","/**\n * @h-ai/cli — Skill 模板生成\n *\n * 将 Skill 模板文件复制到用户项目中,供 AI 编程助手使用。\n * @module cli-skill-templates\n */\n\nimport type { AppType } from '../cli-types.js'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport fse from 'fs-extra'\nimport Handlebars from 'handlebars'\nimport { cliM } from '../cli-i18n.js'\n\n/**\n * 模块名到 Skill 目录名的映射\n */\nconst MODULE_SKILL_MAP: Record<string, string> = {\n 'db': 'hai-reldb',\n 'reldb': 'hai-reldb',\n 'cache': 'hai-cache',\n 'iam': 'hai-iam',\n 'storage': 'hai-storage',\n 'ai': 'hai-ai',\n 'crypto': 'hai-crypto',\n 'payment': 'hai-payment',\n 'vecdb': 'hai-vecdb',\n 'datapipe': 'hai-datapipe',\n 'reach': 'hai-reach',\n 'scheduler': 'hai-scheduler',\n 'audit': 'hai-audit',\n 'deploy': 'hai-deploy',\n 'kit': 'hai-kit',\n 'ui': 'hai-ui',\n 'api-client': 'hai-api-client',\n 'capacitor': 'hai-capacitor',\n}\n\n/**\n * 各 appType 互斥的 Skill。\n *\n * 生成样板工程时,默认复制 templates/skills 下所有 hai-* Skill,\n * 仅排除与当前样板技术栈明显冲突的少数 Skill。\n */\nconst SKILL_EXCLUSIONS_BY_APP_TYPE: Partial<Record<AppType, string[]>> = {\n 'admin': ['hai-serv', 'hai-api-contract', 'hai-api-client', 'hai-capacitor'],\n 'website': ['hai-serv', 'hai-api-contract', 'hai-api-client', 'hai-capacitor'],\n 'h5': ['hai-serv', 'hai-api-contract', 'hai-api-client', 'hai-capacitor'],\n 'api': ['hai-ui', 'hai-kit', 'hai-capacitor'],\n 'mobile-app': ['hai-core', 'hai-kit', 'hai-serv', 'hai-api-contract'],\n 'fullstack': ['hai-kit'],\n}\n\nconst WORKFLOW_SKILLS = [\n 'hai-build',\n 'hai-spec-review',\n 'hai-spec-implement',\n 'hai-app-create',\n 'hai-app-review',\n 'hai-app-tests',\n 'hai-framework-sync',\n 'hai-ci',\n 'hai-pr-review',\n]\n\nconst PACKAGE_SKILL_MAP: Record<string, string> = {\n '@h-ai/api-contract': 'hai-api-contract',\n '@h-ai/api-client': 'hai-api-client',\n '@h-ai/core': 'hai-core',\n '@h-ai/serv': 'hai-serv',\n '@h-ai/kit': 'hai-kit',\n '@h-ai/ui': 'hai-ui',\n '@h-ai/reldb': 'hai-reldb',\n '@h-ai/cache': 'hai-cache',\n '@h-ai/iam': 'hai-iam',\n '@h-ai/storage': 'hai-storage',\n '@h-ai/ai': 'hai-ai',\n '@h-ai/crypto': 'hai-crypto',\n '@h-ai/payment': 'hai-payment',\n '@h-ai/vecdb': 'hai-vecdb',\n '@h-ai/datapipe': 'hai-datapipe',\n '@h-ai/reach': 'hai-reach',\n '@h-ai/scheduler': 'hai-scheduler',\n '@h-ai/audit': 'hai-audit',\n '@h-ai/deploy': 'hai-deploy',\n '@h-ai/capacitor': 'hai-capacitor',\n}\n\nconst SKILL_TARGET_DIRS = ['.agents/skills'] as const\n\nconst BRIDGE_FILES = [\n {\n source: 'copilot-instructions.md',\n destination: '.github/copilot-instructions.md',\n },\n {\n source: 'CLAUDE.md',\n destination: 'CLAUDE.md',\n },\n {\n source: 'AGENTS.md',\n destination: 'AGENTS.md',\n },\n {\n source: 'opencode.json',\n destination: 'opencode.json',\n },\n] as const\n\nconst BRIDGE_PROFILE_REGEX = /^[a-z0-9-]+$/\n\n/** 从已有模板标识与实际包布局确认桥接类型,不按项目名称猜测技术栈。 */\nasync function detectBridgeContext(projectPath: string): Promise<{ appType?: AppType, projectName?: string }> {\n const packagePath = path.join(projectPath, 'package.json')\n if (!(await fse.pathExists(packagePath))) {\n return {}\n }\n\n let metadata: unknown\n try {\n metadata = await fse.readJson(packagePath)\n }\n catch {\n return {}\n }\n if (!metadata || typeof metadata !== 'object' || !('name' in metadata)\n || typeof metadata.name !== 'string' || !BRIDGE_PROFILE_REGEX.test(metadata.name)) {\n return {}\n }\n\n const projectName = metadata.name\n for (const [appType, directory, suffixes] of [\n ['fullstack', 'packages', ['contract', 'serv', 'shared']],\n ['api', 'apps', ['contract', 'service']],\n ] as const) {\n const manifests = await Promise.all(suffixes.map(suffix => fse.pathExists(\n path.join(projectPath, directory, `${projectName}-${suffix}`, 'package.json'),\n )))\n if (manifests.every(Boolean)) {\n return { appType, projectName }\n }\n }\n\n if ('keywords' in metadata && Array.isArray(metadata.keywords) && metadata.keywords.includes('hai')) {\n for (const appType of ['admin', 'website', 'h5', 'mobile-app'] as const) {\n if (metadata.keywords.includes(appType)) {\n return { appType, projectName }\n }\n }\n }\n return { projectName }\n}\n\nasync function listTemplateSkillNames(templatesDir: string): Promise<string[]> {\n const entries = await fse.readdir(templatesDir, { withFileTypes: true })\n const skillNames: string[] = []\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('hai-')) {\n continue\n }\n\n const skillFilePath = path.join(templatesDir, entry.name, 'SKILL.md')\n if (await fse.pathExists(skillFilePath)) {\n skillNames.push(entry.name)\n }\n }\n\n return skillNames.sort((a, b) => a.localeCompare(b))\n}\n\nexport function resolveCompatibleSkillNames(\n skillNames: string[],\n appType?: AppType,\n): string[] {\n const excludedSkills = new Set(appType ? SKILL_EXCLUSIONS_BY_APP_TYPE[appType] ?? [] : [])\n return skillNames.filter(skillName => !excludedSkills.has(skillName))\n}\n\n/**\n * 获取 templates/skills/ 目录的绝对路径\n *\n * 兼容两种运行环境:\n * - 构建后:dist/cli-skill-templates.js → ../templates/skills\n * - 测试时:src/commands/cli-skill-templates.ts → ../../templates/skills\n */\nfunction getSkillTemplatesDir(): string {\n const currentDir = path.dirname(fileURLToPath(import.meta.url))\n const distPath = path.resolve(currentDir, '..', 'templates', 'skills')\n if (fse.pathExistsSync(distPath)) {\n return distPath\n }\n return path.resolve(currentDir, '..', '..', 'templates', 'skills')\n}\n\n/**\n * 复制单个 Skill 目录到项目\n *\n * @param templatesDir - Skill 模板根目录\n * @param skillName - Skill 目录名(如 'hai-reldb')\n * @param projectPath - 用户项目根目录\n */\nasync function copySkill(\n templatesDir: string,\n skillName: string,\n projectPath: string,\n targetDirs: readonly string[] = SKILL_TARGET_DIRS,\n overwrite = true,\n): Promise<string[]> {\n const src = path.join(templatesDir, skillName)\n\n if (!(await fse.pathExists(src))) {\n return []\n }\n\n const copiedFiles: string[] = []\n const resources = await fse.readdir(src, { recursive: true, withFileTypes: true })\n const relativeFiles = resources.filter(resource => resource.isFile())\n .map(resource => path.relative(src, path.join(resource.parentPath, resource.name)))\n\n for (const targetDir of targetDirs) {\n const dest = path.join(projectPath, targetDir, skillName)\n await assertProjectOutputPath(projectPath, dest)\n if (!overwrite) {\n // 已有入口不能使新参考资源被跳过;逐文件补缺,同时保留用户修改。\n const missingFiles: string[] = []\n for (const relativeFile of relativeFiles) {\n if (!(await fse.pathExists(path.join(dest, relativeFile)))) {\n missingFiles.push(relativeFile)\n }\n }\n if (missingFiles.length === 0) {\n continue\n }\n for (const relativeFile of missingFiles)\n await assertProjectOutputPath(projectPath, path.join(dest, relativeFile))\n await fse.copy(src, dest, { overwrite: false })\n copiedFiles.push(...missingFiles.map(relativeFile => `${targetDir}/${skillName}/${relativeFile.replaceAll(path.sep, '/')}`))\n }\n else {\n for (const relativeFile of relativeFiles)\n await assertProjectOutputPath(projectPath, path.join(dest, relativeFile))\n await fse.copy(src, dest, { overwrite: true })\n copiedFiles.push(`${targetDir}/${skillName}/SKILL.md`)\n }\n }\n\n return copiedFiles\n}\n\n/** 写入前解析已有目录/文件链接,所有 AI 输出均限制在当前项目内。 */\nasync function assertProjectOutputPath(projectPath: string, destination: string): Promise<void> {\n let ancestor = destination\n while (!(await fse.pathExists(ancestor))) {\n const parent = path.dirname(ancestor)\n if (parent === ancestor)\n throw new Error(cliM('cli_generateOutsideWorkspace'))\n ancestor = parent\n }\n const relativeAncestor = path.relative(await fse.realpath(projectPath), await fse.realpath(ancestor))\n if (relativeAncestor === '..' || relativeAncestor.startsWith(`..${path.sep}`) || path.isAbsolute(relativeAncestor))\n throw new Error(cliM('cli_generateOutsideWorkspace'))\n}\n\nasync function copySkills(\n templatesDir: string,\n skillNames: string[],\n projectPath: string,\n targetDirs: readonly string[] = SKILL_TARGET_DIRS,\n overwrite = true,\n): Promise<string[]> {\n const copiedFiles: string[] = []\n\n for (const skillName of new Set(skillNames)) {\n copiedFiles.push(...await copySkill(templatesDir, skillName, projectPath, targetDirs, overwrite))\n }\n\n return copiedFiles\n}\n\n/**\n * 复制桥接文件到项目\n *\n * @param templatesDir - Skill 模板根目录\n * @param projectPath - 用户项目根目录\n */\nasync function copyBridgeFiles(\n templatesDir: string,\n projectPath: string,\n overwrite = true,\n appType?: string,\n projectName?: string,\n): Promise<string[]> {\n const copiedFiles: string[] = []\n\n for (const file of BRIDGE_FILES) {\n const src = await resolveBridgeSource(templatesDir, file.source, appType, projectName !== undefined)\n const dest = path.join(projectPath, file.destination)\n\n if (!src) {\n continue\n }\n\n if (!overwrite && await fse.pathExists(dest)) {\n continue\n }\n\n await assertProjectOutputPath(projectPath, dest)\n await fse.ensureDir(path.dirname(dest))\n if (src.endsWith('.hbs')) {\n const template = await fse.readFile(src, 'utf8')\n const rendered = Handlebars.compile(template, { noEscape: true })({ projectName })\n await fse.writeFile(dest, rendered, 'utf8')\n }\n else {\n await fse.copy(src, dest, { overwrite })\n }\n copiedFiles.push(file.destination)\n }\n\n return copiedFiles\n}\n\nasync function resolveBridgeSource(\n templatesDir: string,\n source: string,\n appType?: string,\n allowTemplate = false,\n): Promise<string | null> {\n const profile = appType && BRIDGE_PROFILE_REGEX.test(appType) ? appType : 'generic'\n const candidates = [\n ...(allowTemplate ? [path.join(templatesDir, 'bridges', profile, `${source}.hbs`)] : []),\n path.join(templatesDir, 'bridges', profile, source),\n path.join(templatesDir, 'bridges', 'generic', source),\n path.join(templatesDir, source),\n ]\n\n for (const candidate of candidates) {\n if (await fse.pathExists(candidate)) {\n return candidate\n }\n }\n\n return null\n}\n\n/**\n * 为新项目生成完整的 Skill 文件。\n *\n * 默认复制 templates/skills 下所有 hai-* Skill,再按 appType 排除互斥项。\n *\n * @param projectPath - 用户项目根目录\n * @param _features - 预留参数;保留签名兼容 createProject 调用方\n * @param appType - 应用类型(api 类型不复制 UI Skill)\n */\nexport async function generateSkillFiles(\n projectPath: string,\n _features: string[],\n appType?: string,\n projectName?: string,\n): Promise<string[]> {\n const templatesDir = getSkillTemplatesDir()\n\n if (!(await fse.pathExists(templatesDir))) {\n return []\n }\n\n const copiedFiles: string[] = []\n\n const templateSkillNames = await listTemplateSkillNames(templatesDir)\n const compatibleSkillNames = resolveCompatibleSkillNames(templateSkillNames, appType as AppType | undefined)\n\n copiedFiles.push(...await copySkills(templatesDir, compatibleSkillNames, projectPath))\n\n // 复制桥接文件\n copiedFiles.push(...await copyBridgeFiles(templatesDir, projectPath, true, appType, projectName))\n\n return copiedFiles\n}\n\n/**\n * 为已有项目添加单个模块的 Skill 文件\n *\n * 同时补全普通开发所需工作流及缺失参考资源,保留已有文件。\n *\n * @param projectPath - 用户项目根目录\n * @param moduleId - 模块标识(如 'db'、'iam')\n * @returns 复制的文件路径,若模块无对应 Skill 则返回 null\n */\nexport async function generateModuleSkillFile(\n projectPath: string,\n moduleId: string,\n): Promise<string[] | null> {\n const skillName = MODULE_SKILL_MAP[moduleId]\n if (!skillName) {\n return null\n }\n\n const copiedFiles = await generateProjectAiSupport(projectPath, [skillName], {\n overwriteSkills: false,\n overwriteBridgeFiles: false,\n })\n return copiedFiles.length > 0 ? copiedFiles : null\n}\n\nexport function resolveSkillNamesForPackages(packageNames: string[]): string[] {\n const skillNames = [...WORKFLOW_SKILLS]\n\n for (const packageName of packageNames) {\n const skillName = PACKAGE_SKILL_MAP[packageName]\n if (skillName) {\n skillNames.push(skillName)\n }\n }\n\n return [...new Set(skillNames)]\n}\n\nexport async function generateProjectAiSupport(\n projectPath: string,\n skillNames: string[],\n options: {\n overwriteSkills?: boolean\n overwriteBridgeFiles?: boolean\n appType?: string\n projectName?: string\n } = {},\n): Promise<string[]> {\n const templatesDir = getSkillTemplatesDir()\n\n if (!(await fse.pathExists(templatesDir))) {\n return []\n }\n\n const {\n overwriteSkills = true,\n overwriteBridgeFiles = true,\n } = options\n\n const detected = await detectBridgeContext(projectPath)\n const appType = options.appType ?? detected.appType\n const projectName = options.projectName ?? detected.projectName\n // 已确认的样板补全整个兼容目录;其它项目只补工作流与明确请求的模块。\n const selectedSkillNames = appType\n ? [...resolveCompatibleSkillNames(await listTemplateSkillNames(templatesDir), appType as AppType), ...WORKFLOW_SKILLS, ...skillNames]\n : [...WORKFLOW_SKILLS, ...skillNames]\n const copiedFiles: string[] = []\n copiedFiles.push(...await copySkills(templatesDir, selectedSkillNames, projectPath, SKILL_TARGET_DIRS, overwriteSkills))\n copiedFiles.push(...await copyBridgeFiles(templatesDir, projectPath, overwriteBridgeFiles, appType, projectName))\n\n return copiedFiles\n}\n"]}
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- export { generateConfigFile, generateEnvExample } from './chunk-7DSURTJ4.js';
3
- import './chunk-2H7UOFLK.js';
4
- //# sourceMappingURL=cli-config-templates-6AHNUGBN.js.map
5
- //# sourceMappingURL=cli-config-templates-6AHNUGBN.js.map