@superzerodev/cli 0.1.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/dist/args.d.ts +26 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +86 -0
- package/dist/args.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/client.d.ts +138 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +166 -0
- package/dist/client.js.map +1 -0
- package/dist/commands.d.ts +50 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +310 -0
- package/dist/commands.js.map +1 -0
- package/dist/config-loader.d.ts +19 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +80 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +19 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +72 -0
- package/dist/main.js.map +1 -0
- package/dist/output.d.ts +25 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +56 -0
- package/dist/output.js.map +1 -0
- package/dist/source-upload.d.ts +34 -0
- package/dist/source-upload.d.ts.map +1 -0
- package/dist/source-upload.js +44 -0
- package/dist/source-upload.js.map +1 -0
- package/package.json +42 -0
package/dist/output.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI の出力(P0設計 §6.1 / §5.9)
|
|
3
|
+
*
|
|
4
|
+
* ★ --json のときは stdout に JSON 以外を一切書かない。
|
|
5
|
+
* エージェントが JSON.parse する前提なので、進捗表示が混ざると壊れる。
|
|
6
|
+
* 人間向けのメッセージは stderr へ出す。
|
|
7
|
+
*/
|
|
8
|
+
import { formatChange, isSuperzeroError, wrapUnknown } from '@superzerodev/core';
|
|
9
|
+
export const consoleWriter = {
|
|
10
|
+
out: (line) => process.stdout.write(`${line}\n`),
|
|
11
|
+
err: (line) => process.stderr.write(`${line}\n`),
|
|
12
|
+
};
|
|
13
|
+
export function renderPlan(plan, { json, writer }) {
|
|
14
|
+
if (json) {
|
|
15
|
+
writer.out(JSON.stringify({ changes: plan.changes, destructiveKeys: plan.destructiveKeys }, null, 2));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const actionable = plan.changes.filter((c) => c.action !== 'noop');
|
|
19
|
+
if (actionable.length === 0) {
|
|
20
|
+
writer.out('No changes. Infrastructure is up to date.');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const change of plan.changes) {
|
|
24
|
+
writer.out(formatChange(change));
|
|
25
|
+
}
|
|
26
|
+
writer.out('');
|
|
27
|
+
writer.out(`${actionable.length} change(s) to apply.`);
|
|
28
|
+
if (plan.destructiveKeys.length > 0) {
|
|
29
|
+
writer.err(`Warning: ${plan.destructiveKeys.length} destructive change(s): ${plan.destructiveKeys.join(', ')}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* エラー出力。
|
|
34
|
+
* --json でも人間向けでも、必ず suggestedFix まで見せる。
|
|
35
|
+
* ここを削るとエージェントが自力で直せなくなる。
|
|
36
|
+
*/
|
|
37
|
+
export function renderError(raw, { json, writer }) {
|
|
38
|
+
const error = isSuperzeroError(raw) ? raw : wrapUnknown('cli', raw);
|
|
39
|
+
const payload = error.toJSON();
|
|
40
|
+
if (json) {
|
|
41
|
+
writer.out(JSON.stringify(payload, null, 2));
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
writer.err(`Error [${payload.code}]: ${payload.message}`);
|
|
45
|
+
if (payload.suggestedFix) {
|
|
46
|
+
writer.err('');
|
|
47
|
+
writer.err(` Fix: ${payload.suggestedFix.description}`);
|
|
48
|
+
if (payload.suggestedFix.command) {
|
|
49
|
+
writer.err(` Run: ${payload.suggestedFix.command}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
writer.err('');
|
|
53
|
+
writer.err(` Docs: ${payload.docsUrl}`);
|
|
54
|
+
return 1;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* プロジェクトを固めて Control Plane へ送る(指摘1の送り側)
|
|
3
|
+
*
|
|
4
|
+
* ★ CLI と MCP の両方がここを呼ぶ。2つ実装を持たない(§6.3)。
|
|
5
|
+
* 以前は CLI だけが workspaceDir を送り、MCP の plan は送っていなかった。
|
|
6
|
+
* そのため同じ宣言でも、CLI と MCP で plan の答えが違っていた。
|
|
7
|
+
*/
|
|
8
|
+
import type { ControlPlaneClient } from './client.js';
|
|
9
|
+
export interface UploadedProjectSource {
|
|
10
|
+
sourceId: string;
|
|
11
|
+
fileCount: number;
|
|
12
|
+
bytes: number;
|
|
13
|
+
/** ファイルの選び方。'git' なら .gitignore が効いている */
|
|
14
|
+
selection: 'git' | 'walk';
|
|
15
|
+
}
|
|
16
|
+
/** 宣言が compute を持つか。持たないなら送るものが無い */
|
|
17
|
+
export declare function declaresCompute(rawConfig: unknown): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* compute を宣言している場合だけ、ソースを固めて送る。
|
|
20
|
+
* 送らなかった場合は undefined を返す。
|
|
21
|
+
*/
|
|
22
|
+
export declare function uploadProjectSource(client: ControlPlaneClient, environmentId: string, config: {
|
|
23
|
+
raw: unknown;
|
|
24
|
+
workspaceDir: string;
|
|
25
|
+
}): Promise<UploadedProjectSource | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* 何を送ったかを1行で説明する。
|
|
28
|
+
*
|
|
29
|
+
* ★ 必ず見せること。.gitignore が効くので
|
|
30
|
+
* 「手元にはあるのに送られていない」ファイルが出る。
|
|
31
|
+
* 黙って落とすと、動かない理由が誰にも分からなくなる。
|
|
32
|
+
*/
|
|
33
|
+
export declare function describeUpload(uploaded: UploadedProjectSource): string;
|
|
34
|
+
//# sourceMappingURL=source-upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-upload.d.ts","sourceRoot":"","sources":["../src/source-upload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAC1B;AAED,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAM3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAW5C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAOtE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* プロジェクトを固めて Control Plane へ送る(指摘1の送り側)
|
|
3
|
+
*
|
|
4
|
+
* ★ CLI と MCP の両方がここを呼ぶ。2つ実装を持たない(§6.3)。
|
|
5
|
+
* 以前は CLI だけが workspaceDir を送り、MCP の plan は送っていなかった。
|
|
6
|
+
* そのため同じ宣言でも、CLI と MCP で plan の答えが違っていた。
|
|
7
|
+
*/
|
|
8
|
+
import { formatBytes, packSource } from '@superzerodev/core';
|
|
9
|
+
/** 宣言が compute を持つか。持たないなら送るものが無い */
|
|
10
|
+
export function declaresCompute(rawConfig) {
|
|
11
|
+
return (typeof rawConfig === 'object' &&
|
|
12
|
+
rawConfig !== null &&
|
|
13
|
+
rawConfig.compute !== undefined);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* compute を宣言している場合だけ、ソースを固めて送る。
|
|
17
|
+
* 送らなかった場合は undefined を返す。
|
|
18
|
+
*/
|
|
19
|
+
export async function uploadProjectSource(client, environmentId, config) {
|
|
20
|
+
if (!declaresCompute(config.raw))
|
|
21
|
+
return undefined;
|
|
22
|
+
const packed = await packSource(config.workspaceDir);
|
|
23
|
+
const uploaded = await client.uploadSource(environmentId, packed.archive);
|
|
24
|
+
return {
|
|
25
|
+
sourceId: uploaded.sourceId,
|
|
26
|
+
fileCount: packed.fileCount,
|
|
27
|
+
bytes: packed.bytes,
|
|
28
|
+
selection: packed.selection,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 何を送ったかを1行で説明する。
|
|
33
|
+
*
|
|
34
|
+
* ★ 必ず見せること。.gitignore が効くので
|
|
35
|
+
* 「手元にはあるのに送られていない」ファイルが出る。
|
|
36
|
+
* 黙って落とすと、動かない理由が誰にも分からなくなる。
|
|
37
|
+
*/
|
|
38
|
+
export function describeUpload(uploaded) {
|
|
39
|
+
return (`Uploaded ${uploaded.fileCount} file(s), ${formatBytes(uploaded.bytes)}` +
|
|
40
|
+
(uploaded.selection === 'git'
|
|
41
|
+
? ' (files ignored by git were not sent).'
|
|
42
|
+
: ' (no git repository here; build directories were skipped).'));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=source-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-upload.js","sourceRoot":"","sources":["../src/source-upload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAY5D,qCAAqC;AACrC,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QACjB,SAAmC,CAAC,OAAO,KAAK,SAAS,CAC3D,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA0B,EAC1B,aAAqB,EACrB,MAA8C;IAE9C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAElD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACzE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAA+B;IAC5D,OAAO,CACL,YAAY,QAAQ,CAAC,SAAS,aAAa,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACxE,CAAC,QAAQ,CAAC,SAAS,KAAK,KAAK;YAC3B,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,4DAA4D,CAAC,CAClE,CAAA;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@superzerodev/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@superzerodev/config": "0.1.0",
|
|
9
|
+
"@superzerodev/core": "0.1.0"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"superzero": "./dist/bin.js"
|
|
13
|
+
},
|
|
14
|
+
"description": "The Superzero CLI. Plan, apply and verify a whole app from one declaration file.",
|
|
15
|
+
"license": "UNLICENSED",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/mashihara/superzero.git",
|
|
19
|
+
"directory": "apps/cli"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=22"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"!dist/__tests__"
|
|
30
|
+
],
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"default": "./dist/index.js"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc -p tsconfig.json",
|
|
39
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
40
|
+
"test": "tsc -p tsconfig.json && node --test \"dist/__tests__/*.test.js\""
|
|
41
|
+
}
|
|
42
|
+
}
|