@h-ai/cli 0.1.0-alpha.57 → 0.1.0-alpha.58
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 +37 -3
- package/README.ja.md +37 -3
- package/README.md +37 -3
- package/dist/chunk-2H7UOFLK.js +0 -0
- package/dist/{chunk-MJGUBOAV.js → chunk-F4IBPVZ5.js} +6 -42
- package/dist/chunk-F4IBPVZ5.js.map +1 -0
- package/dist/{chunk-O3ANVICQ.js → chunk-WUSFJFW5.js} +13 -7
- package/dist/chunk-WUSFJFW5.js.map +1 -0
- package/dist/cli-config-templates-6XA7V6CC.js +5 -0
- package/dist/{cli-config-templates-OWBEGBZQ.js.map → cli-config-templates-6XA7V6CC.js.map} +1 -1
- package/dist/{cli-skill-templates-ZYXES3NT.js → cli-skill-templates-45CK4RQ2.js} +3 -3
- package/dist/{cli-skill-templates-ZYXES3NT.js.map → cli-skill-templates-45CK4RQ2.js.map} +1 -1
- package/dist/index.js +107 -61
- package/dist/index.js.map +1 -1
- package/dist/{src-TBIET7YU.js → src-DUGLX4YB.js} +7270 -2119
- package/dist/src-DUGLX4YB.js.map +1 -0
- package/package.json +17 -17
- package/templates/README.md +4 -4
- package/templates/apps/admin/src/routes/+layout.svelte.hbs +7 -0
- package/templates/apps/admin/src/routes/+page.svelte.hbs +5 -4
- package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +2 -2
- package/templates/apps/api/.npmrc.hbs +1 -2
- package/templates/apps/api/Dockerfile.hbs +6 -5
- package/templates/apps/api/apps/{{projectName}}-contract/package.json.hbs +1 -1
- package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +2 -0
- package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +1 -1
- package/templates/apps/api/apps/{{projectName}}-service/config/_core.yml.hbs +8 -0
- package/templates/apps/api/apps/{{projectName}}-service/package.json.hbs +1 -1
- package/templates/apps/api/apps/{{projectName}}-service/src/app.ts.hbs +7 -8
- package/templates/apps/api/apps/{{projectName}}-service/src/index.ts.hbs +4 -3
- package/templates/apps/api/apps/{{projectName}}-service/src/lib/server/init.ts.hbs +0 -1
- package/templates/apps/api/apps/{{projectName}}-service/src/server/procedures/app-procedures.ts.hbs +4 -0
- package/templates/apps/api/apps/{{projectName}}-service/tests/service.test.ts.hbs +3 -1
- package/templates/apps/api/e2e/api-service.spec.ts.hbs +3 -1
- package/templates/apps/api/package.json.hbs +2 -2
- package/templates/apps/api/pnpm-workspace.yaml.hbs +26 -0
- package/templates/apps/api/tsconfig.base.json +0 -1
- package/templates/apps/fullstack/.dockerignore.hbs +3 -0
- package/templates/apps/fullstack/.npmrc.hbs +1 -2
- package/templates/apps/fullstack/Dockerfile.hbs +6 -5
- package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +7 -2
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/en-US.json.hbs +1 -34
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/zh-CN.json.hbs +1 -34
- package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +30 -170
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.d.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +6 -5
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/main.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +48 -22
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +3 -1
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/index.html.hbs +6 -1
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/en-US.json.hbs +1 -28
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/zh-CN.json.hbs +1 -28
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +5 -4
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +10 -141
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/Cargo.toml.hbs +5 -5
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +3 -3
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +21 -2
- package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-web/index.html.hbs +6 -1
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/en-US.json.hbs +1 -28
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/zh-CN.json.hbs +1 -28
- package/templates/apps/fullstack/apps/{{projectName}}-web/package.json.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/App.svelte.hbs +5 -143
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.d.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +48 -22
- package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +206 -16
- package/templates/apps/fullstack/package.json.hbs +2 -2
- package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +2 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/package.json.hbs +1 -1
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-contract.ts.hbs +66 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +96 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/app-schemas.ts.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/index.ts.hbs +3 -1
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +5 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/tests/contract.test.ts.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/tsup.config.ts.hbs +1 -1
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +13 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_audit.yml.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_cache.yml.hbs +2 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +10 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_db.yml.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_iam.yml.hbs +21 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +10 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_storage.yml.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +10 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +63 -28
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +26 -11
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +276 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/messages.ts.hbs +29 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +94 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +6 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +5 -1
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +98 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +446 -33
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/runtime.test.ts.hbs +48 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tsup.config.ts.hbs +1 -1
- package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +19 -26
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/en-US.json.hbs +78 -15
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/zh-CN.json.hbs +78 -15
- package/templates/apps/fullstack/packages/{{projectName}}-shared/package.json.hbs +4 -1
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/index.ts.hbs +3 -4
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +53 -27
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AdminWorkspace.svelte.hbs +73 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +55 -45
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AuditManagement.svelte.hbs +61 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/ProfileSettings.svelte.hbs +57 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/RoleManagement.svelte.hbs +49 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/UserManagement.svelte.hbs +174 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/management-store.svelte.ts.hbs +399 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/theme-store.svelte.ts.hbs +7 -39
- package/templates/apps/fullstack/packages/{{projectName}}-shared/svelte.config.js.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +151 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/management-store.test.ts.hbs +101 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/vitest.config.ts.hbs +7 -0
- package/templates/apps/fullstack/playwright.config.ts.hbs +6 -0
- package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +24 -0
- package/templates/apps/fullstack/tsconfig.base.json +0 -1
- package/templates/apps/h5/src/routes/+layout.svelte.hbs +4 -0
- package/templates/apps/h5/src/routes/+page.svelte.hbs +3 -2
- package/templates/apps/mobile-app/index.html.hbs +2 -2
- package/templates/apps/mobile-app/src/App.svelte.hbs +6 -2
- package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +13 -0
- package/templates/apps/website/src/routes/+layout.svelte.hbs +8 -2
- package/templates/apps/website/src/routes/+page.svelte.hbs +4 -3
- package/templates/base/.npmrc.hbs +1 -15
- package/templates/base/Dockerfile.hbs +9 -8
- package/templates/base/e2e/app.spec.ts.hbs +1 -0
- package/templates/base/package.json.hbs +39 -42
- package/templates/base/pnpm-workspace.yaml.hbs +26 -0
- package/templates/base/src/app.d.ts.hbs +4 -0
- package/templates/base/src/hooks.server.ts.hbs +0 -8
- package/templates/base/src/lib/server/init.ts.hbs +26 -5
- package/templates/base/src/routes/+layout.server.ts.hbs +18 -0
- package/templates/base/tests/scaffold.test.ts.hbs +21 -1
- package/templates/base/vite.config.ts.hbs +21 -0
- package/templates/features/ai/routes/api/chat/+server.ts +6 -7
- package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +1 -1
- package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +1 -1
- package/templates/features/iam/routes-shared/api/auth/login/+server.ts +14 -10
- package/templates/features/iam/routes-shared/api/auth/logout/+server.ts +6 -4
- package/templates/features/storage/routes/api/upload/+server.ts +10 -8
- package/templates/skills/CLAUDE.md +0 -14
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +13 -2
- package/templates/skills/bridges/fullstack/copilot-instructions.md.hbs +3 -0
- package/templates/skills/hai-api-client/SKILL.md +1 -1
- package/templates/skills/hai-app-create/development.md +6 -0
- package/templates/skills/hai-build/reference.md +4 -2
- package/templates/skills/hai-core/SKILL.md +2 -0
- package/templates/skills/hai-core/reference.md +6 -4
- package/templates/skills/hai-framework-sync/SKILL.md +1 -2
- package/templates/skills/hai-serv/SKILL.md +1 -0
- package/templates/skills/hai-serv/reference.md +3 -1
- package/templates/skills/hai-ui/SKILL.md +6 -0
- package/templates/skills/hai-ui/reference.md +7 -4
- package/templates/skills/hai-vecdb/reference.md +53 -49
- package/dist/chunk-MJGUBOAV.js.map +0 -1
- package/dist/chunk-O3ANVICQ.js.map +0 -1
- package/dist/cli-config-templates-OWBEGBZQ.js +0 -5
- package/dist/src-TBIET7YU.js.map +0 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/tests/api.test.ts.hbs +0 -28
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/tests/api.test.ts.hbs +0 -28
- package/templates/apps/fullstack/apps/{{projectName}}-web/tests/api.test.ts.hbs +0 -55
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/LanguageSwitcher.svelte.hbs +0 -27
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/ThemeSwitcher.svelte.hbs +0 -18
- package/templates/skills/bridges/admin/CLAUDE.md +0 -15
- package/templates/skills/bridges/api/CLAUDE.md +0 -15
- package/templates/skills/bridges/fullstack/CLAUDE.md.hbs +0 -9
- package/templates/skills/bridges/h5/CLAUDE.md +0 -15
- package/templates/skills/bridges/mobile-app/CLAUDE.md +0 -15
- package/templates/skills/bridges/website/CLAUDE.md +0 -15
- package/templates/skills/claude-skill.md.hbs +0 -7
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { generateConfigFile } from './chunk-
|
|
3
|
-
import { cliM } from './chunk-
|
|
2
|
+
import { generateConfigFile } from './chunk-WUSFJFW5.js';
|
|
3
|
+
import { cliM } from './chunk-F4IBPVZ5.js';
|
|
4
4
|
import './chunk-2H7UOFLK.js';
|
|
5
5
|
import process3 from 'process';
|
|
6
6
|
import { core } from '@h-ai/core';
|
|
@@ -9,13 +9,14 @@ import chalk from 'chalk';
|
|
|
9
9
|
import path2, { resolve } from 'path';
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
11
|
import fse from 'fs-extra';
|
|
12
|
-
import
|
|
12
|
+
import Handlebars2 from 'handlebars';
|
|
13
13
|
import ora from 'ora';
|
|
14
14
|
import prompts from 'prompts';
|
|
15
15
|
import { Buffer } from 'buffer';
|
|
16
16
|
import { execSync, execFileSync } from 'child_process';
|
|
17
|
+
import { randomBytes } from 'crypto';
|
|
18
|
+
import { stringify, parse } from 'yaml';
|
|
17
19
|
import { existsSync, readFileSync } from 'fs';
|
|
18
|
-
import { parse } from 'yaml';
|
|
19
20
|
|
|
20
21
|
var CAMEL_CASE_SEPARATOR_REGEX = /[-_\s]+(.)?/g;
|
|
21
22
|
var LEADING_CHAR_REGEX = /^./;
|
|
@@ -79,26 +80,30 @@ async function detectPackageManager(cwd) {
|
|
|
79
80
|
return "npm";
|
|
80
81
|
}
|
|
81
82
|
function registerHelpers() {
|
|
82
|
-
|
|
83
|
+
Handlebars2.registerHelper("if_eq", function(a, b, options) {
|
|
83
84
|
return a === b ? options.fn(this) : options.inverse(this);
|
|
84
85
|
});
|
|
85
|
-
|
|
86
|
+
Handlebars2.registerHelper("date", () => {
|
|
86
87
|
return (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
87
88
|
});
|
|
88
|
-
|
|
89
|
+
Handlebars2.registerHelper("year", () => {
|
|
89
90
|
return (/* @__PURE__ */ new Date()).getFullYear();
|
|
90
91
|
});
|
|
91
|
-
|
|
92
|
+
Handlebars2.registerHelper("upper", (str) => {
|
|
92
93
|
return str.toUpperCase();
|
|
93
94
|
});
|
|
94
|
-
|
|
95
|
+
Handlebars2.registerHelper("lower", (str) => {
|
|
95
96
|
return str.toLowerCase();
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
registerHelpers();
|
|
99
|
-
|
|
100
|
+
Handlebars2.registerHelper("if_eq", function(a, b, options) {
|
|
100
101
|
return a === b ? options.fn(this) : options.inverse(this);
|
|
101
102
|
});
|
|
103
|
+
Handlebars2.registerHelper("json", (value) => JSON.stringify(value));
|
|
104
|
+
Handlebars2.registerHelper("html", (value) => Handlebars2.escapeExpression(value));
|
|
105
|
+
Handlebars2.registerHelper("yaml", (key, value) => stringify({ [key]: value }).trim());
|
|
106
|
+
Handlebars2.registerHelper("jsString", (value) => `'${JSON.stringify(value).slice(1, -1).replace(/\\"/g, '"').replace(/'/g, "\\'")}'`);
|
|
102
107
|
var TEMPLATE_SKIP_IF_EMPTY_MARKER = "@skipIfEmpty";
|
|
103
108
|
var NORMALIZED_RENDER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".js", ".svelte", ".json", ".css"]);
|
|
104
109
|
var CAPACITOR_SKIPPED_SERVER_FILES = /* @__PURE__ */ new Set([
|
|
@@ -106,53 +111,56 @@ var CAPACITOR_SKIPPED_SERVER_FILES = /* @__PURE__ */ new Set([
|
|
|
106
111
|
"src/lib/server/init.ts"
|
|
107
112
|
]);
|
|
108
113
|
var VERSIONS = {
|
|
109
|
-
antfuEslintConfig: "^9.
|
|
110
|
-
capacitorSecureStorage: "^8.0.
|
|
114
|
+
antfuEslintConfig: "^9.5.1",
|
|
115
|
+
capacitorSecureStorage: "^8.0.1",
|
|
111
116
|
// UI / Icon
|
|
112
|
-
bitsUi: "^2.
|
|
113
|
-
iconifyJsonTabler: "^1.2.
|
|
117
|
+
bitsUi: "^2.19.5",
|
|
118
|
+
iconifyJsonTabler: "^1.2.42",
|
|
114
119
|
iconifyTailwind: "^1.2.3",
|
|
115
120
|
// Capacitor
|
|
116
|
-
capacitorAndroid: "^8.3
|
|
117
|
-
capacitorApp: "^8.
|
|
118
|
-
capacitorCamera: "^8.
|
|
119
|
-
capacitorCli: "^8.3
|
|
120
|
-
capacitorCore: "^8.3
|
|
121
|
-
capacitorDevice: "^8.0.
|
|
122
|
-
capacitorIos: "^8.3
|
|
121
|
+
capacitorAndroid: "^8.5.3",
|
|
122
|
+
capacitorApp: "^8.1.2",
|
|
123
|
+
capacitorCamera: "^8.2.5",
|
|
124
|
+
capacitorCli: "^8.5.3",
|
|
125
|
+
capacitorCore: "^8.5.3",
|
|
126
|
+
capacitorDevice: "^8.0.3",
|
|
127
|
+
capacitorIos: "^8.5.3",
|
|
123
128
|
capacitorPreferences: "^8.0.1",
|
|
124
|
-
capacitorPushNotifications: "^8.
|
|
125
|
-
capacitorStatusBar: "^8.0.
|
|
129
|
+
capacitorPushNotifications: "^8.1.3",
|
|
130
|
+
capacitorStatusBar: "^8.0.4",
|
|
126
131
|
// Tailwind / DaisyUI
|
|
127
|
-
daisyui: "^5.
|
|
128
|
-
tailwindcss: "^4.3.
|
|
129
|
-
tailwindcssVite: "^4.3.
|
|
132
|
+
daisyui: "^5.7.47",
|
|
133
|
+
tailwindcss: "^4.3.3",
|
|
134
|
+
tailwindcssVite: "^4.3.3",
|
|
130
135
|
// i18n
|
|
131
|
-
inlangParaglide: "^2.
|
|
132
|
-
inlangMessageFormat: "^4.
|
|
136
|
+
inlangParaglide: "^2.27.0",
|
|
137
|
+
inlangMessageFormat: "^4.5.0",
|
|
133
138
|
// Svelte / Vite
|
|
134
|
-
svelte: "^5.
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
svelte: "^5.57.2",
|
|
140
|
+
svelteKit: "^2.70.3",
|
|
141
|
+
svelteAdapterNode: "^5.5.7",
|
|
142
|
+
svelteCheck: "^4.7.6",
|
|
143
|
+
sveltePlugin: "^7.3.1",
|
|
137
144
|
// Build / Test
|
|
138
|
-
vite: "^8.
|
|
139
|
-
vitest: "^4.1.
|
|
145
|
+
vite: "^8.3.4",
|
|
146
|
+
vitest: "^4.1.11",
|
|
140
147
|
tsup: "^8.5.1",
|
|
141
148
|
rimraf: "^6.1.3",
|
|
142
149
|
// ESLint
|
|
143
|
-
eslint: "^10.
|
|
150
|
+
eslint: "^10.12.0",
|
|
144
151
|
eslintPluginFormat: "^2.0.1",
|
|
145
|
-
eslintPluginSvelte: "^3.
|
|
146
|
-
svelteEslintParser: "^1.
|
|
152
|
+
eslintPluginSvelte: "^3.23.1",
|
|
153
|
+
svelteEslintParser: "^1.9.0",
|
|
147
154
|
// Node / TS
|
|
148
|
-
nodeTypes: "^
|
|
155
|
+
nodeTypes: "^26.6.5",
|
|
156
|
+
// Svelte / ESLint / tsup 继续使用稳定的 JavaScript 编译 API。
|
|
149
157
|
typescript: "^6.0.3",
|
|
150
158
|
// E2E
|
|
151
|
-
playwright: "^1.
|
|
159
|
+
playwright: "^1.64.0",
|
|
152
160
|
// Validation
|
|
153
|
-
zod: "^4.
|
|
161
|
+
zod: "^4.6.5",
|
|
154
162
|
// Tauri
|
|
155
|
-
tauriCli: "^2.
|
|
163
|
+
tauriCli: "^2.12.1"
|
|
156
164
|
};
|
|
157
165
|
var FRONTEND_PORTS_DEFAULT = {
|
|
158
166
|
web: 4173,
|
|
@@ -261,11 +269,20 @@ var FULLSTACK_CONTRACT_CATALOG_PACKAGE_NAMES = [
|
|
|
261
269
|
"zod"
|
|
262
270
|
];
|
|
263
271
|
var FULLSTACK_SERV_CATALOG_PACKAGE_NAMES = [
|
|
272
|
+
"@h-ai/audit",
|
|
273
|
+
"@h-ai/cache",
|
|
264
274
|
"@h-ai/core",
|
|
265
|
-
"@h-ai/
|
|
275
|
+
"@h-ai/crypto",
|
|
276
|
+
"@h-ai/iam",
|
|
277
|
+
"@h-ai/reldb",
|
|
278
|
+
"@h-ai/serv",
|
|
279
|
+
"@h-ai/storage",
|
|
280
|
+
"zod"
|
|
266
281
|
];
|
|
267
282
|
var FULLSTACK_SHARED_CATALOG_PACKAGE_NAMES = [
|
|
268
283
|
"@h-ai/api-client",
|
|
284
|
+
"@h-ai/core",
|
|
285
|
+
"@h-ai/crypto",
|
|
269
286
|
"@h-ai/ui",
|
|
270
287
|
"@inlang/paraglide-js",
|
|
271
288
|
"@inlang/plugin-message-format",
|
|
@@ -534,6 +551,9 @@ function buildTemplateContext(options) {
|
|
|
534
551
|
for (const f of options.features) {
|
|
535
552
|
featureMap[f] = true;
|
|
536
553
|
}
|
|
554
|
+
if (options.appType === "fullstack") {
|
|
555
|
+
for (const feature of ["iam", "db", "cache", "crypto", "storage", "audit"]) featureMap[feature] = true;
|
|
556
|
+
}
|
|
537
557
|
if (featureMap.iam) {
|
|
538
558
|
featureMap.db = true;
|
|
539
559
|
featureMap.cache = true;
|
|
@@ -564,6 +584,7 @@ function buildTemplateContext(options) {
|
|
|
564
584
|
}
|
|
565
585
|
return {
|
|
566
586
|
projectName: options.name,
|
|
587
|
+
versions: VERSIONS,
|
|
567
588
|
useCatalogProtocol,
|
|
568
589
|
haiPackageSpecifier: useCatalogProtocol ? HAI_PACKAGE_SPECIFIER_CATALOG : HAI_PACKAGE_VERSION,
|
|
569
590
|
haiPackageVersion: HAI_PACKAGE_VERSION,
|
|
@@ -610,6 +631,7 @@ function buildFullstackTemplateContext(projectName, frontendsInput, moduleConfig
|
|
|
610
631
|
port: portFor(target)
|
|
611
632
|
}));
|
|
612
633
|
return {
|
|
634
|
+
appName: moduleConfigs?.core?.name ?? projectName,
|
|
613
635
|
versions: VERSIONS,
|
|
614
636
|
packageSpecifiers: buildFullstackPackageSpecifiers(useCatalogProtocol),
|
|
615
637
|
contractPackageName: `${projectName}-contract`,
|
|
@@ -688,7 +710,7 @@ async function generateFromTemplates(projectPath, context) {
|
|
|
688
710
|
const appExcludes = context.hasI18n ? [] : ["messages"];
|
|
689
711
|
await copyStaticDir(appDir, projectPath, appExcludes);
|
|
690
712
|
}
|
|
691
|
-
if (!context.isApiWorkspace) {
|
|
713
|
+
if (!context.isApiWorkspace && context.appType !== "fullstack") {
|
|
692
714
|
for (const featureId of Object.keys(context.features)) {
|
|
693
715
|
if (context.isSvelteOnlyApp) {
|
|
694
716
|
continue;
|
|
@@ -742,7 +764,7 @@ async function renderDynamicFiles(templatesRoot, projectPath, context) {
|
|
|
742
764
|
await renderHbsInDir(dir, projectPath, context);
|
|
743
765
|
await copyRenderedStaticPathFiles(dir, projectPath, context);
|
|
744
766
|
}
|
|
745
|
-
if (context.isApiWorkspace) {
|
|
767
|
+
if (context.isApiWorkspace || context.appType === "fullstack") {
|
|
746
768
|
return;
|
|
747
769
|
}
|
|
748
770
|
const routesDest = path2.join(projectPath, "src", "routes");
|
|
@@ -780,7 +802,7 @@ async function renderHbsInDir(dir, destRoot, context) {
|
|
|
780
802
|
const srcPath = path2.join(dir, relPath);
|
|
781
803
|
const outRelPathTemplate = relPath.replace(HBS_SUFFIX_REGEX, "");
|
|
782
804
|
const template = await fse.readFile(srcPath, "utf-8");
|
|
783
|
-
const compiled =
|
|
805
|
+
const compiled = Handlebars2.compile(template, { noEscape: true });
|
|
784
806
|
const rendered = compiled(context);
|
|
785
807
|
if (shouldSkipRenderedFile(template, rendered)) {
|
|
786
808
|
continue;
|
|
@@ -841,7 +863,7 @@ function shouldSkipRenderedFile(template, rendered) {
|
|
|
841
863
|
}
|
|
842
864
|
function renderOutputPath(pathTemplate, context) {
|
|
843
865
|
const normalizedTemplate = pathTemplate.split(path2.sep).join("/");
|
|
844
|
-
return
|
|
866
|
+
return Handlebars2.compile(normalizedTemplate, { noEscape: true })(context);
|
|
845
867
|
}
|
|
846
868
|
function isSafeRelativePath(relativePath) {
|
|
847
869
|
const normalized = path2.normalize(relativePath);
|
|
@@ -879,8 +901,8 @@ var APP_TYPES = {
|
|
|
879
901
|
},
|
|
880
902
|
"fullstack": {
|
|
881
903
|
name: "\u524D\u540E\u7AEF\u5206\u79BB\u5DE5\u7A0B",
|
|
882
|
-
description: "\u591A\
|
|
883
|
-
defaultFeatures: []
|
|
904
|
+
description: "\u591A\u7AEF mini \u7BA1\u7406\u7CFB\u7EDF\uFF0C\u5305\u542B\u7528\u6237\u3001\u89D2\u8272\u3001\u5BA1\u8BA1\u3001\u4E2A\u4EBA\u8BBE\u7F6E\u4E0E\u53CC\u5411\u4F20\u8F93\u52A0\u5BC6",
|
|
905
|
+
defaultFeatures: ["iam", "db", "cache", "crypto", "storage", "audit"]
|
|
884
906
|
}
|
|
885
907
|
};
|
|
886
908
|
var FRONTEND_TARGETS = {
|
|
@@ -1077,20 +1099,21 @@ async function createProject(options) {
|
|
|
1077
1099
|
packageManager: resolvedOptions.packageManager
|
|
1078
1100
|
});
|
|
1079
1101
|
await generateFromTemplates(projectPath, context);
|
|
1080
|
-
|
|
1081
|
-
const { generateConfigFile: generateConfigFile2, generateEnvExample } = await import('./cli-config-templates-
|
|
1102
|
+
{
|
|
1103
|
+
const { generateConfigFile: generateConfigFile2, generateEnvExample } = await import('./cli-config-templates-6XA7V6CC.js');
|
|
1082
1104
|
const configs = resolvedOptions.moduleConfigs;
|
|
1083
1105
|
const isApiWorkspace = resolvedOptions.appType === "api";
|
|
1084
|
-
const
|
|
1106
|
+
const isFullstack = resolvedOptions.appType === "fullstack";
|
|
1107
|
+
const configDir = isApiWorkspace ? path2.join(projectPath, "apps", `${resolvedOptions.name}-service`, "config") : isFullstack ? path2.join(projectPath, "packages", `${resolvedOptions.name}-serv`, "config") : path2.join(projectPath, "config");
|
|
1085
1108
|
const envExamplePath = isApiWorkspace ? path2.join(projectPath, "apps", `${resolvedOptions.name}-service`, ".env.example") : path2.join(projectPath, ".env.example");
|
|
1086
1109
|
for (const featureId of resolvedOptions.features) {
|
|
1087
1110
|
const configKey = getFeatureConfigKey(featureId);
|
|
1088
1111
|
if (configKey) {
|
|
1089
|
-
const content = generateConfigFile2(configKey, configs);
|
|
1112
|
+
const content = isFullstack && configKey === "iam" ? generateConfigFile2(configKey, configs).replace("seedDefaultData: true", "seedDefaultData: false") : generateConfigFile2(configKey, configs);
|
|
1090
1113
|
await writeFile(path2.join(configDir, `_${configKey}.yml`), content);
|
|
1091
1114
|
}
|
|
1092
1115
|
}
|
|
1093
|
-
if (!isApiWorkspace) {
|
|
1116
|
+
if (!isApiWorkspace && !isFullstack) {
|
|
1094
1117
|
await writeFile(
|
|
1095
1118
|
path2.join(configDir, "_core.yml"),
|
|
1096
1119
|
generateConfigFile2("core", configs)
|
|
@@ -1101,10 +1124,21 @@ async function createProject(options) {
|
|
|
1101
1124
|
# Service Runtime
|
|
1102
1125
|
# =============================================================================
|
|
1103
1126
|
PORT=3000
|
|
1127
|
+
` : isFullstack ? `${generateEnvExample(resolvedOptions.features, configs)}
|
|
1128
|
+
# First-start administrator password. The CLI generates a random value in .env.
|
|
1129
|
+
HAI_ADMIN_DEFAULT_PASSWORD=
|
|
1130
|
+
|
|
1131
|
+
# Local development API. Use your public API origin for deployment/native clients.
|
|
1132
|
+
PUBLIC_API_BASE=http://127.0.0.1:3000
|
|
1104
1133
|
` : generateEnvExample(resolvedOptions.features, configs);
|
|
1105
1134
|
await writeFile(envExamplePath, envExample);
|
|
1135
|
+
if (isFullstack) {
|
|
1136
|
+
const password = `Aa1!${randomBytes(24).toString("base64url")}`;
|
|
1137
|
+
await fse.writeFile(path2.join(projectPath, ".env"), envExample.replace("HAI_ADMIN_DEFAULT_PASSWORD=\n", `HAI_ADMIN_DEFAULT_PASSWORD=${password}
|
|
1138
|
+
`), { mode: 384 });
|
|
1139
|
+
}
|
|
1106
1140
|
}
|
|
1107
|
-
const { generateSkillFiles } = await import('./cli-skill-templates-
|
|
1141
|
+
const { generateSkillFiles } = await import('./cli-skill-templates-45CK4RQ2.js');
|
|
1108
1142
|
await generateSkillFiles(
|
|
1109
1143
|
projectPath,
|
|
1110
1144
|
resolvedOptions.features,
|
|
@@ -1213,7 +1247,7 @@ async function resolveOptions(options) {
|
|
|
1213
1247
|
let selectedFeatures = [];
|
|
1214
1248
|
const appTypeDefaults = APP_TYPES[selectedAppType].defaultFeatures;
|
|
1215
1249
|
if (selectedAppType === "fullstack") {
|
|
1216
|
-
selectedFeatures =
|
|
1250
|
+
selectedFeatures = resolveFeatureDependencies(appTypeDefaults);
|
|
1217
1251
|
} else if (selectedTemplate === "custom" && !options.features && useDefaults) {
|
|
1218
1252
|
selectedFeatures = resolveFeatureDependencies(appTypeDefaults);
|
|
1219
1253
|
} else if (selectedTemplate === "custom" && !options.features) {
|
|
@@ -1239,7 +1273,7 @@ async function resolveOptions(options) {
|
|
|
1239
1273
|
const merged = /* @__PURE__ */ new Set([...templateFeatures, ...appTypeDefaults]);
|
|
1240
1274
|
selectedFeatures = resolveFeatureDependencies(Array.from(merged));
|
|
1241
1275
|
}
|
|
1242
|
-
const moduleConfigs = selectedAppType === "fullstack" ? options.moduleConfigs
|
|
1276
|
+
const moduleConfigs = selectedAppType === "fullstack" ? { ...buildDefaultModuleConfigs(selectedFeatures, projectName), ...options.moduleConfigs } : options.moduleConfigs ?? (useDefaults ? buildDefaultModuleConfigs(selectedFeatures, projectName) : await promptModuleConfigs(selectedFeatures, projectName));
|
|
1243
1277
|
let addExamples = options.examples;
|
|
1244
1278
|
if (addExamples === void 0 && useDefaults) {
|
|
1245
1279
|
addExamples = true;
|
|
@@ -1619,7 +1653,7 @@ function generateAiDevelopmentReadme() {
|
|
|
1619
1653
|
|
|
1620
1654
|
\u4ECE\u672C\u9879\u76EE\u6839\u76EE\u5F55\u6253\u5F00\u6240\u7528\u7F16\u7801\u5DE5\u5177\uFF0C\u5148\u8BFB\u53D6 [AGENTS.md](./AGENTS.md)\u3002Claude Code \u901A\u8FC7 [CLAUDE.md](./CLAUDE.md) \u52A0\u8F7D\u9879\u76EE\u89C4\u5219\uFF1BGitHub Copilot \u4F7F\u7528 [.github/copilot-instructions.md](./.github/copilot-instructions.md)\uFF0COpenCode \u4F7F\u7528 AGENTS.md \u548C [opencode.json](./opencode.json)\u3002
|
|
1621
1655
|
|
|
1622
|
-
Codex\u3001Cursor\u3001Copilot\u3001OpenCode \u4ECE .agents/skills/ \u53D1\u73B0\u5171\u4EAB\u6280\u80FD\uFF1BClaude Code \
|
|
1656
|
+
Codex\u3001Cursor\u3001Copilot\u3001OpenCode \u4ECE .agents/skills/ \u53D1\u73B0\u5171\u4EAB\u6280\u80FD\uFF1BClaude Code \u901A\u8FC7 CLAUDE.md \u5F15\u7528 AGENTS.md\uFF0C\u5E76\u6309\u9879\u76EE\u6307\u5F15\u8BFB\u53D6 .agents/skills/ \u7684\u540C\u4E00\u4EFD\u6B63\u6587\u3002\u666E\u901A\u65B0\u589E\u3001\u4FEE\u6539\u3001\u4FEE\u590D\u4EFB\u52A1\u4F7F\u7528 [\u5E94\u7528\u5F00\u53D1 Skill](./.agents/skills/hai-app-create/SKILL.md) \u548C [\u5F00\u53D1\u89C4\u8303\u4E0E\u6846\u67B6\u80FD\u529B\u8DEF\u7531](./.agents/skills/hai-app-create/development.md)\uFF1B\u5177\u4F53\u6A21\u5757\u518D\u6309\u9700\u8BFB\u53D6\uFF0C\u4E0D\u80FD\u628A Skill \u5DF2\u4EA4\u4ED8\u5F53\u6210\u4F9D\u8D56\u5DF2\u5B89\u88C5\u6216\u914D\u7F6E\u5DF2\u542F\u7528\u3002
|
|
1623
1657
|
|
|
1624
1658
|
\u4F18\u5148\u590D\u7528\u9002\u7528\u7684 hai-framework \u516C\u5F00 API \u4E0E\u5DF2\u6709\u4E1A\u52A1\u5B9E\u73B0\u3002\u5B8C\u6210\u65F6\u8BF4\u660E\u590D\u7528\u7684\u80FD\u529B\u3001\u76F8\u5173\u80FD\u529B\u672A\u91C7\u7528\u7684\u539F\u56E0\uFF0C\u4EE5\u53CA\u5B89\u5168\u8FB9\u754C\u548C\u7C7B\u578B\u3001\u914D\u7F6E\u3001\u6587\u6848\u3001\u8C03\u7528\u65B9\u7684\u540C\u6B65\u60C5\u51B5\u3002\u8D28\u91CF\u9A8C\u8BC1\u6309\u5F53\u524D package.json \u6267\u884C typecheck \u2192 lint \u2192 build \u2192 test\uFF1BUI\u3001\u8DEF\u7531\u4E0E\u7AEF\u5230\u7AEF\u6D41\u7A0B\u53E6\u8FD0\u884C test:e2e\uFF0C\u672A\u8FD0\u884C\u9879\u8BF4\u660E\u539F\u56E0\u3002\u5B89\u5168\u4E0E\u8D28\u91CF\u89C4\u5219\u65E2\u8981\u6309\u89C4\u8303\u5BA1\u67E5\uFF0C\u4E5F\u8981\u8FD0\u884C\u95E8\u7981\u9A8C\u8BC1\u3002
|
|
1625
1659
|
|
|
@@ -1815,6 +1849,18 @@ curl --fail http://127.0.0.1:8080/runtime-config.js
|
|
|
1815
1849
|
|
|
1816
1850
|
\u5DF2\u542F\u7528\u524D\u7AEF\uFF1A${enabledFrontends || "Web / App / Desktop"}
|
|
1817
1851
|
|
|
1852
|
+
## \u9ED8\u8BA4\u7BA1\u7406\u529F\u80FD
|
|
1853
|
+
|
|
1854
|
+
\u9ED8\u8BA4\u542F\u7528 IAM\u3001reldb\u3001cache\u3001audit\u3001storage \u548C crypto\u3002\u7BA1\u7406\u5458\u53EF\u4EE5\u7BA1\u7406\u7528\u6237\uFF08\u65B0\u589E\u3001\u7F16\u8F91\u3001\u7981\u7528\u3001\u5220\u9664\u3001\u89D2\u8272\u5206\u914D\u3001\u5934\u50CF\u4E0A\u4F20\uFF09\u3001\u67E5\u770B\u4E24\u79CD\u56FA\u5B9A\u89D2\u8272\u53CA\u4EBA\u6570\u3001\u7EF4\u62A4\u89D2\u8272\u8BF4\u660E\u3001\u5206\u9875\u7B5B\u9009\u5BA1\u8BA1\u65E5\u5FD7\uFF1B\u666E\u901A\u7528\u6237\u53EA\u80FD\u7EF4\u62A4\u4E2A\u4EBA\u8D44\u6599\u3001\u5934\u50CF\u3001\u8BED\u8A00\u3001\u4E3B\u9898\u548C\u5BC6\u7801\u3002\u5BC6\u7801\u4FEE\u6539\u540E\u5168\u90E8\u4F1A\u8BDD\u5931\u6548\uFF0C\u9700\u8981\u91CD\u65B0\u767B\u5F55\u3002
|
|
1855
|
+
|
|
1856
|
+
CLI \u5DF2\u5728\u6839\u76EE\u5F55\u751F\u6210 \`.env\`\uFF0C\u5176\u4E2D \`HAI_ADMIN_DEFAULT_PASSWORD\` \u662F\u6BCF\u4E2A\u9879\u76EE\u72EC\u7ACB\u751F\u6210\u7684\u968F\u673A\u5F3A\u5BC6\u7801\u3002\u76F4\u63A5\u8FD0\u884C \`dev\` / \`start\` \u5373\u53EF\uFF0C\u9996\u6B21\u767B\u5F55\u4F7F\u7528\u7528\u6237\u540D \`admin\` \u548C\u8BE5\u5BC6\u7801\uFF1B\u4E5F\u53EF\u901A\u8FC7\u540C\u540D\u73AF\u5883\u53D8\u91CF\u8986\u76D6\u3002\u5BC6\u7801\u987B\u6EE1\u8DB3 \`_iam.yml\` \u7B56\u7565\uFF0C\u542F\u52A8\u5931\u8D25\u4F1A\u663E\u793A\u5177\u4F53\u6821\u9A8C\u539F\u56E0\u53CA\u9519\u8BEF\u7801\u3002\`.env\` \u5DF2\u88AB Git \u548C\u5BB9\u5668\u6784\u5EFA\u5FFD\u7565\uFF0C\`.env.example\` \u4E0D\u542B\u771F\u5B9E\u5BC6\u7801\uFF1B\u90E8\u7F72\u65F6\u8BBE\u7F6E\u76EE\u6807\u73AF\u5883\u81EA\u5DF1\u7684\u5BC6\u7801\u3002\u5DF2\u6709\u7528\u6237\u65F6\u4E0D\u4F1A\u91CD\u590D\u521B\u5EFA\u7BA1\u7406\u5458\u6216\u91CD\u8BBE\u5BC6\u7801\u3002
|
|
1857
|
+
|
|
1858
|
+
\u672C\u5730\u5F00\u53D1\u9ED8\u8BA4 \`PUBLIC_API_BASE=http://127.0.0.1:3000\`\uFF0CVite \u4F7F\u7528\u540C\u6E90\u4EE3\u7406\uFF1B\u90E8\u7F72\u65F6\u6539\u4E3A\u5B9E\u9645\u516C\u7F51 API Origin\uFF0CAndroid \u6A21\u62DF\u5668\u8BBF\u95EE\u5BBF\u4E3B\u673A\u65F6\u4F7F\u7528 \`http://10.0.2.2:3000\`\u3002\u4E0D\u8981\u5C06\u5BC6\u94A5\u653E\u5165\u4EFB\u4F55 \`PUBLIC_\` \u6216 \`VITE_\` \u53D8\u91CF\u3002
|
|
1859
|
+
|
|
1860
|
+
\u6240\u6709\u4E1A\u52A1 JSON \u8BF7\u6C42\u548C\u54CD\u5E94\u9ED8\u8BA4\u901A\u8FC7 \`@h-ai/crypto\` transport \u53CC\u5411\u52A0\u5BC6\uFF08\u542B\u767B\u5F55\u3001\u5237\u65B0\u3001\u5934\u50CF\u4E0A\u4F20\uFF09\uFF1B\u524D\u7AEF\u7EDF\u4E00\u4F7F\u7528\u5171\u4EAB typed API client\u3002Web \u8BBF\u95EE\u4EE4\u724C\u4EC5\u5B58\u5185\u5B58\u3001\u5237\u65B0\u4EE4\u724C\u7531 HttpOnly Cookie \u4FDD\u5B58\uFF1B\u53D7\u4FE1\u539F\u751F\u7AEF\u4F7F\u7528\u5E73\u53F0\u5B89\u5168\u5B58\u50A8\u6216\u5185\u5B58\u3002\u5934\u50CF\u4E3A\u968F\u673A\u8DEF\u5F84\u53EA\u8BFB\u56FE\u7247\u8D44\u6E90\uFF0C\u652F\u6301 PNG/JPEG/WebP\uFF0C\u6700\u5927 512 KiB\u3002\u5065\u5EB7\u68C0\u67E5\u548C\u53EA\u8BFB\u5934\u50CF\u56FE\u7247\u53EF\u76F4\u63A5\u8BBF\u95EE\u3002
|
|
1861
|
+
|
|
1862
|
+
\u5E94\u7528\u663E\u793A\u540D\u79F0\u3001\u7248\u672C\u3001\u73AF\u5883\u3001\u9ED8\u8BA4\u8BED\u8A00\u548C\u65E5\u5FD7\u8BBE\u7F6E\u6765\u81EA\u540E\u7AEF \`config/_core.yml\`\uFF0C\u524D\u7AEF\u901A\u8FC7 \`app.info\` \u83B7\u53D6\u5B89\u5168\u5143\u4FE1\u606F\u3002\u9ED8\u8BA4 SQLite\u3001\u672C\u5730\u5B58\u50A8\u4E0E\u5185\u5B58\u7F13\u5B58\u9002\u5408\u5355\u5B9E\u4F8B\uFF0C\u7BA1\u7406\u5199\u5165\u4EC5\u652F\u6301\u5355\u5199\u5B9E\u4F8B\uFF1B\u591A\u5B9E\u4F8B\u8BFB\u53D6\u53EF\u4F7F\u7528\u5171\u4EAB\u6570\u636E\u5E93\u3001Redis cache \u548C S3 \u5B58\u50A8\uFF0C\u4F46\u7BA1\u7406\u5199\u8BF7\u6C42\u987B\u7EDF\u4E00\u8DEF\u7531\u5230\u540C\u4E00\u5199\u5B9E\u4F8B\u3002\u53E6\u9700\u4F1A\u8BDD\u7C98\u6027\u8DEF\u7531\u4F7F\u8BF7\u6C42\u547D\u4E2D\u540C\u4E00\u8FDB\u7A0B\u5185\u4F20\u8F93\u79C1\u94A5\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u5BA2\u6237\u7AEF\u91CD\u65B0\u534F\u5546\u3002\u751F\u4EA7\u9700\u663E\u5F0F\u914D\u7F6E\u5141\u8BB8\u7684 CORS Origin\u3002\u4E1A\u52A1\u63D0\u4EA4\u540E\u7684\u5BA1\u8BA1\u5199\u5165\u91C7\u7528\u6700\u5927\u52AA\u529B\uFF0C\u5931\u8D25\u8BB0\u5F55\u7ED3\u6784\u5316\u9519\u8BEF\u65E5\u5FD7\uFF0C\u4FDD\u7559\u5DF2\u5B8C\u6210\u4E1A\u52A1\u7684\u539F\u59CB\u7ED3\u679C\u3002
|
|
1863
|
+
|
|
1818
1864
|
## \u5F00\u53D1\u3001\u7F16\u8BD1\u4E0E\u6253\u5305
|
|
1819
1865
|
|
|
1820
1866
|
\`\`\`bash
|
|
@@ -1864,8 +1910,6 @@ ${webRunCommand}
|
|
|
1864
1910
|
\`\`\`bash
|
|
1865
1911
|
curl --fail http://127.0.0.1:3000/health
|
|
1866
1912
|
curl --fail http://127.0.0.1:3000/ready
|
|
1867
|
-
curl --fail --request POST http://127.0.0.1:3000/api/v1/app/info \\
|
|
1868
|
-
--header "Content-Type: application/json" --data '{}'
|
|
1869
1913
|
${webTestCommands}docker stop ${containerNames}
|
|
1870
1914
|
\`\`\`
|
|
1871
1915
|
|
|
@@ -1935,6 +1979,8 @@ function printCompletionMessage(options) {
|
|
|
1935
1979
|
}
|
|
1936
1980
|
core.logger.info("\u4E0B\u4E00\u6B65\uFF1A");
|
|
1937
1981
|
core.logger.info(chalk.cyan(` cd ${options.name}`));
|
|
1982
|
+
if (options.appType === "fullstack")
|
|
1983
|
+
core.logger.info(chalk.cyan(cliM("cli_adminPasswordSaved")));
|
|
1938
1984
|
if (!options.install) {
|
|
1939
1985
|
core.logger.info(chalk.cyan(` ${getInstallCommand(options.packageManager)}`));
|
|
1940
1986
|
}
|
|
@@ -2028,7 +2074,7 @@ async function addModule(options) {
|
|
|
2028
2074
|
core.logger.info(`\u53EF\u7528\u6A21\u5757: ${Object.keys(MODULE_MAP).join(", ")}`);
|
|
2029
2075
|
return;
|
|
2030
2076
|
}
|
|
2031
|
-
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-
|
|
2077
|
+
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-45CK4RQ2.js');
|
|
2032
2078
|
if (moduleDef.packages.every((p) => project.haiPackages.includes(p))) {
|
|
2033
2079
|
const generatedFiles2 = await generateProjectAiSupport(
|
|
2034
2080
|
cwd,
|
|
@@ -2142,7 +2188,7 @@ async function deployCommand(options) {
|
|
|
2142
2188
|
try {
|
|
2143
2189
|
let deployModule;
|
|
2144
2190
|
try {
|
|
2145
|
-
deployModule = await import('./src-
|
|
2191
|
+
deployModule = await import('./src-DUGLX4YB.js');
|
|
2146
2192
|
} catch {
|
|
2147
2193
|
core.logger.error(chalk.red(cliM("cli_deploy_module_missing")));
|
|
2148
2194
|
core.logger.info(chalk.cyan(" pnpm add @h-ai/deploy"));
|
|
@@ -2563,7 +2609,7 @@ async function initProject(options) {
|
|
|
2563
2609
|
const { project, existing, missing } = result;
|
|
2564
2610
|
spinner.succeed(`\u68C0\u6D4B\u5230\u9879\u76EE: ${chalk.cyan(project.name)}`);
|
|
2565
2611
|
if (project.isHaiProject) {
|
|
2566
|
-
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-
|
|
2612
|
+
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-45CK4RQ2.js');
|
|
2567
2613
|
const generatedFiles = await generateProjectAiSupport(cwd, resolveSkillNamesForPackages(project.haiPackages), {
|
|
2568
2614
|
overwriteSkills: false,
|
|
2569
2615
|
overwriteBridgeFiles: false
|