Files
tea-sdlc/bin/tea-sdlc.js
T

47 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
/**
* tea-sdlc 的單一入口。使用者與 agent 都從這裡進來:
*
* tea-sdlc install [--platform a,b] [--dry-run]
* tea-sdlc uninstall [--platform a,b] [--dry-run]
* tea-sdlc prompt --name sdlc-plan [--adapter-version 0.0.1]
* tea-sdlc status
*
* 這一層只做兩件事:把第一個位置參數當成子指令取走,其餘 argv 原樣交出去。
* 它不知道任何平台的目錄結構,也不自己動手做事——那些在 scripts/ 底下。
*
* 輸入輸出契約與 scripts/ 底下每一支腳本一致:只接受具名 flag、單行 JSON、exit 0 或 1。
* 唯一的例外是 prompt 的成功路徑,它印出原樣 markdown(理由見 lib 的 RawText)。
*/
import { ScriptError, main } from '../scripts/lib.js';
import { runInstall, runUninstall } from '../scripts/install.js';
import { runVersion } from '../scripts/version.js';
import { runVerify } from '../scripts/verify.js';
import { runPrompt } from '../scripts/prompt.js';
import { runStatus } from '../scripts/status.js';
const SUBCOMMANDS = {
install: runInstall,
uninstall: runUninstall,
prompt: runPrompt,
status: runStatus,
'sdlc-version': runVersion,
verify: runVerify,
};
main(async () => {
const [name, ...argv] = process.argv.slice(2);
const names = Object.keys(SUBCOMMANDS).join('、');
if (name === undefined) {
throw new ScriptError('MISSING_SUBCOMMAND', `請指定子指令:${names}`);
}
// 位置參數只有這一個,而且必須在這裡就被取走:其後的 flag 解析一律拒絕位置參數
const run = SUBCOMMANDS[name];
if (run === undefined) {
throw new ScriptError('UNKNOWN_SUBCOMMAND', `不認得的子指令 ${name};可用的是:${names}`);
}
return run(argv);
});