pan-stack-cli 0.3.4 → 0.3.5

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.
Files changed (2) hide show
  1. package/bin/pan.js +1 -1
  2. package/package.json +3 -3
package/bin/pan.js CHANGED
@@ -962,7 +962,7 @@ init();
962
962
  `).trim()),m.push("```"),m.push("")}}return m.push("---"),m.push(""),m.push(p("STATS_REVIEW_MD_AI_H2")),m.push(""),m.push(p("STATS_REVIEW_MD_AI_INTRO")),m.push(""),m.push(p("STATS_REVIEW_MD_AI_CRITERIA")),m.push(""),m.push(p("STATS_REVIEW_MD_AI_OUTRO")),m.join(`
963
963
  `)}function ME(t){try{return(0,BE.execFileSync)("git",t,{encoding:"utf8",maxBuffer:512*1024*1024})}catch(e){let n=e instanceof Error?e.message:String(e);throw new Error(p("STATS_GIT_ERROR__MSG",{msg:n.split(`
964
964
  `)[0]??""}))}}function I4(t){let e=[],n=null;for(let r of t.split(`
965
- `)){if(r.includes("")){n&&e.push(n);let[i,a,s,l,c]=r.split("");n={hash:i??"",date:a??"",name:s??"",email:l??"",subject:c||"",additions:0,deletions:0};continue}let o=r.match(/(\d+) insertion[s]?\(\+\)|(\d+) deletion[s]?\(-\)/g);if(o&&n)for(let i of o){let a=i.match(/(\d+) insertion/),s=i.match(/(\d+) deletion/);a?.[1]&&(n.additions+=parseInt(a[1],10)),s?.[1]&&(n.deletions+=parseInt(s[1],10))}}return n&&e.push(n),e}function L4(t){return String(t||"").replace(/\|/g,"\\|")}function $E(t,e){return ah.default.mkdirSync(jE.default.dirname(t),{recursive:!0}),ah.default.writeFileSync(t,e),t}var ah,jE,BE,FE=A(()=>{"use strict";ah=L(require("fs")),jE=L(require("path")),BE=require("child_process");Yc();ne()});var lh={};be(lh,{runStats:()=>P4});function O4(t){let e={_:[],open:!0,diff:!0};for(let n=0;n<t.length;n++){let r=t[n];r!==void 0&&(r==="--since"?e.since=t[++n]:r==="--from"?e.from=t[++n]:r==="--to"?e.to=t[++n]:r==="--member"||r==="-m"?e.member=t[++n]:r==="--project"||r==="-p"?e.project=t[++n]:r==="--port"?e.port=parseInt(t[++n]??"",10):r==="--out"||r==="-o"?e.out=t[++n]:r==="--no-open"?e.open=!1:r==="--no-diff"?e.diff=!1:r==="--head-only"?e.headOnly=!0:r==="--max-diff-lines"?e.maxDiffLines=parseInt(t[++n]??"",10):r.startsWith("--since=")?e.since=r.slice(8):e._.push(r))}return e}function qc(){let t=Hi.default.join(GE.default.homedir(),".pan-code-graph");return Jc.default.mkdirSync(t,{recursive:!0}),t}function sh(){let t=ki();if(t)return{repos:EE(t),source:`.project.yaml (${t.project})`};let e=vi(process.cwd());if(!e.length)throw new Error(p("STATS_NO_REPOS__CWD",{cwd:process.cwd()}));return console.log(p("STATS_FALLBACK_SCAN__CWD",{cwd:process.cwd()})),{repos:e,source:p("STATS_SOURCE_FALLBACK")}}function D4(){console.log(p("STATS_USAGE"))}async function P4(t){let e=O4(t),n=e._[0],r=n!==void 0&&["report","people","review"].includes(n)?e._.shift():"report";return e._[0]==="help"||e.help?D4():r==="review"?U4(e):r==="people"?B4(e):j4(e)}function M4(t){let{repos:e}=sh(),n=hs(t),r=!t.headOnly,o=r?p("STATS_SCOPE_ALL_BRANCHES"):p("STATS_SCOPE_HEAD_ONLY");console.log(p("STATS_SCAN_RANGE__N_SCOPE_LABEL",{n:e.length,scope:o,label:n.label}));let{commits:i,repoStatus:a}=nh(e,n,{allBranches:r}),s=rh(Hi.default.join(qc(),"alias-map.json"));return{repos:e,range:n,commits:i,repoStatus:a,aliasMap:s}}function j4(t){let{repos:e}=sh(),n=hs({}),r=!t.headOnly,o=r?p("STATS_SCOPE_ALL_BRANCHES"):p("STATS_SCOPE_HEAD_ONLY");console.log(p("STATS_SCAN_FULL__N_SCOPE",{n:e.length,scope:o}));let{commits:i,repoStatus:a}=nh(e,n,{allBranches:r}),s=rh(Hi.default.join(qc(),"alias-map.json")),l=i.map(h=>({e:Vc(h.email,s),n:h.name||h.email,t:h.ts,r:h.repoName,a:h.additions,d:h.deletions})),c=a.filter(h=>!h.available).map(h=>({name:h.name,reason:h.reason}));hs(t);let u={reposTotal:a.length,reposAvailable:a.filter(h=>h.available).length,unavailable:c,initialSince:t.since!=null?Number(t.since):null,initialFrom:t.from||null,initialTo:t.to||null,initialMembers:t.member?[t.member]:[]},d=NE(l,u),f=t.out||Hi.default.join(qc(),"report.html");Jc.default.writeFileSync(f,d),console.log(p("STATS_WROTE_REPORT__PATH_N",{path:f,n:l.length})),c.length&&console.log(p("STATS_UNAVAILABLE__N",{n:c.length})),DE(d,{port:t.port||4321,open:t.open})}function B4(t){let{commits:e,aliasMap:n}=M4(t),{members:r}=kE(e,n);console.log(p("STATS_PEOPLE_HEADER__N",{n:r.length}));for(let o of r)console.log(p("STATS_PEOPLE_ROW__N_NAME_EMAIL",{n:String(o.commits).padStart(5),name:o.name,email:o.email}))}function U4(t){if(!t.member||!t.project)throw new Error(p("STATS_REVIEW_NEED_FLAGS"));let{repos:e}=sh(),n=e.find(s=>s.name===t.project);if(!n)throw new Error(p("STATS_REVIEW_NO_PROJECT__PROJECT_NAMES",{project:t.project,names:e.map(s=>s.name).join(", ")}));if(!Jc.default.existsSync(n.dir))throw new Error(p("STATS_REVIEW_NOT_CLONED__PROJECT_DIR",{project:t.project,dir:n.dir}));let r=hs(t);console.log(p("STATS_REVIEW_BUILDING__MEMBER_PROJECT_LABEL",{member:t.member,project:t.project,label:r.label}));let o=UE(n,t.member,r,{withDiff:t.diff,maxDiffLines:t.maxDiffLines,allBranches:!t.headOnly}),i=`${t.project}_${t.member.replace(/[^a-z0-9]+/gi,"-")}`.toLowerCase(),a=t.out||Hi.default.join(qc(),`review-${i}.md`);$E(a,o),console.log(p("STATS_REVIEW_WROTE__PATH",{path:a})),console.log(p("STATS_REVIEW_HINT"))}var Jc,Hi,GE,ch=A(()=>{"use strict";Jc=L(require("fs")),Hi=L(require("path")),GE=L(require("os"));nn();wE();Yc();oh();SE();IE();PE();FE();ne()});var HE=U((fG,$4)=>{$4.exports={name:"pan-stack-cli",version:"0.3.4",description:"PAN Stack CLI \u2014 multi-repo git and project commands from .project.yaml",license:"MIT",bin:{pan:"bin/pan.js"},files:["bin"],scripts:{build:"node tools/pan-stack-cli/build.mjs",prepare:"node tools/pan-stack-cli/build.mjs",prepublishOnly:"node tools/pan-stack-cli/build.mjs",test:'tsc --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.web.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.e2e.json --noEmit && node --test "tools/pan-stack-plan/test/*.test.ts" "tools/pan-stack-cli/test/*.test.ts" && node --test tools/pan-cicd/test/',"test:pan-cicd":"node tools/pan-stack-cli/build.mjs && node --test tools/pan-cicd/test/","test:pan-stack-plan":'node --test "tools/pan-stack-plan/test/*.test.ts"',"test:pan-stack-cli":'node --test "tools/pan-stack-cli/test/*.test.ts"',typecheck:"tsc --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.web.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.e2e.json --noEmit","build:web":"node tools/pan-stack-plan/build-web.mjs",pretest:"node tools/pan-stack-plan/build-web.mjs","test:e2e":"playwright test -c tools/pan-stack-plan/playwright.config.ts"},engines:{node:">=18"},keywords:["pan-stack","monorepo","git","cli"],repository:{type:"git",url:"https://github.com/doiya46/pan-stack.git",directory:".pan/pan-stack-cli"},devDependencies:{"@inquirer/core":"^11.2.1","@inquirer/prompts":"^8.5.2","@inquirer/testing":"^3.3.9","@playwright/test":"1.62.1","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-popover":"1.1.23","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-tabs":"^1.1.21","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/cli":"4.3.3","@tailwindcss/typography":"0.5.20","@types/node":"22.18.8","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@types/sanitize-html":"2.16.0","class-variance-authority":"0.7.1",clsx:"2.1.1",cmdk:"1.1.1","csv-parse":"7.0.1","csv-stringify":"6.8.1",esbuild:"0.28.1",marked:"15.0.12",react:"19.2.8","react-dom":"19.2.8","react-markdown":"10.1.0","remark-gfm":"4.0.1","sanitize-html":"2.16.0",serve:"^14.2.4","tailwind-merge":"3.6.0",tailwindcss:"4.3.3",typescript:"5.9.3"},optionalDependencies:{"@pan-stack/powerpoint":"^0.1.0"}}});var KE={};be(KE,{runInteractiveMenu:()=>G4});function F4(t){let e=t,n=String(e&&`${String(e.name)} ${String(e.message)}`||"");return/ExitPromptError|force closed|SIGINT|cancel/i.test(n)}async function uh({message:t,choices:e,hotkeys:n=[]}){try{return await Pe({message:t,choices:e,hotkeys:n})}catch(r){if(String(r?.message)!=="no-core")throw r;let o=await Cn();if(!o||typeof o.select!="function")return"__exit__";let i=n.map(s=>({name:`${s.key} ${s.label}`,value:s.value})),a=i.length?[...e,new o.Separator,...i]:e;return o.select({message:t,choices:a,pageSize:20,loop:!1,theme:ft(!1)})}}async function G4({printUsage:t,version:e}={}){let n=await lc(),r=await Cn();if(!n&&(!r||typeof r.select!="function"))return!1;let o=Hl().filter(i=>Wa(i).length>0).sort((i,a)=>br(i).localeCompare(br(a)));if(o.length===0)return console.log(p("NO_PAN_YAML_WITH_COMMANDS")),console.log(p("NO_PAN_YAML_BUT_GIT_STILL_WORKS")),!1;try{for(;;){let i=await uh({message:p("MENU_SELECT_PROJECT"),choices:o.map((f,h)=>({name:br(f),value:h,description:`${Wa(f).length} ${p("COMMANDS_LABEL")} \xB7 ${f.root}`})),hotkeys:[{key:"h",label:p("HELP_LABEL"),value:"__help__"},{key:"v",label:p("VERSION_LABEL"),value:"__version__"},{key:"x",label:p("EXIT_LABEL"),value:"__exit__"}]});if(i==="__exit__")return!0;if(i==="__version__"){console.log(`pan-stack-cli ${e||"?"}`);continue}if(i==="__help__"){typeof t=="function"&&t();continue}let a=typeof i=="number"?o[i]:void 0;if(!a)continue;let s=Wa(a),l=await uh({message:`[${br(a)}] ${p("MENU_SELECT_COMMAND")}`,choices:s.map(f=>({name:f.name+(f.aliases&&f.aliases.length?` (${f.aliases.join(", ")})`:"")+(f.hasTargets?` [${f.targets.join("|")}]`:""),value:f.name,description:f.description||""})),hotkeys:[{key:"b",label:p("BACK_LABEL"),value:"__back__"},{key:"x",label:p("EXIT_LABEL"),value:"__exit__"}]});if(l==="__exit__")return!0;if(l==="__back__")continue;let c=a.commands[String(l)],u=[];if(c&&c.targets&&Object.keys(c.targets).length>0){let f=Object.keys(c.targets),h=await uh({message:p("SELECT_TARGET__CMD",{cmd:l}),choices:[...f.map(m=>({name:m,value:m})),{name:p("DEFAULT_LABEL"),value:"__default__"}],hotkeys:[{key:"b",label:p("BACK_LABEL"),value:"__back__"}]});if(h==="__back__")continue;h!=="__default__"&&u.push(String(h))}console.error(`
965
+ `)){if(r.includes("")){n&&e.push(n);let[i,a,s,l,c]=r.split("");n={hash:i??"",date:a??"",name:s??"",email:l??"",subject:c||"",additions:0,deletions:0};continue}let o=r.match(/(\d+) insertion[s]?\(\+\)|(\d+) deletion[s]?\(-\)/g);if(o&&n)for(let i of o){let a=i.match(/(\d+) insertion/),s=i.match(/(\d+) deletion/);a?.[1]&&(n.additions+=parseInt(a[1],10)),s?.[1]&&(n.deletions+=parseInt(s[1],10))}}return n&&e.push(n),e}function L4(t){return String(t||"").replace(/\|/g,"\\|")}function $E(t,e){return ah.default.mkdirSync(jE.default.dirname(t),{recursive:!0}),ah.default.writeFileSync(t,e),t}var ah,jE,BE,FE=A(()=>{"use strict";ah=L(require("fs")),jE=L(require("path")),BE=require("child_process");Yc();ne()});var lh={};be(lh,{runStats:()=>P4});function O4(t){let e={_:[],open:!0,diff:!0};for(let n=0;n<t.length;n++){let r=t[n];r!==void 0&&(r==="--since"?e.since=t[++n]:r==="--from"?e.from=t[++n]:r==="--to"?e.to=t[++n]:r==="--member"||r==="-m"?e.member=t[++n]:r==="--project"||r==="-p"?e.project=t[++n]:r==="--port"?e.port=parseInt(t[++n]??"",10):r==="--out"||r==="-o"?e.out=t[++n]:r==="--no-open"?e.open=!1:r==="--no-diff"?e.diff=!1:r==="--head-only"?e.headOnly=!0:r==="--max-diff-lines"?e.maxDiffLines=parseInt(t[++n]??"",10):r.startsWith("--since=")?e.since=r.slice(8):e._.push(r))}return e}function qc(){let t=Hi.default.join(GE.default.homedir(),".pan-code-graph");return Jc.default.mkdirSync(t,{recursive:!0}),t}function sh(){let t=ki();if(t)return{repos:EE(t),source:`.project.yaml (${t.project})`};let e=vi(process.cwd());if(!e.length)throw new Error(p("STATS_NO_REPOS__CWD",{cwd:process.cwd()}));return console.log(p("STATS_FALLBACK_SCAN__CWD",{cwd:process.cwd()})),{repos:e,source:p("STATS_SOURCE_FALLBACK")}}function D4(){console.log(p("STATS_USAGE"))}async function P4(t){let e=O4(t),n=e._[0],r=n!==void 0&&["report","people","review"].includes(n)?e._.shift():"report";return e._[0]==="help"||e.help?D4():r==="review"?U4(e):r==="people"?B4(e):j4(e)}function M4(t){let{repos:e}=sh(),n=hs(t),r=!t.headOnly,o=r?p("STATS_SCOPE_ALL_BRANCHES"):p("STATS_SCOPE_HEAD_ONLY");console.log(p("STATS_SCAN_RANGE__N_SCOPE_LABEL",{n:e.length,scope:o,label:n.label}));let{commits:i,repoStatus:a}=nh(e,n,{allBranches:r}),s=rh(Hi.default.join(qc(),"alias-map.json"));return{repos:e,range:n,commits:i,repoStatus:a,aliasMap:s}}function j4(t){let{repos:e}=sh(),n=hs({}),r=!t.headOnly,o=r?p("STATS_SCOPE_ALL_BRANCHES"):p("STATS_SCOPE_HEAD_ONLY");console.log(p("STATS_SCAN_FULL__N_SCOPE",{n:e.length,scope:o}));let{commits:i,repoStatus:a}=nh(e,n,{allBranches:r}),s=rh(Hi.default.join(qc(),"alias-map.json")),l=i.map(h=>({e:Vc(h.email,s),n:h.name||h.email,t:h.ts,r:h.repoName,a:h.additions,d:h.deletions})),c=a.filter(h=>!h.available).map(h=>({name:h.name,reason:h.reason}));hs(t);let u={reposTotal:a.length,reposAvailable:a.filter(h=>h.available).length,unavailable:c,initialSince:t.since!=null?Number(t.since):null,initialFrom:t.from||null,initialTo:t.to||null,initialMembers:t.member?[t.member]:[]},d=NE(l,u),f=t.out||Hi.default.join(qc(),"report.html");Jc.default.writeFileSync(f,d),console.log(p("STATS_WROTE_REPORT__PATH_N",{path:f,n:l.length})),c.length&&console.log(p("STATS_UNAVAILABLE__N",{n:c.length})),DE(d,{port:t.port||4321,open:t.open})}function B4(t){let{commits:e,aliasMap:n}=M4(t),{members:r}=kE(e,n);console.log(p("STATS_PEOPLE_HEADER__N",{n:r.length}));for(let o of r)console.log(p("STATS_PEOPLE_ROW__N_NAME_EMAIL",{n:String(o.commits).padStart(5),name:o.name,email:o.email}))}function U4(t){if(!t.member||!t.project)throw new Error(p("STATS_REVIEW_NEED_FLAGS"));let{repos:e}=sh(),n=e.find(s=>s.name===t.project);if(!n)throw new Error(p("STATS_REVIEW_NO_PROJECT__PROJECT_NAMES",{project:t.project,names:e.map(s=>s.name).join(", ")}));if(!Jc.default.existsSync(n.dir))throw new Error(p("STATS_REVIEW_NOT_CLONED__PROJECT_DIR",{project:t.project,dir:n.dir}));let r=hs(t);console.log(p("STATS_REVIEW_BUILDING__MEMBER_PROJECT_LABEL",{member:t.member,project:t.project,label:r.label}));let o=UE(n,t.member,r,{withDiff:t.diff,maxDiffLines:t.maxDiffLines,allBranches:!t.headOnly}),i=`${t.project}_${t.member.replace(/[^a-z0-9]+/gi,"-")}`.toLowerCase(),a=t.out||Hi.default.join(qc(),`review-${i}.md`);$E(a,o),console.log(p("STATS_REVIEW_WROTE__PATH",{path:a})),console.log(p("STATS_REVIEW_HINT"))}var Jc,Hi,GE,ch=A(()=>{"use strict";Jc=L(require("fs")),Hi=L(require("path")),GE=L(require("os"));nn();wE();Yc();oh();SE();IE();PE();FE();ne()});var HE=U((fG,$4)=>{$4.exports={name:"pan-stack-cli",version:"0.3.5",description:"PAN Stack CLI \u2014 multi-repo git and project commands from .project.yaml",license:"MIT",bin:{pan:"bin/pan.js"},files:["bin"],scripts:{build:"node tools/pan-stack-cli/build.mjs",prepare:"node tools/pan-stack-cli/build.mjs",prepublishOnly:"node tools/pan-stack-cli/build.mjs",test:'tsc --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.web.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.e2e.json --noEmit && node --test "tools/pan-stack-plan/test/*.test.ts" "tools/pan-stack-cli/test/*.test.ts" && node --test tools/pan-cicd/test/',"test:pan-cicd":"node tools/pan-stack-cli/build.mjs && node --test tools/pan-cicd/test/","test:pan-stack-plan":'node --test "tools/pan-stack-plan/test/*.test.ts"',"test:pan-stack-cli":'node --test "tools/pan-stack-cli/test/*.test.ts"',typecheck:"tsc --noEmit && tsc -p tsconfig.test.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.web.json --noEmit && tsc -p tools/pan-stack-plan/tsconfig.e2e.json --noEmit","build:web":"node tools/pan-stack-plan/build-web.mjs",pretest:"node tools/pan-stack-plan/build-web.mjs","test:e2e":"playwright test -c tools/pan-stack-plan/playwright.config.ts"},engines:{node:">=18"},keywords:["pan-stack","monorepo","git","cli"],repository:{type:"git",url:"git+https://github.com/n46-labs/pan-stack-tools.git",directory:"pan-stack-cli"},devDependencies:{"@inquirer/core":"^11.2.1","@inquirer/prompts":"^8.5.2","@inquirer/testing":"^3.3.9","@playwright/test":"1.62.1","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-popover":"1.1.23","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-tabs":"^1.1.21","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/cli":"4.3.3","@tailwindcss/typography":"0.5.20","@types/node":"22.18.8","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@types/sanitize-html":"2.16.0","class-variance-authority":"0.7.1",clsx:"2.1.1",cmdk:"1.1.1","csv-parse":"7.0.1","csv-stringify":"6.8.1",esbuild:"0.28.1",marked:"15.0.12",react:"19.2.8","react-dom":"19.2.8","react-markdown":"10.1.0","remark-gfm":"4.0.1","sanitize-html":"2.16.0",serve:"^14.2.4","tailwind-merge":"3.6.0",tailwindcss:"4.3.3",typescript:"5.9.3"},optionalDependencies:{"@pan-stack/powerpoint":"^0.1.0"}}});var KE={};be(KE,{runInteractiveMenu:()=>G4});function F4(t){let e=t,n=String(e&&`${String(e.name)} ${String(e.message)}`||"");return/ExitPromptError|force closed|SIGINT|cancel/i.test(n)}async function uh({message:t,choices:e,hotkeys:n=[]}){try{return await Pe({message:t,choices:e,hotkeys:n})}catch(r){if(String(r?.message)!=="no-core")throw r;let o=await Cn();if(!o||typeof o.select!="function")return"__exit__";let i=n.map(s=>({name:`${s.key} ${s.label}`,value:s.value})),a=i.length?[...e,new o.Separator,...i]:e;return o.select({message:t,choices:a,pageSize:20,loop:!1,theme:ft(!1)})}}async function G4({printUsage:t,version:e}={}){let n=await lc(),r=await Cn();if(!n&&(!r||typeof r.select!="function"))return!1;let o=Hl().filter(i=>Wa(i).length>0).sort((i,a)=>br(i).localeCompare(br(a)));if(o.length===0)return console.log(p("NO_PAN_YAML_WITH_COMMANDS")),console.log(p("NO_PAN_YAML_BUT_GIT_STILL_WORKS")),!1;try{for(;;){let i=await uh({message:p("MENU_SELECT_PROJECT"),choices:o.map((f,h)=>({name:br(f),value:h,description:`${Wa(f).length} ${p("COMMANDS_LABEL")} \xB7 ${f.root}`})),hotkeys:[{key:"h",label:p("HELP_LABEL"),value:"__help__"},{key:"v",label:p("VERSION_LABEL"),value:"__version__"},{key:"x",label:p("EXIT_LABEL"),value:"__exit__"}]});if(i==="__exit__")return!0;if(i==="__version__"){console.log(`pan-stack-cli ${e||"?"}`);continue}if(i==="__help__"){typeof t=="function"&&t();continue}let a=typeof i=="number"?o[i]:void 0;if(!a)continue;let s=Wa(a),l=await uh({message:`[${br(a)}] ${p("MENU_SELECT_COMMAND")}`,choices:s.map(f=>({name:f.name+(f.aliases&&f.aliases.length?` (${f.aliases.join(", ")})`:"")+(f.hasTargets?` [${f.targets.join("|")}]`:""),value:f.name,description:f.description||""})),hotkeys:[{key:"b",label:p("BACK_LABEL"),value:"__back__"},{key:"x",label:p("EXIT_LABEL"),value:"__exit__"}]});if(l==="__exit__")return!0;if(l==="__back__")continue;let c=a.commands[String(l)],u=[];if(c&&c.targets&&Object.keys(c.targets).length>0){let f=Object.keys(c.targets),h=await uh({message:p("SELECT_TARGET__CMD",{cmd:l}),choices:[...f.map(m=>({name:m,value:m})),{name:p("DEFAULT_LABEL"),value:"__default__"}],hotkeys:[{key:"b",label:p("BACK_LABEL"),value:"__back__"}]});if(h==="__back__")continue;h!=="__default__"&&u.push(String(h))}console.error(`
966
966
  \u25B6 pan ${l}${u.length?" "+u.join(" "):""} (${WE.default.basename(a.root)})
967
967
  `);let d=await Wc(a,String(l),u);if(!(d&&d.backed))return!0}}catch(i){if(F4(i))return console.error(`
968
968
  `+p("EXITED")),!0;throw i}}var WE,zE=A(()=>{"use strict";WE=L(require("path"));nn();Co();Kp();eo();Rt();Mo();ne()});var ew={};be(ew,{MANAGED_BY_PAN:()=>Ho,PRODUCTS_DIR:()=>Nn,PRODUCT_LAYOUT:()=>yr,SHARED_LAYOUT:()=>Qc,TEMPLATES:()=>ms,findTemplateDir:()=>dh,listProducts:()=>Wo,renderReadme:()=>ph,runBa:()=>nL});function z4(){console.log(p("BA_USAGE",{skill:Wi,productsDir:Nn}))}function Y4(t){let e={positional:[],dir:"",title:"",products:[],dryRun:!1,help:!1};for(let n=0;n<t.length;n+=1){let r=t[n];if(r!==void 0)if(r==="-h"||r==="--help")e.help=!0;else if(r==="--dry-run")e.dryRun=!0;else if(r==="--title")e.title=t[n+=1]||"";else if(r.startsWith("--title="))e.title=r.slice(8);else if(r==="--dir")e.dir=t[n+=1]||"";else if(r.startsWith("--dir="))e.dir=r.slice(6);else if(r==="--product")e.products.push(t[n+=1]||"");else if(r.startsWith("--product="))e.products.push(r.slice(10));else{if(r.startsWith("-"))throw new Error(p("BA_UNKNOWN_FLAG__FLAG",{flag:r}));e.positional.push(r)}}return e}function dh(t){let e=me.default.resolve(t);for(let n=0;n<8;n+=1){for(let o of VE){let i=me.default.join(e,o,"skills",Wi,"references","templates");if(se.default.existsSync(i)&&se.default.statSync(i).isDirectory())return i}let r=me.default.dirname(e);if(r===e)break;e=r}return null}function fh(t){let e=dh(t);if(e)return e;throw new Error(p("BA_TEMPLATE_NOT_FOUND__SKILL_SEARCHED_ROOT",{skill:Wi,searched:VE.map(n=>`${n}/skills/${Wi}/references/templates`).join(", "),root:t}))}function qE(t,e){try{return se.default.readFileSync(t,"utf8")===se.default.readFileSync(e,"utf8")}catch{return!1}}function Wo(t){let e=me.default.join(t,Nn);return se.default.existsSync(e)?se.default.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(n=>n.name).sort():[]}function V4(t){return Wo(t).length>0}function JE(t){for(let e of se.default.readdirSync(t,{withFileTypes:!0}))if(!(e.name===".gitkeep"||e.name.startsWith(".")))if(e.isDirectory()){if(JE(me.default.join(t,e.name)))return!0}else return!0;return!1}function XE(t){if(!se.default.existsSync(t)||!se.default.statSync(t).isDirectory())return!1;for(let n of se.default.readdirSync(t,{withFileTypes:!0}))n.isDirectory()&&XE(me.default.join(t,n.name));return se.default.readdirSync(t).filter(n=>n!==".gitkeep").length?!1:(se.default.rmSync(me.default.join(t,".gitkeep"),{force:!0}),se.default.rmdirSync(t),!0)}function q4(t){return[...new Set(yr.map(([n])=>n.split("/")[0]??n))].filter(n=>{let r=me.default.join(t,n);return se.default.existsSync(r)&&JE(r)})}function Xc(t,e,n,r){let o=0;for(let[i]of e){let a=me.default.join(t,i);se.default.existsSync(a)||(o+=1,r(` + ${me.default.relative(process.cwd(),a)||i}`),n||(se.default.mkdirSync(a,{recursive:!0}),se.default.writeFileSync(me.default.join(a,".gitkeep"),W4)))}return o}function QE(t,e,n){let r=0;for(let o of ms.map(([i])=>i).concat("README.md")){let i=me.default.join(e,o),a=me.default.join(t,"00-templates",o);if(!se.default.existsSync(i)){o!=="README.md"&&console.error(p("BA_SKILL_MISSING_TEMPLATE__NAME",{name:o}));continue}se.default.existsSync(a)&&qE(i,a)||(r+=1,console.log(` ${se.default.existsSync(a)?"~":"+"} 00-templates/${o}`),n||(se.default.mkdirSync(me.default.dirname(a),{recursive:!0}),se.default.copyFileSync(i,a)))}return r}function ph(t,e){let n=e.length>0,r=Qc.map(([l,c])=>`| \`${l}/\` | ${c} |`).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pan-stack-cli",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "PAN Stack CLI — multi-repo git and project commands from .project.yaml",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -33,8 +33,8 @@
33
33
  ],
34
34
  "repository": {
35
35
  "type": "git",
36
- "url": "https://github.com/doiya46/pan-stack.git",
37
- "directory": ".pan/pan-stack-cli"
36
+ "url": "git+https://github.com/n46-labs/pan-stack-tools.git",
37
+ "directory": "pan-stack-cli"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@inquirer/core": "^11.2.1",