#!/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 { runPrompt } from '../scripts/prompt.js'; import { runStatus } from '../scripts/status.js'; /** 子指令名 → 實作。名字就是使用者打的字,也是轉接檔裡寫的字。 */ const SUBCOMMANDS = { install: runInstall, uninstall: runUninstall, prompt: runPrompt, status: runStatus, }; 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); });