@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/commands.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 各コマンドの実装(P0設計 §6.1)
|
|
3
|
+
*
|
|
4
|
+
* 規律:
|
|
5
|
+
* - 対話プロンプトを書かない(AG-05)。--yes は互換のために受けるだけ。
|
|
6
|
+
* - --json のとき stdout は JSON のみ。人間向けは stderr。
|
|
7
|
+
* - 戻り値は終了コード。0 = 成功、1 = 失敗。
|
|
8
|
+
*/
|
|
9
|
+
import { SuperzeroError } from '@superzerodev/core';
|
|
10
|
+
import { loadConfig } from './config-loader.js';
|
|
11
|
+
import { renderPlan } from './output.js';
|
|
12
|
+
import { describeUpload, uploadProjectSource } from './source-upload.js';
|
|
13
|
+
function requireEnvironment(args, deps) {
|
|
14
|
+
const id = args.env ?? deps.defaultEnvironmentId;
|
|
15
|
+
if (!id) {
|
|
16
|
+
throw new SuperzeroError({
|
|
17
|
+
code: 'CONFIG_INVALID',
|
|
18
|
+
message: 'No environment specified.',
|
|
19
|
+
suggestedFix: {
|
|
20
|
+
description: 'Pass --env <id>, or set the SUPERZERO_ENV environment variable.',
|
|
21
|
+
command: 'superzero plan --env <id>',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return id;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* projects create <name>
|
|
29
|
+
*
|
|
30
|
+
* ★ 環境IDを標準出力へ、それ以外を標準エラーへ出す。
|
|
31
|
+
* エージェントが `superzero projects create app` の出力を
|
|
32
|
+
* そのまま SUPERZERO_ENV に渡せる形にしておく。
|
|
33
|
+
*/
|
|
34
|
+
export async function runProjects(args, deps) {
|
|
35
|
+
const [sub, name, ...more] = args.positionals;
|
|
36
|
+
/**
|
|
37
|
+
* projects keep <name>...
|
|
38
|
+
*
|
|
39
|
+
* ★ Pro を解約して Free に戻ったとき、どれを残すかは利用者が決める。
|
|
40
|
+
* こちらで勝手に止めない。選ぶまで新しいデプロイは止まる(動いているものは動く)。
|
|
41
|
+
*/
|
|
42
|
+
if (sub === 'keep') {
|
|
43
|
+
const names = [name, ...more].filter((n) => Boolean(n));
|
|
44
|
+
if (names.length === 0) {
|
|
45
|
+
deps.writer.err('Usage: superzero projects keep <name> [<name>...]');
|
|
46
|
+
return 2;
|
|
47
|
+
}
|
|
48
|
+
const result = await deps.client.keepProjects(names);
|
|
49
|
+
if (args.json) {
|
|
50
|
+
deps.writer.out(JSON.stringify(result, null, 2));
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
deps.writer.err(`Keeping: ${result.kept.join(', ')}`);
|
|
54
|
+
deps.writer.err(result.paused.length > 0
|
|
55
|
+
? `Paused (not deleted; resume by upgrading to Pro): ${result.paused.join(', ')}`
|
|
56
|
+
: 'Nothing paused.');
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
if (sub !== 'create' || !name) {
|
|
60
|
+
deps.writer.err('Usage: superzero projects create <name> | keep <name>...');
|
|
61
|
+
return 2;
|
|
62
|
+
}
|
|
63
|
+
const result = await deps.client.createProject(name, undefined);
|
|
64
|
+
if (args.json) {
|
|
65
|
+
deps.writer.out(JSON.stringify(result, null, 2));
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
// 既にあっても失敗にしない。エージェントは再試行する
|
|
69
|
+
deps.writer.err(result.created ? `Created project ${name}.` : `Project ${name} already exists.`);
|
|
70
|
+
deps.writer.err('Pass this to SUPERZERO_ENV or --env:');
|
|
71
|
+
deps.writer.out(result.environmentId);
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
/** keys list | create [name] | revoke <id> */
|
|
75
|
+
export async function runKeys(args, deps) {
|
|
76
|
+
const [sub, arg] = args.positionals;
|
|
77
|
+
if (sub === 'list') {
|
|
78
|
+
const { keys } = await deps.client.listKeys();
|
|
79
|
+
if (args.json) {
|
|
80
|
+
deps.writer.out(JSON.stringify(keys, null, 2));
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
if (keys.length === 0) {
|
|
84
|
+
deps.writer.out('No keys.');
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
for (const k of keys) {
|
|
88
|
+
// ★ 失効済みも出す。消えたのか失効したのか分からないと漏洩を追えない
|
|
89
|
+
const state = k.revokedAt ? 'revoked' : 'active ';
|
|
90
|
+
const used = k.lastUsedAt ? `last used ${k.lastUsedAt.slice(0, 10)}` : 'never used';
|
|
91
|
+
deps.writer.out(` ${state} ${k.prefix}… ${k.id} ${k.name ?? '-'} (${used})`);
|
|
92
|
+
}
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
if (sub === 'create') {
|
|
96
|
+
const { key } = await deps.client.createKey(arg);
|
|
97
|
+
if (args.json) {
|
|
98
|
+
deps.writer.out(JSON.stringify(key, null, 2));
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
// ★ 平文はここでしか読めない。標準出力へ出してリダイレクトできるようにする
|
|
102
|
+
deps.writer.err('This is the only time the key can be read. Store it now.');
|
|
103
|
+
deps.writer.out(key.token);
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
if (sub === 'revoke' && arg) {
|
|
107
|
+
await deps.client.revokeKey(arg);
|
|
108
|
+
deps.writer.err(`Revoked ${arg}.`);
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
deps.writer.err('Usage: superzero keys list | create [name] | revoke <id>');
|
|
112
|
+
return 2;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* usage
|
|
116
|
+
*
|
|
117
|
+
* ★ 測っていないものを 0 と書かない。
|
|
118
|
+
* 「SMS 0 通」と出せば、実際に送っている顧客に嘘をつくことになる。
|
|
119
|
+
* 記録していないメトリクスは、そう明示する。
|
|
120
|
+
*/
|
|
121
|
+
export async function runUsage(args, deps) {
|
|
122
|
+
const usage = await deps.client.usage();
|
|
123
|
+
if (args.json) {
|
|
124
|
+
deps.writer.out(JSON.stringify(usage, null, 2));
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
if (!usage.available) {
|
|
128
|
+
deps.writer.out('Usage metering is not enabled on this control plane.');
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
deps.writer.out(`Usage since ${usage.periodStart?.slice(0, 10) ?? 'the start of the month'}:`);
|
|
132
|
+
if (usage.metrics.length === 0) {
|
|
133
|
+
deps.writer.out(' nothing recorded yet');
|
|
134
|
+
}
|
|
135
|
+
for (const m of usage.metrics) {
|
|
136
|
+
deps.writer.out(` ${m.metric.padEnd(16)} ${m.quantity}`);
|
|
137
|
+
}
|
|
138
|
+
if (usage.notRecorded.length > 0) {
|
|
139
|
+
deps.writer.out('');
|
|
140
|
+
deps.writer.out(`Not measured yet (absence here does not mean zero): ${usage.notRecorded.join(', ')}`);
|
|
141
|
+
}
|
|
142
|
+
deps.writer.out('');
|
|
143
|
+
deps.writer.out('Plan limits: superzero billing');
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* billing / billing setup
|
|
148
|
+
*
|
|
149
|
+
* ★ カード入力は人がやる。CLI は URL を出すところまで。
|
|
150
|
+
* エージェントはこの URL を人に渡す。それ以上は自動化しない(AG-05 とは別の理由:
|
|
151
|
+
* 決済は本人の意思表示であり、代理で通してはいけない)。
|
|
152
|
+
*/
|
|
153
|
+
export async function runBilling(args, deps) {
|
|
154
|
+
const [sub] = args.positionals;
|
|
155
|
+
if (sub === 'setup') {
|
|
156
|
+
const { checkoutUrl } = await deps.client.billingCheckout();
|
|
157
|
+
if (args.json) {
|
|
158
|
+
deps.writer.out(JSON.stringify({ checkoutUrl }, null, 2));
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
deps.writer.err('Open this URL in a browser to register a card and switch to Pro.');
|
|
162
|
+
deps.writer.err('Pro unlocks SMS verification and up to 5 projects. Billed monthly from today.');
|
|
163
|
+
deps.writer.out(checkoutUrl);
|
|
164
|
+
return 0;
|
|
165
|
+
}
|
|
166
|
+
if (sub === undefined) {
|
|
167
|
+
const status = await deps.client.billing();
|
|
168
|
+
if (args.json) {
|
|
169
|
+
deps.writer.out(JSON.stringify(status, null, 2));
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
172
|
+
deps.writer.out(`Plan: ${status.plan}`);
|
|
173
|
+
if (status.projectLimit !== undefined) {
|
|
174
|
+
deps.writer.out(`Projects: ${status.projectsUsed ?? 0} of ${status.projectLimit}`);
|
|
175
|
+
}
|
|
176
|
+
if (status.locked && status.locked.length > 0) {
|
|
177
|
+
deps.writer.out(`Locked on this plan: ${status.locked.join(', ')}`);
|
|
178
|
+
}
|
|
179
|
+
if (status.selectionRequired) {
|
|
180
|
+
deps.writer.out('Action needed: choose which projects to keep (superzero projects keep <name>...).');
|
|
181
|
+
}
|
|
182
|
+
if (status.plan === 'free') {
|
|
183
|
+
deps.writer.out(status.billingAvailable
|
|
184
|
+
? 'Upgrade: superzero billing setup'
|
|
185
|
+
: 'Card registration is not available on this control plane.');
|
|
186
|
+
}
|
|
187
|
+
return 0;
|
|
188
|
+
}
|
|
189
|
+
deps.writer.err('Usage: superzero billing | billing setup');
|
|
190
|
+
return 2;
|
|
191
|
+
}
|
|
192
|
+
/** ソースを送り、何を送ったかを利用者に見せる。--json のときは黙る */
|
|
193
|
+
async function sendSource(environmentId, config, args, deps) {
|
|
194
|
+
const uploaded = await uploadProjectSource(deps.client, environmentId, config);
|
|
195
|
+
if (!uploaded)
|
|
196
|
+
return undefined;
|
|
197
|
+
if (!args.json)
|
|
198
|
+
deps.writer.err(describeUpload(uploaded));
|
|
199
|
+
return uploaded.sourceId;
|
|
200
|
+
}
|
|
201
|
+
export async function runPlan(args, deps) {
|
|
202
|
+
const environmentId = requireEnvironment(args, deps);
|
|
203
|
+
const config = await loadConfig(args.config, deps.cwd);
|
|
204
|
+
// ★ plan にもソースが要る。無いとサーバーはコードの変更を見られず、
|
|
205
|
+
// 宣言が同じままコードだけ変えた場合に「変更なし」と答えてしまう。
|
|
206
|
+
const sourceId = await sendSource(environmentId, config, args, deps);
|
|
207
|
+
const plan = await deps.client.plan(environmentId, config.raw, {
|
|
208
|
+
allowDestructive: args.allowDestructive,
|
|
209
|
+
...(sourceId ? { sourceId } : {}),
|
|
210
|
+
});
|
|
211
|
+
renderPlan(plan, { json: args.json, writer: deps.writer });
|
|
212
|
+
return 0;
|
|
213
|
+
}
|
|
214
|
+
export async function runApply(args, deps) {
|
|
215
|
+
const environmentId = requireEnvironment(args, deps);
|
|
216
|
+
const config = await loadConfig(args.config, deps.cwd);
|
|
217
|
+
const sourceId = await sendSource(environmentId, config, args, deps);
|
|
218
|
+
const result = await deps.client.apply(environmentId, config.raw, {
|
|
219
|
+
allowDestructive: args.allowDestructive,
|
|
220
|
+
...(sourceId ? { sourceId } : {}),
|
|
221
|
+
});
|
|
222
|
+
if (args.json) {
|
|
223
|
+
deps.writer.out(JSON.stringify(result, null, 2));
|
|
224
|
+
return result.ok ? 0 : 1;
|
|
225
|
+
}
|
|
226
|
+
for (const key of result.applied)
|
|
227
|
+
deps.writer.out(` applied ${key}`);
|
|
228
|
+
for (const key of result.skipped)
|
|
229
|
+
deps.writer.out(` skipped ${key}`);
|
|
230
|
+
if (!result.ok && result.failure) {
|
|
231
|
+
deps.writer.err('');
|
|
232
|
+
deps.writer.err(`Failed at ${result.failure.key}.`);
|
|
233
|
+
renderNormalizedError(result.failure.error, deps.writer);
|
|
234
|
+
return 1;
|
|
235
|
+
}
|
|
236
|
+
deps.writer.out('');
|
|
237
|
+
deps.writer.out(`Applied ${result.applied.length} change(s).`);
|
|
238
|
+
if (result.verify)
|
|
239
|
+
renderVerify(result.verify, deps.writer);
|
|
240
|
+
return result.verify && !result.verify.ok ? 1 : 0;
|
|
241
|
+
}
|
|
242
|
+
export async function runVerify(args, deps) {
|
|
243
|
+
const environmentId = requireEnvironment(args, deps);
|
|
244
|
+
const result = await deps.client.verify(environmentId);
|
|
245
|
+
if (args.json) {
|
|
246
|
+
deps.writer.out(JSON.stringify(result, null, 2));
|
|
247
|
+
return result.ok ? 0 : 1;
|
|
248
|
+
}
|
|
249
|
+
renderVerify(result, deps.writer);
|
|
250
|
+
return result.ok ? 0 : 1;
|
|
251
|
+
}
|
|
252
|
+
export async function runStatus(args, deps) {
|
|
253
|
+
const environmentId = requireEnvironment(args, deps);
|
|
254
|
+
const status = await deps.client.status(environmentId);
|
|
255
|
+
if (args.json) {
|
|
256
|
+
deps.writer.out(JSON.stringify(status, null, 2));
|
|
257
|
+
return 0;
|
|
258
|
+
}
|
|
259
|
+
renderStatus(status, deps.writer);
|
|
260
|
+
return 0;
|
|
261
|
+
}
|
|
262
|
+
export function runNotImplemented(command, deps) {
|
|
263
|
+
const error = new SuperzeroError({
|
|
264
|
+
code: 'COMMAND_NOT_IMPLEMENTED',
|
|
265
|
+
message: `"superzero ${command}" is not implemented yet.`,
|
|
266
|
+
suggestedFix: {
|
|
267
|
+
description: `This command is planned but not available in this build. ` +
|
|
268
|
+
`Use plan, apply, verify, or status.`,
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
deps.writer.err(`Error [${error.code}]: ${error.message}`);
|
|
272
|
+
return 1;
|
|
273
|
+
}
|
|
274
|
+
// --- 表示 --------------------------------------------------------------------
|
|
275
|
+
function renderVerify(result, writer) {
|
|
276
|
+
writer.out('');
|
|
277
|
+
writer.out(result.ok ? 'Verification passed.' : 'Verification failed.');
|
|
278
|
+
for (const check of result.checks) {
|
|
279
|
+
// ★ skipped を「ok」と表示しない。確認していないことが見えなくなる
|
|
280
|
+
const mark = check.skipped !== undefined ? 'skip' : check.ok ? 'ok ' : 'FAIL';
|
|
281
|
+
const timing = check.durationMs === undefined ? '' : ` (${check.durationMs}ms)`;
|
|
282
|
+
writer.out(` ${mark} ${check.name}${timing}`);
|
|
283
|
+
if (check.skipped !== undefined)
|
|
284
|
+
writer.out(` ${check.skipped}`);
|
|
285
|
+
else if (!check.ok && check.error)
|
|
286
|
+
renderNormalizedError(check.error, writer);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function renderStatus(status, writer) {
|
|
290
|
+
if (status.resources.length === 0) {
|
|
291
|
+
writer.out('No resources. Run apply to provision them.');
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
for (const r of status.resources) {
|
|
295
|
+
writer.out(` ${r.status.padEnd(9)} ${r.kind}:${r.logicalName} (${r.provider})`);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/** サーバー由来の正規化エラーを人間向けに出す。suggestedFix を必ず見せる */
|
|
299
|
+
function renderNormalizedError(raw, writer) {
|
|
300
|
+
const error = raw;
|
|
301
|
+
writer.err(` [${error.code ?? 'UNKNOWN'}] ${error.message ?? ''}`);
|
|
302
|
+
if (error.suggestedFix) {
|
|
303
|
+
writer.err(` Fix: ${error.suggestedFix.description}`);
|
|
304
|
+
if (error.suggestedFix.command)
|
|
305
|
+
writer.err(` Run: ${error.suggestedFix.command}`);
|
|
306
|
+
}
|
|
307
|
+
if (error.docsUrl)
|
|
308
|
+
writer.err(` Docs: ${error.docsUrl}`);
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* superzero.config.ts の読み込み
|
|
3
|
+
*
|
|
4
|
+
* ★ ビルド手順を挟まない。Node 24 は .ts を型除去して直接 import できる(実機確認済み)。
|
|
5
|
+
* エージェントに「まず tsc を通せ」と要求すると、それだけで自走が止まる。
|
|
6
|
+
*
|
|
7
|
+
* 注意: 型除去であって完全な TS 変換ではない。enum や namespace、
|
|
8
|
+
* デコレータは使えない。宣言ファイルにそれらが要ることはまず無い。
|
|
9
|
+
*/
|
|
10
|
+
export interface LoadedConfig {
|
|
11
|
+
/** 検証前の生の値。検証は Control Plane 側で行う(唯一の正典にするため) */
|
|
12
|
+
raw: unknown;
|
|
13
|
+
/** 解決済みの絶対パス */
|
|
14
|
+
path: string;
|
|
15
|
+
/** 設定ファイルのあるディレクトリ。ビルドのソースになる */
|
|
16
|
+
workspaceDir: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function loadConfig(configPath: string, cwd?: string): Promise<LoadedConfig>;
|
|
19
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,GAAG,EAAE,OAAO,CAAA;IACZ,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAA;CACrB;AASD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqE/F"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* superzero.config.ts の読み込み
|
|
3
|
+
*
|
|
4
|
+
* ★ ビルド手順を挟まない。Node 24 は .ts を型除去して直接 import できる(実機確認済み)。
|
|
5
|
+
* エージェントに「まず tsc を通せ」と要求すると、それだけで自走が止まる。
|
|
6
|
+
*
|
|
7
|
+
* 注意: 型除去であって完全な TS 変換ではない。enum や namespace、
|
|
8
|
+
* デコレータは使えない。宣言ファイルにそれらが要ることはまず無い。
|
|
9
|
+
*/
|
|
10
|
+
import { access } from 'node:fs/promises';
|
|
11
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
12
|
+
import { pathToFileURL } from 'node:url';
|
|
13
|
+
import { SuperzeroError } from '@superzerodev/core';
|
|
14
|
+
function isUnknownExtension(err) {
|
|
15
|
+
return (typeof err === 'object' && err !== null && 'code' in err &&
|
|
16
|
+
err.code === 'ERR_UNKNOWN_FILE_EXTENSION');
|
|
17
|
+
}
|
|
18
|
+
export async function loadConfig(configPath, cwd = process.cwd()) {
|
|
19
|
+
const path = isAbsolute(configPath) ? configPath : resolve(cwd, configPath);
|
|
20
|
+
try {
|
|
21
|
+
await access(path);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new SuperzeroError({
|
|
25
|
+
code: 'CONFIG_INVALID',
|
|
26
|
+
message: `No config file at ${path}.`,
|
|
27
|
+
suggestedFix: {
|
|
28
|
+
description: 'Create superzero.config.ts in the project root, or pass --config with the correct path. ' +
|
|
29
|
+
'A minimal config only needs a name: `export default defineApp({ name: "my-app" })`.',
|
|
30
|
+
command: 'superzero init',
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
let module;
|
|
35
|
+
try {
|
|
36
|
+
module = (await import(pathToFileURL(path).href));
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
// ★ 原因が Node のバージョンなら、そう言う。
|
|
40
|
+
// 「宣言的に書け」と案内すると、エージェントは設定ファイルを無駄に書き直す。
|
|
41
|
+
// 実際に Node 18 でこの誤誘導が起きることを確認して追加した。
|
|
42
|
+
if (isUnknownExtension(err)) {
|
|
43
|
+
throw new SuperzeroError({
|
|
44
|
+
code: 'CONFIG_INVALID',
|
|
45
|
+
message: `This Node.js (${process.version}) cannot import TypeScript config files. ` +
|
|
46
|
+
`Superzero reads superzero.config.ts directly, without a build step, ` +
|
|
47
|
+
`which needs Node.js 24 or newer.`,
|
|
48
|
+
cause: { provider: 'cli', raw: String(err) },
|
|
49
|
+
suggestedFix: {
|
|
50
|
+
description: 'Upgrade to Node.js 24, or rename the config to superzero.config.mjs and write it ' +
|
|
51
|
+
'as plain JavaScript — that works on any Node.js version. ' +
|
|
52
|
+
'Do not edit the contents of the config; the file itself is fine.',
|
|
53
|
+
command: 'superzero plan --config superzero.config.mjs',
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
throw new SuperzeroError({
|
|
58
|
+
code: 'CONFIG_INVALID',
|
|
59
|
+
message: `Could not load ${path}: ${err instanceof Error ? err.message : String(err)}`,
|
|
60
|
+
cause: { provider: 'cli', raw: String(err) },
|
|
61
|
+
suggestedFix: {
|
|
62
|
+
description: 'The config file threw while being imported. Keep it declarative — it should only ' +
|
|
63
|
+
'export a default object and must not perform side effects, network calls, or use ' +
|
|
64
|
+
'TypeScript features beyond type annotations (no enum, namespace, or decorators).',
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (module.default === undefined) {
|
|
69
|
+
throw new SuperzeroError({
|
|
70
|
+
code: 'CONFIG_INVALID',
|
|
71
|
+
message: `${path} has no default export.`,
|
|
72
|
+
suggestedFix: {
|
|
73
|
+
description: 'Export the app definition as the default export: ' +
|
|
74
|
+
'`import { defineApp } from "@superzerodev/config"; export default defineApp({ ... })`.',
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return { raw: module.default, path, workspaceDir: resolve(path, '..') };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI のエントリ(P0設計 §6.1)
|
|
3
|
+
*
|
|
4
|
+
* 環境変数:
|
|
5
|
+
* SUPERZERO_URL Control Plane の URL(既定 http://localhost:8787)
|
|
6
|
+
* SUPERZERO_TOKEN API トークン
|
|
7
|
+
* SUPERZERO_ENV --env 未指定時の環境ID
|
|
8
|
+
*/
|
|
9
|
+
import { type Writer } from './output.js';
|
|
10
|
+
export interface RunOptions {
|
|
11
|
+
argv: string[];
|
|
12
|
+
env?: NodeJS.ProcessEnv;
|
|
13
|
+
writer?: Writer;
|
|
14
|
+
cwd?: string;
|
|
15
|
+
fetchImpl?: typeof fetch;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_BASE_URL = "http://localhost:8787";
|
|
18
|
+
export declare function run(options: RunOptions): Promise<number>;
|
|
19
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED,eAAO,MAAM,gBAAgB,0BAA0B,CAAA;AAEvD,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2D9D"}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI のエントリ(P0設計 §6.1)
|
|
3
|
+
*
|
|
4
|
+
* 環境変数:
|
|
5
|
+
* SUPERZERO_URL Control Plane の URL(既定 http://localhost:8787)
|
|
6
|
+
* SUPERZERO_TOKEN API トークン
|
|
7
|
+
* SUPERZERO_ENV --env 未指定時の環境ID
|
|
8
|
+
*/
|
|
9
|
+
import { UsageError, parseCliArgs, USAGE } from './args.js';
|
|
10
|
+
import { ControlPlaneClient } from './client.js';
|
|
11
|
+
import { runApply, runNotImplemented, runPlan, runProjects, runKeys, runStatus, runVerify, runBilling, runUsage, } from './commands.js';
|
|
12
|
+
import { consoleWriter, renderError } from './output.js';
|
|
13
|
+
export const DEFAULT_BASE_URL = 'http://localhost:8787';
|
|
14
|
+
export async function run(options) {
|
|
15
|
+
const env = options.env ?? process.env;
|
|
16
|
+
const writer = options.writer ?? consoleWriter;
|
|
17
|
+
const cwd = options.cwd ?? process.cwd();
|
|
18
|
+
let args;
|
|
19
|
+
try {
|
|
20
|
+
args = parseCliArgs(options.argv);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err instanceof UsageError) {
|
|
24
|
+
writer.err(err.message);
|
|
25
|
+
writer.err('');
|
|
26
|
+
writer.err(err.usage);
|
|
27
|
+
return 2;
|
|
28
|
+
}
|
|
29
|
+
return renderError(err, { json: false, writer });
|
|
30
|
+
}
|
|
31
|
+
const client = new ControlPlaneClient({
|
|
32
|
+
baseUrl: env['SUPERZERO_URL'] ?? DEFAULT_BASE_URL,
|
|
33
|
+
token: env['SUPERZERO_TOKEN'],
|
|
34
|
+
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
35
|
+
});
|
|
36
|
+
const deps = {
|
|
37
|
+
client,
|
|
38
|
+
writer,
|
|
39
|
+
cwd,
|
|
40
|
+
defaultEnvironmentId: env['SUPERZERO_ENV'],
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
switch (args.command) {
|
|
44
|
+
case 'keys':
|
|
45
|
+
return await runKeys(args, deps);
|
|
46
|
+
case 'billing':
|
|
47
|
+
return await runBilling(args, deps);
|
|
48
|
+
case 'usage':
|
|
49
|
+
return await runUsage(args, deps);
|
|
50
|
+
case 'projects':
|
|
51
|
+
return await runProjects(args, deps);
|
|
52
|
+
case 'plan':
|
|
53
|
+
return await runPlan(args, deps);
|
|
54
|
+
case 'apply':
|
|
55
|
+
return await runApply(args, deps);
|
|
56
|
+
case 'verify':
|
|
57
|
+
return await runVerify(args, deps);
|
|
58
|
+
case 'status':
|
|
59
|
+
return await runStatus(args, deps);
|
|
60
|
+
case 'secrets':
|
|
61
|
+
case 'logs':
|
|
62
|
+
return runNotImplemented(args.command, deps);
|
|
63
|
+
default:
|
|
64
|
+
writer.err(USAGE);
|
|
65
|
+
return 2;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return renderError(err, { json: args.json, writer });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI の出力(P0設計 §6.1 / §5.9)
|
|
3
|
+
*
|
|
4
|
+
* ★ --json のときは stdout に JSON 以外を一切書かない。
|
|
5
|
+
* エージェントが JSON.parse する前提なので、進捗表示が混ざると壊れる。
|
|
6
|
+
* 人間向けのメッセージは stderr へ出す。
|
|
7
|
+
*/
|
|
8
|
+
import { type Plan } from '@superzerodev/core';
|
|
9
|
+
export interface Writer {
|
|
10
|
+
out(line: string): void;
|
|
11
|
+
err(line: string): void;
|
|
12
|
+
}
|
|
13
|
+
export declare const consoleWriter: Writer;
|
|
14
|
+
export interface RenderOptions {
|
|
15
|
+
json: boolean;
|
|
16
|
+
writer: Writer;
|
|
17
|
+
}
|
|
18
|
+
export declare function renderPlan(plan: Plan, { json, writer }: RenderOptions): void;
|
|
19
|
+
/**
|
|
20
|
+
* エラー出力。
|
|
21
|
+
* --json でも人間向けでも、必ず suggestedFix まで見せる。
|
|
22
|
+
* ここを削るとエージェントが自力で直せなくなる。
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderError(raw: unknown, { json, writer }: RenderOptions): number;
|
|
25
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA+C,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE3F,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,eAAO,MAAM,aAAa,EAAE,MAG3B,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,IAAI,CAmB5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,MAAM,CAoBjF"}
|