47 lines
1.7 KiB
JavaScript
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);
|
|
});
|