openxiangda-cli 2.0.0-alpha.98 → 2.0.0
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/LICENSE +21 -0
- package/README.md +4 -8
- package/bin/run.js +2 -11
- package/dist/base.d.ts +30 -6
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +120 -22
- package/dist/base.js.map +1 -1
- package/dist/commands/accept.d.ts +28 -0
- package/dist/commands/accept.d.ts.map +1 -0
- package/dist/commands/accept.js +21 -0
- package/dist/commands/accept.js.map +1 -0
- package/dist/commands/admin.d.ts +32 -0
- package/dist/commands/admin.d.ts.map +1 -0
- package/dist/commands/admin.js +27 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/auth.d.ts +30 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +13 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/cancel.d.ts +30 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +12 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/check.d.ts +12 -3
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +21 -4
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/context.d.ts +27 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +10 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/create.d.ts +20 -3
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +396 -22
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/deploy.d.ts +13 -3
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +17 -16
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +10 -3
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +7 -4
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts +30 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +20 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/login.d.ts +8 -3
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.d.ts +10 -3
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +7 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/retry.d.ts +30 -0
- package/dist/commands/retry.d.ts.map +1 -0
- package/dist/commands/retry.js +12 -0
- package/dist/commands/retry.js.map +1 -0
- package/dist/commands/rollback.d.ts +11 -3
- package/dist/commands/rollback.d.ts.map +1 -1
- package/dist/commands/rollback.js +9 -3
- package/dist/commands/rollback.js.map +1 -1
- package/dist/commands/skill.d.ts +9 -3
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +9 -2
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/spec.d.ts +42 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +123 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/start.d.ts +28 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +18 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +9 -3
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +28 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +18 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/create-workspace.d.ts +36 -0
- package/dist/create-workspace.d.ts.map +1 -1
- package/dist/create-workspace.js +366 -8
- package/dist/create-workspace.js.map +1 -1
- package/dist/studio-events.d.ts +9 -0
- package/dist/studio-events.d.ts.map +1 -0
- package/dist/studio-events.js +30 -0
- package/dist/studio-events.js.map +1 -0
- package/package.json +15 -6
- package/template/AGENTS.md +25 -20
- package/template/README.md +31 -12
- package/template/apps/web/e2e/README.md +7 -0
- package/template/apps/web/package.json +4 -2
- package/template/apps/web/playwright.config.ts +4 -3
- package/template/apps/web/src/document.css +5 -0
- package/template/apps/web/src/main.tsx +48 -3
- package/template/apps/web/src/user-end/tailwind.css +5 -0
- package/template/apps/web/test/loopback.test.ts +8 -2
- package/template/apps/web/test/standard-user-surfaces.typecheck.tsx +27 -0
- package/template/apps/web/vite.config.ts +5 -2
- package/template/appspec/app.md +56 -0
- package/template/openxiangda.config.ts +50 -25
- package/template/package.json +4 -4
- package/template/packages/contracts/package.json +1 -1
- package/template/packages/contracts/src/generated.ts +143 -2
- package/template/apps/server/Dockerfile +0 -20
- package/template/apps/server/package.json +0 -27
- package/template/apps/server/src/app.module.ts +0 -43
- package/template/apps/server/src/main.ts +0 -5
- package/template/apps/server/test/smoke.test.ts +0 -16
- package/template/apps/server/tsconfig.json +0 -9
- package/template/apps/web/data-api-live.e2e.html +0 -15
- package/template/apps/web/e2e/client-fixture.ts +0 -5
- package/template/apps/web/e2e/data-api-live-fixture.tsx +0 -146
- package/template/apps/web/e2e/data-api-live.spec.ts +0 -138
- package/template/apps/web/e2e/field-protocol-fixture.tsx +0 -347
- package/template/apps/web/e2e/field-protocol.spec.ts +0 -186
- package/template/apps/web/e2e/resources.spec.ts +0 -285
- package/template/apps/web/e2e/workflow.spec.ts +0 -329
- package/template/apps/web/field-protocol.e2e.html +0 -15
- package/template/apps/web/scripts/check.mjs +0 -43
- package/template/apps/web/test/contracts.test.ts +0 -99
- package/template/scripts/verify-template-budget.mjs +0 -49
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenXiangda contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# openxiangda-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这是根包 CLI 的内部实现,应用通过 `openxiangda` 安装和运行。命令覆盖创建、上下文、中文资料、开发、统一检查、部署、状态、日志、恢复、环境启停、AppSpec 和 Skill 安装;完整参数运行 `pnpm openxiangda docs cli`。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
默认开发连接远端测试平台,自定义 Nest 后端按需启用。check 会生成并检查、测试、构建;前置失败时停止。deploy 已包含检查,生产只能晋级成功测试版本。平台 recovery 是恢复操作的权威。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
stdio mode: `pnpm exec openxiangda --mcp-stdio --cwd <workspace>`. They can read
|
|
9
|
-
`openxiangda://workspace/contracts` or call `contract_describe` to obtain the
|
|
10
|
-
compiler-owned `aiCatalog` and `aiCatalogDigest`. This transport does not add a
|
|
11
|
-
another executable and applications must not implement a second MCP server.
|
|
7
|
+
`--json` 输出一个 `openxiangda.cli-result/v2`。Studio 集成在 create、dev、check、deploy、logs、rollback 使用 `--json-events --run-id <uuid>`,每行一个 `openxiangda.cli-event/v1`;与 --json 互斥。模板引用和摘要成对验证;站点绑定初始化保留 ProjectProvisioningRun 对 Application 与 Git 的权威。
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
MCP 复用同一命令的 `--mcp-stdio --cwd <工作区绝对路径>` 模式。插件动态加载已禁用,避免其他命令覆盖当前版本实现。
|
package/bin/run.js
CHANGED
|
@@ -2,18 +2,9 @@
|
|
|
2
2
|
import { execute } from '@oclif/core';
|
|
3
3
|
import { readFileSync } from 'node:fs';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { DEVKIT_COMMANDS } from 'openxiangda-devkit-core';
|
|
5
6
|
|
|
6
|
-
const publicCommands = new Set(
|
|
7
|
-
'create',
|
|
8
|
-
'dev',
|
|
9
|
-
'check',
|
|
10
|
-
'deploy',
|
|
11
|
-
'status',
|
|
12
|
-
'logs',
|
|
13
|
-
'rollback',
|
|
14
|
-
'login',
|
|
15
|
-
'skill',
|
|
16
|
-
]);
|
|
7
|
+
const publicCommands = new Set(DEVKIT_COMMANDS.map(command => command.id));
|
|
17
8
|
const args = process.argv.slice(2);
|
|
18
9
|
|
|
19
10
|
if (args.includes('--mcp-stdio')) {
|
package/dist/base.d.ts
CHANGED
|
@@ -1,36 +1,58 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
-
import type
|
|
3
|
-
import { OpenXiangdaApplicationServices } from "openxiangda-devkit-core";
|
|
2
|
+
import { type DevkitResult } from "openxiangda-contracts";
|
|
3
|
+
import { OpenXiangdaApplicationServices, type OperationProgress } from "openxiangda-devkit-core";
|
|
4
4
|
export declare const workspaceFlags: {
|
|
5
5
|
cwd: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
6
|
};
|
|
7
|
+
export declare const studioEventFlags: {
|
|
8
|
+
"json-events": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
"run-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
export declare const studioWorkspaceFlags: {
|
|
12
|
+
"json-events": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
"run-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
cwd: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
};
|
|
7
16
|
export declare abstract class OpenXiangdaCommand extends Command {
|
|
8
17
|
static enableJsonFlag: boolean;
|
|
9
18
|
protected readonly services: OpenXiangdaApplicationServices;
|
|
19
|
+
private studioEventStream?;
|
|
20
|
+
private studioEventStarted;
|
|
10
21
|
protected catch(error: Error & {
|
|
11
22
|
exitCode?: number;
|
|
12
23
|
}): Promise<void>;
|
|
13
24
|
protected present(result: DevkitResult<unknown>): DevkitResult<unknown> | {
|
|
14
|
-
schemaVersion:
|
|
25
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
15
26
|
ok: boolean;
|
|
16
27
|
operation: string;
|
|
17
|
-
workspace: import("openxiangda-contracts").WorkspaceIdentity
|
|
28
|
+
workspace: import("openxiangda-contracts").WorkspaceIdentity | {
|
|
29
|
+
appCode: string;
|
|
30
|
+
name: string | undefined;
|
|
31
|
+
};
|
|
18
32
|
data: {} | null;
|
|
19
33
|
error: {
|
|
34
|
+
details?: Record<string, unknown>;
|
|
35
|
+
pointer?: string;
|
|
20
36
|
code: string;
|
|
21
37
|
message: string;
|
|
22
38
|
retryable: boolean;
|
|
23
39
|
remediation: string;
|
|
24
40
|
nextCommand: string | null;
|
|
25
41
|
} | null;
|
|
26
|
-
};
|
|
42
|
+
} | undefined;
|
|
43
|
+
protected machineOutputEnabled(): boolean;
|
|
44
|
+
protected beginStudioEvents(operation?: string): void;
|
|
45
|
+
protected emitStudioStatus(message: string, details?: Record<string, unknown>): void;
|
|
46
|
+
protected presentOperationProgress(event: OperationProgress): void;
|
|
27
47
|
protected toErrorJson(error: unknown): {
|
|
28
|
-
schemaVersion:
|
|
48
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
29
49
|
ok: boolean;
|
|
30
50
|
operation: string;
|
|
31
51
|
workspace: null;
|
|
32
52
|
data: null;
|
|
33
53
|
error: {
|
|
54
|
+
details?: Record<string, unknown>;
|
|
55
|
+
pointer?: string;
|
|
34
56
|
code: string;
|
|
35
57
|
message: string;
|
|
36
58
|
retryable: boolean;
|
|
@@ -39,6 +61,8 @@ export declare abstract class OpenXiangdaCommand extends Command {
|
|
|
39
61
|
};
|
|
40
62
|
};
|
|
41
63
|
private envelope;
|
|
64
|
+
private studioEventsEnabled;
|
|
65
|
+
private studioRunId;
|
|
42
66
|
private errorNextCommand;
|
|
43
67
|
}
|
|
44
68
|
//# sourceMappingURL=base.d.ts.map
|
package/dist/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAE7C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAE9B,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAIjC,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;CAmB5B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;CAGhC,CAAC;AAEF,8BAAsB,kBAAmB,SAAQ,OAAO;IACtD,MAAM,CAAC,cAAc,UAAQ;IAE7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,iCAExB;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAAS;cAEnB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAiB1D,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;IAuB/C,SAAS,CAAC,oBAAoB;IAI9B,SAAS,CAAC,iBAAiB,CAAC,SAAS,SAAuB;IAa5D,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAWvC,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,iBAAiB;IAO3D,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;IAmBpC,OAAO,CAAC,QAAQ;IAoChB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;CAqCzB"}
|
package/dist/base.js
CHANGED
|
@@ -1,16 +1,51 @@
|
|
|
1
|
+
import { developerError } from 'openxiangda-devkit-core';
|
|
1
2
|
import { Command, Flags } from "@oclif/core";
|
|
2
|
-
import {
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { STUDIO_CLI_RESULT_SCHEMA_VERSION, } from "openxiangda-contracts";
|
|
5
|
+
import { OpenXiangdaApplicationServices, commandDefinition, } from "openxiangda-devkit-core";
|
|
6
|
+
import { StudioCliEventStream } from "./studio-events.js";
|
|
3
7
|
import { resolveCliToolchainCapsule } from "./toolchain-capsule.js";
|
|
4
8
|
export const workspaceFlags = {
|
|
5
9
|
cwd: Flags.string({ summary: "应用工作区目录", helpValue: "<directory>" }),
|
|
6
10
|
};
|
|
11
|
+
export const studioEventFlags = {
|
|
12
|
+
"json-events": Flags.boolean({
|
|
13
|
+
summary: "按 openxiangda.cli-event/v1 输出 JSONL 事件",
|
|
14
|
+
exclusive: ["json"],
|
|
15
|
+
}),
|
|
16
|
+
"run-id": Flags.string({
|
|
17
|
+
summary: "Studio AgentRun ID;仅与 --json-events 一起使用",
|
|
18
|
+
helpValue: "<run-id>",
|
|
19
|
+
dependsOn: ["json-events"],
|
|
20
|
+
parse: async (input) => {
|
|
21
|
+
if (!input || input.length > 256) {
|
|
22
|
+
throw Object.assign(new Error("STUDIO_RUN_ID_INVALID: runId 必须为 1 到 256 个字符"), { code: "STUDIO_RUN_ID_INVALID", retryable: false });
|
|
23
|
+
}
|
|
24
|
+
return input;
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
export const studioWorkspaceFlags = {
|
|
29
|
+
...workspaceFlags,
|
|
30
|
+
...studioEventFlags,
|
|
31
|
+
};
|
|
7
32
|
export class OpenXiangdaCommand extends Command {
|
|
8
33
|
static enableJsonFlag = true;
|
|
9
34
|
services = new OpenXiangdaApplicationServices({
|
|
10
35
|
toolchainCapsule: resolveCliToolchainCapsule(),
|
|
11
36
|
});
|
|
37
|
+
studioEventStream;
|
|
38
|
+
studioEventStarted = false;
|
|
12
39
|
async catch(error) {
|
|
13
40
|
process.exitCode = error.exitCode ?? 1;
|
|
41
|
+
if (this.studioEventsEnabled()) {
|
|
42
|
+
this.beginStudioEvents();
|
|
43
|
+
this.studioEventStream.emit("command.failed", {
|
|
44
|
+
operation: this.id || "unknown",
|
|
45
|
+
result: this.toErrorJson(error),
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
14
49
|
if (this.jsonEnabled()) {
|
|
15
50
|
this.logJson(this.toErrorJson(error));
|
|
16
51
|
return;
|
|
@@ -20,6 +55,12 @@ export class OpenXiangdaCommand extends Command {
|
|
|
20
55
|
present(result) {
|
|
21
56
|
if (!result.ok)
|
|
22
57
|
process.exitCode = 1;
|
|
58
|
+
if (this.studioEventsEnabled()) {
|
|
59
|
+
this.beginStudioEvents(result.operation);
|
|
60
|
+
const envelope = this.envelope(result);
|
|
61
|
+
this.studioEventStream.emit(result.ok ? "command.completed" : "command.failed", { operation: result.operation, result: envelope });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
23
64
|
if (this.jsonEnabled())
|
|
24
65
|
return this.envelope(result);
|
|
25
66
|
this.log(`${result.ok ? "✓" : "✗"} ${result.operation}`);
|
|
@@ -33,45 +74,70 @@ export class OpenXiangdaCommand extends Command {
|
|
|
33
74
|
}
|
|
34
75
|
return result;
|
|
35
76
|
}
|
|
77
|
+
machineOutputEnabled() {
|
|
78
|
+
return this.jsonEnabled() || this.studioEventsEnabled();
|
|
79
|
+
}
|
|
80
|
+
beginStudioEvents(operation = this.id || "unknown") {
|
|
81
|
+
if (!this.studioEventsEnabled())
|
|
82
|
+
return;
|
|
83
|
+
if (!this.studioEventStream) {
|
|
84
|
+
this.studioEventStream = new StudioCliEventStream(this.studioRunId() || randomUUID());
|
|
85
|
+
}
|
|
86
|
+
if (!this.studioEventStarted) {
|
|
87
|
+
this.studioEventStarted = true;
|
|
88
|
+
this.studioEventStream.emit("command.started", { operation });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
emitStudioStatus(message, details = {}) {
|
|
92
|
+
if (!this.studioEventsEnabled())
|
|
93
|
+
return;
|
|
94
|
+
this.beginStudioEvents();
|
|
95
|
+
this.studioEventStream.emit("command.status", {
|
|
96
|
+
operation: this.id || "unknown",
|
|
97
|
+
message,
|
|
98
|
+
...details,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
presentOperationProgress(event) {
|
|
102
|
+
const state = { running: '进行中', passed: '完成', failed: '失败', skipped: '未执行' }[event.state];
|
|
103
|
+
const message = `${event.label}:${state},${(event.durationMs / 1000).toFixed(1)} 秒`;
|
|
104
|
+
if (this.studioEventsEnabled())
|
|
105
|
+
this.emitStudioStatus(message, { progress: event });
|
|
106
|
+
else
|
|
107
|
+
process.stderr.write(`${message}\n`);
|
|
108
|
+
}
|
|
36
109
|
toErrorJson(error) {
|
|
37
110
|
const message = error instanceof Error ? error.message : String(error || "未知错误");
|
|
38
111
|
const code = String(error?.code ||
|
|
39
112
|
message.match(/^([A-Z][A-Z0-9_]+)/)?.[1] ||
|
|
40
113
|
"OPENXIANGDA_COMMAND_FAILED");
|
|
41
114
|
const nextCommand = this.errorNextCommand(code);
|
|
42
|
-
const declaredRemediation = error?.remote?.remediation ||
|
|
43
|
-
error?.data?.remediation;
|
|
44
|
-
const retryable = Boolean(error?.retryable ||
|
|
45
|
-
error?.remote?.retryable ||
|
|
46
|
-
(error?.status &&
|
|
47
|
-
Number(error.status) >= 500) ||
|
|
48
|
-
/NETWORK|TIMEOUT|UNAVAILABLE|RATE_LIMIT/.test(code));
|
|
49
115
|
return {
|
|
50
|
-
schemaVersion:
|
|
116
|
+
schemaVersion: STUDIO_CLI_RESULT_SCHEMA_VERSION,
|
|
51
117
|
ok: false,
|
|
52
118
|
operation: this.id || "unknown",
|
|
53
119
|
workspace: null,
|
|
54
120
|
data: null,
|
|
55
|
-
error:
|
|
56
|
-
code,
|
|
57
|
-
message: message.replace(/^([A-Z][A-Z0-9_]+):\s*/, ""),
|
|
58
|
-
retryable,
|
|
59
|
-
remediation: typeof declaredRemediation === "string"
|
|
60
|
-
? declaredRemediation
|
|
61
|
-
: `运行 ${nextCommand}`,
|
|
62
|
-
nextCommand,
|
|
63
|
-
},
|
|
121
|
+
error: developerError(error, nextCommand),
|
|
64
122
|
};
|
|
65
123
|
}
|
|
66
124
|
envelope(result) {
|
|
67
125
|
const diagnostic = result.diagnostics.find(item => item.severity === "error");
|
|
68
126
|
const nextCommand = result.nextActions.find(action => action.command?.startsWith("openxiangda "))
|
|
69
127
|
?.command || (diagnostic ? this.errorNextCommand(diagnostic.code) : null);
|
|
128
|
+
const studioInitialization = result.data &&
|
|
129
|
+
typeof result.data === "object" &&
|
|
130
|
+
"studioInitialization" in result.data;
|
|
70
131
|
return {
|
|
71
|
-
schemaVersion:
|
|
132
|
+
schemaVersion: STUDIO_CLI_RESULT_SCHEMA_VERSION,
|
|
72
133
|
ok: result.ok,
|
|
73
134
|
operation: result.operation,
|
|
74
|
-
workspace:
|
|
135
|
+
workspace: studioInitialization
|
|
136
|
+
? {
|
|
137
|
+
appCode: result.workspace.appCode,
|
|
138
|
+
name: result.workspace.name,
|
|
139
|
+
}
|
|
140
|
+
: result.workspace,
|
|
75
141
|
data: result.data ?? null,
|
|
76
142
|
error: diagnostic
|
|
77
143
|
? {
|
|
@@ -81,10 +147,30 @@ export class OpenXiangdaCommand extends Command {
|
|
|
81
147
|
remediation: diagnostic.remediation ||
|
|
82
148
|
(nextCommand ? `运行 ${nextCommand}` : "检查错误后重试"),
|
|
83
149
|
nextCommand,
|
|
150
|
+
...(diagnostic.path ? { pointer: diagnostic.path } : {}),
|
|
151
|
+
...(diagnostic.details ? { details: diagnostic.details } : {}),
|
|
84
152
|
}
|
|
85
153
|
: null,
|
|
86
154
|
};
|
|
87
155
|
}
|
|
156
|
+
studioEventsEnabled() {
|
|
157
|
+
if (!this.argv.includes("--json-events"))
|
|
158
|
+
return false;
|
|
159
|
+
const command = commandDefinition(this.id || "");
|
|
160
|
+
return Boolean(command &&
|
|
161
|
+
"studioJsonEvents" in command &&
|
|
162
|
+
command.studioJsonEvents === true);
|
|
163
|
+
}
|
|
164
|
+
studioRunId() {
|
|
165
|
+
const inline = this.argv.find(argument => argument.startsWith("--run-id="));
|
|
166
|
+
if (inline) {
|
|
167
|
+
const value = inline.slice("--run-id=".length);
|
|
168
|
+
return value && value.length <= 256 ? value : undefined;
|
|
169
|
+
}
|
|
170
|
+
const index = this.argv.indexOf("--run-id");
|
|
171
|
+
const value = index >= 0 ? this.argv[index + 1] : undefined;
|
|
172
|
+
return value && value.length <= 256 ? value : undefined;
|
|
173
|
+
}
|
|
88
174
|
errorNextCommand(code) {
|
|
89
175
|
if (/AUTH|LOGIN|SESSION|TOKEN/.test(code)) {
|
|
90
176
|
return "openxiangda login --base-url <platform>";
|
|
@@ -92,24 +178,36 @@ export class OpenXiangdaCommand extends Command {
|
|
|
92
178
|
if (/PRODUCTION|PROMOTION/.test(code)) {
|
|
93
179
|
return "openxiangda deploy --environment production --from <test-deployment-id>";
|
|
94
180
|
}
|
|
181
|
+
if (code === "DELIVERY_RUN_ALREADY_ACTIVE") {
|
|
182
|
+
return "openxiangda status";
|
|
183
|
+
}
|
|
95
184
|
const currentCommand = {
|
|
96
|
-
|
|
185
|
+
admin: "openxiangda admin context --json",
|
|
186
|
+
create: "openxiangda create <directory> --base-url <platform>",
|
|
97
187
|
dev: "openxiangda dev",
|
|
98
188
|
check: "openxiangda check",
|
|
189
|
+
accept: "openxiangda accept --plan <file>",
|
|
99
190
|
deploy: "openxiangda deploy",
|
|
100
191
|
status: "openxiangda status",
|
|
101
192
|
logs: "openxiangda logs",
|
|
193
|
+
cancel: "openxiangda cancel <deployment-id>",
|
|
194
|
+
retry: "openxiangda retry <deployment-id>",
|
|
195
|
+
start: "openxiangda start",
|
|
196
|
+
stop: "openxiangda stop",
|
|
102
197
|
rollback: "openxiangda rollback --to <app-version-id>",
|
|
103
198
|
login: "openxiangda login --base-url <platform>",
|
|
199
|
+
spec: "openxiangda spec context --json",
|
|
104
200
|
};
|
|
105
201
|
const currentId = this.id;
|
|
106
202
|
if (currentId && currentCommand[currentId])
|
|
107
203
|
return currentCommand[currentId];
|
|
108
204
|
if (/LINK|WORKSPACE|APP_CODE|APP_NAME|TARGET_DIRECTORY/.test(code)) {
|
|
109
|
-
return "openxiangda create <directory>";
|
|
205
|
+
return "openxiangda create <directory> --base-url <platform>";
|
|
110
206
|
}
|
|
111
207
|
if (/DEPLOYMENT|STATUS|LOG/.test(code))
|
|
112
208
|
return "openxiangda status";
|
|
209
|
+
if (/APPSPEC/.test(code))
|
|
210
|
+
return "openxiangda spec check";
|
|
113
211
|
if (/DEV/.test(code))
|
|
114
212
|
return "openxiangda dev";
|
|
115
213
|
return "openxiangda check";
|
package/dist/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { OpenXiangdaCommand } from "../base.js";
|
|
2
|
+
export default class Accept extends OpenXiangdaCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
plan: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
cwd: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<import("openxiangda-contracts").DevkitResult<unknown> | {
|
|
9
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
10
|
+
ok: boolean;
|
|
11
|
+
operation: string;
|
|
12
|
+
workspace: import("openxiangda-contracts").WorkspaceIdentity | {
|
|
13
|
+
appCode: string;
|
|
14
|
+
name: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
data: {} | null;
|
|
17
|
+
error: {
|
|
18
|
+
details?: Record<string, unknown>;
|
|
19
|
+
pointer?: string;
|
|
20
|
+
code: string;
|
|
21
|
+
message: string;
|
|
22
|
+
retryable: boolean;
|
|
23
|
+
remediation: string;
|
|
24
|
+
nextCommand: string | null;
|
|
25
|
+
} | null;
|
|
26
|
+
} | undefined>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=accept.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,kBAAkB;IACpD,MAAM,CAAC,OAAO,SAA0B;IACxC,MAAM,CAAC,KAAK;;;MAOV;IAEI,GAAG;;;;;;;;;;;;;;;;;;;CASV"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { OpenXiangdaCommand, workspaceFlags } from "../base.js";
|
|
3
|
+
export default class Accept extends OpenXiangdaCommand {
|
|
4
|
+
static summary = "手动准备真实预发身份验收;不属于发布门禁";
|
|
5
|
+
static flags = {
|
|
6
|
+
...workspaceFlags,
|
|
7
|
+
plan: Flags.string({
|
|
8
|
+
required: true,
|
|
9
|
+
summary: "预发身份验收计划 JSON 文件",
|
|
10
|
+
helpValue: "<file>",
|
|
11
|
+
}),
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { flags } = await this.parse(Accept);
|
|
15
|
+
return this.present(await this.services.accept({
|
|
16
|
+
...(flags.cwd ? { root: flags.cwd } : {}),
|
|
17
|
+
planPath: flags.plan,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=accept.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,kBAAkB;IACpD,MAAM,CAAC,OAAO,GAAG,sBAAsB,CAAC;IACxC,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,cAAc;QACjB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,kBAAkB;YAC3B,SAAS,EAAE,QAAQ;SACpB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,IAAI;SACrB,CAAC,CACH,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { OpenXiangdaCommand } from "../base.js";
|
|
2
|
+
export default class Admin extends OpenXiangdaCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static args: {
|
|
5
|
+
action: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
workflowCode: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
cwd: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<import("openxiangda-contracts").DevkitResult<unknown> | {
|
|
13
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
14
|
+
ok: boolean;
|
|
15
|
+
operation: string;
|
|
16
|
+
workspace: import("openxiangda-contracts").WorkspaceIdentity | {
|
|
17
|
+
appCode: string;
|
|
18
|
+
name: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
data: {} | null;
|
|
21
|
+
error: {
|
|
22
|
+
details?: Record<string, unknown>;
|
|
23
|
+
pointer?: string;
|
|
24
|
+
code: string;
|
|
25
|
+
message: string;
|
|
26
|
+
retryable: boolean;
|
|
27
|
+
remediation: string;
|
|
28
|
+
nextCommand: string | null;
|
|
29
|
+
} | null;
|
|
30
|
+
} | undefined>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAGhE,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,kBAAkB;IACnD,MAAM,CAAC,OAAO,SAA2B;IACzC,MAAM,CAAC,IAAI;;;MAGT;IACF,MAAM,CAAC,KAAK;;;MAGV;IACI,GAAG;;;;;;;;;;;;;;;;;;;CAUV"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { OpenXiangdaCommand, workspaceFlags } from "../base.js";
|
|
3
|
+
import { DEVELOPER_ENVIRONMENTS, developerEnvironment } from "openxiangda-devkit-core";
|
|
4
|
+
export default class Admin extends OpenXiangdaCommand {
|
|
5
|
+
static summary = "只读查看当前应用管理能力和流程节点运行配置";
|
|
6
|
+
static args = {
|
|
7
|
+
action: Args.string({ required: true, options: ["context", "workflow"] }),
|
|
8
|
+
workflowCode: Args.string({ summary: "workflow 操作需要指定流程代码" }),
|
|
9
|
+
};
|
|
10
|
+
static flags = {
|
|
11
|
+
...workspaceFlags,
|
|
12
|
+
environment: Flags.string({ options: [...DEVELOPER_ENVIRONMENTS], default: "test", summary: "读取环境;默认测试环境" }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(Admin);
|
|
16
|
+
const environment = developerEnvironment(flags.environment);
|
|
17
|
+
if (args.action === "context") {
|
|
18
|
+
if (args.workflowCode)
|
|
19
|
+
throw new Error("ADMIN_CONTEXT_UNEXPECTED_WORKFLOW_CODE");
|
|
20
|
+
return this.present(await this.services.administrationContext(flags.cwd, environment));
|
|
21
|
+
}
|
|
22
|
+
if (!args.workflowCode)
|
|
23
|
+
throw new Error("WORKFLOW_CODE_REQUIRED: 请指定流程代码");
|
|
24
|
+
return this.present(await this.services.workflowNodeConfigurations(flags.cwd, args.workflowCode, environment));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,kBAAkB;IACnD,MAAM,CAAC,OAAO,GAAG,uBAAuB,CAAC;IACzC,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;QACzE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;KAC9D,CAAC;IACF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,cAAc;QACjB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;KAC7G,CAAC;IACF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IACjH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OpenXiangdaCommand } from '../base.js';
|
|
2
|
+
export default class Auth extends OpenXiangdaCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static args: {
|
|
5
|
+
action: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<import("openxiangda-contracts").DevkitResult<unknown> | {
|
|
11
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
12
|
+
ok: boolean;
|
|
13
|
+
operation: string;
|
|
14
|
+
workspace: import("openxiangda-contracts").WorkspaceIdentity | {
|
|
15
|
+
appCode: string;
|
|
16
|
+
name: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
data: {} | null;
|
|
19
|
+
error: {
|
|
20
|
+
details?: Record<string, unknown>;
|
|
21
|
+
pointer?: string;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
retryable: boolean;
|
|
25
|
+
remediation: string;
|
|
26
|
+
nextCommand: string | null;
|
|
27
|
+
} | null;
|
|
28
|
+
} | undefined>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,kBAAkB;IAClD,MAAM,CAAC,OAAO,SAA8B;IAC5C,MAAM,CAAC,IAAI;;MAAoE;IAC/E,MAAM,CAAC,KAAK;;MAA2E;IAEjF,GAAG;;;;;;;;;;;;;;;;;;;CAIV"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { developerAuthorizationStatus } from 'openxiangda-devkit-core';
|
|
3
|
+
import { OpenXiangdaCommand } from '../base.js';
|
|
4
|
+
export default class Auth extends OpenXiangdaCommand {
|
|
5
|
+
static summary = '只读核验指定平台的当前授权,不启动登录或刷新会话';
|
|
6
|
+
static args = { action: Args.string({ required: true, options: ['status'] }) };
|
|
7
|
+
static flags = { 'base-url': Flags.string({ required: true, summary: '明确指定目标平台地址' }) };
|
|
8
|
+
async run() {
|
|
9
|
+
const { flags } = await this.parse(Auth);
|
|
10
|
+
return this.present(await developerAuthorizationStatus({ baseUrl: flags['base-url'] }));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,kBAAkB;IAClD,MAAM,CAAC,OAAO,GAAG,0BAA0B,CAAC;IAC5C,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/E,MAAM,CAAC,KAAK,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAEvF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OpenXiangdaCommand } from '../base.js';
|
|
2
|
+
export default class Cancel extends OpenXiangdaCommand {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static args: {
|
|
5
|
+
deploymentId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
cwd: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<import("openxiangda-contracts").DevkitResult<unknown> | {
|
|
11
|
+
schemaVersion: "openxiangda.cli-result/v2";
|
|
12
|
+
ok: boolean;
|
|
13
|
+
operation: string;
|
|
14
|
+
workspace: import("openxiangda-contracts").WorkspaceIdentity | {
|
|
15
|
+
appCode: string;
|
|
16
|
+
name: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
data: {} | null;
|
|
19
|
+
error: {
|
|
20
|
+
details?: Record<string, unknown>;
|
|
21
|
+
pointer?: string;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
retryable: boolean;
|
|
25
|
+
remediation: string;
|
|
26
|
+
nextCommand: string | null;
|
|
27
|
+
} | null;
|
|
28
|
+
} | undefined>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=cancel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,kBAAkB;IACpD,MAAM,CAAC,OAAO,SAA+B;IAC7C,MAAM,CAAC,IAAI;;MAAqD;IAChE,MAAM,CAAC,KAAK;;MAAkB;IAExB,GAAG;;;;;;;;;;;;;;;;;;;CAMV"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { OpenXiangdaCommand, workspaceFlags } from '../base.js';
|
|
3
|
+
export default class Cancel extends OpenXiangdaCommand {
|
|
4
|
+
static summary = '幂等取消尚未提交激活的 DeploymentRun';
|
|
5
|
+
static args = { deploymentId: Args.string({ required: true }) };
|
|
6
|
+
static flags = workspaceFlags;
|
|
7
|
+
async run() {
|
|
8
|
+
const { args, flags } = await this.parse(Cancel);
|
|
9
|
+
return this.present(await this.services.cancel(flags.cwd, args.deploymentId));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=cancel.js.map
|