@lark-apaas/miaoda-cli 0.1.3 → 0.1.4-alpha.9153b4c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/api/app/api.js +3 -3
  2. package/dist/api/app/schemas.js +43 -43
  3. package/dist/api/db/api.js +398 -55
  4. package/dist/api/db/client.js +155 -28
  5. package/dist/api/db/index.js +12 -1
  6. package/dist/api/db/parsers.js +20 -20
  7. package/dist/api/db/sql-keywords.js +87 -87
  8. package/dist/api/deploy/api.js +5 -5
  9. package/dist/api/deploy/index.js +10 -1
  10. package/dist/api/deploy/modern-types.js +23 -0
  11. package/dist/api/deploy/modern.js +70 -0
  12. package/dist/api/deploy/schemas.js +32 -32
  13. package/dist/api/file/api.js +89 -87
  14. package/dist/api/file/client.js +62 -22
  15. package/dist/api/file/detect.js +3 -3
  16. package/dist/api/file/index.js +2 -1
  17. package/dist/api/file/parsers.js +18 -7
  18. package/dist/api/observability/api.js +6 -6
  19. package/dist/api/observability/schemas.js +14 -14
  20. package/dist/api/plugin/api.js +31 -31
  21. package/dist/cli/commands/app/index.js +94 -13
  22. package/dist/cli/commands/db/index.js +602 -54
  23. package/dist/cli/commands/deploy/index.js +28 -28
  24. package/dist/cli/commands/deploy/modern.js +47 -0
  25. package/dist/cli/commands/file/index.js +85 -58
  26. package/dist/cli/commands/index.js +31 -5
  27. package/dist/cli/commands/observability/index.js +69 -69
  28. package/dist/cli/commands/plugin/index.js +27 -27
  29. package/dist/cli/commands/shared.js +10 -10
  30. package/dist/cli/handlers/app/index.js +6 -1
  31. package/dist/cli/handlers/app/init.js +86 -0
  32. package/dist/cli/handlers/app/update.js +2 -2
  33. package/dist/cli/handlers/db/_destructive.js +67 -0
  34. package/dist/cli/handlers/db/_env.js +26 -0
  35. package/dist/cli/handlers/db/_operator.js +35 -0
  36. package/dist/cli/handlers/db/audit.js +383 -0
  37. package/dist/cli/handlers/db/changelog.js +160 -0
  38. package/dist/cli/handlers/db/data.js +32 -31
  39. package/dist/cli/handlers/db/index.js +17 -1
  40. package/dist/cli/handlers/db/migration.js +234 -0
  41. package/dist/cli/handlers/db/quota.js +68 -0
  42. package/dist/cli/handlers/db/recovery.js +413 -0
  43. package/dist/cli/handlers/db/schema.js +33 -33
  44. package/dist/cli/handlers/db/sql.js +69 -69
  45. package/dist/cli/handlers/deploy/deploy.js +4 -4
  46. package/dist/cli/handlers/deploy/error-log.js +1 -1
  47. package/dist/cli/handlers/deploy/get.js +3 -3
  48. package/dist/cli/handlers/deploy/modern.js +32 -0
  49. package/dist/cli/handlers/deploy/polling.js +11 -11
  50. package/dist/cli/handlers/file/cp.js +30 -30
  51. package/dist/cli/handlers/file/index.js +3 -1
  52. package/dist/cli/handlers/file/ls.js +5 -5
  53. package/dist/cli/handlers/file/quota.js +66 -0
  54. package/dist/cli/handlers/file/rm.js +32 -30
  55. package/dist/cli/handlers/file/sign.js +3 -3
  56. package/dist/cli/handlers/file/stat.js +10 -9
  57. package/dist/cli/handlers/observability/analytics.js +47 -47
  58. package/dist/cli/handlers/observability/helpers.js +2 -2
  59. package/dist/cli/handlers/observability/log.js +9 -9
  60. package/dist/cli/handlers/observability/metric.js +26 -26
  61. package/dist/cli/handlers/observability/trace.js +5 -5
  62. package/dist/cli/handlers/plugin/plugin-local.js +53 -53
  63. package/dist/cli/handlers/plugin/plugin.js +15 -15
  64. package/dist/cli/help.js +16 -16
  65. package/dist/main.js +12 -12
  66. package/dist/services/app/init/index.js +14 -0
  67. package/dist/services/app/init/install.js +101 -0
  68. package/dist/services/app/init/steering.js +74 -0
  69. package/dist/services/app/init/template.js +85 -0
  70. package/dist/services/deploy/modern/atoms/build.js +35 -0
  71. package/dist/services/deploy/modern/atoms/context.js +30 -0
  72. package/dist/services/deploy/modern/atoms/index.js +15 -0
  73. package/dist/services/deploy/modern/atoms/local-release.js +29 -0
  74. package/dist/services/deploy/modern/atoms/pre-release.js +13 -0
  75. package/dist/services/deploy/modern/atoms/upload.js +90 -0
  76. package/dist/services/deploy/modern/check.js +58 -0
  77. package/dist/services/deploy/modern/constants.js +11 -0
  78. package/dist/services/deploy/modern/index.js +16 -0
  79. package/dist/services/deploy/modern/pipelines/index.js +5 -0
  80. package/dist/services/deploy/modern/pipelines/local.js +66 -0
  81. package/dist/services/deploy/modern/protocol.js +40 -0
  82. package/dist/services/deploy/modern/run-types.js +4 -0
  83. package/dist/services/deploy/modern/run.js +13 -0
  84. package/dist/services/deploy/modern/template-key-map.js +29 -0
  85. package/dist/utils/args.js +1 -1
  86. package/dist/utils/colors.js +2 -2
  87. package/dist/utils/config.js +2 -2
  88. package/dist/utils/devops-error.js +9 -9
  89. package/dist/utils/error.js +2 -2
  90. package/dist/utils/git.js +4 -4
  91. package/dist/utils/http.js +27 -21
  92. package/dist/utils/index.js +3 -1
  93. package/dist/utils/npm-pack.js +55 -0
  94. package/dist/utils/output.js +67 -45
  95. package/dist/utils/poll.js +35 -0
  96. package/dist/utils/render.js +27 -27
  97. package/dist/utils/spark-meta.js +48 -0
  98. package/dist/utils/spinner.js +46 -0
  99. package/dist/utils/time.js +47 -42
  100. package/package.json +1 -1
@@ -3,25 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerAppCommands = registerAppCommands;
4
4
  const shared_1 = require("../../../cli/commands/shared");
5
5
  const index_1 = require("../../../cli/handlers/app/index");
6
- function registerAppCommands(program) {
7
- const appCmd = program.command("app").description("应用元数据管理:查看 / 修改");
6
+ const error_1 = require("../../../utils/error");
7
+ function registerAppCommands(program, opts = {}) {
8
+ const description = opts.includeInit
9
+ ? '应用元数据管理:查看 / 修改 / 初始化'
10
+ : '应用元数据管理:查看 / 修改';
11
+ const appCmd = program.command('app').description(description);
8
12
  appCmd.action(() => {
9
13
  appCmd.outputHelp();
10
14
  });
11
- appCmd.addHelpText("after", `
15
+ appCmd.addHelpText('after', `
12
16
  作用范围
13
17
  仅供 Agent 在妙搭沙箱内调用。
14
18
  应用上下文:沙箱内的默认应用。
15
19
  `);
16
20
  registerAppGet(appCmd);
17
21
  registerAppUpdate(appCmd);
22
+ if (opts.includeInit) {
23
+ registerAppInit(appCmd);
24
+ }
18
25
  }
19
26
  function registerAppGet(parent) {
20
27
  const cmd = parent
21
- .command("get")
22
- .description("查看应用元数据(status / type / mode / branch / 时间戳 等)")
28
+ .command('get')
29
+ .description('查看应用元数据(status / type / mode / branch / 时间戳 等)')
23
30
  .addOption((0, shared_1.appIdOption)().hideHelp())
24
- .addHelpText("after", `
31
+ .addHelpText('after', `
25
32
  JSON 输出
26
33
  {"data": {"appID": "...", "name": "...", ...}}
27
34
 
@@ -30,7 +37,7 @@ JSON 输出
30
37
  $ miaoda app get --json
31
38
  `);
32
39
  cmd.action((0, shared_1.withHelp)(cmd, async (rawOpts) => {
33
- (0, shared_1.rejectCliOverride)(cmd, "appId");
40
+ (0, shared_1.rejectCliOverride)(cmd, 'appId');
34
41
  await (0, index_1.handleAppGet)({
35
42
  appId: (0, shared_1.resolveAppId)({ appId: rawOpts.appId }),
36
43
  });
@@ -38,12 +45,12 @@ JSON 输出
38
45
  }
39
46
  function registerAppUpdate(parent) {
40
47
  const cmd = parent
41
- .command("update")
42
- .description("修改应用名称 / 描述(至少传 --name 或 --description)")
48
+ .command('update')
49
+ .description('修改应用名称 / 描述(至少传 --name 或 --description)')
43
50
  .addOption((0, shared_1.appIdOption)().hideHelp())
44
- .option("--name <name>", "新应用名称")
45
- .option("--description <desc>", "新应用描述")
46
- .addHelpText("after", `
51
+ .option('--name <name>', '新应用名称')
52
+ .option('--description <desc>', '新应用描述')
53
+ .addHelpText('after', `
47
54
  JSON 输出
48
55
  与 'app get' 一致:{"data": {...新 meta...}}
49
56
 
@@ -52,7 +59,7 @@ JSON 输出
52
59
  $ miaoda app update --description "在线商城应用"
53
60
  `);
54
61
  cmd.action((0, shared_1.withHelp)(cmd, async (rawOpts) => {
55
- (0, shared_1.rejectCliOverride)(cmd, "appId");
62
+ (0, shared_1.rejectCliOverride)(cmd, 'appId');
56
63
  await (0, index_1.handleAppUpdate)({
57
64
  appId: (0, shared_1.resolveAppId)({ appId: rawOpts.appId }),
58
65
  name: rawOpts.name,
@@ -60,3 +67,77 @@ JSON 输出
60
67
  });
61
68
  }));
62
69
  }
70
+ function registerAppInit(parent) {
71
+ const cmd = parent
72
+ .command('init')
73
+ .description('初始化应用代码:抓 template 渲染、装 .agent/steering/ skills、写 .spark/meta.json。.spark/meta.json 已存在则直接退出')
74
+ .addOption((0, shared_1.appIdOption)().hideHelp())
75
+ .option('--template <stack>', `技术栈短名(${index_1.SUPPORTED_STACKS.join(' / ')})`)
76
+ .option('--conf <json>', 'init 配置 JSON。支持 {"version": "<template 版本>"} / {"steeringVersion": "<steering 版本>"},均默认 latest')
77
+ .option('--skip-install', '跳过依赖安装', false)
78
+ .addHelpText('after', `
79
+ 幂等
80
+ .spark/meta.json 已存在时直接退出(initialized=false, reason=already_initialized),
81
+ 不再触发 template 渲染、不重新拉 skills、不安装依赖。
82
+ meta.json 在 init 流程最后才写,写了 = 已完整成功一次;
83
+ 上一次失败留下半渲染状态时(package.json 在但 meta.json 没在)允许重跑。
84
+
85
+ 依赖安装
86
+ 默认:npm install --no-audit --no-fund
87
+ --skip-install: 跳过
88
+ MIAODA_DEP_CACHE_DIR 环境变量:
89
+ 若设了且 CWD 含 package.json,先算 md5(package.json),
90
+ 命中 \${MIAODA_DEP_CACHE_DIR}/\${hash}.zip 则 unzip 复用缓存;未命中或解压后 node_modules
91
+ 为空都会 fallback npm install。
92
+ JSON 模式下子进程 stdout 重定向到 stderr,避免污染最终 emit 的 JSON。
93
+
94
+ JSON 输出
95
+ 已初始化:{"data": {"initialized": false, "reason": "already_initialized", "targetDir": "..."}}
96
+ 新初始化:{"data": {"initialized": true, "template": "...", "templateVersion": "...", "steeringVersion": "...",
97
+ "installed": true, "installSource": "cache|npm|skipped", "installHash": "...", ...}}
98
+
99
+ 示例
100
+ $ miaoda app init --template vite-react
101
+ $ miaoda app init --template vite-react --conf '{"version": "0.1.0-alpha.1"}'
102
+ $ miaoda app init --template vite-react --conf '{"steeringVersion": "0.1.0"}'
103
+ $ miaoda app init --template vite-react --skip-install
104
+ $ MIAODA_DEP_CACHE_DIR=/tmp/dep-cache miaoda app init --template vite-react
105
+ `);
106
+ cmd.action((0, shared_1.withHelp)(cmd, async (rawOpts) => {
107
+ (0, shared_1.rejectCliOverride)(cmd, 'appId');
108
+ const conf = parseInitConf(rawOpts.conf);
109
+ await (0, index_1.handleAppInit)({
110
+ appId: (0, shared_1.resolveAppId)({ appId: rawOpts.appId }),
111
+ template: rawOpts.template,
112
+ conf,
113
+ skipInstall: rawOpts.skipInstall,
114
+ });
115
+ }));
116
+ }
117
+ function parseInitConf(raw) {
118
+ if (raw === undefined)
119
+ return undefined;
120
+ let parsed;
121
+ try {
122
+ parsed = JSON.parse(raw);
123
+ }
124
+ catch (err) {
125
+ const msg = err instanceof Error ? err.message : String(err);
126
+ throw new error_1.AppError('ARGS_INVALID', `--conf 必须是合法 JSON:${msg}`);
127
+ }
128
+ if (!isPlainObject(parsed)) {
129
+ throw new error_1.AppError('ARGS_INVALID', '--conf 必须是 JSON 对象');
130
+ }
131
+ const version = parsed.version;
132
+ if (version !== undefined && typeof version !== 'string') {
133
+ throw new error_1.AppError('ARGS_INVALID', '--conf.version 必须是字符串');
134
+ }
135
+ const steeringVersion = parsed.steeringVersion;
136
+ if (steeringVersion !== undefined && typeof steeringVersion !== 'string') {
137
+ throw new error_1.AppError('ARGS_INVALID', '--conf.steeringVersion 必须是字符串');
138
+ }
139
+ return { version, steeringVersion };
140
+ }
141
+ function isPlainObject(v) {
142
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
143
+ }