@h-ai/cli 1.0.0-beta.5 → 1.0.0-beta.7
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.
- package/README.en.md +24 -10
- package/README.ja.md +24 -10
- package/README.md +24 -10
- package/dist/{chunk-YHSX7AQX.js → chunk-7DNIMG2H.js} +89 -14
- package/dist/chunk-7DNIMG2H.js.map +1 -0
- package/dist/{chunk-YVNNMC4H.js → chunk-RT5OZJKM.js} +644 -11
- package/dist/chunk-RT5OZJKM.js.map +1 -0
- package/dist/{chunk-VUWM43KR.js → chunk-XI5SKOOR.js} +6673 -723
- package/dist/chunk-XI5SKOOR.js.map +1 -0
- package/dist/cli-config-templates-5KS3AE4H.js +5 -0
- package/dist/{cli-config-templates-LUJGDQNW.js.map → cli-config-templates-5KS3AE4H.js.map} +1 -1
- package/dist/{cli-skill-templates-COTP767H.js → cli-skill-templates-S2YH642Z.js} +3 -3
- package/dist/{cli-skill-templates-COTP767H.js.map → cli-skill-templates-S2YH642Z.js.map} +1 -1
- package/dist/index.js +395 -387
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/src-CX5IJGYM.js +5 -0
- package/dist/src-CX5IJGYM.js.map +1 -0
- package/package.json +11 -11
- package/templates/README.md +4 -0
- package/templates/apps/api/apps/{{projectName}}-serv/README.md.hbs +1 -1
- package/templates/apps/api/apps/{{projectName}}-serv/package.json.hbs +4 -4
- package/templates/apps/api/apps/{{projectName}}-serv/src/lib/server/init.ts.hbs +41 -2
- package/templates/apps/api/images/serv.Dockerfile.hbs +11 -6
- package/templates/apps/fullstack/docs/security-configuration.md.hbs +1 -1
- package/templates/apps/fullstack/images/serv.Dockerfile.hbs +11 -6
- package/templates/apps/fullstack/images/web.Dockerfile.hbs +11 -5
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +6 -6
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +4 -4
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +1 -2
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +26 -2
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +0 -1
- package/templates/base/images/web.Dockerfile.hbs +20 -10
- package/templates/base/package.json.hbs +8 -3
- package/templates/base/src/lib/server/init.ts.hbs +40 -2
- package/templates/shared/run-node.mjs +45 -0
- package/templates/skills/hai-ai/SKILL.md +6 -2
- package/templates/skills/hai-ai/acp.md +143 -0
- package/templates/skills/hai-ai/guide.md +2 -2
- package/templates/skills/hai-ai/resources.md +69 -0
- package/templates/skills/hai-app-create/development.md +9 -8
- package/templates/skills/hai-app-create/reference.md +1 -1
- package/templates/skills/hai-build/SKILL.md +5 -2
- package/templates/skills/hai-build/reference.md +16 -2
- package/templates/skills/hai-ci/SKILL.md +2 -0
- package/templates/skills/hai-core/SKILL.md +2 -2
- package/templates/skills/hai-core/reference.md +3 -3
- package/templates/skills/hai-core/request-access.md +1 -1
- package/templates/skills/hai-crypto/reference.md +1 -1
- package/templates/skills/hai-deploy/SKILL.md +8 -4
- package/templates/skills/hai-deploy/middleware.md +9 -9
- package/templates/skills/hai-iam/reference.md +2 -2
- package/templates/skills/hai-serv/reference.md +1 -1
- package/dist/chunk-VUWM43KR.js.map +0 -1
- package/dist/chunk-YHSX7AQX.js.map +0 -1
- package/dist/chunk-YVNNMC4H.js.map +0 -1
- package/dist/cli-config-templates-LUJGDQNW.js +0 -5
- package/dist/src-24PXSKE6.js +0 -5
- package/dist/src-24PXSKE6.js.map +0 -1
package/README.en.md
CHANGED
|
@@ -54,13 +54,13 @@ Omit options for interactive choices, or use `--defaults` for defaults. Installa
|
|
|
54
54
|
| `mobile-app` | Svelte + Vite + Capacitor |
|
|
55
55
|
| `fullstack` | Contract, API, shared UI and selected Web/App/Desktop; miniapp is a placeholder |
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Each template installs only the modules it uses: admin/h5 include authentication, OTP/password-reset notifications, database, cache and crypto; website uses Core/Kit/UI; API includes authentication, notifications, uploads and feedback; fullstack retains administration, audit, storage, notifications, scheduling and feedback; mobile-app uses client capabilities only. AI, payment, vecdb and datapipe are not installed by default. Every project retains complete module YAML and `.env.example` references, with unused settings commented out and excluded from public environment defaults. To add a feature, install its dependencies, enable the required configuration and wire initialization, cleanup and business routes. Adding a dependency does not enable features automatically. `--template`, `--features` and `--examples/--no-examples` remain removed; `create --yes/-y` is now `--defaults`. Old options fail explicitly. `deploy --yes` keeps its meaning; existing projects are not automatically trimmed.
|
|
58
58
|
|
|
59
59
|
Standalone `mobile-app` includes frontend crypto and encrypted typed-client transport. For an existing plaintext API, explicitly set `PUBLIC_API_TRANSPORT=off`. `PUBLIC_API_KEY_EXCHANGE_PATH` overrides the public exchange subpath. Handshake failures never fall back, server private keys never enter clients, and cleanup closes transport before client-owned crypto.
|
|
60
60
|
|
|
61
61
|
### Static websites and GitHub Pages
|
|
62
62
|
|
|
63
|
-
New websites
|
|
63
|
+
New websites default to Node SSR and install only Core/Kit/UI, so they can use the static build below directly. Remove any server business dependencies, initialization or custom APIs/actions added later before publishing statically. Commented configuration and environment references do not affect static builds.
|
|
64
64
|
|
|
65
65
|
Website defaults to Node SSR. Set `HAI_BUILD_STATIC=1` and `PUBLIC_BASE_PATH=/docs-site` (replace docs-site with the repository name; segments allow only ASCII letters, digits, _, . and -; no trailing slash, empty for a root site) for `pnpm build` to generate the static build directory. The static flag accepts 0/1 and applies only to compile. PUBLIC_BASE_PATH also supports Docker website builds; native app/desktop targets reject website paths. Static builds reject server-side business modules, custom APIs/actions and pages that were not prerendered, preserve production guards and use no SPA fallback. The default health API is excluded.
|
|
66
66
|
|
|
@@ -76,19 +76,19 @@ Docker builds also accept an explicit PUBLIC_BASE_PATH. A non-root path produces
|
|
|
76
76
|
|
|
77
77
|
### Fullstack mini administration
|
|
78
78
|
|
|
79
|
-
Includes user management, roles, audit logs, avatars, personal settings, themes, languages, onboarding and help. Sign in as `admin` using the random `HAI_ADMIN_DEFAULT_PASSWORD` in selected `.env.dev/.env.test/.env.prod`. Existing users are not reset. Adapt the sample business rules as needed; authorization remains on the server.
|
|
79
|
+
Includes user management, roles, audit logs, avatars, personal settings, themes, languages, onboarding and help. Sign in as `admin` using the random `HAI_ADMIN_DEFAULT_PASSWORD` in selected `.env.dev.local/.env.test.local/.env.prod.local`. Existing users are not reset. Adapt the sample business rules as needed; authorization remains on the server.
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Project creation generates independent initial passwords and transport key rings in `.env.dev.local`, `.env.test.local`, and `.env.prod.local`. These files are Git-ignored. Distribute environment secrets through protected files or a Secret Manager after cloning. Nodes in one environment share a valid ring and registry; never generate a ring at startup. Missing or invalid `HAI_CRYPTO_TRANSPORT_SERVERKEYRING` fails before upload. CLI and offline instructions identify password variables and sources without showing values. Initial passwords create missing accounts and do not reset existing accounts.
|
|
82
82
|
|
|
83
83
|
### Application configuration and display
|
|
84
84
|
|
|
85
85
|
Templates default to `pretty` logging and install `pino-pretty` as a runtime dependency; set `HAI_CORE_LOGGING_FORMAT=json` for JSON. Startup failures retain the module, error code and configuration fields; occupied ports report `EADDRINUSE`, address and port.
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Public settings live in `.env` and `.env.<mode>`; SSH settings and credentials go to Git-ignored `.env.<mode>.local`. `.env.local` contains shared machine-private settings. Builds do not read deployment secrets. All `HAI_*` settings use process > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML. Within one source, fields override base JSON. Replacing a whole node from a higher source clears lower-source fields. Node/Vite and deployment share Core resolution.
|
|
88
88
|
|
|
89
89
|
### Existing projects and code generation
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
`hai add ai` also installs reldb and vecdb. Integrate startup in database → vector store → AI order, with reverse cleanup and explicit cleanup failure handling. Production profiles select PostgreSQL (or the chosen MySQL), Redis, S3 and Qdrant for enabled modules, using Compose DNS names `db/cache/storage/vecdb`. Inject database/cache passwords, S3 credentials, model keys and protected Qdrant keys privately. Override internal addresses when running outside Compose. Production Reach intentionally rejects an empty provider array until a real `HAI_REACH_PROVIDERS` JSON secret is supplied. `hai add` preserves configured production values, adds missing fields, and requires integration into the existing application entry point.
|
|
92
92
|
|
|
93
93
|
```sh
|
|
94
94
|
hai add storage
|
|
@@ -123,9 +123,23 @@ Configure `hai.json.deploy.provider.expose.https` or private environment overrid
|
|
|
123
123
|
|
|
124
124
|
### Build and deploy
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
On Windows, builds forward stdout/stderr with normalized terminal line endings. pnpm downloads use append-only logs while retaining warnings and failures.
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
Select image and npm downloads independently with `--image-source official|cn|custom` and `--npm-source official|cn|custom`. The mainland-China preset uses 1ms mirrors for Docker Hub/GHCR and npmmirror for npm. First-time interactive choices become `hai.json.build.sources` defaults. Flags override only this invocation; `--yes` reuses settings, and an unconfigured noninteractive run uses official sources. Configure `build.proxy` through `--proxy-mode inherit|system|custom|none`, `--proxy-url`, and `--proxy-bypass`. Both Docker and Podman receive build proxy arguments; loopback URLs are handled according to the build network and checked inside the build container. Image pulls use the engine's own proxy settings. See [download sources and proxies](../../docs/usage/configuration/delivery.md#下载源和代理) for custom mappings, system-proxy support and existing Dockerfile updates.
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
pnpm build --target image --image-source cn --npm-source cn
|
|
132
|
+
pnpm run deploy --env prod --build --bundle-only --image-source cn --npm-source cn
|
|
133
|
+
pnpm build --target image --proxy-mode custom --proxy-url http://127.0.0.1:10808
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Default/custom middleware configuration preserves all effective settings for the same backend, including `publicEndpoint`, pool and operation log options absent from the form. Managed services replace connection selectors and credentials. Generators prefer field variables and retain JSON arrays. Handwritten JSON remains a base and appears before its module fields; fields in the same source win. Dynamic maps, JSON text and explicit empty objects preserve their meaning. Expanding a whole-object replacement retains its highest `{}` reset marker so old YAML fields cannot reappear. Container paths stay in delivery output without changing source settings.
|
|
137
|
+
|
|
138
|
+
Node backends (Serv / SvelteKit SSR) read `<deployment-root>/config/.env.runtime` on every start. This single application file includes managed connections. Edit a field such as `HAI_STORAGE_PUBLICENDPOINT`, then restart the backend; fields override parent JSON within the same source. The configuration directory is mounted read-only at `/run/hai/config`, so atomic file replacement is visible on restart. Private proxy identity and Node startup options remain deployment settings. Static Web, native middleware environment, ports/mounts, and Nginx routes or limits require deployment. Web/middleware-only updates retain the file; partial backend updates preserve managed connections, while full updates use the new package with existing managed credentials. Back up edits and copy permanent settings into the source environment.
|
|
139
|
+
|
|
140
|
+
Container packaging sets the listener to `0.0.0.0` and the port declared by the artifact, falling back to deployment settings when absent. It generates `HOST`, `PORT`, and the matching Serv fields. Loopback addresses and development ports in local `.env` files remain local settings. Update the artifact and deployment layout together when changing container ports.
|
|
141
|
+
|
|
142
|
+
Nginx dynamically tracks DNS changes for application and storage containers. The shared `.hai/proxy-start.sh` runs as an image entrypoint hook, preserves the image startup command, and reads resolvers from the container's `/etc/resolv.conf` and also watches certificate changes for HTTPS. Docker and Podman need no fixed DNS address. After editing runtime configuration and restarting the backend, the proxy reconnects automatically even if its IP changes.
|
|
129
143
|
|
|
130
144
|
Image builds run at most two images concurrently by default; use `--concurrency 1` to reduce resource use. Dependency installation precedes source copies, and each side copies only its required source. Runtime images omit application declaration files, source maps and README files. Packaging validates and reuses middleware archives by image content ID and hashes application archives while copying. Delivery defaults to `.tar.gz`; explicit `--output release.tar` keeps an uncompressed archive. README is only outside the archive. Successful deployment removes its incoming upload/extraction, retains recovery configuration in releases, and keeps images in the container engine.
|
|
131
145
|
|
|
@@ -160,7 +174,7 @@ The server persists managed middleware passwords in `<remoteDir>/managed-secrets
|
|
|
160
174
|
|
|
161
175
|
Complete bundles include application and self-hosted middleware images. Deployment caches, archives and operation directories default to `.hai/deploy/<environment>/` at the project root; `--output` can override the archive path relative to the command directory. Interactive bundle-only mode offers to add or update SSH settings after builds and middleware configuration, before packaging. It saves them in `.env.<environment>.local` for the current and subsequent targets; `--yes` or declining reuses existing settings. The delivery directory contains only a tar, deploy-local.sh, read-target.awk, README.txt, `deploy-target.json` with field descriptions, Windows PowerShell 5+ `deploy.ps1` and Linux/macOS `deploy.sh`. Check the target and fill missing fields before upload. Both scripts read it, support key/agent and password authentication, and need no Node/pnpm. The target references only `passwordEnv` (default `HAI_DEPLOY_PROVIDER_SSH_PASSWORD`); the operator environment supplies the password to this SSH/SCP process tree only, never to the application environment or bundle. Target edits affect that bundle only and never write back to the project. On isolated Linux servers, copy the whole directory and run `sh deploy-local.sh` to extract and deploy automatically. First installations require a complete bundle; partial updates preserve other services and volumes. Each step reports its result; failure exits nonzero and attempts recovery. See [deployment](../deploy/README.en.md) for prerequisites, caching, versions and recovery.
|
|
162
176
|
|
|
163
|
-
|
|
177
|
+
Missing SSH connection and authentication fields are collected once; hidden password input preserves spaces and leading zeros. Complete settings are reused with `--yes`. Public settings live in `.env` and `.env.<mode>`; SSH settings and credentials go to Git-ignored `.env.<mode>.local`. `.env.local` contains shared machine-private settings. Builds do not read deployment secrets. All `HAI_*` settings use process > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML. Within one source, fields override base JSON. Replacing a whole node from a higher source clears lower-source fields. Node/Vite and deployment share Core resolution.
|
|
164
178
|
|
|
165
179
|
Failures display local managed-process termination separately from remote unknown/finished-script state and the server result path. Local SSH exit does not prove remote termination. Inspect unknown server state first; CLI never reruns deployment or rollback automatically. Windows command execution uses an embedded system PowerShell/.NET Job and requires Add-Type; failure never starts an unmanaged command.
|
|
166
180
|
|
|
@@ -180,7 +194,7 @@ The workflow uses hai-spec-review, hai-spec-implement, hai-app-create, hai-app-t
|
|
|
180
194
|
|
|
181
195
|
UI delivery includes [hai-ui-design](templates/skills/hai-ui-design/SKILL.md), hai-ui and [hai-ui-review](templates/skills/hai-ui-review/SKILL.md). API templates exclude frontend skills. init/add preserve private entrypoints and backfill missing resources. Repository entrypoints use the same names for shared responsibilities.
|
|
182
196
|
|
|
183
|
-
The fullstack example separates `admin`, `audit_admin`, `config_admin`, `business_operator` and basic `user` duties in application configuration. System administrators cannot take over other duty accounts. CLI creates independent random bootstrap passwords for all four duties in each `.env.dev/.env.test/.env.prod`,
|
|
197
|
+
The fullstack example separates `admin`, `audit_admin`, `config_admin`, `business_operator` and basic `user` duties in application configuration. System administrators cannot take over other duty accounts. CLI creates independent random bootstrap passwords for all four duties in each `.env.dev.local/.env.test.local/.env.prod.local`, keeping these files out of Git and distributing environment secrets through protected configuration, and existing accounts are never reset or reassigned. Select security enhancements in `_iam.yml`/`_audit.yml`; see the generated README.
|
|
184
198
|
|
|
185
199
|
The [fullstack security configuration guide template](templates/apps/fullstack/docs/security-configuration.md.hbs) explains every switch, default, prerequisite and effect on users. New projects include it as `docs/security-configuration.md`, linked from their README.
|
|
186
200
|
|
package/README.ja.md
CHANGED
|
@@ -54,13 +54,13 @@ pnpm dev
|
|
|
54
54
|
| `mobile-app` | Svelte + Vite + Capacitor |
|
|
55
55
|
| `fullstack` | contract、API、共通 UI、選択した Web/App/Desktop。miniapp は説明のみ |
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
各テンプレートは実際に使うモジュールだけを導入します。admin/h5 は認証・OTP/パスワード再設定の通知・DB・キャッシュ・暗号化、website は Core/Kit/UI、API は認証・通知・アップロード・feedback、fullstack は管理画面の認証・監査・保存・通知・スケジューラー・feedback、mobile-app はクライアント機能を使用します。AI、payment、vecdb、datapipe は既定で導入しません。全工程に完全なモジュール YAML と `.env.example` を残し、未使用項目はコメントにして公開環境の既定値から除外します。後で依存を追加し、必要な設定を有効にして初期化・終了・業務ルートを接続します。依存追加だけでは自動的に有効になりません。`--template`、`--features`、`--examples/--no-examples` は削除済みで、`create --yes/-y` は `--defaults` です。旧引数は明示的に拒否し、`deploy --yes` の意味は維持します。既存工程の依存は自動削除しません。
|
|
58
58
|
|
|
59
59
|
独立した `mobile-app` は frontend crypto と暗号化 typed client transport を含みます。既存の平文 API には `PUBLIC_API_TRANSPORT=off` を明示します。`PUBLIC_API_KEY_EXCHANGE_PATH` は公開鍵交換パスの上書きです。失敗時に平文へ切り替えず、サーバー秘密鍵はクライアントに渡しません。終了時は transport、その後に自身の crypto を解放します。
|
|
60
60
|
|
|
61
61
|
### 静的websiteとGitHub Pages
|
|
62
62
|
|
|
63
|
-
新規 website
|
|
63
|
+
新規 website は既定で Node SSR、依存は Core/Kit/UI のみで、下記の静的構築をそのまま利用できます。後から追加したサーバー業務依存・初期化・独自 API/actions は静的公開前に除去します。コメントの設定と環境変数の参考例は静的構築に影響しません。
|
|
64
64
|
|
|
65
65
|
websiteの既定はNode SSRです。ビルド時に`HAI_BUILD_STATIC=1`と`PUBLIC_BASE_PATH=/docs-site`(docs-siteを実際のリポジトリー名に置換。各区間はASCII英数字・_・.・-のみ、末尾/なし、ルートは空)を指定してpnpm buildを実行すると静的buildを生成します。静的フラグは0/1のみでcompile専用です。PUBLIC_BASE_PATHはDockerのWeb構築にも対応しますが、ネイティブapp/desktopでは指定できません。静的構築はサーバー業務モジュール、独自API/actions、事前描画されないページを拒否し、本番ガードを緩和せずSPAフォールバックも生成しません。既定のhealth APIは含めません。
|
|
66
66
|
|
|
@@ -76,19 +76,19 @@ Docker構築でもPUBLIC_BASE_PATHを明示できます。非ルートではwebB
|
|
|
76
76
|
|
|
77
77
|
### Fullstack mini 管理画面
|
|
78
78
|
|
|
79
|
-
ユーザー、ロール、監査ログ、アバター、個人設定、テーマ、言語、操作ガイドとヘルプを提供します。初回は `admin` と、選択環境の `.env.dev/.env.test/.env.prod` のランダムな `HAI_ADMIN_DEFAULT_PASSWORD` でログインします。既存ユーザーのパスワードは変更しません。例の業務ルールは変更できますが、認可はサーバーで行います。
|
|
79
|
+
ユーザー、ロール、監査ログ、アバター、個人設定、テーマ、言語、操作ガイドとヘルプを提供します。初回は `admin` と、選択環境の `.env.dev.local/.env.test.local/.env.prod.local` のランダムな `HAI_ADMIN_DEFAULT_PASSWORD` でログインします。既存ユーザーのパスワードは変更しません。例の業務ルールは変更できますが、認可はサーバーで行います。
|
|
80
80
|
|
|
81
|
-
作成時に `.env.dev
|
|
81
|
+
作成時に `.env.dev.local`、`.env.test.local`、`.env.prod.local` に個別の初期パスワードと転送鍵リングを生成し、Git には登録しません。クローン後は保護ファイルまたは Secret Manager で環境の秘密値を配布します。同じ環境のノードは有効な ring と共有 registry を使い、起動時に生成しません。`HAI_CRYPTO_TRANSPORT_SERVERKEYRING` の不足・不正はアップロード前に失敗します。CLI とオフライン説明はパスワード変数と保存元のみ示し、値は表示しません。初期値は不足アカウント作成時のみ使用し、既存アカウントを変更しません。
|
|
82
82
|
|
|
83
83
|
### アプリ設定と表示
|
|
84
84
|
|
|
85
85
|
テンプレートは `pretty` ログを既定とし、実行依存に `pino-pretty` を追加します。`HAI_CORE_LOGGING_FORMAT=json` で JSON に切り替えます。起動失敗はモジュール・エラーコード・設定項目、ポート競合は `EADDRINUSE`・アドレス・ポートを表示します。
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
公開設定は `.env` と `.env.<mode>`、SSH と資格情報は Git 対象外の `.env.<mode>.local`、マシン共通の秘密値は `.env.local` に保存します。構築時には配備の秘密値を読みません。 すべての `HAI_*` はプロセス > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML の順です。同一ソースは JSON を基礎として個別フィールドで上書きし、高優先度ソースの全体置換は低優先度の細項を解除します。Node/Vite と配備は同じ Core 処理を使います。
|
|
88
88
|
|
|
89
89
|
### 既存工程とコード生成
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
`hai add ai` は reldb と vecdb も導入します。その後、アプリの入口に DB → ベクトル保存先 → AI の順の初期化と逆順の終了処理を接続し、終了処理の失敗も確認します。本番設定は有効な機能に応じて PostgreSQL(選択済み MySQL は保持)・Redis・S3・Qdrant を選び、Compose の `db/cache/storage/vecdb` を使います。パスワード・S3 認証情報・モデルキー・保護された Qdrant キーは秘密環境から注入し、Compose 外では接続先を上書きしてください。本番 Reach は空 Provider 配列で起動を拒否し、実際の `HAI_REACH_PROVIDERS` JSON の注入が必要です。`hai add` は既存本番値を保持して不足項目を追加します。既存の起動処理への接続はアプリ側で行います。
|
|
92
92
|
|
|
93
93
|
```sh
|
|
94
94
|
hai add storage
|
|
@@ -123,9 +123,23 @@ admin・website・h5 作成時に crypto を選ぶと `_kit.yml` の transport
|
|
|
123
123
|
|
|
124
124
|
### ビルドとデプロイ
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
Windows のビルドでは標準出力とエラーの改行を統一して転送します。pnpm の取得ログは追記方式とし、警告と失敗情報を保持します。
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
イメージと npm の取得元を `--image-source official|cn|custom`、`--npm-source official|cn|custom` で個別に指定できます。中国本土のプリセットは Docker Hub/GHCR に毫秒镜像、npm に npmmirror を使用します。初回対話の選択は `hai.json.build.sources` に保存し、引数は今回のみ上書きします。`--yes` は既存設定を再利用し、非対話で未設定の場合は公式を使用します。プロキシは `build.proxy` と `--proxy-mode inherit|system|custom|none`、`--proxy-url`、`--proxy-bypass` で指定します。Docker と Podman のビルドに渡し、ビルドネットワークに応じてループバックを処理し、コンテナ内で接続を確認します。イメージ取得はエンジン側のプロキシ設定を使用します。カスタム対応表、システムプロキシの対応範囲、既存 Dockerfile の更新は[取得元とプロキシ](../../docs/usage/configuration/delivery.md#下载源和代理)を参照してください。
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
pnpm build --target image --image-source cn --npm-source cn
|
|
132
|
+
pnpm run deploy --env prod --build --bundle-only --image-source cn --npm-source cn
|
|
133
|
+
pnpm build --target image --proxy-mode custom --proxy-url http://127.0.0.1:10808
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
既定/カスタム設定は同じバックエンドの全有効項目を保持し、フォームにない `publicEndpoint`、接続プール、操作ログも引き継ぎます。自前/クラウド構成は接続と認証を更新します。 生成処理は個別変数を優先し、配列は JSON を維持します。手書き JSON はモジュール細項の前に置く基礎値で、同一ソースの細項が優先されます。動的辞書、JSON テキスト、明示的な空オブジェクトの意味を維持します。全体置換を展開する際は最上位の `{}` リセットを残し、古い YAML フィールドの復活を防ぎます。コンテナー内パスは配布物のみ変更します。
|
|
137
|
+
|
|
138
|
+
Node バックエンド(Serv / SvelteKit SSR)は起動ごとに `<配備ディレクトリー>/config/.env.runtime` を読みます。管理接続も同じアプリ設定に統合します。`HAI_STORAGE_PUBLICENDPOINT` などを編集して再起動すると反映され、同じソースでは個別フィールドが親 JSON を上書きします。設定ディレクトリーを `/run/hai/config` に読み取り専用でマウントするため、ファイルのアトミック置換も次の起動で反映されます。非公開プロキシ識別と Node 起動引数は配備設定です。静的 Web、ネイティブ環境、ポート、マウント、Nginx の変更は再配備します。Web/ミドルウェアのみの更新は設定を維持し、バックエンドの部分更新は管理接続を維持、全量更新は新しい設定と既存の管理資格情報を使います。編集前にバックアップし、恒久的な値は元の環境にも反映してください。
|
|
139
|
+
|
|
140
|
+
コンテナーのパッケージ化では、待受アドレスを `0.0.0.0`、ポートを成果物の宣言値(未指定なら配置設定)として、`HOST`、`PORT` と Serv の対応フィールドを生成します。ローカル `.env` のループバックアドレスと開発ポートはローカル実行に使います。コンテナーポートの変更時は成果物と配置構成を更新して再配備してください。
|
|
141
|
+
|
|
142
|
+
Nginx はアプリとストレージのコンテナーの DNS 変更に動的に追従します。共通の `.hai/proxy-start.sh` はイメージの元の起動コマンドを維持する入口フックとして動作し、コンテナー内の `/etc/resolv.conf` からリゾルバーを読み、HTTPS では証明書更新も監視します。Docker と Podman の DNS アドレスを固定する必要はありません。実行時設定を編集してバックエンドを再起動した後、IP が変わってもプロキシは自動的に再接続します。
|
|
129
143
|
|
|
130
144
|
イメージは既定で最大 2 件を並列構築し、`--concurrency 1` で資源使用量を抑えます。ソースの前に依存をインストールし、各端で必要なソースだけをコピーします。実行イメージからアプリの型宣言・source map・README を除去します。ミドルウェアのアーカイブはイメージ内容 ID で検証・再利用し、コピーと同時にハッシュを計算します。配布の既定は `.tar.gz`、明示的な `--output release.tar` は非圧縮です。README は外側だけに保持します。成功後に今回の incoming アップロードと展開先を削除し、release に復旧設定、エンジンにイメージを保持します。
|
|
131
145
|
|
|
@@ -160,7 +174,7 @@ CLI の --project-name と SDK の DeployAppOptions.projectName 上書きは廃
|
|
|
160
174
|
|
|
161
175
|
完全配布にはアプリと自前ミドルウェアのイメージが入ります。デプロイキャッシュ、tar と操作ディレクトリは既定でプロジェクトルートの `.hai/deploy/<環境>/` に置きます。`--output` でコマンドの作業ディレクトリを基準とする tar 出力先を指定できます。対話式の梱包では構築・ミドルウェア設定後、梱包前に SSH 設定の追加・変更を確認します。`.env.<環境>.local` に保存し、今回と次回以降の target に反映します。`--yes` またはスキップ時は既存設定を使います。配布ディレクトリには tar、deploy-local.sh、read-target.awk、README.txt、項目説明付き `deploy-target.json`、Windows PowerShell 5+ `deploy.ps1`、Linux/macOS `deploy.sh` を生成します。アップロード前に target を確認して不足項目を補います。両スクリプトともこのファイルを読み、key/agent と password に対応し、Node/pnpm は不要です。target は `passwordEnv`(既定 `HAI_DEPLOY_PROVIDER_SSH_PASSWORD`)だけを参照し、パスワードは操作 PC の環境から今回の SSH/SCP 子プロセスだけに渡します。アプリ環境や配布物には含めません。target の変更はその配布物だけに適用し、プロジェクトには書き戻しません。隔離 Linux サーバーにはディレクトリ全体をコピーし、`sh deploy-local.sh` で自動展開・配置します。初回は完全配布が必要で、部分更新は他サービスとボリュームを維持します。各手順の結果を表示し、失敗は非ゼロで終了して復元を試みます。前提・キャッシュ・版管理・復元は[デプロイ説明](../deploy/README.ja.md)を参照してください。
|
|
162
176
|
|
|
163
|
-
|
|
177
|
+
不足する SSH 接続・認証を初回に入力し、非表示のパスワードは空白と先頭ゼロを維持します。完全な設定は `--yes` で再利用します。 公開設定は `.env` と `.env.<mode>`、SSH と資格情報は Git 対象外の `.env.<mode>.local`、マシン共通の秘密値は `.env.local` に保存します。構築時には配備の秘密値を読みません。 すべての `HAI_*` はプロセス > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML の順です。同一ソースは JSON を基礎として個別フィールドで上書きし、高優先度ソースの全体置換は低優先度の細項を解除します。Node/Vite と配備は同じ Core 処理を使います。
|
|
164
178
|
|
|
165
179
|
失敗時はローカルの管理対象プロセス終了確認と、遠隔の不明/スクリプト完了状態、結果ファイルのパスを別々に表示します。ローカル SSH 終了だけでは遠隔停止を断定しません。不明状態をサーバーで確認し、CLI は配置や復元を自動再実行しません。Windows は内嵌のシステム PowerShell/.NET Job と Add-Type を使い、失敗時は管理外でコマンドを起動しません。
|
|
166
180
|
|
|
@@ -180,7 +194,7 @@ hai-spec-review、hai-spec-implement、hai-app-create、hai-app-tests、hai-app-
|
|
|
180
194
|
|
|
181
195
|
UI には [hai-ui-design](templates/skills/hai-ui-design/SKILL.md)、hai-ui、[hai-ui-review](templates/skills/hai-ui-review/SKILL.md) を一緒に配布し、API テンプレートでは除外します。init/add は既存の独自入口を保持して不足リソースを補完します。リポジトリ側でも同じ責務には同じ名前を使います。
|
|
182
196
|
|
|
183
|
-
fullstack 例はアプリ設定で `admin`、`audit_admin`、`config_admin`、`business_operator` と一般 `user` を分離し、システム管理者による他職務アカウントの奪取を拒否します。CLI は既存の環境設定方式を維持し、`.env.dev/.env.test/.env.prod`
|
|
197
|
+
fullstack 例はアプリ設定で `admin`、`audit_admin`、`config_admin`、`business_operator` と一般 `user` を分離し、システム管理者による他職務アカウントの奪取を拒否します。CLI は既存の環境設定方式を維持し、`.env.dev.local/.env.test.local/.env.prod.local` ごとに四職務の独立した初期パスワードを作成します。ファイルは Git 対象外で、保護設定や Secret Manager により同じ環境へ配布し、既存アカウントの再設定・再割当は行いません。`_iam.yml`/`_audit.yml` の強化機能は業務ごとに選択し、生成 README を参照してください。
|
|
184
198
|
|
|
185
199
|
各スイッチ、既定値、前提条件と利用への影響は [fullstack セキュリティ設定ガイドのテンプレート](templates/apps/fullstack/docs/security-configuration.md.hbs) を参照してください。新規プロジェクトには `docs/security-configuration.md` と README のリンクを生成します。
|
|
186
200
|
|
package/README.md
CHANGED
|
@@ -54,13 +54,13 @@ pnpm dev
|
|
|
54
54
|
| `mobile-app` | Svelte + Vite + Capacitor |
|
|
55
55
|
| `fullstack` | contract、API、共享界面与所选 Web/App/Desktop;miniapp 仅预留说明 |
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
每个模板只安装实际使用的模块:admin/h5 包含认证、验证码及找回密码通知,以及数据库、缓存、加密依赖;website 只包含 Core/Kit/UI;API 包含认证、通知、上传和反馈;fullstack 保留管理后台的认证、审计、存储、通知、调度和反馈;mobile-app 只使用客户端能力。AI、payment、vecdb、datapipe 不默认安装。所有项目保留完整模块 YAML 和 `.env.example`,未启用项以注释提供,只有已启用项进入公共环境默认值。后续添加对应依赖、取消所需配置注释,再接入初始化、关闭及业务路由;添加依赖不会自动启用功能。`--template`、`--features`、`--examples/--no-examples` 已删除,`create --yes/-y` 改为 `--defaults`,旧参数明确报错;`deploy --yes` 保持原义。已有工程不会自动裁剪依赖。
|
|
58
58
|
|
|
59
59
|
独立 `mobile-app` 默认包含前端 crypto,并启用 typed client 加密传输。已有明文 API 可显式使用 `PUBLIC_API_TRANSPORT=off`;`PUBLIC_API_KEY_EXCHANGE_PATH` 只覆盖公开协商子路径。握手失败不会降级,服务端私钥不进入客户端。客户端先关闭 transport,再释放自身初始化的 crypto。
|
|
60
60
|
|
|
61
61
|
### 纯静态 website 与 GitHub Pages
|
|
62
62
|
|
|
63
|
-
新建 website
|
|
63
|
+
新建 website 默认 Node SSR,只安装展示站所需的 Core/Kit/UI,可以直接使用下述静态构建。以后接入了服务端业务模块、初始化或 API/actions 时,静态发布前须移除这些动态能力;保留的注释配置和变量示例不影响静态构建。
|
|
64
64
|
|
|
65
65
|
website默认Node SSR。仅构建时设置`HAI_BUILD_STATIC=1`与`PUBLIC_BASE_PATH=/docs-site`(docs-site替换为实际仓库名;各目录段仅ASCII字母、数字、_、.、-,无末尾/,根站留空)后执行`pnpm build`,输出build静态目录。静态标志只接受0/1,且仅用于compile;PUBLIC_BASE_PATH也可用于Docker网站构建,原生app/desktop目标不接受网站目录。静态拒绝服务端业务模块、自定义API/actions和未预渲染页面,不放宽生产守卫,不生成SPA回退;默认健康API不进入静态产物。
|
|
66
66
|
|
|
@@ -76,19 +76,19 @@ Docker构建时同样显式设置PUBLIC_BASE_PATH;非根目录生成格式5制
|
|
|
76
76
|
|
|
77
77
|
### Fullstack mini 管理后台
|
|
78
78
|
|
|
79
|
-
提供用户管理、角色、审计日志、头像和个人设置,以及主题、语言、引导和帮助中心。首次登录使用 `admin`,随机密码在当前环境 `.env.dev/.env.test/.env.prod` 的 `HAI_ADMIN_DEFAULT_PASSWORD`;已有用户时不会重设密码。模板业务可按需求修改,权限检查始终在服务端执行。
|
|
79
|
+
提供用户管理、角色、审计日志、头像和个人设置,以及主题、语言、引导和帮助中心。首次登录使用 `admin`,随机密码在当前环境 `.env.dev.local/.env.test.local/.env.prod.local` 的 `HAI_ADMIN_DEFAULT_PASSWORD`;已有用户时不会重设密码。模板业务可按需求修改,权限检查始终在服务端执行。
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
创建工程时为 `.env.dev.local`、`.env.test.local`、`.env.prod.local` 分别生成独立初始密码和传输密钥环,文件不提交 Git。克隆工程后通过受保护文件或 Secret Manager 分发对应环境秘密,同环境所有节点使用同一 ring 与共享 registry,不在节点启动时生成。缺少或无效的 `HAI_CRYPTO_TRANSPORT_SERVERKEYRING` 在上传前报错。CLI 和离线说明只提示初始密码变量及来源,不输出值;密码仅用于创建缺失账号,已有账号不被重置。
|
|
82
82
|
|
|
83
83
|
### 应用配置与显示
|
|
84
84
|
|
|
85
85
|
模板默认使用 `pretty` 日志并安装运行依赖 `pino-pretty`;`HAI_CORE_LOGGING_FORMAT=json` 可切换为结构化输出。启动失败保留模块、错误码与缺失配置字段;端口冲突显示 `EADDRINUSE`、地址和端口。
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
公共配置保存在 `.env` 和 `.env.<mode>`,连接凭据与 SSH 配置保存在忽略 Git 的 `.env.<mode>.local`,`.env.local` 用于本机共享私有值。构建不读取部署秘密。 所有 `HAI_*` 统一使用:进程 > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML。同来源 JSON 为基础,细项继续覆盖;高来源整段替换先清掉低来源细项。Node/Vite 与部署共用 Core 合并,不维护模块专用顺序。
|
|
88
88
|
|
|
89
89
|
### 已有项目与代码生成
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
通过 `hai add ai` 可补齐 reldb 与 vecdb 依赖;随后在应用入口按数据库 → 向量库 → AI 初始化,失败时检查关闭结果并逆序清理。`.env.prod` 按启用模块选择 PostgreSQL(已选 MySQL 则保留)、Redis、S3、Qdrant,默认使用 Compose 的 `db/cache/storage/vecdb` 服务名。数据库/缓存密码、S3 凭据、模型密钥和受保护 Qdrant 的密钥必须由私有环境注入;容器外运行需覆盖这些内部地址。生产 Reach 的空 Provider 数组有意拒绝启动,须私有注入真实 `HAI_REACH_PROVIDERS` JSON。`hai add` 保留已有生产参数,只补新增字段;随后在现有业务入口接入新增模块。
|
|
92
92
|
|
|
93
93
|
```sh
|
|
94
94
|
hai add storage
|
|
@@ -123,9 +123,23 @@ CLI 消息支持中文、英文和日文,优先使用 `HAI_CORE_DEFAULTLOCALE`
|
|
|
123
123
|
|
|
124
124
|
### 构建与部署
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
Windows 构建会转发标准输出与错误,统一终端换行;pnpm 下载使用追加式日志,保留 WARN 与失败信息。
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
镜像和 npm 下载分别使用 `--image-source official|cn|custom`、`--npm-source official|cn|custom`。大陆预设采用毫秒镜像(Docker Hub/GHCR)和 npmmirror。首次交互把选择保存为 `hai.json.build.sources` 默认;命令参数只覆盖本次,`--yes` 复用配置,非交互未配置时使用官方源。代理用 `--proxy-mode inherit|system|custom|none`,自定义配合 `--proxy-url`、`--proxy-bypass`,配置位于 `build.proxy`。Docker/Podman 构建均传递代理参数,按构建网络处理回环地址并检查容器内可达性;镜像拉取仍由引擎侧代理决定。自定义映射、旧 Dockerfile 更新和系统代理支持范围见[下载源和代理](../../docs/usage/configuration/delivery.md#下载源和代理)。
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
pnpm build --target image --image-source cn --npm-source cn
|
|
132
|
+
pnpm run deploy --env prod --build --bundle-only --image-source cn --npm-source cn
|
|
133
|
+
pnpm build --target image --proxy-mode custom --proxy-url http://127.0.0.1:10808
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
部署向导的默认/自定义模式保留同后端完整配置,包括未出现在表单中的 `publicEndpoint`、连接池及操作日志;自建或云开通只重新定稿连接与认证。 生成端优先写细项,数组保留 JSON;手写 JSON 允许兜底,放在对应模块细项之前。同源细项覆盖 JSON,动态字典、JSON 文本和显式空对象保留原义;整体替换展开时以最上层 `{}` 标记阻止旧 YAML 字段恢复。容器路径只写交付配置,不反写工程源环境。
|
|
137
|
+
|
|
138
|
+
Node 后端(Serv / SvelteKit SSR)每次启动读取服务器 `<部署目录>/config/.env.runtime`。应用配置与托管连接在此合并,修改 `HAI_STORAGE_PUBLICENDPOINT` 等细项后重启对应后端即可;同一来源的细项覆盖父 JSON。配置目录只读挂载到 `/run/hai/config`,编辑器原子替换文件也会被下一次启动读取。私有代理标记和 Node 启动参数由部署装配管理;静态 Web、中间件原生环境、端口/挂载、Nginx 路由与限额变更仍需部署。仅更新 Web/中间件保留当前应用配置;后端局部更新保留服务器托管连接,其余值来自新包,全量更新采用新包并按已有凭据状态定稿。手工修改先备份,长期配置同步回源环境。
|
|
139
|
+
|
|
140
|
+
容器打包时,监听地址采用 `0.0.0.0`,端口采用制品声明值(未声明时采用部署配置),并生成 `HOST`、`PORT` 和 Serv 的对应细项。本机 `.env` 中的回环地址与开发端口继续用于本地运行。修改容器端口时更新制品与部署布局后重新部署。
|
|
141
|
+
|
|
142
|
+
Nginx 通过动态上游跟随应用和存储容器的 DNS 地址变化。共用的 `.hai/proxy-start.sh` 作为镜像入口钩子执行,保留镜像原有启动命令,并从容器 `/etc/resolv.conf` 读取解析器,HTTPS 时同时监视证书更新;Docker 与 Podman 均无需固定 DNS 地址。修改运行配置后重启后端,即使容器 IP 变化,代理也会自动恢复连接。
|
|
129
143
|
|
|
130
144
|
镜像默认最多并行两项,`--concurrency 1` 可降低资源占用。Dockerfile 在复制源码前安装依赖;前后端仅复制各自必要源码,复用安装层和驱动缓存。运行镜像移除应用自身的声明文件、源码映射和说明文件。打包按镜像内容 ID 复用并校验中间件归档,复制应用镜像时同时计算摘要。默认交付压缩为 `.tar.gz`,显式 `--output release.tar` 可保留未压缩格式;README 仅保留外层一份。成功部署后清理本次 incoming 上传和解包目录,release 保留恢复配置和状态,镜像由容器引擎保存。
|
|
131
145
|
|
|
@@ -160,7 +174,7 @@ CLI 的 --project-name 与 SDK 的 DeployAppOptions.projectName 覆盖入口已
|
|
|
160
174
|
|
|
161
175
|
完整包包含应用和自建中间件镜像。部署缓存、tar 与操作目录默认放在工程根 `.hai/deploy/<环境>/`;`--output` 可显式指定相对命令执行目录的 tar 路径。交互式仅打包在构建和中间件配置后、打包前最后询问是否添加或修改 SSH 信息,保存到 `.env.<环境>.local` 并用于本次和后续 target;`--yes` 或跳过时复用已有连接。交付目录仅含 tar、deploy-local.sh、read-target.awk、README.txt、带逐项说明的 `deploy-target.json` 与 Windows PowerShell 5+ `deploy.ps1`、Linux/macOS `deploy.sh`。上传前核对 target 并补齐缺项,两个脚本均读取此文件,支持 key/agent 和 password,均无需 Node/pnpm。target 只引用 `passwordEnv`(默认 `HAI_DEPLOY_PROVIDER_SSH_PASSWORD`);密码取自操作机环境,仅进入本次 SSH/SCP 子进程,不进入应用环境或包内。修改 target 仅影响本包,不回写工程。完全隔离的 Linux 服务器复制整个目录后运行 `sh deploy-local.sh`,自动解包部署。首次部署必须完整;部分更新保留未选服务和数据卷。每步报告结果,失败返回非零并尝试恢复。前置工具、缓存、版本和恢复流程见[部署说明](../deploy/README.md)。
|
|
162
176
|
|
|
163
|
-
|
|
177
|
+
首次补齐 SSH 连接和认证,密码隐藏输入并保留空格与前导零;完整配置在 `--yes` 下复用。 公共配置保存在 `.env` 和 `.env.<mode>`,连接凭据与 SSH 配置保存在忽略 Git 的 `.env.<mode>.local`,`.env.local` 用于本机共享私有值。构建不读取部署秘密。 所有 `HAI_*` 统一使用:进程 > `.env.<mode>.local` > `.env.local` > `.env.<mode>` > `.env` > YAML。同来源 JSON 为基础,细项继续覆盖;高来源整段替换先清掉低来源细项。Node/Vite 与部署共用 Core 合并,不维护模块专用顺序。
|
|
164
178
|
|
|
165
179
|
部署失败时分别显示本地受管理进程终止确认、远端未知/脚本已完成状态和结果文件路径;本地 SSH 结束不证明远端停止。未知状态先核对服务器,CLI 不自动重跑发布或回滚。Windows 命令使用内嵌的系统 PowerShell/.NET Job,需允许 Add-Type,失败不会裸启动。
|
|
166
180
|
|
|
@@ -180,7 +194,7 @@ Skill 入口保存任务边界,相邻参考按需读取。`hai init` / `hai ad
|
|
|
180
194
|
|
|
181
195
|
UI 模块成套交付 [hai-ui-design](templates/skills/hai-ui-design/SKILL.md)、hai-ui 与 [hai-ui-review](templates/skills/hai-ui-review/SKILL.md);纯 API 模板排除这些前端技能。init/add 保留已有私有入口并补齐缺失参考资源。仓库同职责技能采用同名入口。
|
|
182
196
|
|
|
183
|
-
fullstack 示例按应用配置分离 `admin`、`audit_admin`、`config_admin`、`business_operator` 与基础 `user`,系统管理员不能接管其他职责账号。CLI 沿用 `.env.dev/.env.test/.env.prod`
|
|
197
|
+
fullstack 示例按应用配置分离 `admin`、`audit_admin`、`config_admin`、`business_operator` 与基础 `user`,系统管理员不能接管其他职责账号。CLI 沿用 `.env.dev.local/.env.test.local/.env.prod.local` 的环境配置方式,为每个环境的四类账号分别生成独立随机初始密码;私有配置不提交 Git,同环境通过受保护配置共享,本机私有文件或进程变量可覆盖;已有账号不改密、不重新分配职责。`_iam.yml` 和 `_audit.yml` 按业务启用安全增强,详见生成项目 README。
|
|
184
198
|
|
|
185
199
|
fullstack 的逐项开关、默认值、启用前提与使用影响见[配置化安全使用指南模板](templates/apps/fullstack/docs/security-configuration.md.hbs);新项目会生成 `docs/security-configuration.md`,工程 README 提供入口。
|
|
186
200
|
|
|
@@ -44,7 +44,7 @@ var en_US_default = {
|
|
|
44
44
|
cli_deploy_url: " URL: {url}",
|
|
45
45
|
cli_deploy_id: " ID: {id}",
|
|
46
46
|
cli_deploy_command_failed: "Deploy command failed",
|
|
47
|
-
cli_adminPasswordSaved: " Initial accounts: admin (system), audit_admin (audit), config_admin (business configuration), business_operator (business operations). Independent passwords per account/environment are saved in .env.dev / .env.test / .env.prod: HAI_ADMIN_DEFAULT_PASSWORD, HAI_AUDIT_ADMIN_PASSWORD, HAI_CONFIG_ADMIN_PASSWORD, HAI_BUSINESS_OPERATOR_PASSWORD. Created on first startup; existing passwords are preserved.",
|
|
47
|
+
cli_adminPasswordSaved: " Initial accounts: admin (system), audit_admin (audit), config_admin (business configuration), business_operator (business operations). Independent passwords per account/environment are saved in .env.dev.local / .env.test.local / .env.prod.local: HAI_ADMIN_DEFAULT_PASSWORD, HAI_AUDIT_ADMIN_PASSWORD, HAI_CONFIG_ADMIN_PASSWORD, HAI_BUSINESS_OPERATOR_PASSWORD. Created on first startup; existing passwords are preserved.",
|
|
48
48
|
cli_deploy_environment: "Deployment environment (test / prod / other)",
|
|
49
49
|
cli_deploy_cancelled: "Deployment cancelled.",
|
|
50
50
|
cli_deploy_environment_hint: "Specify --env <environment>; non-interactive calls also require --yes, or use a terminal to select middleware.",
|
|
@@ -155,7 +155,7 @@ var en_US_default = {
|
|
|
155
155
|
cli_help_platform: "Native platform: windows / linux / macos / android / ios",
|
|
156
156
|
cli_help_arch: "Tauri architecture: x64 or arm64",
|
|
157
157
|
cli_help_sqliteMirror: "Trusted SQLite prebuilt binary mirror URL",
|
|
158
|
-
cli_help_noHttpProxy: "
|
|
158
|
+
cli_help_noHttpProxy: "Disable this build proxy (same as --proxy-mode none)",
|
|
159
159
|
cli_help_deploy: "Deploy an application or create an offline bundle",
|
|
160
160
|
cli_help_environment: "Deployment environment, such as test/prod; its environment file must exist",
|
|
161
161
|
cli_help_envDir: "Environment file directory; detected automatically by default",
|
|
@@ -166,7 +166,7 @@ var en_US_default = {
|
|
|
166
166
|
cli_help_deployBuild: "Build selected application images before packaging/deployment; supports --bundle-only",
|
|
167
167
|
cli_help_deployNetwork: "Container network for --build; defaults to the engine setting",
|
|
168
168
|
cli_help_deploySqliteMirror: "SQLite prebuilt mirror for --build",
|
|
169
|
-
cli_help_deployNoProxy: "
|
|
169
|
+
cli_help_deployNoProxy: "Disable this build proxy (same as --proxy-mode none)",
|
|
170
170
|
cli_help_deployRuntime: "Local engine for image builds and middleware exports: auto, podman or docker",
|
|
171
171
|
cli_help_bundleOnly: "Create an offline tar and Windows/Linux/macOS deployment scripts without connecting",
|
|
172
172
|
cli_help_bundleOutput: "Deployment tar path; application version suffix is added automatically",
|
|
@@ -401,7 +401,32 @@ var en_US_default = {
|
|
|
401
401
|
cli_deploy_https_requirements: "Certbot uses HTTP-01: point the domain to the server, expose public port 80 and allow server access to Let\u2019s Encrypt. HTTP will use port 80.",
|
|
402
402
|
cli_deploy_https_terms: "Agree to the Let\u2019s Encrypt terms (https://letsencrypt.org/repository/) and enable automatic renewal?",
|
|
403
403
|
cli_deploy_https_saved: "HTTPS settings saved to the selected private environment. Mode, domain or port changes require a full deployment; certificates are issued or installed on the server during deployment.",
|
|
404
|
-
cli_deploy_stage_https: "Issuing or installing the HTTPS certificate"
|
|
404
|
+
cli_deploy_stage_https: "Issuing or installing the HTTPS certificate",
|
|
405
|
+
cli_help_imageSource: "Image source: official, cn, or custom",
|
|
406
|
+
cli_help_imageMirrors: "Custom mappings: docker.io=host/path,ghcr.io=host/path",
|
|
407
|
+
cli_help_npmSource: "npm source: official, cn, or custom (deploy requires --build)",
|
|
408
|
+
cli_help_npmRegistry: "Custom npm registry HTTP(S) URL",
|
|
409
|
+
cli_help_proxyMode: "Proxy mode: inherit, system, custom, or none",
|
|
410
|
+
cli_help_proxyUrl: "Custom HTTP(S) proxy URL without credentials",
|
|
411
|
+
cli_help_proxyBypass: "Comma-separated proxy bypass hosts/domains",
|
|
412
|
+
cli_download_invalid: "Invalid download source or proxy configuration. Check the source type, URL, and option combinations.",
|
|
413
|
+
cli_download_official: "Official",
|
|
414
|
+
cli_download_cn: "Mainland China (images: 1ms; npm: npmmirror)",
|
|
415
|
+
cli_download_custom: "Custom",
|
|
416
|
+
cli_download_inherit: "Inherit process proxy",
|
|
417
|
+
cli_download_system: "Read static system proxy",
|
|
418
|
+
cli_download_none: "Disable proxy for this build",
|
|
419
|
+
cli_download_choose_image: "Choose an image source (saved as the project default)",
|
|
420
|
+
cli_download_choose_npm: "Choose an npm source (saved as the project default)",
|
|
421
|
+
cli_download_choose_proxy: "Choose a download proxy mode (saved as the project default)",
|
|
422
|
+
cli_download_image_mirrors: "Enter mappings, e.g. docker.io=mirror.example.com/docker.io,ghcr.io=mirror.example.com/ghcr.io",
|
|
423
|
+
cli_download_npm_registry: "Enter the npm registry URL",
|
|
424
|
+
cli_download_proxy_url: "Enter an HTTP(S) proxy URL without credentials",
|
|
425
|
+
cli_download_proxy_unreachable: "Cannot connect to the host proxy. Check its address, port, and service status.",
|
|
426
|
+
cli_download_engine_proxy_configured: "Image pull preflight: Docker reports proxy settings; the actual pull still runs in the engine.",
|
|
427
|
+
cli_download_engine_proxy_local: "Image pull preflight: local Podman can inherit the process proxy; the build container is checked separately.",
|
|
428
|
+
cli_download_engine_proxy_hint: "Image pull preflight: build arguments cannot configure the remote {runtime} engine proxy. Configure Docker Desktop proxies or the Podman Machine/API service. The build container proxy is checked separately.",
|
|
429
|
+
cli_download_template_required: "This Dockerfile does not support the selected source. Update HAI_NODE_IMAGE, HAI_NGINX_IMAGE, and HAI_NPM_REGISTRY from the current template: {path}"
|
|
405
430
|
};
|
|
406
431
|
|
|
407
432
|
// messages/ja-JP.json
|
|
@@ -442,7 +467,7 @@ var ja_JP_default = {
|
|
|
442
467
|
cli_deploy_url: " URL: {url}",
|
|
443
468
|
cli_deploy_id: " ID: {id}",
|
|
444
469
|
cli_deploy_command_failed: "\u30C7\u30D7\u30ED\u30A4\u30B3\u30DE\u30F3\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
445
|
-
cli_adminPasswordSaved: " \u521D\u671F\u30A2\u30AB\u30A6\u30F3\u30C8\uFF1Aadmin\uFF08\u30B7\u30B9\u30C6\u30E0\uFF09\u3001audit_admin\uFF08\u76E3\u67FB\uFF09\u3001config_admin\uFF08\u696D\u52D9\u8A2D\u5B9A\uFF09\u3001business_operator\uFF08\u696D\u52D9\u64CD\u4F5C\uFF09\u3002\u30A2\u30AB\u30A6\u30F3\u30C8\u30FB\u74B0\u5883\u3054\u3068\u306B\u72EC\u7ACB\u3057\u305F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092 .env.dev / .env.test / .env.prod \u306B\u4FDD\u5B58\uFF1AHAI_ADMIN_DEFAULT_PASSWORD\u3001HAI_AUDIT_ADMIN_PASSWORD\u3001HAI_CONFIG_ADMIN_PASSWORD\u3001HAI_BUSINESS_OPERATOR_PASSWORD\u3002\u521D\u56DE\u8D77\u52D5\u6642\u306B\u4F5C\u6210\u3057\u3001\u65E2\u5B58\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002",
|
|
470
|
+
cli_adminPasswordSaved: " \u521D\u671F\u30A2\u30AB\u30A6\u30F3\u30C8\uFF1Aadmin\uFF08\u30B7\u30B9\u30C6\u30E0\uFF09\u3001audit_admin\uFF08\u76E3\u67FB\uFF09\u3001config_admin\uFF08\u696D\u52D9\u8A2D\u5B9A\uFF09\u3001business_operator\uFF08\u696D\u52D9\u64CD\u4F5C\uFF09\u3002\u30A2\u30AB\u30A6\u30F3\u30C8\u30FB\u74B0\u5883\u3054\u3068\u306B\u72EC\u7ACB\u3057\u305F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092 .env.dev.local / .env.test.local / .env.prod.local \u306B\u4FDD\u5B58\uFF1AHAI_ADMIN_DEFAULT_PASSWORD\u3001HAI_AUDIT_ADMIN_PASSWORD\u3001HAI_CONFIG_ADMIN_PASSWORD\u3001HAI_BUSINESS_OPERATOR_PASSWORD\u3002\u521D\u56DE\u8D77\u52D5\u6642\u306B\u4F5C\u6210\u3057\u3001\u65E2\u5B58\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002",
|
|
446
471
|
cli_deploy_environment: "\u30C7\u30D7\u30ED\u30A4\u74B0\u5883\uFF08test / prod / \u305D\u306E\u4ED6\uFF09",
|
|
447
472
|
cli_deploy_cancelled: "\u30C7\u30D7\u30ED\u30A4\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F\u3002",
|
|
448
473
|
cli_deploy_environment_hint: "--env <environment>\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u975E\u5BFE\u8A71\u5B9F\u884C\u306B\u306F--yes\u3082\u5FC5\u8981\u3067\u3059\u3002\u30DF\u30C9\u30EB\u30A6\u30A7\u30A2\u3092\u9078\u629E\u3059\u308B\u5834\u5408\u306F\u30BF\u30FC\u30DF\u30CA\u30EB\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
@@ -553,7 +578,7 @@ var ja_JP_default = {
|
|
|
553
578
|
cli_help_platform: "\u30CD\u30A4\u30C6\u30A3\u30D6: windows / linux / macos / android / ios",
|
|
554
579
|
cli_help_arch: "Tauri \u306E\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3\uFF1Ax64\u3001arm64",
|
|
555
580
|
cli_help_sqliteMirror: "\u4FE1\u983C\u3067\u304D\u308B SQLite \u30D7\u30EC\u30D3\u30EB\u30C9\u30D0\u30A4\u30CA\u30EA\u30FC\u306E\u30DF\u30E9\u30FC URL",
|
|
556
|
-
cli_help_noHttpProxy: "\
|
|
581
|
+
cli_help_noHttpProxy: "\u4ECA\u56DE\u306E\u30D3\u30EB\u30C9\u306E\u30D7\u30ED\u30AD\u30B7\u3092\u7121\u52B9\u5316\uFF08--proxy-mode none \u3068\u540C\u3058\uFF09",
|
|
557
582
|
cli_help_deploy: "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u30C7\u30D7\u30ED\u30A4\u3001\u307E\u305F\u306F\u30AA\u30D5\u30E9\u30A4\u30F3\u30D0\u30F3\u30C9\u30EB\u3092\u4F5C\u6210",
|
|
558
583
|
cli_help_environment: "\u30C7\u30D7\u30ED\u30A4\u74B0\u5883\uFF08test/prod \u306A\u3069\uFF09\u3002\u5BFE\u5FDC\u3059\u308B\u74B0\u5883\u30D5\u30A1\u30A4\u30EB\u304C\u5FC5\u8981\u3067\u3059",
|
|
559
584
|
cli_help_envDir: "\u74B0\u5883\u30D5\u30A1\u30A4\u30EB\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3002\u65E2\u5B9A\u3067\u306F\u81EA\u52D5\u691C\u51FA",
|
|
@@ -564,7 +589,7 @@ var ja_JP_default = {
|
|
|
564
589
|
cli_help_deployBuild: "\u30D1\u30C3\u30B1\u30FC\u30B8\u5316\u3084\u30C7\u30D7\u30ED\u30A4\u306E\u524D\u306B\u9078\u629E\u3057\u305F\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30A4\u30E1\u30FC\u30B8\u3092\u30D3\u30EB\u30C9\u3002--bundle-only \u3068\u4F75\u7528\u53EF\u80FD",
|
|
565
590
|
cli_help_deployNetwork: "--build \u306E\u30B3\u30F3\u30C6\u30CA\u30FC\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3002\u65E2\u5B9A\u3067\u306F\u30A8\u30F3\u30B8\u30F3\u8A2D\u5B9A\u3092\u4F7F\u7528",
|
|
566
591
|
cli_help_deploySqliteMirror: "--build \u7528\u306E SQLite \u30D7\u30EC\u30D3\u30EB\u30C9\u30DF\u30E9\u30FC",
|
|
567
|
-
cli_help_deployNoProxy: "\
|
|
592
|
+
cli_help_deployNoProxy: "\u4ECA\u56DE\u306E\u30D3\u30EB\u30C9\u306E\u30D7\u30ED\u30AD\u30B7\u3092\u7121\u52B9\u5316\uFF08--proxy-mode none \u3068\u540C\u3058\uFF09",
|
|
568
593
|
cli_help_deployRuntime: "\u30A4\u30E1\u30FC\u30B8\u30D3\u30EB\u30C9\u3068\u30DF\u30C9\u30EB\u30A6\u30A7\u30A2\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u7528\u30ED\u30FC\u30AB\u30EB\u30A8\u30F3\u30B8\u30F3\uFF1Aauto\u3001podman\u3001docker",
|
|
569
594
|
cli_help_bundleOnly: "\u63A5\u7D9A\u305B\u305A\u306B\u30AA\u30D5\u30E9\u30A4\u30F3 tar \u3068 Windows/Linux/macOS \u7528\u30C7\u30D7\u30ED\u30A4\u30B9\u30AF\u30EA\u30D7\u30C8\u3092\u4F5C\u6210",
|
|
570
595
|
cli_help_bundleOutput: "\u30C7\u30D7\u30ED\u30A4 tar \u306E\u51FA\u529B\u5148\u3002\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u81EA\u52D5\u3067\u4ED8\u52A0",
|
|
@@ -799,7 +824,32 @@ var ja_JP_default = {
|
|
|
799
824
|
cli_deploy_https_requirements: "Certbot \u306F HTTP-01 \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u30C9\u30E1\u30A4\u30F3\u3092\u30B5\u30FC\u30D0\u30FC\u306B\u5411\u3051\u3001\u516C\u958B\u30DD\u30FC\u30C8 80 \u3068 Let\u2019s Encrypt \u3078\u306E\u63A5\u7D9A\u3092\u78BA\u4FDD\u3057\u3066\u304F\u3060\u3055\u3044\u3002HTTP \u30DD\u30FC\u30C8\u3092 80 \u306B\u8A2D\u5B9A\u3057\u307E\u3059\u3002",
|
|
800
825
|
cli_deploy_https_terms: "Let\u2019s Encrypt \u5229\u7528\u898F\u7D04\uFF08https://letsencrypt.org/repository/\uFF09\u306B\u540C\u610F\u3057\u3001\u81EA\u52D5\u66F4\u65B0\u3092\u6709\u52B9\u306B\u3057\u307E\u3059\u304B\uFF1F",
|
|
801
826
|
cli_deploy_https_saved: "\u9078\u629E\u3057\u305F\u74B0\u5883\u306E\u975E\u516C\u958B\u30D5\u30A1\u30A4\u30EB\u3078 HTTPS \u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u3002\u30E2\u30FC\u30C9\u30FB\u30C9\u30E1\u30A4\u30F3\u30FB\u30DD\u30FC\u30C8\u5909\u66F4\u306F\u5168\u91CF\u914D\u5099\u304C\u5FC5\u8981\u3067\u3001\u8A3C\u660E\u66F8\u306F\u30B5\u30FC\u30D0\u30FC\u914D\u5099\u6642\u306B\u7533\u8ACB\u307E\u305F\u306F\u8A2D\u7F6E\u3057\u307E\u3059\u3002",
|
|
802
|
-
cli_deploy_stage_https: "HTTPS \u8A3C\u660E\u66F8\u3092\u767A\u884C\u307E\u305F\u306F\u914D\u7F6E\u3057\u3066\u3044\u307E\u3059"
|
|
827
|
+
cli_deploy_stage_https: "HTTPS \u8A3C\u660E\u66F8\u3092\u767A\u884C\u307E\u305F\u306F\u914D\u7F6E\u3057\u3066\u3044\u307E\u3059",
|
|
828
|
+
cli_help_imageSource: "\u30A4\u30E1\u30FC\u30B8\u53D6\u5F97\u5143\uFF1Aofficial\u3001cn\u3001custom",
|
|
829
|
+
cli_help_imageMirrors: "\u30AB\u30B9\u30BF\u30E0\u5BFE\u5FDC\u8868\uFF1Adocker.io=host/path,ghcr.io=host/path",
|
|
830
|
+
cli_help_npmSource: "npm \u53D6\u5F97\u5143\uFF1Aofficial\u3001cn\u3001custom\uFF08deploy \u306F --build \u304C\u5FC5\u8981\uFF09",
|
|
831
|
+
cli_help_npmRegistry: "\u30AB\u30B9\u30BF\u30E0 npm registry \u306E HTTP(S) URL",
|
|
832
|
+
cli_help_proxyMode: "\u30D7\u30ED\u30AD\u30B7\u65B9\u5F0F\uFF1Ainherit\u3001system\u3001custom\u3001none",
|
|
833
|
+
cli_help_proxyUrl: "\u8A8D\u8A3C\u60C5\u5831\u3092\u542B\u307E\u306A\u3044\u30AB\u30B9\u30BF\u30E0 HTTP(S) \u30D7\u30ED\u30AD\u30B7 URL",
|
|
834
|
+
cli_help_proxyBypass: "\u30D7\u30ED\u30AD\u30B7\u3092\u4F7F\u7528\u3057\u306A\u3044\u30DB\u30B9\u30C8\uFF0F\u30C9\u30E1\u30A4\u30F3\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09",
|
|
835
|
+
cli_download_invalid: "\u53D6\u5F97\u5143\u307E\u305F\u306F\u30D7\u30ED\u30AD\u30B7\u8A2D\u5B9A\u304C\u7121\u52B9\u3067\u3059\u3002\u7A2E\u985E\u3001URL\u3001\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u7D44\u307F\u5408\u308F\u305B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
836
|
+
cli_download_official: "\u516C\u5F0F",
|
|
837
|
+
cli_download_cn: "\u4E2D\u56FD\u672C\u571F\uFF08\u30A4\u30E1\u30FC\u30B8\uFF1A\u6BEB\u79D2\u955C\u50CF\u3001npm\uFF1Anpmmirror\uFF09",
|
|
838
|
+
cli_download_custom: "\u30AB\u30B9\u30BF\u30E0",
|
|
839
|
+
cli_download_inherit: "\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30AD\u30B7\u3092\u7D99\u627F",
|
|
840
|
+
cli_download_system: "\u30B7\u30B9\u30C6\u30E0\u306E\u9759\u7684\u30D7\u30ED\u30AD\u30B7\u3092\u4F7F\u7528",
|
|
841
|
+
cli_download_none: "\u4ECA\u56DE\u306E\u30D3\u30EB\u30C9\u3067\u30D7\u30ED\u30AD\u30B7\u3092\u7121\u52B9\u5316",
|
|
842
|
+
cli_download_choose_image: "\u30A4\u30E1\u30FC\u30B8\u53D6\u5F97\u5143\u3092\u9078\u629E\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u65E2\u5B9A\u5024\u3068\u3057\u3066\u4FDD\u5B58\uFF09",
|
|
843
|
+
cli_download_choose_npm: "npm \u53D6\u5F97\u5143\u3092\u9078\u629E\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u65E2\u5B9A\u5024\u3068\u3057\u3066\u4FDD\u5B58\uFF09",
|
|
844
|
+
cli_download_choose_proxy: "\u53D6\u5F97\u7528\u30D7\u30ED\u30AD\u30B7\u65B9\u5F0F\u3092\u9078\u629E\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u65E2\u5B9A\u5024\u3068\u3057\u3066\u4FDD\u5B58\uFF09",
|
|
845
|
+
cli_download_image_mirrors: "\u5BFE\u5FDC\u8868\u3092\u5165\u529B\uFF08\u4F8B\uFF1Adocker.io=mirror.example.com/docker.io,ghcr.io=mirror.example.com/ghcr.io\uFF09",
|
|
846
|
+
cli_download_npm_registry: "npm registry URL \u3092\u5165\u529B",
|
|
847
|
+
cli_download_proxy_url: "\u8A8D\u8A3C\u60C5\u5831\u3092\u542B\u307E\u306A\u3044 HTTP(S) \u30D7\u30ED\u30AD\u30B7 URL \u3092\u5165\u529B",
|
|
848
|
+
cli_download_proxy_unreachable: "\u30DB\u30B9\u30C8\u306E\u30D7\u30ED\u30AD\u30B7\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002\u30A2\u30C9\u30EC\u30B9\u3001\u30DD\u30FC\u30C8\u3001\u7A3C\u50CD\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
849
|
+
cli_download_engine_proxy_configured: "\u30A4\u30E1\u30FC\u30B8\u53D6\u5F97\u306E\u4E8B\u524D\u78BA\u8A8D\uFF1ADocker \u306E\u30D7\u30ED\u30AD\u30B7\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u307E\u3057\u305F\u3002\u5B9F\u969B\u306E\u53D6\u5F97\u306F\u30A8\u30F3\u30B8\u30F3\u3067\u5B9F\u884C\u3055\u308C\u307E\u3059\u3002",
|
|
850
|
+
cli_download_engine_proxy_local: "\u30A4\u30E1\u30FC\u30B8\u53D6\u5F97\u306E\u4E8B\u524D\u78BA\u8A8D\uFF1A\u30ED\u30FC\u30AB\u30EB Podman \u306F\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30AD\u30B7\u3092\u7D99\u627F\u3067\u304D\u307E\u3059\u3002\u30D3\u30EB\u30C9\u30B3\u30F3\u30C6\u30CA\u306F\u5225\u9014\u78BA\u8A8D\u3057\u307E\u3059\u3002",
|
|
851
|
+
cli_download_engine_proxy_hint: "\u30A4\u30E1\u30FC\u30B8\u53D6\u5F97\u306E\u4E8B\u524D\u78BA\u8A8D\uFF1A\u30D3\u30EB\u30C9\u5F15\u6570\u3067\u306F\u30EA\u30E2\u30FC\u30C8 {runtime} \u30A8\u30F3\u30B8\u30F3\u306E\u30D7\u30ED\u30AD\u30B7\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002Docker Desktop \u307E\u305F\u306F Podman Machine/API \u30B5\u30FC\u30D3\u30B9\u3067\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30D3\u30EB\u30C9\u30B3\u30F3\u30C6\u30CA\u306E\u30D7\u30ED\u30AD\u30B7\u306F\u5225\u9014\u78BA\u8A8D\u3057\u307E\u3059\u3002",
|
|
852
|
+
cli_download_template_required: "Dockerfile \u304C\u9078\u629E\u3057\u305F\u53D6\u5F97\u5143\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u73FE\u884C\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E HAI_NODE_IMAGE\u3001HAI_NGINX_IMAGE\u3001HAI_NPM_REGISTRY \u3092\u53CD\u6620\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A{path}"
|
|
803
853
|
};
|
|
804
854
|
|
|
805
855
|
// messages/zh-CN.json
|
|
@@ -840,7 +890,7 @@ var zh_CN_default = {
|
|
|
840
890
|
cli_deploy_url: " \u5730\u5740\uFF1A{url}",
|
|
841
891
|
cli_deploy_id: " \u6807\u8BC6\uFF1A{id}",
|
|
842
892
|
cli_deploy_command_failed: "\u90E8\u7F72\u547D\u4EE4\u5931\u8D25",
|
|
843
|
-
cli_adminPasswordSaved: " \u521D\u59CB\u8D26\u53F7\uFF1Aadmin\uFF08\u7CFB\u7EDF\uFF09\u3001audit_admin\uFF08\u5BA1\u8BA1\uFF09\u3001config_admin\uFF08\u4E1A\u52A1\u914D\u7F6E\uFF09\u3001business_operator\uFF08\u4E1A\u52A1\u64CD\u4F5C\uFF09\u3002\u5404\u8D26\u53F7\u3001\u5404\u73AF\u5883\u5BC6\u7801\u72EC\u7ACB\uFF0C\u4F4D\u4E8E .env.dev / .env.test / .env.prod\uFF1AHAI_ADMIN_DEFAULT_PASSWORD\u3001HAI_AUDIT_ADMIN_PASSWORD\u3001HAI_CONFIG_ADMIN_PASSWORD\u3001HAI_BUSINESS_OPERATOR_PASSWORD\u3002\u9996\u6B21\u542F\u52A8\u521B\u5EFA\uFF1B\u5DF2\u6709\u8D26\u53F7\u4E0D\u91CD\u8BBE\u5BC6\u7801\u3002",
|
|
893
|
+
cli_adminPasswordSaved: " \u521D\u59CB\u8D26\u53F7\uFF1Aadmin\uFF08\u7CFB\u7EDF\uFF09\u3001audit_admin\uFF08\u5BA1\u8BA1\uFF09\u3001config_admin\uFF08\u4E1A\u52A1\u914D\u7F6E\uFF09\u3001business_operator\uFF08\u4E1A\u52A1\u64CD\u4F5C\uFF09\u3002\u5404\u8D26\u53F7\u3001\u5404\u73AF\u5883\u5BC6\u7801\u72EC\u7ACB\uFF0C\u4F4D\u4E8E .env.dev.local / .env.test.local / .env.prod.local\uFF1AHAI_ADMIN_DEFAULT_PASSWORD\u3001HAI_AUDIT_ADMIN_PASSWORD\u3001HAI_CONFIG_ADMIN_PASSWORD\u3001HAI_BUSINESS_OPERATOR_PASSWORD\u3002\u9996\u6B21\u542F\u52A8\u521B\u5EFA\uFF1B\u5DF2\u6709\u8D26\u53F7\u4E0D\u91CD\u8BBE\u5BC6\u7801\u3002",
|
|
844
894
|
cli_deploy_environment: "\u8BF7\u8F93\u5165\u90E8\u7F72\u73AF\u5883\uFF08test / prod \u7B49\uFF09",
|
|
845
895
|
cli_deploy_cancelled: "\u90E8\u7F72\u5DF2\u53D6\u6D88\u3002",
|
|
846
896
|
cli_deploy_environment_hint: "\u8BF7\u6307\u5B9A --env <\u73AF\u5883>\uFF1B\u975E\u4EA4\u4E92\u8C03\u7528\u8FD8\u9700 --yes\uFF0C\u6216\u5728\u4EA4\u4E92\u7EC8\u7AEF\u9010\u9879\u9009\u62E9\u4E2D\u95F4\u4EF6\u3002",
|
|
@@ -951,7 +1001,7 @@ var zh_CN_default = {
|
|
|
951
1001
|
cli_help_platform: "\u539F\u751F\u5E73\u53F0\uFF1Awindows / linux / macos / android / ios",
|
|
952
1002
|
cli_help_arch: "Tauri \u76EE\u6807\u67B6\u6784\uFF1Ax64 / arm64",
|
|
953
1003
|
cli_help_sqliteMirror: "SQLite \u9884\u7F16\u8BD1\u4E8C\u8FDB\u5236\u955C\u50CF\u6839\u5730\u5740",
|
|
954
|
-
cli_help_noHttpProxy: "
|
|
1004
|
+
cli_help_noHttpProxy: "\u7981\u7528\u672C\u6B21\u6784\u5EFA\u4EE3\u7406\uFF08\u7B49\u4EF7 --proxy-mode none\uFF09",
|
|
955
1005
|
cli_help_deploy: "\u90E8\u7F72\u5E94\u7528\u6216\u751F\u6210\u79BB\u7EBF\u4EA4\u4ED8\u5305",
|
|
956
1006
|
cli_help_environment: "\u90E8\u7F72\u73AF\u5883\uFF08test / prod \u7B49\uFF0C\u5FC5\u987B\u5B58\u5728\u5BF9\u5E94\u73AF\u5883\u6587\u4EF6\uFF09",
|
|
957
1007
|
cli_help_envDir: "\u73AF\u5883\u6587\u4EF6\u6240\u5728\u76EE\u5F55\uFF08\u9ED8\u8BA4\u81EA\u52A8\u67E5\u627E\uFF09",
|
|
@@ -962,7 +1012,7 @@ var zh_CN_default = {
|
|
|
962
1012
|
cli_help_deployBuild: "\u5148\u6784\u5EFA\u6240\u9009\u5E94\u7528\u955C\u50CF\uFF0C\u518D\u6253\u5305\u90E8\u7F72\uFF1B\u53EF\u4E0E --bundle-only \u4E00\u8D77\u4F7F\u7528",
|
|
963
1013
|
cli_help_deployNetwork: "\u4E00\u4F53\u5316\u6784\u5EFA\u4F7F\u7528\u7684\u5BB9\u5668\u7F51\u7EDC\uFF08\u9ED8\u8BA4\u5F15\u64CE\u8BBE\u7F6E\uFF09",
|
|
964
1014
|
cli_help_deploySqliteMirror: "\u4E00\u4F53\u5316\u6784\u5EFA\u4F7F\u7528\u7684 SQLite \u9884\u7F16\u8BD1\u5305\u955C\u50CF\u5730\u5740",
|
|
965
|
-
cli_help_deployNoProxy: "\
|
|
1015
|
+
cli_help_deployNoProxy: "\u7981\u7528\u672C\u6B21\u6784\u5EFA\u4EE3\u7406\uFF08\u7B49\u4EF7 --proxy-mode none\uFF09",
|
|
966
1016
|
cli_help_deployRuntime: "\u672C\u5730\u955C\u50CF\u6784\u5EFA\u548C\u4E2D\u95F4\u4EF6\u5BFC\u51FA\u5F15\u64CE\uFF1Aauto / podman / docker",
|
|
967
1017
|
cli_help_bundleOnly: "\u53EA\u751F\u6210\u79BB\u7EBF tar \u4E0E Windows/Linux/macOS \u90E8\u7F72\u811A\u672C\uFF1B\u4E0D\u8FDE\u63A5\u670D\u52A1\u5668",
|
|
968
1018
|
cli_help_bundleOutput: "\u90E8\u7F72 tar \u8F93\u51FA\u8DEF\u5F84\uFF0C\u81EA\u52A8\u8865\u5E94\u7528\u7248\u672C\u540E\u7F00",
|
|
@@ -1197,7 +1247,32 @@ var zh_CN_default = {
|
|
|
1197
1247
|
cli_deploy_https_requirements: "Certbot \u4F7F\u7528 HTTP-01\uFF1A\u57DF\u540D\u987B\u6307\u5411\u670D\u52A1\u5668\uFF0C\u516C\u7F51 80 \u7AEF\u53E3\u53EF\u8FBE\uFF0C\u670D\u52A1\u5668\u987B\u80FD\u8BBF\u95EE Let\u2019s Encrypt\u3002HTTP \u5165\u53E3\u5C06\u8BBE\u4E3A 80\u3002",
|
|
1198
1248
|
cli_deploy_https_terms: "\u540C\u610F Let\u2019s Encrypt \u670D\u52A1\u6761\u6B3E\uFF08https://letsencrypt.org/repository/\uFF09\u5E76\u542F\u7528\u81EA\u52A8\u7EED\u671F\uFF1F",
|
|
1199
1249
|
cli_deploy_https_saved: "HTTPS \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230\u6240\u9009\u73AF\u5883\u79C1\u6709\u6587\u4EF6\uFF1B\u6A21\u5F0F\u3001\u57DF\u540D\u6216\u7AEF\u53E3\u53D8\u66F4\u987B\u5168\u91CF\u90E8\u7F72\uFF0C\u8BC1\u4E66\u5728\u670D\u52A1\u5668\u90E8\u7F72\u65F6\u7533\u8BF7\u6216\u5B89\u88C5\u3002",
|
|
1200
|
-
cli_deploy_stage_https: "\u6B63\u5728\u7533\u8BF7\u6216\u5B89\u88C5 HTTPS \u8BC1\u4E66"
|
|
1250
|
+
cli_deploy_stage_https: "\u6B63\u5728\u7533\u8BF7\u6216\u5B89\u88C5 HTTPS \u8BC1\u4E66",
|
|
1251
|
+
cli_help_imageSource: "\u955C\u50CF\u4E0B\u8F7D\u6E90\uFF1Aofficial\u3001cn \u6216 custom",
|
|
1252
|
+
cli_help_imageMirrors: "\u81EA\u5B9A\u4E49\u955C\u50CF\u6620\u5C04\uFF1Adocker.io=\u4E3B\u673A/\u8DEF\u5F84,ghcr.io=\u4E3B\u673A/\u8DEF\u5F84",
|
|
1253
|
+
cli_help_npmSource: "npm \u4E0B\u8F7D\u6E90\uFF1Aofficial\u3001cn \u6216 custom\uFF08\u90E8\u7F72\u65F6\u9700 --build\uFF09",
|
|
1254
|
+
cli_help_npmRegistry: "\u81EA\u5B9A\u4E49 npm registry \u7684 HTTP(S) \u5730\u5740",
|
|
1255
|
+
cli_help_proxyMode: "\u4EE3\u7406\u6A21\u5F0F\uFF1Ainherit\u3001system\u3001custom \u6216 none",
|
|
1256
|
+
cli_help_proxyUrl: "\u81EA\u5B9A\u4E49 HTTP(S) \u4EE3\u7406\u5730\u5740\uFF0C\u4E0D\u542B\u8BA4\u8BC1\u4FE1\u606F",
|
|
1257
|
+
cli_help_proxyBypass: "\u9017\u53F7\u5206\u9694\u7684\u4EE3\u7406\u7ED5\u8FC7\u4E3B\u673A/\u57DF\u540D",
|
|
1258
|
+
cli_download_invalid: "\u4E0B\u8F7D\u6E90\u6216\u4EE3\u7406\u914D\u7F6E\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u6E90\u7C7B\u578B\u3001\u5730\u5740\u548C\u53C2\u6570\u7EC4\u5408\u3002",
|
|
1259
|
+
cli_download_official: "\u5B98\u65B9",
|
|
1260
|
+
cli_download_cn: "\u4E2D\u56FD\u5927\u9646\uFF08\u955C\u50CF\uFF1A\u6BEB\u79D2\u955C\u50CF\uFF1Bnpm\uFF1Anpmmirror\uFF09",
|
|
1261
|
+
cli_download_custom: "\u81EA\u5B9A\u4E49",
|
|
1262
|
+
cli_download_inherit: "\u7EE7\u627F\u5F53\u524D\u8FDB\u7A0B\u4EE3\u7406",
|
|
1263
|
+
cli_download_system: "\u8BFB\u53D6\u7CFB\u7EDF\u9759\u6001\u4EE3\u7406",
|
|
1264
|
+
cli_download_none: "\u7981\u7528\u672C\u6B21\u6784\u5EFA\u4EE3\u7406",
|
|
1265
|
+
cli_download_choose_image: "\u9009\u62E9\u955C\u50CF\u4E0B\u8F7D\u6E90\uFF08\u4FDD\u5B58\u4E3A\u9879\u76EE\u9ED8\u8BA4\uFF09",
|
|
1266
|
+
cli_download_choose_npm: "\u9009\u62E9 npm \u4E0B\u8F7D\u6E90\uFF08\u4FDD\u5B58\u4E3A\u9879\u76EE\u9ED8\u8BA4\uFF09",
|
|
1267
|
+
cli_download_choose_proxy: "\u9009\u62E9\u4E0B\u8F7D\u4EE3\u7406\u6A21\u5F0F\uFF08\u4FDD\u5B58\u4E3A\u9879\u76EE\u9ED8\u8BA4\uFF09",
|
|
1268
|
+
cli_download_image_mirrors: "\u8F93\u5165\u4ED3\u5E93\u6620\u5C04\uFF0C\u5982 docker.io=mirror.example.com/docker.io,ghcr.io=mirror.example.com/ghcr.io",
|
|
1269
|
+
cli_download_npm_registry: "\u8F93\u5165 npm registry \u5730\u5740",
|
|
1270
|
+
cli_download_proxy_url: "\u8F93\u5165\u65E0\u8BA4\u8BC1\u7684 HTTP(S) \u4EE3\u7406\u5730\u5740",
|
|
1271
|
+
cli_download_proxy_unreachable: "\u65E0\u6CD5\u8FDE\u63A5\u672C\u673A\u4EE3\u7406\uFF0C\u8BF7\u68C0\u67E5\u4EE3\u7406\u5730\u5740\u3001\u7AEF\u53E3\u548C\u670D\u52A1\u72B6\u6001\u3002",
|
|
1272
|
+
cli_download_engine_proxy_configured: "\u955C\u50CF\u62C9\u53D6\u9884\u68C0\uFF1ADocker \u5F15\u64CE\u5DF2\u62A5\u544A\u4EE3\u7406\u914D\u7F6E\uFF1B\u5B9E\u9645\u62C9\u53D6\u7ED3\u679C\u4ECD\u4EE5\u5F15\u64CE\u6267\u884C\u4E3A\u51C6\u3002",
|
|
1273
|
+
cli_download_engine_proxy_local: "\u955C\u50CF\u62C9\u53D6\u9884\u68C0\uFF1A\u672C\u5730 Podman \u5B50\u8FDB\u7A0B\u53EF\u7EE7\u627F\u8FDB\u7A0B\u4EE3\u7406\uFF1B\u6784\u5EFA\u5BB9\u5668\u4EE3\u7406\u5355\u72EC\u68C0\u67E5\u3002",
|
|
1274
|
+
cli_download_engine_proxy_hint: "\u955C\u50CF\u62C9\u53D6\u9884\u68C0\uFF1A{runtime} \u7684\u8FDC\u7A0B\u5F15\u64CE\u4EE3\u7406\u65E0\u6CD5\u7531\u6784\u5EFA\u53C2\u6570\u8BBE\u7F6E\u3002\u8BF7\u5728 Docker Desktop \u4EE3\u7406\u8BBE\u7F6E\u6216 Podman Machine/API \u670D\u52A1\u4E2D\u914D\u7F6E\uFF1B\u6784\u5EFA\u5BB9\u5668\u4EE3\u7406\u5C06\u5355\u72EC\u68C0\u67E5\u3002",
|
|
1275
|
+
cli_download_template_required: "Dockerfile \u5C1A\u672A\u652F\u6301\u6240\u9009\u4E0B\u8F7D\u6E90\uFF0C\u8BF7\u540C\u6B65\u65B0\u7248\u6A21\u677F\u4E2D\u7684 HAI_NODE_IMAGE\u3001HAI_NGINX_IMAGE \u548C HAI_NPM_REGISTRY \u53C2\u6570\uFF1A{path}"
|
|
1201
1276
|
};
|
|
1202
1277
|
|
|
1203
1278
|
// src/cli-i18n.ts
|
|
@@ -1505,5 +1580,5 @@ async function generateProjectAiSupport(projectPath, skillNames, options = {}) {
|
|
|
1505
1580
|
}
|
|
1506
1581
|
|
|
1507
1582
|
export { cliM, generateModuleSkillFile, generateProjectAiSupport, generateSkillFiles, resolveCompatibleSkillNames, resolveSkillNamesForPackages };
|
|
1508
|
-
//# sourceMappingURL=chunk-
|
|
1509
|
-
//# sourceMappingURL=chunk-
|
|
1583
|
+
//# sourceMappingURL=chunk-7DNIMG2H.js.map
|
|
1584
|
+
//# sourceMappingURL=chunk-7DNIMG2H.js.map
|