@h-ai/cli 0.1.0-alpha.56 → 0.1.0-alpha.57
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 +205 -0
- package/README.ja.md +205 -0
- package/README.md +16 -0
- package/dist/chunk-MJGUBOAV.js +391 -0
- package/dist/chunk-MJGUBOAV.js.map +1 -0
- package/dist/{cli-skill-templates-ZIWYMS4Y.js → cli-skill-templates-ZYXES3NT.js} +3 -3
- package/dist/{cli-skill-templates-ZIWYMS4Y.js.map → cli-skill-templates-ZYXES3NT.js.map} +1 -1
- package/dist/index.js +32 -69
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/templates/apps/api/.gitignore.hbs +13 -0
- package/templates/apps/api/.npmrc.hbs +2 -0
- package/templates/apps/api/e2e/api-service.spec.ts.hbs +1 -1
- package/templates/apps/api/{eslint.config.js → eslint.config.js.hbs} +6 -8
- package/templates/apps/api/package.json.hbs +1 -1
- package/templates/apps/fullstack/.gitignore.hbs +16 -0
- package/templates/apps/fullstack/.npmrc.hbs +2 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +5 -8
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/eslint.config.js.hbs +5 -8
- package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +5 -8
- package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +1 -1
- package/templates/apps/fullstack/{eslint.config.js → eslint.config.js.hbs} +6 -8
- package/templates/apps/fullstack/package.json.hbs +1 -1
- package/templates/base/.npmrc.hbs +15 -0
- package/templates/base/eslint-rules.js +45 -0
- package/templates/base/eslint.config.js.hbs +6 -8
- package/templates/base/package.json.hbs +1 -1
- package/templates/skills/AGENTS.md +9 -8
- package/templates/skills/CLAUDE.md +4 -0
- package/templates/skills/bridges/admin/AGENTS.md +8 -0
- package/templates/skills/bridges/admin/CLAUDE.md +4 -0
- package/templates/skills/bridges/admin/copilot-instructions.md +2 -0
- package/templates/skills/bridges/api/AGENTS.md +8 -1
- package/templates/skills/bridges/api/CLAUDE.md +4 -0
- package/templates/skills/bridges/api/copilot-instructions.md +2 -0
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +8 -2
- package/templates/skills/bridges/fullstack/CLAUDE.md.hbs +4 -0
- package/templates/skills/bridges/fullstack/copilot-instructions.md.hbs +2 -0
- package/templates/skills/bridges/h5/AGENTS.md +8 -0
- package/templates/skills/bridges/h5/CLAUDE.md +4 -0
- package/templates/skills/bridges/h5/copilot-instructions.md +2 -0
- package/templates/skills/bridges/mobile-app/AGENTS.md +8 -0
- package/templates/skills/bridges/mobile-app/CLAUDE.md +4 -0
- package/templates/skills/bridges/mobile-app/copilot-instructions.md +2 -0
- package/templates/skills/bridges/website/AGENTS.md +8 -0
- package/templates/skills/bridges/website/CLAUDE.md +4 -0
- package/templates/skills/bridges/website/copilot-instructions.md +2 -0
- package/templates/skills/claude-skill.md.hbs +7 -0
- package/templates/skills/copilot-instructions.md +2 -0
- package/templates/skills/hai-api-client/SKILL.md +2 -0
- package/templates/skills/hai-app-create/SKILL.md +9 -7
- package/templates/skills/hai-app-create/development.md +66 -0
- package/templates/skills/hai-app-create/reference.md +44 -32
- package/templates/skills/hai-app-review/SKILL.md +50 -144
- package/templates/skills/hai-app-tests/SKILL.md +3 -1
- package/templates/skills/hai-app-tests/reference.md +47 -27
- package/templates/skills/hai-build/SKILL.md +5 -4
- package/templates/skills/hai-build/reference.md +52 -32
- package/templates/skills/hai-ci/SKILL.md +8 -15
- package/templates/skills/hai-framework-sync/SKILL.md +8 -1
- package/templates/skills/hai-pr-review/SKILL.md +5 -4
- package/templates/skills/hai-reldb/SKILL.md +1 -0
- package/templates/skills/hai-reldb/reference.md +3 -0
- package/templates/skills/hai-scheduler/SKILL.md +3 -0
- package/templates/skills/hai-serv/SKILL.md +1 -0
- package/templates/skills/hai-serv/reference.md +16 -2
- package/templates/skills/hai-storage/SKILL.md +3 -1
- package/dist/chunk-WUYLYCW2.js +0 -237
- package/dist/chunk-WUYLYCW2.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { generateConfigFile } from './chunk-O3ANVICQ.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import { cliM } from './chunk-MJGUBOAV.js';
|
|
4
4
|
import './chunk-2H7UOFLK.js';
|
|
5
5
|
import process3 from 'process';
|
|
6
6
|
import { core } from '@h-ai/core';
|
|
@@ -680,6 +680,8 @@ async function generateFromTemplates(projectPath, context) {
|
|
|
680
680
|
const includeBaseTemplate = context.appType !== "fullstack" && !context.isApiWorkspace;
|
|
681
681
|
if (includeBaseTemplate) {
|
|
682
682
|
await copyStaticDir(path2.join(root, "base"), projectPath);
|
|
683
|
+
} else {
|
|
684
|
+
await fse.copy(path2.join(root, "base", "eslint-rules.js"), path2.join(projectPath, "eslint-rules.js"));
|
|
683
685
|
}
|
|
684
686
|
const appDir = path2.join(root, "apps", context.appType);
|
|
685
687
|
if (await fse.pathExists(appDir)) {
|
|
@@ -1102,7 +1104,7 @@ PORT=3000
|
|
|
1102
1104
|
` : generateEnvExample(resolvedOptions.features, configs);
|
|
1103
1105
|
await writeFile(envExamplePath, envExample);
|
|
1104
1106
|
}
|
|
1105
|
-
const { generateSkillFiles } = await import('./cli-skill-templates-
|
|
1107
|
+
const { generateSkillFiles } = await import('./cli-skill-templates-ZYXES3NT.js');
|
|
1106
1108
|
await generateSkillFiles(
|
|
1107
1109
|
projectPath,
|
|
1108
1110
|
resolvedOptions.features,
|
|
@@ -1612,6 +1614,19 @@ function normalizeChildOutput(output) {
|
|
|
1612
1614
|
}
|
|
1613
1615
|
return "";
|
|
1614
1616
|
}
|
|
1617
|
+
function generateAiDevelopmentReadme() {
|
|
1618
|
+
return `## AI \u8F85\u52A9\u5F00\u53D1
|
|
1619
|
+
|
|
1620
|
+
\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
|
+
|
|
1622
|
+
Codex\u3001Cursor\u3001Copilot\u3001OpenCode \u4ECE .agents/skills/ \u53D1\u73B0\u5171\u4EAB\u6280\u80FD\uFF1BClaude Code \u4ECE .claude/skills/ \u7684\u539F\u751F\u5165\u53E3\u8BFB\u53D6\u540C\u4E00\u4EFD\u5171\u4EAB\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
|
+
|
|
1624
|
+
\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
|
+
|
|
1626
|
+
\u5DF2\u6709 hai \u9879\u76EE\u53EF\u8FD0\u884C hai init \u8865\u9F50\u7F3A\u5931\u7684 AI \u652F\u6301\u6587\u4EF6\u4E0E\u53C2\u8003\u8D44\u6E90\uFF1B\u5DF2\u6709 AGENTS.md\u3001Skill \u548C\u81EA\u5B9A\u4E49\u89C4\u5219\u4F1A\u4FDD\u7559\uFF0C\u5347\u7EA7\u65F6\u9700\u5C06\u4E0A\u8FF0\u666E\u901A\u5F00\u53D1\u5165\u53E3\u4E0E\u89C4\u8303\u663E\u5F0F\u5408\u5E76\u5230\u65E7\u6307\u5F15\u3002
|
|
1627
|
+
|
|
1628
|
+
`;
|
|
1629
|
+
}
|
|
1615
1630
|
function generateReadme(name, appTypeLabel, pm, appType) {
|
|
1616
1631
|
const install = getInstallCommand(pm);
|
|
1617
1632
|
const isStaticImage = appType === "mobile-app";
|
|
@@ -1676,7 +1691,7 @@ docker stop ${name}
|
|
|
1676
1691
|
|
|
1677
1692
|
${runtimeNotes}
|
|
1678
1693
|
|
|
1679
|
-
## \u6587\u6863
|
|
1694
|
+
${generateAiDevelopmentReadme()}## \u6587\u6863
|
|
1680
1695
|
|
|
1681
1696
|
- [hai Agent Framework](https://github.com/hai-series/hai-framework)
|
|
1682
1697
|
- [Svelte 5](https://svelte.dev/)
|
|
@@ -1760,7 +1775,7 @@ docker stop ${name}
|
|
|
1760
1775
|
- \u5728 \`${name}-service\` \u4E2D\u6269\u5C55 procedures\u3001\u6A21\u5757\u521D\u59CB\u5316\u4E0E\u914D\u7F6E\u3002
|
|
1761
1776
|
- \u9700\u8981 IAM / storage / ai \u65F6\uFF0C\u4F18\u5148\u590D\u7528 \`@h-ai/api-contract\` \u4E0E \`@h-ai/serv/features/*\`\u3002
|
|
1762
1777
|
|
|
1763
|
-
## \u6587\u6863
|
|
1778
|
+
${generateAiDevelopmentReadme()}## \u6587\u6863
|
|
1764
1779
|
|
|
1765
1780
|
- [hai Agent Framework](https://github.com/hai-series/hai-framework)
|
|
1766
1781
|
- [@h-ai/serv](./.agents/skills/hai-serv/SKILL.md)
|
|
@@ -1892,11 +1907,12 @@ ${frontends.includes("web") ? `- Web \u4F7F\u7528\u72EC\u7ACB\u9759\u6001\u955C\
|
|
|
1892
1907
|
\`\`\`bash
|
|
1893
1908
|
${pm} typecheck
|
|
1894
1909
|
${pm} lint
|
|
1910
|
+
${pm} build
|
|
1895
1911
|
${pm} test
|
|
1896
1912
|
${pm} test:e2e
|
|
1897
1913
|
\`\`\`
|
|
1898
1914
|
|
|
1899
|
-
## \u6587\u6863
|
|
1915
|
+
${generateAiDevelopmentReadme()}## \u6587\u6863
|
|
1900
1916
|
|
|
1901
1917
|
- [hai Agent Framework](https://github.com/hai-series/hai-framework)
|
|
1902
1918
|
- [@h-ai/serv](./.agents/skills/hai-serv/SKILL.md)
|
|
@@ -2012,7 +2028,7 @@ async function addModule(options) {
|
|
|
2012
2028
|
core.logger.info(`\u53EF\u7528\u6A21\u5757: ${Object.keys(MODULE_MAP).join(", ")}`);
|
|
2013
2029
|
return;
|
|
2014
2030
|
}
|
|
2015
|
-
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-
|
|
2031
|
+
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-ZYXES3NT.js');
|
|
2016
2032
|
if (moduleDef.packages.every((p) => project.haiPackages.includes(p))) {
|
|
2017
2033
|
const generatedFiles2 = await generateProjectAiSupport(
|
|
2018
2034
|
cwd,
|
|
@@ -2118,69 +2134,6 @@ async function addModule(options) {
|
|
|
2118
2134
|
throw error;
|
|
2119
2135
|
}
|
|
2120
2136
|
}
|
|
2121
|
-
|
|
2122
|
-
// messages/en-US.json
|
|
2123
|
-
var en_US_default = {
|
|
2124
|
-
cli_invalidGenerateName: "Use a name starting with a letter, with only letters, digits, hyphens or underscores",
|
|
2125
|
-
cli_generateOutsideWorkspace: "Generated files must remain inside the workspace, including symbolic link targets",
|
|
2126
|
-
cli_generateExists: "File already exists: {path}. Use --force to overwrite it",
|
|
2127
|
-
cli_deploy_module_missing: "Deploy module not found. Install @h-ai/deploy first:",
|
|
2128
|
-
cli_deploy_load_credentials: "Loading credentials...",
|
|
2129
|
-
cli_deploy_credentials_failed: "Failed to load credentials: {message}",
|
|
2130
|
-
cli_deploy_credentials_loaded: "Loaded {count} credentials",
|
|
2131
|
-
cli_deploy_load_config: "Loading deploy config...",
|
|
2132
|
-
cli_deploy_config_missing: "Deploy config not found: {path}",
|
|
2133
|
-
cli_deploy_config_hint: "Run: hai add deploy to generate config template",
|
|
2134
|
-
cli_deploy_config_loaded: "Deploy config loaded",
|
|
2135
|
-
cli_deploy_scanning: "Scanning application...",
|
|
2136
|
-
cli_deploy_scan_failed: "Scan failed: {message}",
|
|
2137
|
-
cli_deploy_scanned: "Scanned: {name} (SvelteKit: {sveltekit}, Services: {services})",
|
|
2138
|
-
cli_deploy_none: "none",
|
|
2139
|
-
cli_deploy_initializing: "Initializing deploy module...",
|
|
2140
|
-
cli_deploy_init_failed: "Init failed: {message}",
|
|
2141
|
-
cli_deploy_initialized: "Deploy module initialized",
|
|
2142
|
-
cli_deploy_deploying: "Deploying application...",
|
|
2143
|
-
cli_deploy_failed: "Deploy failed: {message}",
|
|
2144
|
-
cli_deploy_success: "Deployment successful!",
|
|
2145
|
-
cli_deploy_url: " URL: {url}",
|
|
2146
|
-
cli_deploy_id: " ID: {id}",
|
|
2147
|
-
cli_deploy_env: " Env: {names}",
|
|
2148
|
-
cli_deploy_command_failed: "Deploy command failed"
|
|
2149
|
-
};
|
|
2150
|
-
|
|
2151
|
-
// messages/zh-CN.json
|
|
2152
|
-
var zh_CN_default = {
|
|
2153
|
-
cli_invalidGenerateName: "\u540D\u79F0\u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E14\u4EC5\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u77ED\u6A2A\u7EBF\u6216\u4E0B\u5212\u7EBF",
|
|
2154
|
-
cli_generateOutsideWorkspace: "\u751F\u6210\u6587\u4EF6\u5FC5\u987B\u4F4D\u4E8E\u5DE5\u4F5C\u76EE\u5F55\u5185\uFF0C\u7B26\u53F7\u94FE\u63A5\u76EE\u6807\u4E5F\u4E0D\u5F97\u8D8A\u754C",
|
|
2155
|
-
cli_generateExists: "\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A{path}\u3002\u4F7F\u7528 --force \u624D\u53EF\u8986\u76D6",
|
|
2156
|
-
cli_deploy_module_missing: "\u672A\u627E\u5230\u90E8\u7F72\u6A21\u5757\uFF0C\u8BF7\u5148\u5B89\u88C5 @h-ai/deploy\uFF1A",
|
|
2157
|
-
cli_deploy_load_credentials: "\u6B63\u5728\u52A0\u8F7D\u51ED\u8BC1\u2026",
|
|
2158
|
-
cli_deploy_credentials_failed: "\u52A0\u8F7D\u51ED\u8BC1\u5931\u8D25\uFF1A{message}",
|
|
2159
|
-
cli_deploy_credentials_loaded: "\u5DF2\u52A0\u8F7D {count} \u9879\u51ED\u8BC1",
|
|
2160
|
-
cli_deploy_load_config: "\u6B63\u5728\u52A0\u8F7D\u90E8\u7F72\u914D\u7F6E\u2026",
|
|
2161
|
-
cli_deploy_config_missing: "\u672A\u627E\u5230\u90E8\u7F72\u914D\u7F6E\uFF1A{path}",
|
|
2162
|
-
cli_deploy_config_hint: "\u8FD0\u884C hai add deploy \u751F\u6210\u90E8\u7F72\u914D\u7F6E\u6A21\u677F",
|
|
2163
|
-
cli_deploy_config_loaded: "\u90E8\u7F72\u914D\u7F6E\u5DF2\u52A0\u8F7D",
|
|
2164
|
-
cli_deploy_scanning: "\u6B63\u5728\u626B\u63CF\u5E94\u7528\u2026",
|
|
2165
|
-
cli_deploy_scan_failed: "\u626B\u63CF\u5931\u8D25\uFF1A{message}",
|
|
2166
|
-
cli_deploy_scanned: "\u5DF2\u626B\u63CF\uFF1A{name}\uFF08SvelteKit\uFF1A{sveltekit}\uFF0C\u670D\u52A1\uFF1A{services}\uFF09",
|
|
2167
|
-
cli_deploy_none: "\u65E0",
|
|
2168
|
-
cli_deploy_initializing: "\u6B63\u5728\u521D\u59CB\u5316\u90E8\u7F72\u6A21\u5757\u2026",
|
|
2169
|
-
cli_deploy_init_failed: "\u521D\u59CB\u5316\u5931\u8D25\uFF1A{message}",
|
|
2170
|
-
cli_deploy_initialized: "\u90E8\u7F72\u6A21\u5757\u5DF2\u521D\u59CB\u5316",
|
|
2171
|
-
cli_deploy_deploying: "\u6B63\u5728\u90E8\u7F72\u5E94\u7528\u2026",
|
|
2172
|
-
cli_deploy_failed: "\u90E8\u7F72\u5931\u8D25\uFF1A{message}",
|
|
2173
|
-
cli_deploy_success: "\u90E8\u7F72\u6210\u529F\uFF01",
|
|
2174
|
-
cli_deploy_url: " \u5730\u5740\uFF1A{url}",
|
|
2175
|
-
cli_deploy_id: " \u6807\u8BC6\uFF1A{id}",
|
|
2176
|
-
cli_deploy_env: " \u73AF\u5883\u53D8\u91CF\uFF1A{names}",
|
|
2177
|
-
cli_deploy_command_failed: "\u90E8\u7F72\u547D\u4EE4\u5931\u8D25"
|
|
2178
|
-
};
|
|
2179
|
-
|
|
2180
|
-
// src/cli-i18n.ts
|
|
2181
|
-
var cliM = core.i18n.createMessageGetter({ "en-US": en_US_default, "zh-CN": zh_CN_default });
|
|
2182
|
-
|
|
2183
|
-
// src/commands/cli-deploy.ts
|
|
2184
2137
|
async function deployCommand(options) {
|
|
2185
2138
|
const spinner = ora();
|
|
2186
2139
|
const cwd = options.cwd ?? process3.cwd();
|
|
@@ -2609,6 +2562,16 @@ async function initProject(options) {
|
|
|
2609
2562
|
}
|
|
2610
2563
|
const { project, existing, missing } = result;
|
|
2611
2564
|
spinner.succeed(`\u68C0\u6D4B\u5230\u9879\u76EE: ${chalk.cyan(project.name)}`);
|
|
2565
|
+
if (project.isHaiProject) {
|
|
2566
|
+
const { generateProjectAiSupport, resolveSkillNamesForPackages } = await import('./cli-skill-templates-ZYXES3NT.js');
|
|
2567
|
+
const generatedFiles = await generateProjectAiSupport(cwd, resolveSkillNamesForPackages(project.haiPackages), {
|
|
2568
|
+
overwriteSkills: false,
|
|
2569
|
+
overwriteBridgeFiles: false
|
|
2570
|
+
});
|
|
2571
|
+
for (const generatedFile of generatedFiles) {
|
|
2572
|
+
core.logger.info(chalk.gray(` + ${generatedFile}`));
|
|
2573
|
+
}
|
|
2574
|
+
}
|
|
2612
2575
|
core.logger.info("");
|
|
2613
2576
|
core.logger.info(chalk.bold("\u9879\u76EE\u72B6\u6001:"));
|
|
2614
2577
|
core.logger.info(` \u540D\u79F0: ${chalk.cyan(project.name)}`);
|