@take-out/cli 0.7.0-1784497775575 → 0.7.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/README.md +5 -3
- package/dist/cjs/commands/docs.cjs +176 -50
- package/dist/cjs/commands/onboard.cjs +2 -2
- package/dist/cjs/commands/skills.cjs +29 -3
- package/dist/cjs/commands/sync.cjs +15 -4
- package/dist/esm/commands/docs.mjs +177 -52
- package/dist/esm/commands/docs.mjs.map +1 -1
- package/dist/esm/commands/onboard.mjs +2 -2
- package/dist/esm/commands/onboard.mjs.map +1 -1
- package/dist/esm/commands/skills.mjs +29 -4
- package/dist/esm/commands/skills.mjs.map +1 -1
- package/dist/esm/commands/sync.mjs +15 -5
- package/dist/esm/commands/sync.mjs.map +1 -1
- package/package.json +4 -3
- package/src/commands/docs.ts +210 -53
- package/src/commands/onboard.ts +2 -2
- package/src/commands/skills.ts +34 -6
- package/src/commands/sync.ts +19 -6
- package/types/commands/docs.d.ts +1 -1
- package/types/commands/docs.d.ts.map +1 -1
- package/types/commands/skills.d.ts.map +1 -1
- package/types/commands/sync.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["existsSync","lstatSync","mkdirSync","readdirSync","readFileSync","readlinkSync","rmSync","rmdirSync","symlinkSync","unlinkSync","join","relative","resolve","defineCommand","pc","SKILL_PREFIX","hasSkillFrontmatter","content","startsWith","endIndex","indexOf","frontmatter","slice","includes","isDevOnly","test","resolveLocalDocsDir","cwd","skillsDir","collectAllDocs","docs","localDocsDir","files","filter","f","endsWith","file","name","replace","push","path","generateDocSkills","clean","expectedSkillNames","
|
|
1
|
+
{"version":3,"names":["existsSync","lstatSync","mkdirSync","readdirSync","readFileSync","readlinkSync","rmSync","rmdirSync","symlinkSync","unlinkSync","createRequire","dirname","join","relative","resolve","defineCommand","pc","require2","import","meta","url","DOCS_DIR","SKILL_PREFIX","hasSkillFrontmatter","content","startsWith","endIndex","indexOf","frontmatter","slice","includes","isDevOnly","test","resolveLocalDocsDir","cwd","skillsDir","collectAllDocs","docs","seen","Set","localDocsDir","files","filter","f","endsWith","file","name","replace","push","path","source","add","has","generateDocSkills","clean","expectedSkillNames","length","console","info","yellow","dim","existing","dir","recursive","symlinked","generated","unchanged","removed","skipped","isDev","process","env","IS_TAMAGUI_DEV","doc","hasFrontmatter","nameMatch","match","skillName","trim","skillDir","skillFile","relativePath","shouldCreate","stat","isSymbolicLink","existingContent","sourceLabel","blue","green","force","red","shouldUnlink","linkTarget","resolvedTarget","generateCommand","description","args","type","default","run","bold","cyan","docStats","skillsCommand","subCommands","generate"],"sources":["../../../src/commands/skills.ts"],"sourcesContent":[null],"mappings":"AAIA,SACEA,UAAA,EACAC,SAAA,EACAC,SAAA,EACAC,WAAA,EACAC,YAAA,EACAC,YAAA,EACAC,MAAA,EACAC,SAAA,EACAC,WAAA,EACAC,UAAA,QAEK;AACP,SAASC,aAAA,QAAqB;AAC9B,SAASC,OAAA,EAASC,IAAA,EAAMC,QAAA,EAAUC,OAAA,QAAe;AAEjD,SAASC,aAAA,QAAqB;AAC9B,OAAOC,EAAA,MAAQ;AAIf,MAAMC,QAAA,GAAUP,aAAA,CAAcQ,MAAA,CAAAC,IAAA,CAAYC,GAAG;AAC7C,IAAIC,QAAA;AACJ,IAAI;EACFA,QAAA,GAAWV,OAAA,CAAQM,QAAA,CAAQH,OAAA,CAAQ,6BAA6B,CAAC;AACnE,QAAQ;EACNO,QAAA,GAAW;AACb;AAEA,MAAMC,YAAA,GAAe;AAErB,SAASC,oBAAoBC,OAAA,EAA0B;EACrD,IAAI,CAACA,OAAA,CAAQC,UAAA,CAAW,KAAK,GAAG,OAAO;EACvC,MAAMC,QAAA,GAAWF,OAAA,CAAQG,OAAA,CAAQ,OAAO,CAAC;EACzC,IAAID,QAAA,KAAa,IAAI,OAAO;EAC5B,MAAME,WAAA,GAAcJ,OAAA,CAAQK,KAAA,CAAM,GAAGH,QAAQ;EAC7C,OAAOE,WAAA,CAAYE,QAAA,CAAS,OAAO,KAAKF,WAAA,CAAYE,QAAA,CAAS,cAAc;AAC7E;AAEA,SAASC,UAAUP,OAAA,EAA0B;EAC3C,IAAI,CAACA,OAAA,CAAQC,UAAA,CAAW,KAAK,GAAG,OAAO;EACvC,MAAMC,QAAA,GAAWF,OAAA,CAAQG,OAAA,CAAQ,OAAO,CAAC;EACzC,IAAID,QAAA,KAAa,IAAI,OAAO;EAC5B,MAAME,WAAA,GAAcJ,OAAA,CAAQK,KAAA,CAAM,GAAGH,QAAQ;EAC7C,OAAO,kBAAkBM,IAAA,CAAKJ,WAAW;AAC3C;AAaA,SAASK,oBAAoBC,GAAA,EAAqB;EAChD,MAAMC,SAAA,GAAYvB,IAAA,CAAKsB,GAAA,EAAK,QAAQ;EACpC,IAAIlC,UAAA,CAAWmC,SAAS,GAAG,OAAOA,SAAA;EAClC,OAAOvB,IAAA,CAAKsB,GAAA,EAAK,MAAM;AACzB;AAEA,SAASE,eACPF,GAAA,EACoE;EACpE,MAAMG,IAAA,GAA2E,EAAC;EAClF,MAAMC,IAAA,GAAO,mBAAIC,GAAA,CAAY;EAE7B,MAAMC,YAAA,GAAeP,mBAAA,CAAoBC,GAAG;EAC5C,IAAIlC,UAAA,CAAWwC,YAAY,GAAG;IAC5B,MAAMC,KAAA,GAAQtC,WAAA,CAAYqC,YAAY,EAAEE,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,QAAA,CAAS,KAAK,CAAC;IACvE,WAAWC,IAAA,IAAQJ,KAAA,EAAO;MACxB,MAAMK,IAAA,GAAOD,IAAA,CAAKE,OAAA,CAAQ,SAAS,EAAE;MACrCV,IAAA,CAAKW,IAAA,CAAK;QAAEF,IAAA;QAAMG,IAAA,EAAMrC,IAAA,CAAK4B,YAAA,EAAcK,IAAI;QAAGK,MAAA,EAAQ;MAAQ,CAAC;MACnEZ,IAAA,CAAKa,GAAA,CAAIL,IAAI;IACf;EACF;EAEA,IAAIzB,QAAA,IAAYrB,UAAA,CAAWqB,QAAQ,GAAG;IACpC,MAAMoB,KAAA,GAAQtC,WAAA,CAAYkB,QAAQ,EAAEqB,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,QAAA,CAAS,KAAK,CAAC;IACnE,WAAWC,IAAA,IAAQJ,KAAA,EAAO;MACxB,MAAMK,IAAA,GAAOD,IAAA,CAAKE,OAAA,CAAQ,SAAS,EAAE;MACrC,IAAI,CAACT,IAAA,CAAKc,GAAA,CAAIN,IAAI,GAAG;QACnBT,IAAA,CAAKW,IAAA,CAAK;UAAEF,IAAA;UAAMG,IAAA,EAAMrC,IAAA,CAAKS,QAAA,EAAUwB,IAAI;UAAGK,MAAA,EAAQ;QAAU,CAAC;MACnE;IACF;EACF;EAEA,OAAOb,IAAA;AACT;AAEA,eAAegB,kBACbnB,GAAA,EACAoB,KAAA,EAOC;EACD,MAAMnB,SAAA,GAAYvB,IAAA,CAAKsB,GAAA,EAAK,WAAW,QAAQ;EAC/C,MAAMG,IAAA,GAAOD,cAAA,CAAeF,GAAG;EAC/B,MAAMM,YAAA,GAAeP,mBAAA,CAAoBC,GAAG;EAC5C,MAAMqB,kBAAA,GAAqB,mBAAIhB,GAAA,CAAY;EAE3C,IAAIF,IAAA,CAAKmB,MAAA,KAAW,GAAG;IACrBC,OAAA,CAAQC,IAAA,CAAK1C,EAAA,CAAG2C,MAAA,CAAO,8BAA8B,CAAC;EACxD,OAAO;IACLF,OAAA,CAAQC,IAAA,CAAK1C,EAAA,CAAG4C,GAAA,CAAI,SAASvB,IAAA,CAAKmB,MAAM,sBAAsB,CAAC;EACjE;EAEA,IAAIF,KAAA,IAAStD,UAAA,CAAWmC,SAAS,GAAG;IAClC,MAAM0B,QAAA,GAAW1D,WAAA,CAAYgC,SAAS;IACtC,WAAW2B,GAAA,IAAOD,QAAA,EAAU;MAC1B,IAAIC,GAAA,CAAIrC,UAAA,CAAWH,YAAY,GAAG;QAChChB,MAAA,CAAOM,IAAA,CAAKuB,SAAA,EAAW2B,GAAG,GAAG;UAAEC,SAAA,EAAW;QAAK,CAAC;MAClD;IACF;EACF;EAEA,IAAI,CAAC/D,UAAA,CAAWmC,SAAS,GAAG;IAC1BjC,SAAA,CAAUiC,SAAA,EAAW;MAAE4B,SAAA,EAAW;IAAK,CAAC;EAC1C;EAEA,IAAIC,SAAA,GAAY;EAChB,IAAIC,SAAA,GAAY;EAChB,IAAIC,SAAA,GAAY;EAChB,IAAIC,OAAA,GAAU;EACd,IAAIC,OAAA,GAAU;EACd,MAAMC,KAAA,GAAQ,CAAC,CAACC,OAAA,CAAQC,GAAA,CAAIC,cAAA;EAE5B,WAAWC,GAAA,IAAOpC,IAAA,EAAM;IACtB,MAAMb,OAAA,GAAUpB,YAAA,CAAaqE,GAAA,CAAIxB,IAAA,EAAM,OAAO;IAC9C,IAAIlB,SAAA,CAAUP,OAAO,KAAK,CAAC6C,KAAA,EAAO;IAElC,MAAMK,cAAA,GAAiBnD,mBAAA,CAAoBC,OAAO;IAElD,IAAIkD,cAAA,EAAgB;MAClB,MAAMC,SAAA,GAAYnD,OAAA,CAAQoD,KAAA,CAAM,4BAA4B;MAC5D,IAAI,CAACD,SAAA,EAAW;MAEhB,MAAME,SAAA,GAAYF,SAAA,CAAU,CAAC,EAAGG,IAAA,CAAK;MACrCvB,kBAAA,CAAmBJ,GAAA,CAAI0B,SAAS;MAChC,MAAME,QAAA,GAAWnE,IAAA,CAAKuB,SAAA,EAAW0C,SAAS;MAC1C,MAAMG,SAAA,GAAYpE,IAAA,CAAKmE,QAAA,EAAU,UAAU;MAE3C,IAAI,CAAC/E,UAAA,CAAW+E,QAAQ,GAAG;QACzB7E,SAAA,CAAU6E,QAAA,EAAU;UAAEhB,SAAA,EAAW;QAAK,CAAC;MACzC;MAEA,MAAMkB,YAAA,GAAepE,QAAA,CAASkE,QAAA,EAAUN,GAAA,CAAIxB,IAAI;MAEhD,IAAIiC,YAAA,GAAe;MACnB,IAAI;QACF,MAAMC,IAAA,GAAOlF,SAAA,CAAU+E,SAAS;QAChC,IAAIG,IAAA,CAAKC,cAAA,CAAe,KAAKpF,UAAA,CAAWgF,SAAS,GAAG;UAClD,MAAMK,eAAA,GAAkBjF,YAAA,CAAa4E,SAAA,EAAW,OAAO;UACvD,IAAIK,eAAA,KAAoB7D,OAAA,EAAS;YAC/B0C,SAAA;YACAgB,YAAA,GAAe;UACjB;QACF;QACA,IAAIA,YAAA,EAAc;UAChBzE,UAAA,CAAWuE,SAAS;QACtB;MACF,QAAQ,CAER;MAEA,IAAI,CAACE,YAAA,EAAc;MAEnB1E,WAAA,CAAYyE,YAAA,EAAcD,SAAS;MACnChB,SAAA;MAEA,MAAMsB,WAAA,GAAcb,GAAA,CAAIvB,MAAA,KAAW,UAAUlC,EAAA,CAAGuE,IAAA,CAAK,OAAO,IAAIvE,EAAA,CAAG4C,GAAA,CAAI,SAAS;MAChFH,OAAA,CAAQC,IAAA,CACN,KAAK1C,EAAA,CAAGwE,KAAA,CAAM,QAAG,CAAC,IAAIX,SAAS,IAAIS,WAAW,IAAItE,EAAA,CAAG4C,GAAA,CAAI,WAAW,CAAC,EACvE;IACF,OAAO;MACL,IAAI,CAACc,cAAA,EAAgB;QACnBN,OAAA;QACAX,OAAA,CAAQC,IAAA,CACN,KAAK1C,EAAA,CAAG2C,MAAA,CAAO,GAAG,CAAC,YAAY3C,EAAA,CAAG4C,GAAA,CAAIa,GAAA,CAAI3B,IAAI,CAAC,IAAI9B,EAAA,CAAG4C,GAAA,CAAI,6BAA6B,CAAC,EAC1F;QACA;MACF;IACF;EACF;EAEA,WAAWE,GAAA,IAAO3D,WAAA,CAAYgC,SAAS,GAAG;IACxC,IAAIoB,kBAAA,CAAmBH,GAAA,CAAIU,GAAG,GAAG;IAEjC,MAAMiB,QAAA,GAAWnE,IAAA,CAAKuB,SAAA,EAAW2B,GAAG;IACpC,MAAMkB,SAAA,GAAYpE,IAAA,CAAKmE,QAAA,EAAU,UAAU;IAE3C,IAAIjB,GAAA,CAAIrC,UAAA,CAAWH,YAAY,GAAG;MAChChB,MAAA,CAAOyE,QAAA,EAAU;QAAEhB,SAAA,EAAW;QAAM0B,KAAA,EAAO;MAAK,CAAC;MACjDtB,OAAA;MACAV,OAAA,CAAQC,IAAA,CAAK,KAAK1C,EAAA,CAAG0E,GAAA,CAAI,QAAG,CAAC,IAAI5B,GAAG,IAAI9C,EAAA,CAAG4C,GAAA,CAAI,iCAAiC,CAAC,EAAE;MACnF;IACF;IAEA,IAAI+B,YAAA,GAAe;IAEnB,IAAI;MACF,MAAMR,IAAA,GAAOlF,SAAA,CAAU+E,SAAS;MAChC,IAAIG,IAAA,CAAKC,cAAA,CAAe,GAAG;QACzB,MAAMQ,UAAA,GAAavF,YAAA,CAAa2E,SAAS;QACzC,MAAMa,cAAA,GAAiB/E,OAAA,CAAQiE,QAAA,EAAUa,UAAU;QACnDD,YAAA,GACEE,cAAA,CAAepE,UAAA,CAAW,GAAGe,YAAY,GAAG,KAC3C,CAAC,CAACnB,QAAA,IAAYwE,cAAA,CAAepE,UAAA,CAAW,GAAGJ,QAAQ,GAAG;MAC3D;IACF,QAAQ,CAER;IAEA,IAAI,CAACsE,YAAA,EAAc;IAEnBlF,UAAA,CAAWuE,SAAS;IACpB,IAAI7E,WAAA,CAAY4E,QAAQ,EAAEvB,MAAA,KAAW,GAAG;MACtCjD,SAAA,CAAUwE,QAAQ;IACpB;IACAZ,OAAA;IACAV,OAAA,CAAQC,IAAA,CAAK,KAAK1C,EAAA,CAAG0E,GAAA,CAAI,QAAG,CAAC,IAAI5B,GAAG,IAAI9C,EAAA,CAAG4C,GAAA,CAAI,yBAAyB,CAAC,EAAE;EAC7E;EAEA,OAAO;IAAEI,SAAA;IAAWC,SAAA;IAAWC,SAAA;IAAWC,OAAA;IAASC;EAAQ;AAC7D;AAIA,MAAM0B,eAAA,GAAkB/E,aAAA,CAAc;EACpCI,IAAA,EAAM;IACJ2B,IAAA,EAAM;IACNiD,WAAA,EAAa;EACf;EACAC,IAAA,EAAM;IACJ1C,KAAA,EAAO;MACL2C,IAAA,EAAM;MACNF,WAAA,EAAa;MACbG,OAAA,EAAS;IACX;IACA,sBAAsB;MACpBD,IAAA,EAAM;MACNF,WAAA,EAAa;MACbG,OAAA,EAAS;IACX;EACF;EACA,MAAMC,IAAI;IAAEH;EAAK,GAAG;IAClB,MAAM9D,GAAA,GAAMoC,OAAA,CAAQpC,GAAA,CAAI;IACxB,MAAMC,SAAA,GAAYvB,IAAA,CAAKsB,GAAA,EAAK,WAAW,QAAQ;IAE/CuB,OAAA,CAAQC,IAAA,CAAK;IACbD,OAAA,CAAQC,IAAA,CAAK1C,EAAA,CAAGoF,IAAA,CAAKpF,EAAA,CAAGqF,IAAA,CAAK,qBAAqB,CAAC,CAAC;IACpD5C,OAAA,CAAQC,IAAA,CAAK;IAEb,IAAIM,SAAA,GAAY;IAChB,IAAIC,SAAA,GAAY;IAChB,IAAIC,SAAA,GAAY;IAChB,IAAIC,OAAA,GAAU;IACd,IAAIC,OAAA,GAAU;IAGd,IAAI,CAAC4B,IAAA,CAAK,oBAAoB,GAAG;MAC/B,MAAMM,QAAA,GAAW,MAAMjD,iBAAA,CAAkBnB,GAAA,EAAK8D,IAAA,CAAK1C,KAAK;MACxDU,SAAA,GAAYsC,QAAA,CAAStC,SAAA;MACrBC,SAAA,GAAYqC,QAAA,CAASrC,SAAA;MACrBC,SAAA,GAAYoC,QAAA,CAASpC,SAAA;MACrBC,OAAA,GAAUmC,QAAA,CAASnC,OAAA;MACnBC,OAAA,GAAUkC,QAAA,CAASlC,OAAA;MACnBX,OAAA,CAAQC,IAAA,CAAK;IACf;IAGAD,OAAA,CAAQC,IAAA,CAAK;IACbD,OAAA,CAAQC,IAAA,CAAK1C,EAAA,CAAGoF,IAAA,CAAK,UAAU,CAAC;IAChC,IAAIpC,SAAA,GAAY,GAAGP,OAAA,CAAQC,IAAA,CAAK,KAAK1C,EAAA,CAAGwE,KAAA,CAAM,GAAGxB,SAAS,YAAY,CAAC,EAAE;IACzE,IAAIC,SAAA,GAAY,GACdR,OAAA,CAAQC,IAAA,CACN,KAAK1C,EAAA,CAAG2C,MAAA,CAAO,GAAGM,SAAS,YAAY,CAAC,IAAIjD,EAAA,CAAG4C,GAAA,CAAI,qCAAqC,CAAC,EAC3F;IACF,IAAIQ,OAAA,GAAU,GACZX,OAAA,CAAQC,IAAA,CACN,KAAK1C,EAAA,CAAG2C,MAAA,CAAO,GAAGS,OAAO,UAAU,CAAC,IAAIpD,EAAA,CAAG4C,GAAA,CAAI,6BAA6B,CAAC,EAC/E;IACF,IAAIM,SAAA,GAAY,GAAGT,OAAA,CAAQC,IAAA,CAAK,KAAK1C,EAAA,CAAG4C,GAAA,CAAI,GAAGM,SAAS,YAAY,CAAC,EAAE;IACvE,IAAIC,OAAA,GAAU,GAAGV,OAAA,CAAQC,IAAA,CAAK,KAAK1C,EAAA,CAAG0E,GAAA,CAAI,GAAGvB,OAAO,UAAU,CAAC,EAAE;IACjEV,OAAA,CAAQC,IAAA,CAAK1C,EAAA,CAAG4C,GAAA,CAAI,eAAezB,SAAS,EAAE,CAAC;IAC/CsB,OAAA,CAAQC,IAAA,CAAK;EACf;AACF,CAAC;AAEM,MAAM6C,aAAA,GAAgBxF,aAAA,CAAc;EACzCI,IAAA,EAAM;IACJ2B,IAAA,EAAM;IACNiD,WAAA,EAAa;EACf;EACAS,WAAA,EAAa;IACXC,QAAA,EAAUX;EACZ;AACF,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { execSync, spawn, spawnSync } from "node:child_process";
|
|
2
2
|
import { existsSync, mkdtempSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
4
|
+
import { dirname, join, parse } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
5
6
|
import { defineCommand } from "citty";
|
|
6
7
|
import pc from "picocolors";
|
|
7
8
|
import { confirmContinue, promptSelect, showError, showInfo, showStep, showSuccess } from "../utils/prompts.mjs";
|
|
@@ -9,11 +10,20 @@ const UPSTREAM_REPO = "tamagui/takeout2";
|
|
|
9
10
|
const UPSTREAM_REMOTE = "takeout-upstream";
|
|
10
11
|
const TAKEOUT_FILE = ".takeout";
|
|
11
12
|
function getSyncPrompt() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
try {
|
|
14
|
+
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
let monorepoRoot = currentDir;
|
|
16
|
+
while (monorepoRoot !== parse(monorepoRoot).root) {
|
|
17
|
+
const promptPath = join(monorepoRoot, "packages", "docs", "sync-prompt.md");
|
|
18
|
+
if (existsSync(promptPath)) {
|
|
19
|
+
return readFileSync(promptPath, "utf-8");
|
|
20
|
+
}
|
|
21
|
+
monorepoRoot = dirname(monorepoRoot);
|
|
22
|
+
}
|
|
23
|
+
throw new Error("Could not find sync-prompt.md in packages/docs");
|
|
24
|
+
} catch (error) {
|
|
25
|
+
throw new Error(`Could not load sync prompt: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
15
26
|
}
|
|
16
|
-
return readFileSync(promptPath, "utf-8");
|
|
17
27
|
}
|
|
18
28
|
function checkToolAvailable(command) {
|
|
19
29
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["execSync","spawn","spawnSync","existsSync","mkdtempSync","readFileSync","writeFileSync","tmpdir","join","defineCommand","pc","confirmContinue","promptSelect","showError","showInfo","showStep","showSuccess","UPSTREAM_REPO","UPSTREAM_REMOTE","TAKEOUT_FILE","getSyncPrompt","
|
|
1
|
+
{"version":3,"names":["execSync","spawn","spawnSync","existsSync","mkdtempSync","readFileSync","writeFileSync","tmpdir","dirname","join","parse","fileURLToPath","defineCommand","pc","confirmContinue","promptSelect","showError","showInfo","showStep","showSuccess","UPSTREAM_REPO","UPSTREAM_REMOTE","TAKEOUT_FILE","getSyncPrompt","currentDir","import","meta","url","monorepoRoot","root","promptPath","Error","error","message","checkToolAvailable","command","checkCmd","process","platform","result","status","ensureUpstreamRemote","remotes","encoding","includes","stdio","getUpstreamHeadSha","sha","trim","writeTakeoutConfig","configPath","cwd","date","Date","toISOString","split","content","syncCommand","name","description","args","auto","type","default","print","run","isAuto","isPrint","console","info","gray","hasClaudeCode","hasCursor","hasAider","choice","exit","options","push","value","label","hint","dim","upstreamSha","slice","prompt","repeat","shouldContinue","tempDir","promptFile","claude","stdin","write","end","on","code","cursor","aider"],"sources":["../../../src/commands/sync.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/cli",
|
|
3
|
-
"version": "0.7.0
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -52,8 +52,9 @@
|
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"@clack/prompts": "^0.8.2",
|
|
55
|
-
"@take-out/
|
|
56
|
-
"@take-out/
|
|
55
|
+
"@take-out/docs": "0.7.0",
|
|
56
|
+
"@take-out/run": "0.7.0",
|
|
57
|
+
"@take-out/scripts": "0.7.0",
|
|
57
58
|
"citty": "^0.1.6",
|
|
58
59
|
"picocolors": "^1.1.1"
|
|
59
60
|
},
|
package/src/commands/docs.ts
CHANGED
|
@@ -1,39 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Docs command - list and retrieve documentation files from the package
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { existsSync, readdirSync, readFileSync } from 'node:fs'
|
|
6
|
-
import {
|
|
5
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'
|
|
6
|
+
import { createRequire } from 'node:module'
|
|
7
|
+
import { dirname, join } from 'node:path'
|
|
7
8
|
|
|
8
9
|
import { defineCommand } from 'citty'
|
|
9
10
|
import pc from 'picocolors'
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
import {
|
|
13
|
+
type FileToSync,
|
|
14
|
+
compareFiles,
|
|
15
|
+
getFileSize,
|
|
16
|
+
syncFileWithConfirmation,
|
|
17
|
+
} from '../utils/sync'
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
throw new Error(`No docs or skills directory found in ${cwd}`)
|
|
19
|
-
}
|
|
19
|
+
// resolve docs directory from @take-out/docs package
|
|
20
|
+
const require = createRequire(import.meta.url)
|
|
21
|
+
const DOCS_DIR = dirname(require.resolve('@take-out/docs/package.json'))
|
|
20
22
|
|
|
21
23
|
const listCommand = defineCommand({
|
|
22
24
|
meta: {
|
|
23
25
|
name: 'list',
|
|
24
|
-
description: 'List
|
|
26
|
+
description: 'List all available documentation files',
|
|
25
27
|
},
|
|
26
28
|
async run() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
docsDir = resolveDocsDir()
|
|
30
|
-
} catch (error) {
|
|
31
|
-
console.error(pc.red(`✗ ${error instanceof Error ? error.message : String(error)}`))
|
|
29
|
+
if (!existsSync(DOCS_DIR)) {
|
|
30
|
+
console.error(pc.red('✗ Docs directory not found'))
|
|
32
31
|
process.exit(1)
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
const files = readdirSync(
|
|
36
|
-
.filter((
|
|
34
|
+
const files = readdirSync(DOCS_DIR)
|
|
35
|
+
.filter((f) => f.endsWith('.md'))
|
|
37
36
|
.sort()
|
|
38
37
|
|
|
39
38
|
console.info()
|
|
@@ -42,11 +41,26 @@ const listCommand = defineCommand({
|
|
|
42
41
|
|
|
43
42
|
for (const file of files) {
|
|
44
43
|
const name = file.replace(/\.md$/, '')
|
|
45
|
-
const
|
|
46
|
-
|
|
44
|
+
const path = join(DOCS_DIR, file)
|
|
45
|
+
|
|
46
|
+
// try to extract first heading as description
|
|
47
|
+
let description = ''
|
|
48
|
+
try {
|
|
49
|
+
const content = readFileSync(path, 'utf-8')
|
|
50
|
+
const match = content.match(/^#\s+(.+)$/m)
|
|
51
|
+
if (match?.[1]) {
|
|
52
|
+
description = match[1]
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
// ignore read errors
|
|
56
|
+
}
|
|
47
57
|
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
if (description) {
|
|
59
|
+
console.info(` ${pc.green(name)}`)
|
|
60
|
+
console.info(` ${pc.dim(description)}`)
|
|
61
|
+
} else {
|
|
62
|
+
console.info(` ${pc.green(name)}`)
|
|
63
|
+
}
|
|
50
64
|
}
|
|
51
65
|
|
|
52
66
|
console.info()
|
|
@@ -58,7 +72,7 @@ const listCommand = defineCommand({
|
|
|
58
72
|
const getCommand = defineCommand({
|
|
59
73
|
meta: {
|
|
60
74
|
name: 'get',
|
|
61
|
-
description: 'Get the content of one or more
|
|
75
|
+
description: 'Get the content of one or more documentation files',
|
|
62
76
|
},
|
|
63
77
|
args: {
|
|
64
78
|
name: {
|
|
@@ -69,42 +83,80 @@ const getCommand = defineCommand({
|
|
|
69
83
|
},
|
|
70
84
|
},
|
|
71
85
|
async run({ args }) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.error(pc.red(`✗ ${error instanceof Error ? error.message : String(error)}`))
|
|
77
|
-
process.exit(1)
|
|
78
|
-
}
|
|
79
|
-
|
|
86
|
+
// args._ contains all positional arguments
|
|
87
|
+
// if multiple names are provided, they'll be in args._
|
|
88
|
+
// if only one is provided, it will be in both args.name and args._[0]
|
|
80
89
|
const names = args._.length > 0 ? args._ : [args.name]
|
|
90
|
+
|
|
81
91
|
const results: Array<{ name: string; content: string }> = []
|
|
92
|
+
const errors: Array<{ name: string; error: string }> = []
|
|
93
|
+
|
|
94
|
+
// check local ./skills, then ./docs, then the package docs
|
|
95
|
+
const cwd = process.cwd()
|
|
96
|
+
const localSkillsDir = join(cwd, 'skills')
|
|
97
|
+
const localDocsDir = join(cwd, 'docs')
|
|
82
98
|
|
|
99
|
+
// collect all docs
|
|
83
100
|
for (const name of names) {
|
|
84
101
|
const fileName = name.endsWith('.md') ? name : `${name}.md`
|
|
85
|
-
const filePath = join(docsDir, fileName)
|
|
86
102
|
|
|
87
|
-
|
|
88
|
-
|
|
103
|
+
// prefer local skills, then local docs, then package docs
|
|
104
|
+
const localSkillsPath = join(localSkillsDir, fileName)
|
|
105
|
+
const localDocsPath = join(localDocsDir, fileName)
|
|
106
|
+
const packageFilePath = join(DOCS_DIR, fileName)
|
|
107
|
+
|
|
108
|
+
let filePath: string | null = null
|
|
109
|
+
|
|
110
|
+
if (existsSync(localSkillsPath)) {
|
|
111
|
+
filePath = localSkillsPath
|
|
112
|
+
} else if (existsSync(localDocsPath)) {
|
|
113
|
+
filePath = localDocsPath
|
|
114
|
+
} else if (existsSync(packageFilePath)) {
|
|
115
|
+
filePath = packageFilePath
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!filePath) {
|
|
119
|
+
errors.push({ name, error: 'File not found' })
|
|
89
120
|
continue
|
|
90
121
|
}
|
|
91
122
|
|
|
92
|
-
|
|
123
|
+
try {
|
|
124
|
+
const content = readFileSync(filePath, 'utf-8')
|
|
125
|
+
results.push({ name, content })
|
|
126
|
+
} catch (err) {
|
|
127
|
+
errors.push({ name, error: String(err) })
|
|
128
|
+
}
|
|
93
129
|
}
|
|
94
130
|
|
|
95
|
-
|
|
131
|
+
// print errors if any
|
|
132
|
+
if (errors.length > 0) {
|
|
133
|
+
for (const { name } of errors) {
|
|
134
|
+
console.error(pc.red(`✗ Doc file not found: ${name}`))
|
|
135
|
+
}
|
|
96
136
|
console.info()
|
|
97
137
|
console.info(pc.dim(`Use 'takeout docs list' to see available docs`))
|
|
98
|
-
|
|
138
|
+
|
|
139
|
+
// if no successful results, exit
|
|
140
|
+
if (results.length === 0) {
|
|
141
|
+
process.exit(1)
|
|
142
|
+
}
|
|
143
|
+
console.info()
|
|
99
144
|
}
|
|
100
145
|
|
|
101
|
-
|
|
102
|
-
|
|
146
|
+
// print results
|
|
147
|
+
for (let i = 0; i < results.length; i++) {
|
|
148
|
+
const result = results[i]
|
|
149
|
+
if (!result) continue
|
|
150
|
+
|
|
151
|
+
// print title
|
|
103
152
|
console.info(`# ${result.name}`)
|
|
104
153
|
console.info()
|
|
154
|
+
|
|
155
|
+
// print content
|
|
105
156
|
console.info(result.content)
|
|
106
157
|
|
|
107
|
-
|
|
158
|
+
// print separator if not last item
|
|
159
|
+
if (i < results.length - 1) {
|
|
108
160
|
console.info()
|
|
109
161
|
console.info('---')
|
|
110
162
|
console.info()
|
|
@@ -116,7 +168,7 @@ const getCommand = defineCommand({
|
|
|
116
168
|
const pathCommand = defineCommand({
|
|
117
169
|
meta: {
|
|
118
170
|
name: 'path',
|
|
119
|
-
description: 'Get the absolute path to
|
|
171
|
+
description: 'Get the absolute path to a documentation file',
|
|
120
172
|
},
|
|
121
173
|
args: {
|
|
122
174
|
name: {
|
|
@@ -126,21 +178,14 @@ const pathCommand = defineCommand({
|
|
|
126
178
|
},
|
|
127
179
|
},
|
|
128
180
|
async run({ args }) {
|
|
129
|
-
let docsDir: string
|
|
130
|
-
try {
|
|
131
|
-
docsDir = resolveDocsDir()
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.error(pc.red(`✗ ${error instanceof Error ? error.message : String(error)}`))
|
|
134
|
-
process.exit(1)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
181
|
if (!args.name) {
|
|
138
|
-
|
|
182
|
+
// return docs directory path
|
|
183
|
+
console.info(DOCS_DIR)
|
|
139
184
|
return
|
|
140
185
|
}
|
|
141
186
|
|
|
142
187
|
const fileName = args.name.endsWith('.md') ? args.name : `${args.name}.md`
|
|
143
|
-
const filePath = join(
|
|
188
|
+
const filePath = join(DOCS_DIR, fileName)
|
|
144
189
|
|
|
145
190
|
if (!existsSync(filePath)) {
|
|
146
191
|
console.error(pc.red(`✗ Doc file not found: ${args.name}`))
|
|
@@ -151,14 +196,126 @@ const pathCommand = defineCommand({
|
|
|
151
196
|
},
|
|
152
197
|
})
|
|
153
198
|
|
|
199
|
+
const ejectCommand = defineCommand({
|
|
200
|
+
meta: {
|
|
201
|
+
name: 'eject',
|
|
202
|
+
description: 'Eject Takeout documentation files into your project',
|
|
203
|
+
},
|
|
204
|
+
args: {
|
|
205
|
+
yes: {
|
|
206
|
+
type: 'boolean',
|
|
207
|
+
description: 'Skip confirmations and eject all files',
|
|
208
|
+
default: false,
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
async run({ args }) {
|
|
212
|
+
const cwd = process.cwd()
|
|
213
|
+
const targetDocsDir = join(cwd, 'docs')
|
|
214
|
+
const sourceDocsDir = DOCS_DIR
|
|
215
|
+
|
|
216
|
+
console.info()
|
|
217
|
+
console.info(pc.bold(pc.cyan('📚 Eject Docs')))
|
|
218
|
+
console.info()
|
|
219
|
+
console.info(pc.dim(`Source: ${sourceDocsDir}`))
|
|
220
|
+
console.info(pc.dim(`Target: ${targetDocsDir}`))
|
|
221
|
+
console.info()
|
|
222
|
+
|
|
223
|
+
if (!existsSync(sourceDocsDir)) {
|
|
224
|
+
console.error(pc.red('✗ Source docs directory not found in Takeout package'))
|
|
225
|
+
process.exit(1)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// ensure target docs directory exists
|
|
229
|
+
if (!existsSync(targetDocsDir)) {
|
|
230
|
+
console.info(pc.yellow('⚠ Target docs directory does not exist, will create it'))
|
|
231
|
+
mkdirSync(targetDocsDir, { recursive: true })
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// get all markdown files from source
|
|
235
|
+
const sourceFiles = readdirSync(sourceDocsDir).filter((f) => f.endsWith('.md'))
|
|
236
|
+
|
|
237
|
+
if (sourceFiles.length === 0) {
|
|
238
|
+
console.info(pc.yellow('No markdown files found in Takeout docs'))
|
|
239
|
+
return
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// analyze all files
|
|
243
|
+
const filesToSync: FileToSync[] = []
|
|
244
|
+
const stats = {
|
|
245
|
+
new: 0,
|
|
246
|
+
modified: 0,
|
|
247
|
+
identical: 0,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
for (const file of sourceFiles) {
|
|
251
|
+
const sourcePath = join(sourceDocsDir, file)
|
|
252
|
+
const targetPath = join(targetDocsDir, file)
|
|
253
|
+
const status = compareFiles(sourcePath, targetPath)
|
|
254
|
+
|
|
255
|
+
stats[status]++
|
|
256
|
+
|
|
257
|
+
filesToSync.push({
|
|
258
|
+
name: file,
|
|
259
|
+
sourcePath,
|
|
260
|
+
targetPath,
|
|
261
|
+
status,
|
|
262
|
+
sourceSize: getFileSize(sourcePath),
|
|
263
|
+
targetSize: getFileSize(targetPath),
|
|
264
|
+
})
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
console.info(pc.bold('Summary:'))
|
|
268
|
+
console.info(` ${pc.green(`${stats.new} new`)}`)
|
|
269
|
+
console.info(` ${pc.yellow(`${stats.modified} modified`)}`)
|
|
270
|
+
console.info(` ${pc.dim(`${stats.identical} identical`)}`)
|
|
271
|
+
console.info()
|
|
272
|
+
|
|
273
|
+
if (stats.new === 0 && stats.modified === 0) {
|
|
274
|
+
console.info(pc.green('✓ All docs are already up to date!'))
|
|
275
|
+
return
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// sort files: new first, then modified, then identical
|
|
279
|
+
const sortOrder = { new: 0, modified: 1, identical: 2 }
|
|
280
|
+
filesToSync.sort((a, b) => sortOrder[a.status] - sortOrder[b.status])
|
|
281
|
+
|
|
282
|
+
// sync files
|
|
283
|
+
let syncedCount = 0
|
|
284
|
+
|
|
285
|
+
for (const file of filesToSync) {
|
|
286
|
+
if (args.yes && file.status !== 'identical') {
|
|
287
|
+
// auto-sync without confirmation
|
|
288
|
+
const targetDir = join(targetDocsDir)
|
|
289
|
+
if (!existsSync(targetDir)) {
|
|
290
|
+
mkdirSync(targetDir, { recursive: true })
|
|
291
|
+
}
|
|
292
|
+
const content = readFileSync(file.sourcePath)
|
|
293
|
+
writeFileSync(file.targetPath, content)
|
|
294
|
+
console.info(pc.green(` ✓ ${file.name}`))
|
|
295
|
+
syncedCount++
|
|
296
|
+
} else {
|
|
297
|
+
const wasSynced = await syncFileWithConfirmation(file)
|
|
298
|
+
if (wasSynced) {
|
|
299
|
+
syncedCount++
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
console.info()
|
|
305
|
+
console.info(pc.bold(pc.green(`✓ Complete: ${syncedCount} file(s) ejected`)))
|
|
306
|
+
console.info()
|
|
307
|
+
},
|
|
308
|
+
})
|
|
309
|
+
|
|
154
310
|
export const docsCommand = defineCommand({
|
|
155
311
|
meta: {
|
|
156
312
|
name: 'docs',
|
|
157
|
-
description: 'List and retrieve
|
|
313
|
+
description: 'List and retrieve Takeout documentation',
|
|
158
314
|
},
|
|
159
315
|
subCommands: {
|
|
160
316
|
list: listCommand,
|
|
161
317
|
get: getCommand,
|
|
162
318
|
path: pathCommand,
|
|
319
|
+
eject: ejectCommand,
|
|
163
320
|
},
|
|
164
321
|
})
|
package/src/commands/onboard.ts
CHANGED
|
@@ -367,7 +367,7 @@ export const onboardCommand = defineCommand({
|
|
|
367
367
|
console.info()
|
|
368
368
|
console.info(' bun ios # build iOS dev app')
|
|
369
369
|
console.info(' bun android # build Android dev app')
|
|
370
|
-
console.info(' bun tko docs list # view
|
|
370
|
+
console.info(' bun tko docs list # view Takeout docs')
|
|
371
371
|
console.info()
|
|
372
372
|
}
|
|
373
373
|
|
|
@@ -981,7 +981,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
981
981
|
console.info(pc.gray(' uc machine add --name server-2 root@IP'))
|
|
982
982
|
console.info(pc.gray(' uc scale web 3 # run 3 instances'))
|
|
983
983
|
console.info()
|
|
984
|
-
console.info(pc.gray('view detailed guide: bun tko docs
|
|
984
|
+
console.info(pc.gray('view detailed guide: bun tko docs read deployment-uncloud'))
|
|
985
985
|
console.info(pc.gray('or see: docs/deployment-uncloud.md'))
|
|
986
986
|
}
|
|
987
987
|
|
package/src/commands/skills.ts
CHANGED
|
@@ -15,13 +15,22 @@ import {
|
|
|
15
15
|
unlinkSync,
|
|
16
16
|
writeFileSync,
|
|
17
17
|
} from 'node:fs'
|
|
18
|
-
import {
|
|
18
|
+
import { createRequire } from 'node:module'
|
|
19
|
+
import { dirname, join, relative, resolve } from 'node:path'
|
|
19
20
|
|
|
20
21
|
import { defineCommand } from 'citty'
|
|
21
22
|
import pc from 'picocolors'
|
|
22
23
|
|
|
23
24
|
// --- doc skills generation ---
|
|
24
25
|
|
|
26
|
+
const require = createRequire(import.meta.url)
|
|
27
|
+
let DOCS_DIR: string
|
|
28
|
+
try {
|
|
29
|
+
DOCS_DIR = dirname(require.resolve('@take-out/docs/package.json'))
|
|
30
|
+
} catch {
|
|
31
|
+
DOCS_DIR = ''
|
|
32
|
+
}
|
|
33
|
+
|
|
25
34
|
const SKILL_PREFIX = 'takeout-'
|
|
26
35
|
|
|
27
36
|
function hasSkillFrontmatter(content: string): boolean {
|
|
@@ -57,15 +66,29 @@ function resolveLocalDocsDir(cwd: string): string {
|
|
|
57
66
|
return join(cwd, 'docs')
|
|
58
67
|
}
|
|
59
68
|
|
|
60
|
-
function collectAllDocs(
|
|
61
|
-
|
|
69
|
+
function collectAllDocs(
|
|
70
|
+
cwd: string,
|
|
71
|
+
): Array<{ name: string; path: string; source: 'package' | 'local' }> {
|
|
72
|
+
const docs: Array<{ name: string; path: string; source: 'package' | 'local' }> = []
|
|
73
|
+
const seen = new Set<string>()
|
|
62
74
|
|
|
63
75
|
const localDocsDir = resolveLocalDocsDir(cwd)
|
|
64
76
|
if (existsSync(localDocsDir)) {
|
|
65
77
|
const files = readdirSync(localDocsDir).filter((f) => f.endsWith('.md'))
|
|
66
78
|
for (const file of files) {
|
|
67
79
|
const name = file.replace(/\.md$/, '')
|
|
68
|
-
docs.push({ name, path: join(localDocsDir, file) })
|
|
80
|
+
docs.push({ name, path: join(localDocsDir, file), source: 'local' })
|
|
81
|
+
seen.add(name)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (DOCS_DIR && existsSync(DOCS_DIR)) {
|
|
86
|
+
const files = readdirSync(DOCS_DIR).filter((f) => f.endsWith('.md'))
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
const name = file.replace(/\.md$/, '')
|
|
89
|
+
if (!seen.has(name)) {
|
|
90
|
+
docs.push({ name, path: join(DOCS_DIR, file), source: 'package' })
|
|
91
|
+
}
|
|
69
92
|
}
|
|
70
93
|
}
|
|
71
94
|
|
|
@@ -156,7 +179,10 @@ async function generateDocSkills(
|
|
|
156
179
|
symlinkSync(relativePath, skillFile)
|
|
157
180
|
symlinked++
|
|
158
181
|
|
|
159
|
-
|
|
182
|
+
const sourceLabel = doc.source === 'local' ? pc.blue('local') : pc.dim('package')
|
|
183
|
+
console.info(
|
|
184
|
+
` ${pc.green('⟷')} ${skillName} ${sourceLabel} ${pc.dim('(symlink)')}`,
|
|
185
|
+
)
|
|
160
186
|
} else {
|
|
161
187
|
if (!hasFrontmatter) {
|
|
162
188
|
skipped++
|
|
@@ -188,7 +214,9 @@ async function generateDocSkills(
|
|
|
188
214
|
if (stat.isSymbolicLink()) {
|
|
189
215
|
const linkTarget = readlinkSync(skillFile)
|
|
190
216
|
const resolvedTarget = resolve(skillDir, linkTarget)
|
|
191
|
-
shouldUnlink =
|
|
217
|
+
shouldUnlink =
|
|
218
|
+
resolvedTarget.startsWith(`${localDocsDir}/`) ||
|
|
219
|
+
(!!DOCS_DIR && resolvedTarget.startsWith(`${DOCS_DIR}/`))
|
|
192
220
|
}
|
|
193
221
|
} catch {
|
|
194
222
|
// ignore unrelated skill directories
|
package/src/commands/sync.ts
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import { execSync, spawn, spawnSync } from 'node:child_process'
|
|
6
6
|
import { existsSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'
|
|
7
7
|
import { tmpdir } from 'node:os'
|
|
8
|
-
import { join } from 'node:path'
|
|
8
|
+
import { dirname, join, parse } from 'node:path'
|
|
9
|
+
import { fileURLToPath } from 'node:url'
|
|
9
10
|
|
|
10
11
|
import { defineCommand } from 'citty'
|
|
11
12
|
import pc from 'picocolors'
|
|
@@ -24,14 +25,26 @@ const UPSTREAM_REMOTE = 'takeout-upstream'
|
|
|
24
25
|
const TAKEOUT_FILE = '.takeout'
|
|
25
26
|
|
|
26
27
|
function getSyncPrompt(): string {
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
try {
|
|
29
|
+
// find monorepo root by looking for packages/docs
|
|
30
|
+
const currentDir = dirname(fileURLToPath(import.meta.url))
|
|
31
|
+
let monorepoRoot = currentDir
|
|
32
|
+
|
|
33
|
+
// go up directories until we find packages/docs/sync-prompt.md
|
|
34
|
+
while (monorepoRoot !== parse(monorepoRoot).root) {
|
|
35
|
+
const promptPath = join(monorepoRoot, 'packages', 'docs', 'sync-prompt.md')
|
|
36
|
+
if (existsSync(promptPath)) {
|
|
37
|
+
return readFileSync(promptPath, 'utf-8')
|
|
38
|
+
}
|
|
39
|
+
monorepoRoot = dirname(monorepoRoot)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
throw new Error('Could not find sync-prompt.md in packages/docs')
|
|
43
|
+
} catch (error) {
|
|
29
44
|
throw new Error(
|
|
30
|
-
|
|
45
|
+
`Could not load sync prompt: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
31
46
|
)
|
|
32
47
|
}
|
|
33
|
-
|
|
34
|
-
return readFileSync(promptPath, 'utf-8')
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
function checkToolAvailable(command: string): boolean {
|