@activade/open-workflows 1.0.2 → 2.0.1
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 +91 -64
- package/actions/doc-sync/action.yml +42 -0
- package/actions/doc-sync/skill.md +97 -0
- package/actions/issue-label/action.yml +36 -0
- package/actions/issue-label/skill.md +113 -0
- package/actions/issue-label/src/apply-labels.ts +118 -0
- package/actions/pr-review/action.yml +36 -0
- package/actions/pr-review/skill.md +223 -0
- package/actions/pr-review/src/submit-review.ts +154 -0
- package/actions/release/action.yml +59 -0
- package/actions/release/src/publish.ts +235 -0
- package/dist/cli/index.js +133 -570
- package/package.json +11 -21
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/installer.d.ts +0 -24
- package/dist/cli/templates/auth.d.ts +0 -1
- package/dist/cli/templates/doc-sync.d.ts +0 -1
- package/dist/cli/templates/index.d.ts +0 -7
- package/dist/cli/templates/issue-label.d.ts +0 -1
- package/dist/cli/templates/pr-review.d.ts +0 -1
- package/dist/cli/templates/release.d.ts +0 -1
- package/dist/cli/templates/shared.d.ts +0 -3
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -62
- package/dist/skills/doc-sync.d.ts +0 -1
- package/dist/skills/index.d.ts +0 -10
- package/dist/skills/issue-label.d.ts +0 -1
- package/dist/skills/pr-review.d.ts +0 -1
- package/dist/skills/release-notes.d.ts +0 -1
- package/dist/tools/apply-labels/index.d.ts +0 -2
- package/dist/tools/apply-labels/schema.d.ts +0 -12
- package/dist/tools/bun-release/index.d.ts +0 -2
- package/dist/tools/bun-release/schema.d.ts +0 -4
- package/dist/tools/github-release/index.d.ts +0 -2
- package/dist/tools/github-release/schema.d.ts +0 -9
- package/dist/tools/index.d.ts +0 -2
- package/dist/tools/submit-review/index.d.ts +0 -2
- package/dist/tools/submit-review/schema.d.ts +0 -24
- package/dist/tools/utils/retry.d.ts +0 -7
package/dist/cli/index.js
CHANGED
|
@@ -1,92 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var So=Object.create;var{getPrototypeOf:Eo,defineProperty:Te,getOwnPropertyNames:Oo}=Object;var Io=Object.prototype.hasOwnProperty;var P=(o,s,t)=>{t=o!=null?So(Eo(o)):{};let i=s||!o||!o.__esModule?Te(t,"default",{value:o,enumerable:!0}):t;for(let n of Oo(o))if(!Io.call(i,n))Te(i,n,{get:()=>o[n],enumerable:!0});return i};var J=(o,s)=>()=>(s||o((s={exports:{}}).exports,s),s.exports);var X=J((Os,Le)=>{var Q={to(o,s){if(!s)return`\x1B[${o+1}G`;return`\x1B[${s+1};${o+1}H`},move(o,s){let t="";if(o<0)t+=`\x1B[${-o}D`;else if(o>0)t+=`\x1B[${o}C`;if(s<0)t+=`\x1B[${-s}A`;else if(s>0)t+=`\x1B[${s}B`;return t},up:(o=1)=>`\x1B[${o}A`,down:(o=1)=>`\x1B[${o}B`,forward:(o=1)=>`\x1B[${o}C`,backward:(o=1)=>`\x1B[${o}D`,nextLine:(o=1)=>"\x1B[E".repeat(o),prevLine:(o=1)=>"\x1B[F".repeat(o),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Co={up:(o=1)=>"\x1B[S".repeat(o),down:(o=1)=>"\x1B[T".repeat(o)},Ro={screen:"\x1B[2J",up:(o=1)=>"\x1B[1J".repeat(o),down:(o=1)=>"\x1B[J".repeat(o),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(o){let s="";for(let t=0;t<o;t++)s+=this.line+(t<o-1?Q.up():"");if(o)s+=Q.left;return s}};Le.exports={cursor:Q,scroll:Co,erase:Ro,beep:"\x07"}});var F=J((Is,Z)=>{var j=process||{},$e=j.argv||[],H=j.env||{},Ao=!(!!H.NO_COLOR||$e.includes("--no-color"))&&(!!H.FORCE_COLOR||$e.includes("--color")||j.platform==="win32"||(j.stdout||{}).isTTY&&H.TERM!=="dumb"||!!H.CI),_o=(o,s,t=o)=>(i)=>{let n=""+i,r=n.indexOf(s,o.length);return~r?o+No(n,s,t,r)+s:o+n+s},No=(o,s,t,i)=>{let n="",r=0;do n+=o.substring(r,i)+t,r=i+s.length,i=o.indexOf(s,r);while(~i);return n+o.substring(r)},Pe=(o=Ao)=>{let s=o?_o:()=>String;return{isColorSupported:o,reset:s("\x1B[0m","\x1B[0m"),bold:s("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:s("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:s("\x1B[3m","\x1B[23m"),underline:s("\x1B[4m","\x1B[24m"),inverse:s("\x1B[7m","\x1B[27m"),hidden:s("\x1B[8m","\x1B[28m"),strikethrough:s("\x1B[9m","\x1B[29m"),black:s("\x1B[30m","\x1B[39m"),red:s("\x1B[31m","\x1B[39m"),green:s("\x1B[32m","\x1B[39m"),yellow:s("\x1B[33m","\x1B[39m"),blue:s("\x1B[34m","\x1B[39m"),magenta:s("\x1B[35m","\x1B[39m"),cyan:s("\x1B[36m","\x1B[39m"),white:s("\x1B[37m","\x1B[39m"),gray:s("\x1B[90m","\x1B[39m"),bgBlack:s("\x1B[40m","\x1B[49m"),bgRed:s("\x1B[41m","\x1B[49m"),bgGreen:s("\x1B[42m","\x1B[49m"),bgYellow:s("\x1B[43m","\x1B[49m"),bgBlue:s("\x1B[44m","\x1B[49m"),bgMagenta:s("\x1B[45m","\x1B[49m"),bgCyan:s("\x1B[46m","\x1B[49m"),bgWhite:s("\x1B[47m","\x1B[49m"),blackBright:s("\x1B[90m","\x1B[39m"),redBright:s("\x1B[91m","\x1B[39m"),greenBright:s("\x1B[92m","\x1B[39m"),yellowBright:s("\x1B[93m","\x1B[39m"),blueBright:s("\x1B[94m","\x1B[39m"),magentaBright:s("\x1B[95m","\x1B[39m"),cyanBright:s("\x1B[96m","\x1B[39m"),whiteBright:s("\x1B[97m","\x1B[39m"),bgBlackBright:s("\x1B[100m","\x1B[49m"),bgRedBright:s("\x1B[101m","\x1B[49m"),bgGreenBright:s("\x1B[102m","\x1B[49m"),bgYellowBright:s("\x1B[103m","\x1B[49m"),bgBlueBright:s("\x1B[104m","\x1B[49m"),bgMagentaBright:s("\x1B[105m","\x1B[49m"),bgCyanBright:s("\x1B[106m","\x1B[49m"),bgWhiteBright:s("\x1B[107m","\x1B[49m")}};Z.exports=Pe();Z.exports.createColors=Pe});var yo=J((vt,bs)=>{bs.exports={name:"@activade/open-workflows",version:"0.0.1",description:"OpenCode plugin with skills for AI-powered GitHub workflows: PR reviews, issue labeling, doc sync, and releases",keywords:["opencode","opencode-plugin","opencode-skills","github","ai","code-review","automation","pr-review","issue-labeling"],author:"activadee",license:"MIT",repository:{type:"git",url:"git+https://github.com/activadee/open-workflows.git"},type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",bin:{"open-workflows":"./dist/cli/index.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},files:["dist","README.md","LICENSE"],scripts:{clean:"rm -rf dist",build:"bun run clean && bun build src/index.ts --outdir dist --target bun --format esm -e @opencode-ai/plugin -e @opencode-ai/plugin/tool --minify && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --minify && bun x tsc --declaration --emitDeclarationOnly --outDir dist",dev:"bun run build --watch",typecheck:"tsc --noEmit",test:"bun run build && bun test",prepublishOnly:"bun run clean && bun run build && bun run typecheck"},dependencies:{"@clack/prompts":"^0.10.0","@opencode-ai/plugin":"^1.0.204",picocolors:"^1.1.1",zod:"~4.1.8"},devDependencies:{"@types/node":"^22.0.0","bun-types":"latest",typescript:"^5.6.0"},engines:{node:">=18.0.0"}}});import{stripVTControlCharacters as le}from"util";var u=P(X(),1);import{stdin as qe,stdout as Ve}from"process";import*as R from"readline";import We from"readline";import{Writable as To}from"stream";function Lo({onlyFirst:o=!1}={}){let s=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(s,o?void 0:"g")}var $o=Lo();function ze(o){if(typeof o!="string")throw TypeError(`Expected a \`string\`, got \`${typeof o}\``);return o.replace($o,"")}function Ye(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var Je={exports:{}};(function(o){var s={};o.exports=s,s.eastAsianWidth=function(i){var n=i.charCodeAt(0),r=i.length==2?i.charCodeAt(1):0,e=n;return 55296<=n&&n<=56319&&56320<=r&&r<=57343&&(n&=1023,r&=1023,e=n<<10|r,e+=65536),e==12288||65281<=e&&e<=65376||65504<=e&&e<=65510?"F":e==8361||65377<=e&&e<=65470||65474<=e&&e<=65479||65482<=e&&e<=65487||65490<=e&&e<=65495||65498<=e&&e<=65500||65512<=e&&e<=65518?"H":4352<=e&&e<=4447||4515<=e&&e<=4519||4602<=e&&e<=4607||9001<=e&&e<=9002||11904<=e&&e<=11929||11931<=e&&e<=12019||12032<=e&&e<=12245||12272<=e&&e<=12283||12289<=e&&e<=12350||12353<=e&&e<=12438||12441<=e&&e<=12543||12549<=e&&e<=12589||12593<=e&&e<=12686||12688<=e&&e<=12730||12736<=e&&e<=12771||12784<=e&&e<=12830||12832<=e&&e<=12871||12880<=e&&e<=13054||13056<=e&&e<=19903||19968<=e&&e<=42124||42128<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||55216<=e&&e<=55238||55243<=e&&e<=55291||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65106||65108<=e&&e<=65126||65128<=e&&e<=65131||110592<=e&&e<=110593||127488<=e&&e<=127490||127504<=e&&e<=127546||127552<=e&&e<=127560||127568<=e&&e<=127569||131072<=e&&e<=194367||177984<=e&&e<=196605||196608<=e&&e<=262141?"W":32<=e&&e<=126||162<=e&&e<=163||165<=e&&e<=166||e==172||e==175||10214<=e&&e<=10221||10629<=e&&e<=10630?"Na":e==161||e==164||167<=e&&e<=168||e==170||173<=e&&e<=174||176<=e&&e<=180||182<=e&&e<=186||188<=e&&e<=191||e==198||e==208||215<=e&&e<=216||222<=e&&e<=225||e==230||232<=e&&e<=234||236<=e&&e<=237||e==240||242<=e&&e<=243||247<=e&&e<=250||e==252||e==254||e==257||e==273||e==275||e==283||294<=e&&e<=295||e==299||305<=e&&e<=307||e==312||319<=e&&e<=322||e==324||328<=e&&e<=331||e==333||338<=e&&e<=339||358<=e&&e<=359||e==363||e==462||e==464||e==466||e==468||e==470||e==472||e==474||e==476||e==593||e==609||e==708||e==711||713<=e&&e<=715||e==717||e==720||728<=e&&e<=731||e==733||e==735||768<=e&&e<=879||913<=e&&e<=929||931<=e&&e<=937||945<=e&&e<=961||963<=e&&e<=969||e==1025||1040<=e&&e<=1103||e==1105||e==8208||8211<=e&&e<=8214||8216<=e&&e<=8217||8220<=e&&e<=8221||8224<=e&&e<=8226||8228<=e&&e<=8231||e==8240||8242<=e&&e<=8243||e==8245||e==8251||e==8254||e==8308||e==8319||8321<=e&&e<=8324||e==8364||e==8451||e==8453||e==8457||e==8467||e==8470||8481<=e&&e<=8482||e==8486||e==8491||8531<=e&&e<=8532||8539<=e&&e<=8542||8544<=e&&e<=8555||8560<=e&&e<=8569||e==8585||8592<=e&&e<=8601||8632<=e&&e<=8633||e==8658||e==8660||e==8679||e==8704||8706<=e&&e<=8707||8711<=e&&e<=8712||e==8715||e==8719||e==8721||e==8725||e==8730||8733<=e&&e<=8736||e==8739||e==8741||8743<=e&&e<=8748||e==8750||8756<=e&&e<=8759||8764<=e&&e<=8765||e==8776||e==8780||e==8786||8800<=e&&e<=8801||8804<=e&&e<=8807||8810<=e&&e<=8811||8814<=e&&e<=8815||8834<=e&&e<=8835||8838<=e&&e<=8839||e==8853||e==8857||e==8869||e==8895||e==8978||9312<=e&&e<=9449||9451<=e&&e<=9547||9552<=e&&e<=9587||9600<=e&&e<=9615||9618<=e&&e<=9621||9632<=e&&e<=9633||9635<=e&&e<=9641||9650<=e&&e<=9651||9654<=e&&e<=9655||9660<=e&&e<=9661||9664<=e&&e<=9665||9670<=e&&e<=9672||e==9675||9678<=e&&e<=9681||9698<=e&&e<=9701||e==9711||9733<=e&&e<=9734||e==9737||9742<=e&&e<=9743||9748<=e&&e<=9749||e==9756||e==9758||e==9792||e==9794||9824<=e&&e<=9825||9827<=e&&e<=9829||9831<=e&&e<=9834||9836<=e&&e<=9837||e==9839||9886<=e&&e<=9887||9918<=e&&e<=9919||9924<=e&&e<=9933||9935<=e&&e<=9953||e==9955||9960<=e&&e<=9983||e==10045||e==10071||10102<=e&&e<=10111||11093<=e&&e<=11097||12872<=e&&e<=12879||57344<=e&&e<=63743||65024<=e&&e<=65039||e==65533||127232<=e&&e<=127242||127248<=e&&e<=127277||127280<=e&&e<=127337||127344<=e&&e<=127386||917760<=e&&e<=917999||983040<=e&&e<=1048573||1048576<=e&&e<=1114109?"A":"N"},s.characterLength=function(i){var n=this.eastAsianWidth(i);return n=="F"||n=="W"||n=="A"?2:1};function t(i){return i.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}s.length=function(i){for(var n=t(i),r=0,e=0;e<n.length;e++)r=r+this.characterLength(n[e]);return r},s.slice=function(i,n,r){textLen=s.length(i),n=n||0,r=r||1,n<0&&(n=textLen+n),r<0&&(r=textLen+r);for(var e="",l=0,m=t(i),c=0;c<m.length;c++){var h=m[c],p=s.length(h);if(l>=n-(p==2?1:0))if(l+p<=r)e+=h;else break;l+=p}return e}})(Je);var Po=Je.exports,Wo=Ye(Po),Uo=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Ho=Ye(Uo);function W(o,s={}){if(typeof o!="string"||o.length===0||(s={ambiguousIsNarrow:!0,...s},o=ze(o),o.length===0))return 0;o=o.replace(Ho()," ");let t=s.ambiguousIsNarrow?1:2,i=0;for(let n of o){let r=n.codePointAt(0);if(r<=31||r>=127&&r<=159||r>=768&&r<=879)continue;switch(Wo.eastAsianWidth(n)){case"F":case"W":i+=2;break;case"A":i+=t;break;default:i+=1}}return i}var D=10,Ue=(o=0)=>(s)=>`\x1B[${s+o}m`,He=(o=0)=>(s)=>`\x1B[${38+o};5;${s}m`,je=(o=0)=>(s,t,i)=>`\x1B[${38+o};2;${s};${t};${i}m`,d={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(d.modifier);var jo=Object.keys(d.color),Go=Object.keys(d.bgColor);[...jo,...Go];function Bo(){let o=new Map;for(let[s,t]of Object.entries(d)){for(let[i,n]of Object.entries(t))d[i]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},t[i]=d[i],o.set(n[0],n[1]);Object.defineProperty(d,s,{value:t,enumerable:!1})}return Object.defineProperty(d,"codes",{value:o,enumerable:!1}),d.color.close="\x1B[39m",d.bgColor.close="\x1B[49m",d.color.ansi=Ue(),d.color.ansi256=He(),d.color.ansi16m=je(),d.bgColor.ansi=Ue(D),d.bgColor.ansi256=He(D),d.bgColor.ansi16m=je(D),Object.defineProperties(d,{rgbToAnsi256:{value:(s,t,i)=>s===t&&t===i?s<8?16:s>248?231:Math.round((s-8)/247*24)+232:16+36*Math.round(s/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5),enumerable:!1},hexToRgb:{value:(s)=>{let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(s.toString(16));if(!t)return[0,0,0];let[i]=t;i.length===3&&(i=[...i].map((r)=>r+r).join(""));let n=Number.parseInt(i,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:(s)=>d.rgbToAnsi256(...d.hexToRgb(s)),enumerable:!1},ansi256ToAnsi:{value:(s)=>{if(s<8)return 30+s;if(s<16)return 90+(s-8);let t,i,n;if(s>=232)t=((s-232)*10+8)/255,i=t,n=t;else{s-=16;let l=s%36;t=Math.floor(s/36)/5,i=Math.floor(l/6)/5,n=l%6/5}let r=Math.max(t,i,n)*2;if(r===0)return 30;let e=30+(Math.round(n)<<2|Math.round(i)<<1|Math.round(t));return r===2&&(e+=60),e},enumerable:!1},rgbToAnsi:{value:(s,t,i)=>d.ansi256ToAnsi(d.rgbToAnsi256(s,t,i)),enumerable:!1},hexToAnsi:{value:(s)=>d.ansi256ToAnsi(d.hexToAnsi256(s)),enumerable:!1}}),d}var Ko=Bo(),K=new Set(["\x1B","\x9B"]),Mo=39,se="\x07",Qe="[",qo="]",Xe="m",te=`${qo}8;;`,Ge=(o)=>`${K.values().next().value}${Qe}${o}${Xe}`,Be=(o)=>`${K.values().next().value}${te}${o}${se}`,Vo=(o)=>o.split(" ").map((s)=>W(s)),ee=(o,s,t)=>{let i=[...s],n=!1,r=!1,e=W(ze(o[o.length-1]));for(let[l,m]of i.entries()){let c=W(m);if(e+c<=t?o[o.length-1]+=m:(o.push(m),e=0),K.has(m)&&(n=!0,r=i.slice(l+1).join("").startsWith(te)),n){r?m===se&&(n=!1,r=!1):m===Xe&&(n=!1);continue}e+=c,e===t&&l<i.length-1&&(o.push(""),e=0)}!e&&o[o.length-1].length>0&&o.length>1&&(o[o.length-2]+=o.pop())},zo=(o)=>{let s=o.split(" "),t=s.length;for(;t>0&&!(W(s[t-1])>0);)t--;return t===s.length?o:s.slice(0,t).join(" ")+s.slice(t).join("")},Yo=(o,s,t={})=>{if(t.trim!==!1&&o.trim()==="")return"";let i="",n,r,e=Vo(o),l=[""];for(let[c,h]of o.split(" ").entries()){t.trim!==!1&&(l[l.length-1]=l[l.length-1].trimStart());let p=W(l[l.length-1]);if(c!==0&&(p>=s&&(t.wordWrap===!1||t.trim===!1)&&(l.push(""),p=0),(p>0||t.trim===!1)&&(l[l.length-1]+=" ",p++)),t.hard&&e[c]>s){let k=s-p,C=1+Math.floor((e[c]-k-1)/s);Math.floor((e[c]-1)/s)<C&&l.push(""),ee(l,h,s);continue}if(p+e[c]>s&&p>0&&e[c]>0){if(t.wordWrap===!1&&p<s){ee(l,h,s);continue}l.push("")}if(p+e[c]>s&&t.wordWrap===!1){ee(l,h,s);continue}l[l.length-1]+=h}t.trim!==!1&&(l=l.map((c)=>zo(c)));let m=[...l.join(`
|
|
4
|
-
`)];for(let[
|
|
5
|
-
`?(
|
|
6
|
-
`&&(
|
|
3
|
+
var xs=Object.create;var{getPrototypeOf:Es,defineProperty:To,getOwnPropertyNames:ks}=Object;var ys=Object.prototype.hasOwnProperty;var B=(s,e,n)=>{n=s!=null?xs(Es(s)):{};let l=e||!s||!s.__esModule?To(n,"default",{value:s,enumerable:!0}):n;for(let r of ks(s))if(!ys.call(l,r))To(l,r,{get:()=>s[r],enumerable:!0});return l};var M=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var F=M((ge,No)=>{var u={to(s,e){if(!e)return`\x1B[${s+1}G`;return`\x1B[${e+1};${s+1}H`},move(s,e){let n="";if(s<0)n+=`\x1B[${-s}D`;else if(s>0)n+=`\x1B[${s}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(s=1)=>`\x1B[${s}A`,down:(s=1)=>`\x1B[${s}B`,forward:(s=1)=>`\x1B[${s}C`,backward:(s=1)=>`\x1B[${s}D`,nextLine:(s=1)=>"\x1B[E".repeat(s),prevLine:(s=1)=>"\x1B[F".repeat(s),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Os={up:(s=1)=>"\x1B[S".repeat(s),down:(s=1)=>"\x1B[T".repeat(s)},Is={screen:"\x1B[2J",up:(s=1)=>"\x1B[1J".repeat(s),down:(s=1)=>"\x1B[J".repeat(s),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(s){let e="";for(let n=0;n<s;n++)e+=this.line+(n<s-1?u.up():"");if(s)e+=u.left;return e}};No.exports={cursor:u,scroll:Os,erase:Is,beep:"\x07"}});var oo=M((xe,D)=>{var j=process||{},Ro=j.argv||[],V=j.env||{},$s=!(!!V.NO_COLOR||Ro.includes("--no-color"))&&(!!V.FORCE_COLOR||Ro.includes("--color")||j.platform==="win32"||(j.stdout||{}).isTTY&&V.TERM!=="dumb"||!!V.CI),vs=(s,e,n=s)=>(l)=>{let r=""+l,t=r.indexOf(e,s.length);return~t?s+_s(r,e,n,t)+e:s+r+e},_s=(s,e,n,l)=>{let r="",t=0;do r+=s.substring(t,l)+n,t=l+e.length,l=s.indexOf(e,t);while(~l);return r+s.substring(t)},Po=(s=$s)=>{let e=s?vs:()=>String;return{isColorSupported:s,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};D.exports=Po();D.exports.createColors=Po});var ws=M((De,me)=>{me.exports={name:"@activade/open-workflows",version:"2.0.1",description:"AI-powered GitHub automation workflows via composite actions",keywords:["github","github-actions","ai","automation","code-review","pr-review","issue-labeling","opencode"],author:"activadee",license:"MIT",repository:{type:"git",url:"git+https://github.com/activadee/open-workflows.git"},type:"module",bin:{"open-workflows":"dist/cli/index.js"},files:["dist","actions","README.md","LICENSE"],scripts:{clean:"rm -rf dist",build:"bun run clean && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --minify",dev:"bun run build --watch",typecheck:"tsc --noEmit",test:"bun test",prepublishOnly:"bun run clean && bun run build && bun run typecheck"},dependencies:{"@clack/prompts":"^0.10.0",picocolors:"^1.1.1"},devDependencies:{"@types/node":"^22.0.0","bun-types":"latest",typescript:"^5.6.0"},engines:{node:">=18.0.0"}}});import{stripVTControlCharacters as po}from"util";var g=B(F(),1);import{stdin as Vo,stdout as jo}from"process";import*as _ from"readline";import Ho from"readline";import{Writable as Ss}from"stream";function As({onlyFirst:s=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}var Cs=As();function qo(s){if(typeof s!="string")throw TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Cs,"")}function zo(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var Jo={exports:{}};(function(s){var e={};s.exports=e,e.eastAsianWidth=function(l){var r=l.charCodeAt(0),t=l.length==2?l.charCodeAt(1):0,o=r;return 55296<=r&&r<=56319&&56320<=t&&t<=57343&&(r&=1023,t&=1023,o=r<<10|t,o+=65536),o==12288||65281<=o&&o<=65376||65504<=o&&o<=65510?"F":o==8361||65377<=o&&o<=65470||65474<=o&&o<=65479||65482<=o&&o<=65487||65490<=o&&o<=65495||65498<=o&&o<=65500||65512<=o&&o<=65518?"H":4352<=o&&o<=4447||4515<=o&&o<=4519||4602<=o&&o<=4607||9001<=o&&o<=9002||11904<=o&&o<=11929||11931<=o&&o<=12019||12032<=o&&o<=12245||12272<=o&&o<=12283||12289<=o&&o<=12350||12353<=o&&o<=12438||12441<=o&&o<=12543||12549<=o&&o<=12589||12593<=o&&o<=12686||12688<=o&&o<=12730||12736<=o&&o<=12771||12784<=o&&o<=12830||12832<=o&&o<=12871||12880<=o&&o<=13054||13056<=o&&o<=19903||19968<=o&&o<=42124||42128<=o&&o<=42182||43360<=o&&o<=43388||44032<=o&&o<=55203||55216<=o&&o<=55238||55243<=o&&o<=55291||63744<=o&&o<=64255||65040<=o&&o<=65049||65072<=o&&o<=65106||65108<=o&&o<=65126||65128<=o&&o<=65131||110592<=o&&o<=110593||127488<=o&&o<=127490||127504<=o&&o<=127546||127552<=o&&o<=127560||127568<=o&&o<=127569||131072<=o&&o<=194367||177984<=o&&o<=196605||196608<=o&&o<=262141?"W":32<=o&&o<=126||162<=o&&o<=163||165<=o&&o<=166||o==172||o==175||10214<=o&&o<=10221||10629<=o&&o<=10630?"Na":o==161||o==164||167<=o&&o<=168||o==170||173<=o&&o<=174||176<=o&&o<=180||182<=o&&o<=186||188<=o&&o<=191||o==198||o==208||215<=o&&o<=216||222<=o&&o<=225||o==230||232<=o&&o<=234||236<=o&&o<=237||o==240||242<=o&&o<=243||247<=o&&o<=250||o==252||o==254||o==257||o==273||o==275||o==283||294<=o&&o<=295||o==299||305<=o&&o<=307||o==312||319<=o&&o<=322||o==324||328<=o&&o<=331||o==333||338<=o&&o<=339||358<=o&&o<=359||o==363||o==462||o==464||o==466||o==468||o==470||o==472||o==474||o==476||o==593||o==609||o==708||o==711||713<=o&&o<=715||o==717||o==720||728<=o&&o<=731||o==733||o==735||768<=o&&o<=879||913<=o&&o<=929||931<=o&&o<=937||945<=o&&o<=961||963<=o&&o<=969||o==1025||1040<=o&&o<=1103||o==1105||o==8208||8211<=o&&o<=8214||8216<=o&&o<=8217||8220<=o&&o<=8221||8224<=o&&o<=8226||8228<=o&&o<=8231||o==8240||8242<=o&&o<=8243||o==8245||o==8251||o==8254||o==8308||o==8319||8321<=o&&o<=8324||o==8364||o==8451||o==8453||o==8457||o==8467||o==8470||8481<=o&&o<=8482||o==8486||o==8491||8531<=o&&o<=8532||8539<=o&&o<=8542||8544<=o&&o<=8555||8560<=o&&o<=8569||o==8585||8592<=o&&o<=8601||8632<=o&&o<=8633||o==8658||o==8660||o==8679||o==8704||8706<=o&&o<=8707||8711<=o&&o<=8712||o==8715||o==8719||o==8721||o==8725||o==8730||8733<=o&&o<=8736||o==8739||o==8741||8743<=o&&o<=8748||o==8750||8756<=o&&o<=8759||8764<=o&&o<=8765||o==8776||o==8780||o==8786||8800<=o&&o<=8801||8804<=o&&o<=8807||8810<=o&&o<=8811||8814<=o&&o<=8815||8834<=o&&o<=8835||8838<=o&&o<=8839||o==8853||o==8857||o==8869||o==8895||o==8978||9312<=o&&o<=9449||9451<=o&&o<=9547||9552<=o&&o<=9587||9600<=o&&o<=9615||9618<=o&&o<=9621||9632<=o&&o<=9633||9635<=o&&o<=9641||9650<=o&&o<=9651||9654<=o&&o<=9655||9660<=o&&o<=9661||9664<=o&&o<=9665||9670<=o&&o<=9672||o==9675||9678<=o&&o<=9681||9698<=o&&o<=9701||o==9711||9733<=o&&o<=9734||o==9737||9742<=o&&o<=9743||9748<=o&&o<=9749||o==9756||o==9758||o==9792||o==9794||9824<=o&&o<=9825||9827<=o&&o<=9829||9831<=o&&o<=9834||9836<=o&&o<=9837||o==9839||9886<=o&&o<=9887||9918<=o&&o<=9919||9924<=o&&o<=9933||9935<=o&&o<=9953||o==9955||9960<=o&&o<=9983||o==10045||o==10071||10102<=o&&o<=10111||11093<=o&&o<=11097||12872<=o&&o<=12879||57344<=o&&o<=63743||65024<=o&&o<=65039||o==65533||127232<=o&&o<=127242||127248<=o&&o<=127277||127280<=o&&o<=127337||127344<=o&&o<=127386||917760<=o&&o<=917999||983040<=o&&o<=1048573||1048576<=o&&o<=1114109?"A":"N"},e.characterLength=function(l){var r=this.eastAsianWidth(l);return r=="F"||r=="W"||r=="A"?2:1};function n(l){return l.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(l){for(var r=n(l),t=0,o=0;o<r.length;o++)t=t+this.characterLength(r[o]);return t},e.slice=function(l,r,t){textLen=e.length(l),r=r||0,t=t||1,r<0&&(r=textLen+r),t<0&&(t=textLen+t);for(var o="",i=0,p=n(l),m=0;m<p.length;m++){var f=p[m],c=e.length(f);if(i>=r-(c==2?1:0))if(i+c<=t)o+=f;else break;i+=c}return o}})(Jo);var Ts=Jo.exports,Ns=zo(Ts),Rs=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Ps=zo(Rs);function U(s,e={}){if(typeof s!="string"||s.length===0||(e={ambiguousIsNarrow:!0,...e},s=qo(s),s.length===0))return 0;s=s.replace(Ps()," ");let n=e.ambiguousIsNarrow?1:2,l=0;for(let r of s){let t=r.codePointAt(0);if(t<=31||t>=127&&t<=159||t>=768&&t<=879)continue;switch(Ns.eastAsianWidth(r)){case"F":case"W":l+=2;break;case"A":l+=n;break;default:l+=1}}return l}var so=10,Bo=(s=0)=>(e)=>`\x1B[${e+s}m`,Uo=(s=0)=>(e)=>`\x1B[${38+s};5;${e}m`,Ko=(s=0)=>(e,n,l)=>`\x1B[${38+s};2;${e};${n};${l}m`,w={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(w.modifier);var Hs=Object.keys(w.color),Bs=Object.keys(w.bgColor);[...Hs,...Bs];function Us(){let s=new Map;for(let[e,n]of Object.entries(w)){for(let[l,r]of Object.entries(n))w[l]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[l]=w[l],s.set(r[0],r[1]);Object.defineProperty(w,e,{value:n,enumerable:!1})}return Object.defineProperty(w,"codes",{value:s,enumerable:!1}),w.color.close="\x1B[39m",w.bgColor.close="\x1B[49m",w.color.ansi=Bo(),w.color.ansi256=Uo(),w.color.ansi16m=Ko(),w.bgColor.ansi=Bo(so),w.bgColor.ansi256=Uo(so),w.bgColor.ansi16m=Ko(so),Object.defineProperties(w,{rgbToAnsi256:{value:(e,n,l)=>e===n&&n===l?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(l/255*5),enumerable:!1},hexToRgb:{value:(e)=>{let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[l]=n;l.length===3&&(l=[...l].map((t)=>t+t).join(""));let r=Number.parseInt(l,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:(e)=>w.rgbToAnsi256(...w.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:(e)=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,l,r;if(e>=232)n=((e-232)*10+8)/255,l=n,r=n;else{e-=16;let i=e%36;n=Math.floor(e/36)/5,l=Math.floor(i/6)/5,r=i%6/5}let t=Math.max(n,l,r)*2;if(t===0)return 30;let o=30+(Math.round(r)<<2|Math.round(l)<<1|Math.round(n));return t===2&&(o+=60),o},enumerable:!1},rgbToAnsi:{value:(e,n,l)=>w.ansi256ToAnsi(w.rgbToAnsi256(e,n,l)),enumerable:!1},hexToAnsi:{value:(e)=>w.ansi256ToAnsi(w.hexToAnsi256(e)),enumerable:!1}}),w}var Ks=Us(),J=new Set(["\x1B","\x9B"]),Ws=39,ro="\x07",Qo="[",Ls="]",Xo="m",lo=`${Ls}8;;`,Wo=(s)=>`${J.values().next().value}${Qo}${s}${Xo}`,Lo=(s)=>`${J.values().next().value}${lo}${s}${ro}`,Gs=(s)=>s.split(" ").map((e)=>U(e)),eo=(s,e,n)=>{let l=[...e],r=!1,t=!1,o=U(qo(s[s.length-1]));for(let[i,p]of l.entries()){let m=U(p);if(o+m<=n?s[s.length-1]+=p:(s.push(p),o=0),J.has(p)&&(r=!0,t=l.slice(i+1).join("").startsWith(lo)),r){t?p===ro&&(r=!1,t=!1):p===Xo&&(r=!1);continue}o+=m,o===n&&i<l.length-1&&(s.push(""),o=0)}!o&&s[s.length-1].length>0&&s.length>1&&(s[s.length-2]+=s.pop())},Ys=(s)=>{let e=s.split(" "),n=e.length;for(;n>0&&!(U(e[n-1])>0);)n--;return n===e.length?s:e.slice(0,n).join(" ")+e.slice(n).join("")},Vs=(s,e,n={})=>{if(n.trim!==!1&&s.trim()==="")return"";let l="",r,t,o=Gs(s),i=[""];for(let[m,f]of s.split(" ").entries()){n.trim!==!1&&(i[i.length-1]=i[i.length-1].trimStart());let c=U(i[i.length-1]);if(m!==0&&(c>=e&&(n.wordWrap===!1||n.trim===!1)&&(i.push(""),c=0),(c>0||n.trim===!1)&&(i[i.length-1]+=" ",c++)),n.hard&&o[m]>e){let d=e-c,O=1+Math.floor((o[m]-d-1)/e);Math.floor((o[m]-1)/e)<O&&i.push(""),eo(i,f,e);continue}if(c+o[m]>e&&c>0&&o[m]>0){if(n.wordWrap===!1&&c<e){eo(i,f,e);continue}i.push("")}if(c+o[m]>e&&n.wordWrap===!1){eo(i,f,e);continue}i[i.length-1]+=f}n.trim!==!1&&(i=i.map((m)=>Ys(m)));let p=[...i.join(`
|
|
4
|
+
`)];for(let[m,f]of p.entries()){if(l+=f,J.has(f)){let{groups:d}=new RegExp(`(?:\\${Qo}(?<code>\\d+)m|\\${lo}(?<uri>.*)${ro})`).exec(p.slice(m).join(""))||{groups:{}};if(d.code!==void 0){let O=Number.parseFloat(d.code);r=O===Ws?void 0:O}else d.uri!==void 0&&(t=d.uri.length===0?void 0:d.uri)}let c=Ks.codes.get(Number(r));p[m+1]===`
|
|
5
|
+
`?(t&&(l+=Lo("")),r&&c&&(l+=Wo(c))):f===`
|
|
6
|
+
`&&(r&&c&&(l+=Wo(r)),t&&(l+=Lo(t)))}return l};function Go(s,e,n){return String(s).normalize().replace(/\r\n/g,`
|
|
7
7
|
`).split(`
|
|
8
|
-
`).map((
|
|
9
|
-
`)}var
|
|
10
|
-
`),
|
|
11
|
-
`),
|
|
12
|
-
`),
|
|
13
|
-
`).length-1;this.output.write(
|
|
14
|
-
`);this.output.write(
|
|
15
|
-
`).slice(
|
|
16
|
-
`)),this._prevFrame=
|
|
17
|
-
${
|
|
18
|
-
`,
|
|
19
|
-
${a.default.gray(
|
|
20
|
-
${a.default.cyan(
|
|
21
|
-
`}}}).prompt()};var
|
|
22
|
-
${a.default.reset(a.default.dim(`Press ${a.default.gray(a.default.bgWhite(a.default.inverse(" space ")))} to select, ${a.default.gray(a.default.bgWhite(a.default.inverse(" enter ")))} to submit`))}`},render(){let
|
|
23
|
-
${
|
|
24
|
-
`,
|
|
25
|
-
${a.default.gray(
|
|
26
|
-
`).map((
|
|
27
|
-
`);return`${
|
|
28
|
-
${a.default.yellow(
|
|
29
|
-
${n}
|
|
30
|
-
`}default:return`${t}${a.default.cyan(f)} ${to({options:this.options,cursor:this.cursor,maxItems:o.maxItems,style:i}).join(`
|
|
31
|
-
${a.default.cyan(f)} `)}
|
|
32
|
-
${a.default.cyan(U)}
|
|
33
|
-
`}}}).prompt()};var me=(o="",s="")=>{let t=`
|
|
34
|
-
${o}
|
|
35
|
-
`.split(`
|
|
36
|
-
`),i=le(s).length,n=Math.max(t.reduce((e,l)=>{let m=le(l);return m.length>e?m.length:e},0),i)+2,r=t.map((e)=>`${a.default.gray(f)} ${a.default.dim(e)}${" ".repeat(n-le(e).length)}${a.default.gray(f)}`).join(`
|
|
37
|
-
`);process.stdout.write(`${a.default.gray(f)}
|
|
38
|
-
${a.default.green(q)} ${a.default.reset(s)} ${a.default.gray(so.repeat(Math.max(n-i-1,1))+as)}
|
|
8
|
+
`).map((l)=>Vs(l,e,n)).join(`
|
|
9
|
+
`)}var js=["up","down","left","right","space","enter","cancel"],z={actions:new Set(js),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function to(s,e){if(typeof s=="string")return z.aliases.get(s)===e;for(let n of s)if(n!==void 0&&to(n,e))return!0;return!1}function qs(s,e){if(s===e)return;let n=s.split(`
|
|
10
|
+
`),l=e.split(`
|
|
11
|
+
`),r=[];for(let t=0;t<Math.max(n.length,l.length);t++)n[t]!==l[t]&&r.push(t);return r}var zs=globalThis.process.platform.startsWith("win"),no=Symbol("clack:cancel");function K(s){return s===no}function q(s,e){let n=s;n.isTTY&&n.setRawMode(e)}function Zo({input:s=Vo,output:e=jo,overwrite:n=!0,hideCursor:l=!0}={}){let r=_.createInterface({input:s,output:e,prompt:"",tabSize:1});_.emitKeypressEvents(s,r),s.isTTY&&s.setRawMode(!0);let t=(o,{name:i,sequence:p})=>{let m=String(o);if(to([m,i,p],"cancel")){l&&e.write(g.cursor.show),process.exit(0);return}if(!n)return;_.moveCursor(e,i==="return"?0:-1,i==="return"?-1:0,()=>{_.clearLine(e,1,()=>{s.once("keypress",t)})})};return l&&e.write(g.cursor.hide),s.once("keypress",t),()=>{s.off("keypress",t),l&&e.write(g.cursor.show),s.isTTY&&!zs&&s.setRawMode(!1),r.terminal=!1,r.close()}}var Js=Object.defineProperty,Qs=(s,e,n)=>(e in s)?Js(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n,y=(s,e,n)=>(Qs(s,typeof e!="symbol"?e+"":e,n),n);class ao{constructor(s,e=!0){y(this,"input"),y(this,"output"),y(this,"_abortSignal"),y(this,"rl"),y(this,"opts"),y(this,"_render"),y(this,"_track",!1),y(this,"_prevFrame",""),y(this,"_subscribers",new Map),y(this,"_cursor",0),y(this,"state","initial"),y(this,"error",""),y(this,"value");let{input:n=Vo,output:l=jo,render:r,signal:t,...o}=s;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=e,this._abortSignal=t,this.input=n,this.output=l}unsubscribe(){this._subscribers.clear()}setSubscriber(s,e){let n=this._subscribers.get(s)??[];n.push(e),this._subscribers.set(s,n)}on(s,e){this.setSubscriber(s,{cb:e})}once(s,e){this.setSubscriber(s,{cb:e,once:!0})}emit(s,...e){let n=this._subscribers.get(s)??[],l=[];for(let r of n)r.cb(...e),r.once&&l.push(()=>n.splice(n.indexOf(r),1));for(let r of l)r()}prompt(){return new Promise((s,e)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),s(no);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let n=new Ss;n._write=(l,r,t)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),t()},this.input.pipe(n),this.rl=Ho.createInterface({input:this.input,output:n,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),Ho.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),q(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(g.cursor.show),this.output.off("resize",this.render),q(this.input,!1),s(this.value)}),this.once("cancel",()=>{this.output.write(g.cursor.show),this.output.off("resize",this.render),q(this.input,!1),s(no)})})}onKeypress(s,e){if(this.state==="error"&&(this.state="active"),e?.name&&(!this._track&&z.aliases.has(e.name)&&this.emit("cursor",z.aliases.get(e.name)),z.actions.has(e.name)&&this.emit("cursor",e.name)),s&&(s.toLowerCase()==="y"||s.toLowerCase()==="n")&&this.emit("confirm",s.toLowerCase()==="y"),s==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),s&&this.emit("key",s.toLowerCase()),e?.name==="return"){if(!this.value&&this.opts.placeholder&&(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder)),this.opts.validate){let n=this.opts.validate(this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}to([s,e?.name,e?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
12
|
+
`),q(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let s=Go(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
|
|
13
|
+
`).length-1;this.output.write(g.cursor.move(-999,s*-1))}render(){let s=Go(this._render(this)??"",process.stdout.columns,{hard:!0});if(s!==this._prevFrame){if(this.state==="initial")this.output.write(g.cursor.hide);else{let e=qs(this._prevFrame,s);if(this.restoreCursor(),e&&e?.length===1){let n=e[0];this.output.write(g.cursor.move(0,n)),this.output.write(g.erase.lines(1));let l=s.split(`
|
|
14
|
+
`);this.output.write(l[n]),this._prevFrame=s,this.output.write(g.cursor.move(0,l.length-n-1));return}if(e&&e?.length>1){let n=e[0];this.output.write(g.cursor.move(0,n)),this.output.write(g.erase.down());let l=s.split(`
|
|
15
|
+
`).slice(n);this.output.write(l.join(`
|
|
16
|
+
`)),this._prevFrame=s;return}this.output.write(g.erase.down())}this.output.write(s),this.state==="initial"&&(this.state="active"),this._prevFrame=s}}}class io extends ao{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(s){super(s,!1),this.value=!!s.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(g.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Xs;Xs=new WeakMap;var Zs=Object.defineProperty,Ms=(s,e,n)=>(e in s)?Zs(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n,Yo=(s,e,n)=>(Ms(s,typeof e!="symbol"?e+"":e,n),n),Mo=class extends ao{constructor(s){super(s,!1),Yo(this,"options"),Yo(this,"cursor",0),this.options=s.options,this.value=[...s.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===s.cursorAt),0),this.on("key",(e)=>{e==="a"&&this.toggleAll()}),this.on("cursor",(e)=>{switch(e){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){let s=this.value.length===this.options.length;this.value=s?[]:this.options.map((e)=>e.value)}toggleValue(){let s=this.value.includes(this._value);this.value=s?this.value.filter((e)=>e!==this._value):[...this.value,this._value]}};var a=B(oo(),1),Q=B(F(),1);import $ from"process";function us(){return $.platform!=="win32"?$.env.TERM!=="linux":!!$.env.CI||!!$.env.WT_SESSION||!!$.env.TERMINUS_SUBLIME||$.env.ConEmuTask==="{cmd::Cmder}"||$.env.TERM_PROGRAM==="Terminus-Sublime"||$.env.TERM_PROGRAM==="vscode"||$.env.TERM==="xterm-256color"||$.env.TERM==="alacritty"||$.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var co=us(),h=(s,e)=>co?s:e,Fs=h("\u25C6","*"),es=h("\u25A0","x"),ns=h("\u25B2","x"),X=h("\u25C7","o"),Ds=h("\u250C","T"),b=h("\u2502","|"),W=h("\u2514","\u2014"),uo=h("\u25CF",">"),Fo=h("\u25CB"," "),oe=h("\u25FB","[\u2022]"),Do=h("\u25FC","[+]"),se=h("\u25FB","[ ]"),Pe=h("\u25AA","\u2022"),os=h("\u2500","-"),ee=h("\u256E","+"),ne=h("\u251C","+"),re=h("\u256F","+"),le=h("\u25CF","\u2022"),te=h("\u25C6","*"),ae=h("\u25B2","!"),ie=h("\u25A0","x"),rs=(s)=>{switch(s){case"initial":case"active":return a.default.cyan(Fs);case"cancel":return a.default.red(es);case"error":return a.default.yellow(ns);case"submit":return a.default.green(X)}},ss=(s)=>{let{cursor:e,options:n,style:l}=s,r=s.maxItems??Number.POSITIVE_INFINITY,t=Math.max(process.stdout.rows-4,0),o=Math.min(t,Math.max(r,5)),i=0;e>=i+o-3?i=Math.max(Math.min(e-o+3,n.length-o),0):e<i+2&&(i=Math.max(e-2,0));let p=o<n.length&&i>0,m=o<n.length&&i+o<n.length;return n.slice(i,i+o).map((f,c,d)=>{let O=c===0&&p,P=c===d.length-1&&m;return O||P?a.default.dim("..."):l(f,c+i===e)})};var mo=(s)=>{let e=s.active??"Yes",n=s.inactive??"No";return new io({active:e,inactive:n,initialValue:s.initialValue??!0,render(){let l=`${a.default.gray(b)}
|
|
17
|
+
${rs(this.state)} ${s.message}
|
|
18
|
+
`,r=this.value?e:n;switch(this.state){case"submit":return`${l}${a.default.gray(b)} ${a.default.dim(r)}`;case"cancel":return`${l}${a.default.gray(b)} ${a.default.strikethrough(a.default.dim(r))}
|
|
19
|
+
${a.default.gray(b)}`;default:return`${l}${a.default.cyan(b)} ${this.value?`${a.default.green(uo)} ${e}`:`${a.default.dim(Fo)} ${a.default.dim(e)}`} ${a.default.dim("/")} ${this.value?`${a.default.dim(Fo)} ${a.default.dim(n)}`:`${a.default.green(uo)} ${n}`}
|
|
20
|
+
${a.default.cyan(W)}
|
|
21
|
+
`}}}).prompt()};var ls=(s)=>{let e=(n,l)=>{let r=n.label??String(n.value);return l==="active"?`${a.default.cyan(oe)} ${r} ${n.hint?a.default.dim(`(${n.hint})`):""}`:l==="selected"?`${a.default.green(Do)} ${a.default.dim(r)} ${n.hint?a.default.dim(`(${n.hint})`):""}`:l==="cancelled"?`${a.default.strikethrough(a.default.dim(r))}`:l==="active-selected"?`${a.default.green(Do)} ${r} ${n.hint?a.default.dim(`(${n.hint})`):""}`:l==="submitted"?`${a.default.dim(r)}`:`${a.default.dim(se)} ${a.default.dim(r)}`};return new Mo({options:s.options,initialValues:s.initialValues,required:s.required??!0,cursorAt:s.cursorAt,validate(n){if(this.required&&n.length===0)return`Please select at least one option.
|
|
22
|
+
${a.default.reset(a.default.dim(`Press ${a.default.gray(a.default.bgWhite(a.default.inverse(" space ")))} to select, ${a.default.gray(a.default.bgWhite(a.default.inverse(" enter ")))} to submit`))}`},render(){let n=`${a.default.gray(b)}
|
|
23
|
+
${rs(this.state)} ${s.message}
|
|
24
|
+
`,l=(r,t)=>{let o=this.value.includes(r.value);return t&&o?e(r,"active-selected"):o?e(r,"selected"):e(r,t?"active":"inactive")};switch(this.state){case"submit":return`${n}${a.default.gray(b)} ${this.options.filter(({value:r})=>this.value.includes(r)).map((r)=>e(r,"submitted")).join(a.default.dim(", "))||a.default.dim("none")}`;case"cancel":{let r=this.options.filter(({value:t})=>this.value.includes(t)).map((t)=>e(t,"cancelled")).join(a.default.dim(", "));return`${n}${a.default.gray(b)} ${r.trim()?`${r}
|
|
25
|
+
${a.default.gray(b)}`:""}`}case"error":{let r=this.error.split(`
|
|
26
|
+
`).map((t,o)=>o===0?`${a.default.yellow(W)} ${a.default.yellow(t)}`:` ${t}`).join(`
|
|
27
|
+
`);return`${n+a.default.yellow(b)} ${ss({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:l}).join(`
|
|
28
|
+
${a.default.yellow(b)} `)}
|
|
39
29
|
${r}
|
|
40
|
-
${a.default.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
`)}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`)
|
|
48
|
-
|
|
30
|
+
`}default:return`${n}${a.default.cyan(b)} ${ss({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:l}).join(`
|
|
31
|
+
${a.default.cyan(b)} `)}
|
|
32
|
+
${a.default.cyan(W)}
|
|
33
|
+
`}}}).prompt()};var wo=(s="",e="")=>{let n=`
|
|
34
|
+
${s}
|
|
35
|
+
`.split(`
|
|
36
|
+
`),l=po(e).length,r=Math.max(n.reduce((o,i)=>{let p=po(i);return p.length>o?p.length:o},0),l)+2,t=n.map((o)=>`${a.default.gray(b)} ${a.default.dim(o)}${" ".repeat(r-po(o).length)}${a.default.gray(b)}`).join(`
|
|
37
|
+
`);process.stdout.write(`${a.default.gray(b)}
|
|
38
|
+
${a.default.green(X)} ${a.default.reset(e)} ${a.default.gray(os.repeat(Math.max(r-l-1,1))+ee)}
|
|
39
|
+
${t}
|
|
40
|
+
${a.default.gray(ne+os.repeat(r+2)+re)}
|
|
41
|
+
`)},fo=(s="")=>{process.stdout.write(`${a.default.gray(W)} ${a.default.red(s)}
|
|
42
|
+
|
|
43
|
+
`)},ts=(s="")=>{process.stdout.write(`${a.default.gray(Ds)} ${s}
|
|
44
|
+
`)},as=(s="")=>{process.stdout.write(`${a.default.gray(b)}
|
|
45
|
+
${a.default.gray(W)} ${s}
|
|
46
|
+
|
|
47
|
+
`)},x={message:(s="",{symbol:e=a.default.gray(b)}={})=>{let n=[`${a.default.gray(b)}`];if(s){let[l,...r]=s.split(`
|
|
48
|
+
`);n.push(`${e} ${l}`,...r.map((t)=>`${a.default.gray(b)} ${t}`))}process.stdout.write(`${n.join(`
|
|
49
49
|
`)}
|
|
50
|
-
`)},info:(
|
|
51
|
-
`);let
|
|
52
|
-
`);process.stdout.write(
|
|
53
|
-
`);let
|
|
54
|
-
`):process.stdout.write(`${
|
|
55
|
-
`),
|
|
56
|
-
|
|
57
|
-
on:
|
|
58
|
-
schedule:
|
|
59
|
-
- cron: '0 3 * * *'
|
|
60
|
-
workflow_dispatch:
|
|
61
|
-
|
|
62
|
-
jobs:
|
|
63
|
-
refresh:
|
|
64
|
-
runs-on: ubuntu-latest
|
|
65
|
-
steps:
|
|
66
|
-
- id: cache
|
|
67
|
-
uses: actions/cache@v4
|
|
68
|
-
with:
|
|
69
|
-
path: ~/.local/share/opencode/auth.json
|
|
70
|
-
key: opencode-auth
|
|
71
|
-
|
|
72
|
-
- if: steps.cache.outputs.cache-hit != 'true'
|
|
73
|
-
name: Restore auth from secret
|
|
74
|
-
run: |
|
|
75
|
-
mkdir -p ~/.local/share/opencode
|
|
76
|
-
echo '\${{ secrets.OPENCODE_AUTH }}' > ~/.local/share/opencode/auth.json
|
|
77
|
-
|
|
78
|
-
- name: Install OpenCode
|
|
79
|
-
run: curl -fsSL https://opencode.ai/install | bash
|
|
80
|
-
|
|
81
|
-
- name: Refresh OAuth token
|
|
82
|
-
run: opencode models
|
|
83
|
-
`;var A=`
|
|
84
|
-
- name: Restore OpenCode auth
|
|
85
|
-
uses: actions/cache/restore@v4
|
|
50
|
+
`)},info:(s)=>{x.message(s,{symbol:a.default.blue(le)})},success:(s)=>{x.message(s,{symbol:a.default.green(te)})},step:(s)=>{x.message(s,{symbol:a.default.green(X)})},warn:(s)=>{x.message(s,{symbol:a.default.yellow(ae)})},warning:(s)=>{x.warn(s)},error:(s)=>{x.message(s,{symbol:a.default.red(ie)})}},He=`${a.default.gray(b)} `;var is=({indicator:s="dots"}={})=>{let e=co?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],n=co?80:120,l=process.env.CI==="true",r,t,o=!1,i="",p,m=performance.now(),f=(k)=>{let I=k>1?"Something went wrong":"Canceled";o&&Co(I,k)},c=()=>f(2),d=()=>f(1),O=()=>{process.on("uncaughtExceptionMonitor",c),process.on("unhandledRejection",c),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",f)},P=()=>{process.removeListener("uncaughtExceptionMonitor",c),process.removeListener("unhandledRejection",c),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",f)},H=()=>{if(p===void 0)return;l&&process.stdout.write(`
|
|
51
|
+
`);let k=p.split(`
|
|
52
|
+
`);process.stdout.write(Q.cursor.move(-999,k.length-1)),process.stdout.write(Q.erase.down(k.length))},Z=(k)=>k.replace(/\.+$/,""),Ao=(k)=>{let I=(performance.now()-k)/1000,v=Math.floor(I/60),A=Math.floor(I%60);return v>0?`[${v}m ${A}s]`:`[${A}s]`},ds=(k="")=>{o=!0,r=Zo(),i=Z(k),m=performance.now(),process.stdout.write(`${a.default.gray(b)}
|
|
53
|
+
`);let I=0,v=0;O(),t=setInterval(()=>{if(l&&i===p)return;H(),p=i;let A=a.default.magenta(e[I]);if(l)process.stdout.write(`${A} ${i}...`);else if(s==="timer")process.stdout.write(`${A} ${i} ${Ao(m)}`);else{let gs=".".repeat(Math.floor(v)).slice(0,3);process.stdout.write(`${A} ${i}${gs}`)}I=I+1<e.length?I+1:0,v=v<e.length?v+0.125:0},n)},Co=(k="",I=0)=>{o=!1,clearInterval(t),H();let v=I===0?a.default.green(X):I===1?a.default.red(es):a.default.red(ns);i=Z(k??i),s==="timer"?process.stdout.write(`${v} ${i} ${Ao(m)}
|
|
54
|
+
`):process.stdout.write(`${v} ${i}
|
|
55
|
+
`),P(),r()};return{start:ds,stop:Co,message:(k="")=>{i=Z(k??i)}}},ps=async(s,e)=>{let n={},l=Object.keys(s);for(let r of l){let t=s[r],o=await t({results:n})?.catch((i)=>{throw i});if(typeof e?.onCancel=="function"&&K(o)){n[r]="canceled",e.onCancel({results:n});continue}n[r]=o}return n};var E=B(oo(),1);import*as S from"fs";import*as L from"path";var C="\n OPENCODE_AUTH: ${{ secrets.OPENCODE_AUTH }}",T="\n ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}",N=`
|
|
56
|
+
- uses: actions/cache/restore@v4
|
|
86
57
|
with:
|
|
87
58
|
path: ~/.local/share/opencode/auth.json
|
|
88
59
|
key: opencode-auth
|
|
89
|
-
|
|
60
|
+
`;var bo=(s)=>`name: PR Review
|
|
90
61
|
|
|
91
62
|
on:
|
|
92
63
|
pull_request:
|
|
@@ -100,14 +71,11 @@ jobs:
|
|
|
100
71
|
pull-requests: write
|
|
101
72
|
steps:
|
|
102
73
|
- uses: actions/checkout@v4
|
|
103
|
-
${
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
run: bunx opencode-ai run --model anthropic/claude-sonnet-4-5 "Load the pr-review skill and review PR \${{ github.event.pull_request.number }}"
|
|
109
|
-
env:${o?N:_}
|
|
110
|
-
`;var ge=(o)=>`name: Issue Label
|
|
74
|
+
${s?N:""}
|
|
75
|
+
- uses: activadee/open-workflows/actions/pr-review@main
|
|
76
|
+
env:
|
|
77
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?C:T}
|
|
78
|
+
`;var ho=(s)=>`name: Issue Label
|
|
111
79
|
|
|
112
80
|
on:
|
|
113
81
|
issues:
|
|
@@ -120,14 +88,11 @@ jobs:
|
|
|
120
88
|
issues: write
|
|
121
89
|
steps:
|
|
122
90
|
- uses: actions/checkout@v4
|
|
123
|
-
${
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
run: bunx opencode-ai run --model anthropic/claude-haiku-4-5 "Load the issue-label skill and label issue \${{ github.event.issue.number }}"
|
|
129
|
-
env:${o?N:_}
|
|
130
|
-
`;var be=(o)=>`name: Doc Sync
|
|
91
|
+
${s?N:""}
|
|
92
|
+
- uses: activadee/open-workflows/actions/issue-label@main
|
|
93
|
+
env:
|
|
94
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?C:T}
|
|
95
|
+
`;var go=(s)=>`name: Doc Sync
|
|
131
96
|
|
|
132
97
|
on:
|
|
133
98
|
pull_request:
|
|
@@ -138,26 +103,33 @@ jobs:
|
|
|
138
103
|
runs-on: ubuntu-latest
|
|
139
104
|
permissions:
|
|
140
105
|
contents: write
|
|
106
|
+
pull-requests: write
|
|
141
107
|
steps:
|
|
142
108
|
- uses: actions/checkout@v4
|
|
143
109
|
with:
|
|
144
110
|
ref: \${{ github.head_ref }}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
- name: Setup Bun
|
|
152
|
-
uses: oven-sh/setup-bun@v2
|
|
153
|
-
|
|
154
|
-
- name: Sync Documentation
|
|
155
|
-
run: bunx opencode-ai run --model anthropic/claude-haiku-4-5 "Load the doc-sync skill and sync documentation for PR \${{ github.event.pull_request.number }}"
|
|
156
|
-
env:${o?N:_}
|
|
157
|
-
`;var ue=(o)=>`name: Release
|
|
111
|
+
fetch-depth: 0
|
|
112
|
+
${s?N:""}
|
|
113
|
+
- uses: activadee/open-workflows/actions/doc-sync@main
|
|
114
|
+
env:
|
|
115
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?C:T}
|
|
116
|
+
`;var xo=(s)=>`name: Release
|
|
158
117
|
|
|
159
118
|
on:
|
|
160
119
|
workflow_dispatch:
|
|
120
|
+
inputs:
|
|
121
|
+
bump:
|
|
122
|
+
description: 'Version bump type'
|
|
123
|
+
required: true
|
|
124
|
+
type: choice
|
|
125
|
+
options:
|
|
126
|
+
- patch
|
|
127
|
+
- minor
|
|
128
|
+
- major
|
|
129
|
+
version:
|
|
130
|
+
description: 'Override version (optional, e.g., 1.2.3)'
|
|
131
|
+
required: false
|
|
132
|
+
type: string
|
|
161
133
|
|
|
162
134
|
jobs:
|
|
163
135
|
release:
|
|
@@ -169,483 +141,74 @@ jobs:
|
|
|
169
141
|
- uses: actions/checkout@v4
|
|
170
142
|
with:
|
|
171
143
|
fetch-depth: 0
|
|
172
|
-
${o?A:""}
|
|
173
|
-
- name: Configure Git
|
|
174
|
-
run: |
|
|
175
|
-
git config user.name "github-actions[bot]"
|
|
176
|
-
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
177
|
-
|
|
178
|
-
- name: Setup Bun
|
|
179
|
-
uses: oven-sh/setup-bun@v2
|
|
180
|
-
|
|
181
|
-
- name: Create Release
|
|
182
|
-
run: bunx opencode-ai run --model anthropic/claude-haiku-4-5 "Load the release-notes skill and create a new release"
|
|
183
|
-
env:${o?N:_}
|
|
184
|
-
`;var ho={review:"pr-review",label:"issue-label","doc-sync":"doc-sync",release:"release"};var we=`---
|
|
185
|
-
name: pr-review
|
|
186
|
-
description: AI-powered pull request code review focusing on correctness, security, stability, and maintainability. Posts structured findings via submit_review tool.
|
|
187
|
-
license: MIT
|
|
188
|
-
metadata:
|
|
189
|
-
trigger: pull_request
|
|
190
|
-
tools: submit_review
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## What I Do
|
|
194
|
-
|
|
195
|
-
Review pull request changes systematically and post findings as a sticky PR comment using the \`submit_review\` tool.
|
|
196
|
-
|
|
197
|
-
## Workflow
|
|
198
|
-
|
|
199
|
-
1. **Gather context**: Use GitHub CLI to get PR metadata
|
|
200
|
-
\`\`\`bash
|
|
201
|
-
gh pr view <number> --json files,title,body,headRefOid
|
|
202
|
-
\`\`\`
|
|
203
|
-
|
|
204
|
-
2. **Create todo list**: One item per changed file using \`todowrite\`
|
|
205
|
-
|
|
206
|
-
3. **Analyze each file**:
|
|
207
|
-
- Mark todo as \`in_progress\`
|
|
208
|
-
- Read the file diff and surrounding context
|
|
209
|
-
- Note issues (correctness, security, stability, maintainability)
|
|
210
|
-
- Mark todo as \`completed\`
|
|
211
|
-
|
|
212
|
-
4. **Synthesize review**: After ALL files are analyzed, determine verdict and summary
|
|
213
|
-
|
|
214
|
-
5. **Submit**: Call \`submit_review\` exactly once with all findings
|
|
215
|
-
|
|
216
|
-
## Review Priorities
|
|
217
|
-
|
|
218
|
-
Focus on these areas in order of importance:
|
|
219
|
-
|
|
220
|
-
1. **Correctness** - Logic errors, broken control flow, off-by-one errors, incorrect conditions
|
|
221
|
-
2. **Security** - Injection vulnerabilities, auth issues, secrets in code, unsafe deserialization
|
|
222
|
-
3. **Stability** - Error handling, race conditions, resource leaks, null/undefined cases
|
|
223
|
-
4. **Maintainability** - Clarity, naming, violations of local conventions
|
|
224
|
-
|
|
225
|
-
Only flag style issues when they hide bugs or cause real confusion.
|
|
226
|
-
|
|
227
|
-
## Using submit_review
|
|
228
|
-
|
|
229
|
-
Call exactly once with these arguments:
|
|
230
|
-
|
|
231
|
-
| Argument | Type | Description |
|
|
232
|
-
|----------|------|-------------|
|
|
233
|
-
| \`repository\` | string | owner/repo format (from git remote) |
|
|
234
|
-
| \`pullNumber\` | number | PR number from task message |
|
|
235
|
-
| \`commitSha\` | string | headRefOid from PR metadata |
|
|
236
|
-
| \`summary\` | string | 1-3 sentence overall assessment |
|
|
237
|
-
| \`verdict\` | string | \`approve\` or \`request_changes\` |
|
|
238
|
-
| \`issues\` | array | List of findings |
|
|
239
|
-
|
|
240
|
-
Each issue in the array needs:
|
|
241
|
-
|
|
242
|
-
| Field | Type | Description |
|
|
243
|
-
|-------|------|-------------|
|
|
244
|
-
| \`file\` | string | File path from the diff |
|
|
245
|
-
| \`line\` | number | Line number on the NEW (right) side |
|
|
246
|
-
| \`severity\` | string | \`critical\`, \`high\`, \`medium\`, or \`low\` |
|
|
247
|
-
| \`title\` | string | Short description (~80 chars) |
|
|
248
|
-
| \`explanation\` | string | Why this matters, what's wrong |
|
|
249
|
-
| \`suggestion\` | string? | Optional: replacement code only, no prose |
|
|
250
|
-
|
|
251
|
-
## Verdict Rules
|
|
252
|
-
|
|
253
|
-
- Use \`request_changes\` if there are ANY medium, high, or critical issues
|
|
254
|
-
- Use \`approve\` if there are only low-severity issues or no issues at all
|
|
255
|
-
- The verdict must be consistent with the worst severity in the issues array
|
|
256
|
-
|
|
257
|
-
## Common Mistakes to Avoid
|
|
258
|
-
|
|
259
|
-
- Do NOT call \`submit_review\` more than once
|
|
260
|
-
- Do NOT use line numbers from the left (old) side of the diff
|
|
261
|
-
- Do NOT skip the per-file todo workflow
|
|
262
|
-
- Do NOT guess repository, PR number, or commit SHA - derive from git/gh commands
|
|
263
|
-
- Do NOT include JSON fragments in summary or explanation fields
|
|
264
|
-
- Do NOT put prose like "change to:" in the suggestion field
|
|
265
|
-
|
|
266
|
-
## Example Issue
|
|
267
|
-
|
|
268
|
-
\`\`\`json
|
|
269
|
-
{
|
|
270
|
-
"file": "src/auth/login.ts",
|
|
271
|
-
"line": 42,
|
|
272
|
-
"severity": "high",
|
|
273
|
-
"title": "SQL injection vulnerability in user lookup",
|
|
274
|
-
"explanation": "User input is concatenated directly into the SQL query without sanitization. An attacker could inject malicious SQL to bypass authentication or extract data.",
|
|
275
|
-
"suggestion": "const user = await db.query('SELECT * FROM users WHERE email = $1', [email])"
|
|
276
|
-
}
|
|
277
|
-
\`\`\`
|
|
278
|
-
`;var ye=`---
|
|
279
|
-
name: issue-label
|
|
280
|
-
description: Automatically apply appropriate labels to GitHub issues based on content analysis. Uses existing labels when possible, creates new ones sparingly.
|
|
281
|
-
license: MIT
|
|
282
|
-
metadata:
|
|
283
|
-
trigger: issues
|
|
284
|
-
tools: apply_labels
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## What I Do
|
|
288
|
-
|
|
289
|
-
Analyze GitHub issue content and apply up to 3 appropriate labels to help maintainers triage and search issues effectively.
|
|
290
|
-
|
|
291
|
-
## Workflow
|
|
292
|
-
|
|
293
|
-
1. **Fetch issue details**: Get title, body, and existing labels
|
|
294
|
-
\`\`\`bash
|
|
295
|
-
gh issue view <number> --json title,body,labels
|
|
296
|
-
\`\`\`
|
|
297
|
-
|
|
298
|
-
2. **Fetch repository labels**: List available labels
|
|
299
|
-
\`\`\`bash
|
|
300
|
-
gh label list --json name,description,color
|
|
301
|
-
\`\`\`
|
|
302
|
-
|
|
303
|
-
3. **Analyze the issue**:
|
|
304
|
-
- Determine the main type: bug, feature, documentation, question, etc.
|
|
305
|
-
- Look for hints about complexity (good-first-issue candidate?)
|
|
306
|
-
- Match to existing labels
|
|
307
|
-
|
|
308
|
-
4. **Select labels**: Choose up to 3 existing labels that best describe the issue
|
|
309
|
-
|
|
310
|
-
5. **Create new labels**: Only if no existing labels fit (rare)
|
|
311
|
-
|
|
312
|
-
6. **Apply**: Call \`apply_labels\` exactly once
|
|
313
|
-
|
|
314
|
-
## Labeling Guidelines
|
|
315
|
-
|
|
316
|
-
### Use Existing Labels
|
|
317
|
-
Prefer existing labels over creating new ones. Check the repository's label taxonomy first.
|
|
318
|
-
|
|
319
|
-
### Common Categories
|
|
320
|
-
- \`bug\` - Something isn't working
|
|
321
|
-
- \`feature\` or \`feature-request\` - New functionality
|
|
322
|
-
- \`enhancement\` - Improvement to existing feature
|
|
323
|
-
- \`documentation\` - Docs need updates
|
|
324
|
-
- \`question\` - Needs clarification
|
|
325
|
-
- \`good-first-issue\` - Good for newcomers
|
|
326
|
-
|
|
327
|
-
### Label Naming Conventions (for new labels)
|
|
328
|
-
- Lowercase letters only
|
|
329
|
-
- Words separated by hyphens
|
|
330
|
-
- 1-3 words, under 30 characters
|
|
331
|
-
- Example: \`needs-reproduction\`, \`breaking-change\`
|
|
332
|
-
|
|
333
|
-
## Using apply_labels
|
|
334
|
-
|
|
335
|
-
Call exactly once with these arguments:
|
|
336
|
-
|
|
337
|
-
| Argument | Type | Description |
|
|
338
|
-
|----------|------|-------------|
|
|
339
|
-
| \`repository\` | string | owner/repo format |
|
|
340
|
-
| \`issueNumber\` | number | Issue number from task message |
|
|
341
|
-
| \`labels\` | string[] | Array of existing label names (max 3) |
|
|
342
|
-
| \`newLabels\` | array? | Optional: new labels to create first |
|
|
343
|
-
| \`explanation\` | string | Brief reason for label choices |
|
|
344
|
-
|
|
345
|
-
### New Label Format
|
|
346
|
-
|
|
347
|
-
If creating new labels (use sparingly):
|
|
348
|
-
|
|
349
|
-
\`\`\`json
|
|
350
|
-
{
|
|
351
|
-
"name": "needs-reproduction",
|
|
352
|
-
"color": "d93f0b",
|
|
353
|
-
"description": "Issue needs steps to reproduce"
|
|
354
|
-
}
|
|
355
|
-
\`\`\`
|
|
356
|
-
|
|
357
|
-
Color is a hex string WITHOUT the leading \`#\`.
|
|
358
|
-
|
|
359
|
-
## Decision Process
|
|
360
144
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
## Common Mistakes to Avoid
|
|
369
|
-
|
|
370
|
-
- Do NOT apply more than 3 labels total
|
|
371
|
-
- Do NOT create many highly specific labels unlikely to be reused
|
|
372
|
-
- Do NOT apply labels that contradict the issue content
|
|
373
|
-
- Do NOT overuse broad labels like \`question\` when specific ones exist
|
|
374
|
-
- Do NOT create duplicate labels with slight name variations
|
|
375
|
-
- Do NOT omit the explanation field
|
|
376
|
-
|
|
377
|
-
## Example Explanation
|
|
378
|
-
|
|
379
|
-
Good: "Labeled as \`bug\` and \`documentation\` based on steps to reproduce and mention of incorrect docs"
|
|
380
|
-
|
|
381
|
-
Bad: "Applied some labels"
|
|
382
|
-
`;var xe=`---
|
|
383
|
-
name: doc-sync
|
|
384
|
-
description: Keep documentation in sync with code changes. Analyzes PR diffs and updates relevant docs using native write and bash tools.
|
|
385
|
-
license: MIT
|
|
386
|
-
metadata:
|
|
387
|
-
trigger: pull_request
|
|
388
|
-
tools: write, bash, read, glob
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
## What I Do
|
|
392
|
-
|
|
393
|
-
Analyze pull request changes and update documentation to reflect code changes. Uses native OpenCode tools (\`write\`, \`bash\`) instead of custom commit tools.
|
|
394
|
-
|
|
395
|
-
## Workflow
|
|
396
|
-
|
|
397
|
-
1. **Gather PR context**:
|
|
398
|
-
\`\`\`bash
|
|
399
|
-
gh pr view <number> --json files,title,body,headRefOid
|
|
400
|
-
\`\`\`
|
|
401
|
-
|
|
402
|
-
2. **Create todo list**: One item per changed file using \`todowrite\`
|
|
403
|
-
|
|
404
|
-
3. **Analyze each file**:
|
|
405
|
-
- Mark todo as \`in_progress\`
|
|
406
|
-
- Identify user-visible changes (APIs, config, behavior)
|
|
407
|
-
- Note which documentation might need updates
|
|
408
|
-
- Mark todo as \`completed\`
|
|
409
|
-
|
|
410
|
-
4. **After ALL files analyzed**:
|
|
411
|
-
- Identify affected documentation files
|
|
412
|
-
- Read current content of each doc file
|
|
413
|
-
- Plan minimal, precise updates
|
|
414
|
-
|
|
415
|
-
5. **Update documentation**: Use \`write\` tool for each file needing changes
|
|
416
|
-
|
|
417
|
-
6. **Commit and push**: Use \`bash\` tool for git operations
|
|
418
|
-
|
|
419
|
-
## Documentation Scope
|
|
420
|
-
|
|
421
|
-
Check these locations first:
|
|
422
|
-
- \`README.md\` at repository root
|
|
423
|
-
- Files under \`docs/\` directory
|
|
424
|
-
- API documentation if present
|
|
425
|
-
- Configuration examples
|
|
426
|
-
- Other markdown files at root
|
|
427
|
-
|
|
428
|
-
## What to Update
|
|
429
|
-
|
|
430
|
-
| Code Change | Documentation Update |
|
|
431
|
-
|-------------|---------------------|
|
|
432
|
-
| New feature | Add documentation |
|
|
433
|
-
| Changed behavior | Update existing docs |
|
|
434
|
-
| Removed feature | Remove or mark deprecated |
|
|
435
|
-
| New config option | Document option and defaults |
|
|
436
|
-
| Changed API | Update examples and usage |
|
|
437
|
-
|
|
438
|
-
## Committing Changes
|
|
439
|
-
|
|
440
|
-
After updating documentation files with \`write\`, commit using \`bash\`:
|
|
441
|
-
|
|
442
|
-
\`\`\`bash
|
|
443
|
-
git add README.md docs/
|
|
444
|
-
git commit -m "[skip ci] docs: <description of changes>"
|
|
445
|
-
git push
|
|
446
|
-
\`\`\`
|
|
447
|
-
|
|
448
|
-
**Important**: The \`[skip ci]\` prefix prevents infinite workflow loops.
|
|
449
|
-
|
|
450
|
-
## Style Guidelines
|
|
451
|
-
|
|
452
|
-
- Keep documentation concise and accurate
|
|
453
|
-
- Match existing tone and formatting
|
|
454
|
-
- Prefer targeted edits over large rewrites
|
|
455
|
-
- Ensure code examples are syntactically correct
|
|
456
|
-
- Don't invent features not present in the code
|
|
457
|
-
|
|
458
|
-
## No Changes Needed
|
|
459
|
-
|
|
460
|
-
If the existing documentation is already accurate:
|
|
461
|
-
- Do NOT create an empty commit
|
|
462
|
-
- Do NOT call any git commands
|
|
463
|
-
- Simply report that no documentation updates were required
|
|
464
|
-
- Explain briefly why the docs are already correct
|
|
465
|
-
|
|
466
|
-
## Common Mistakes to Avoid
|
|
467
|
-
|
|
468
|
-
- Do NOT update docs unrelated to the PR
|
|
469
|
-
- Do NOT start editing before completing all file analyses
|
|
470
|
-
- Do NOT generate marketing-style or overly verbose content
|
|
471
|
-
- Do NOT change code examples unless the underlying code changed
|
|
472
|
-
- Do NOT duplicate information across multiple files
|
|
473
|
-
- Do NOT commit with an empty file list
|
|
474
|
-
|
|
475
|
-
## Example Workflow
|
|
476
|
-
|
|
477
|
-
1. PR changes \`src/config/options.ts\` to add new \`timeout\` option
|
|
478
|
-
2. Analyze: user-visible config change
|
|
479
|
-
3. Check \`README.md\` and \`docs/configuration.md\`
|
|
480
|
-
4. Update \`docs/configuration.md\` with new option description
|
|
481
|
-
5. Commit: \`[skip ci] docs: add timeout configuration option\`
|
|
482
|
-
`;var ke=`---
|
|
483
|
-
name: release-notes
|
|
484
|
-
description: Analyze commits since last release, determine semantic version bump, publish to npm, and create GitHub release with notes.
|
|
485
|
-
license: MIT
|
|
486
|
-
metadata:
|
|
487
|
-
trigger: workflow_dispatch
|
|
488
|
-
tools: bun_release, github_release
|
|
489
|
-
---
|
|
490
|
-
|
|
491
|
-
## What I Do
|
|
492
|
-
|
|
493
|
-
Automate the release process: analyze commits, determine version, publish to npm, and create a GitHub release with generated notes.
|
|
494
|
-
|
|
495
|
-
## Workflow
|
|
496
|
-
|
|
497
|
-
Use \`todowrite\` to create and track these steps:
|
|
498
|
-
|
|
499
|
-
1. **Get current version** from \`package.json\`
|
|
500
|
-
2. **Find previous release tag** using git
|
|
501
|
-
3. **List commits since last tag**
|
|
502
|
-
4. **Fetch merged pull requests** in that range
|
|
503
|
-
5. **Determine version bump type** (major/minor/patch)
|
|
504
|
-
6. **Generate release notes**
|
|
505
|
-
7. **Call \`bun_release\`** to publish to npm
|
|
506
|
-
8. **Call \`github_release\`** to create GitHub release
|
|
507
|
-
|
|
508
|
-
## Gathering Context
|
|
509
|
-
|
|
510
|
-
\`\`\`bash
|
|
511
|
-
# Get current version
|
|
512
|
-
cat package.json | jq -r '.version'
|
|
513
|
-
|
|
514
|
-
# Find previous tag
|
|
515
|
-
git describe --tags --abbrev=0
|
|
516
|
-
|
|
517
|
-
# List commits since tag
|
|
518
|
-
git log <prev-tag>..HEAD --oneline
|
|
519
|
-
|
|
520
|
-
# Get merged PRs
|
|
521
|
-
gh pr list --state merged --base main --json number,title,author
|
|
522
|
-
\`\`\`
|
|
523
|
-
|
|
524
|
-
## Version Determination
|
|
525
|
-
|
|
526
|
-
Use semantic versioning based on commit analysis:
|
|
527
|
-
|
|
528
|
-
### MAJOR bump (x.0.0)
|
|
529
|
-
- Commits containing "BREAKING CHANGE" in body
|
|
530
|
-
- Commits starting with \`feat!:\` or \`fix!:\` (with \`!\`)
|
|
531
|
-
- API removals or incompatible interface changes
|
|
532
|
-
|
|
533
|
-
### MINOR bump (x.y.0)
|
|
534
|
-
- Commits starting with \`feat:\` or \`feat(\`
|
|
535
|
-
- New functionality that doesn't break existing behavior
|
|
536
|
-
|
|
537
|
-
### PATCH bump (x.y.z)
|
|
538
|
-
- Commits starting with \`fix:\`, \`perf:\`, \`refactor:\`, \`docs:\`, \`chore:\`
|
|
539
|
-
- Any other commits not matching above patterns
|
|
540
|
-
|
|
541
|
-
### Rules
|
|
542
|
-
- If ANY commit requires MAJOR \u2192 bump major, reset minor and patch to 0
|
|
543
|
-
- Else if ANY commit requires MINOR \u2192 bump minor, reset patch to 0
|
|
544
|
-
- Else \u2192 bump patch only
|
|
545
|
-
|
|
546
|
-
## Release Notes Format
|
|
547
|
-
|
|
548
|
-
Include only user-facing changes. Each note should follow:
|
|
549
|
-
|
|
550
|
-
\`\`\`
|
|
551
|
-
<description> [#<issue>] [#<pr>] @<author>
|
|
552
|
-
\`\`\`
|
|
553
|
-
|
|
554
|
-
**Include:**
|
|
555
|
-
- New features
|
|
556
|
-
- Bug fixes
|
|
557
|
-
- Performance improvements
|
|
558
|
-
- Important config/doc updates
|
|
559
|
-
|
|
560
|
-
**Exclude:**
|
|
561
|
-
- Pure dependency bumps
|
|
562
|
-
- Version bump commits
|
|
563
|
-
- Formatting-only changes
|
|
564
|
-
- Reverts that undo previous changes
|
|
565
|
-
- Merge commits
|
|
566
|
-
|
|
567
|
-
### Example Notes
|
|
568
|
-
- Add retry logic to GitHub API calls #42 @alice
|
|
569
|
-
- Fix label creation for special characters #38 @bob
|
|
570
|
-
- Improve error messages for auth failures @carol
|
|
571
|
-
|
|
572
|
-
## Using bun_release (Call FIRST)
|
|
573
|
-
|
|
574
|
-
Publishes to npm. Call before \`github_release\`.
|
|
575
|
-
|
|
576
|
-
| Argument | Type | Description |
|
|
577
|
-
|----------|------|-------------|
|
|
578
|
-
| \`version\` | string | New version (e.g., "1.2.3" or "v1.2.3") |
|
|
579
|
-
|
|
580
|
-
What it does:
|
|
581
|
-
1. Runs \`bun pm version\` to update package.json
|
|
582
|
-
2. Pushes commit and tag to remote
|
|
583
|
-
3. Runs \`bun publish --access public\`
|
|
584
|
-
|
|
585
|
-
## Using github_release (Call SECOND)
|
|
586
|
-
|
|
587
|
-
Creates GitHub release. Call only after \`bun_release\` succeeds.
|
|
588
|
-
|
|
589
|
-
| Argument | Type | Description |
|
|
590
|
-
|----------|------|-------------|
|
|
591
|
-
| \`repository\` | string | owner/repo format |
|
|
592
|
-
| \`tag\` | string | Version with "v" prefix (e.g., "v1.2.3") |
|
|
593
|
-
| \`notes\` | string[] | Array of release notes (without "- " prefix) |
|
|
594
|
-
| \`title\` | string? | Optional: release title (defaults to tag) |
|
|
595
|
-
| \`prerelease\` | boolean? | Set true for -alpha, -beta, -rc versions |
|
|
596
|
-
| \`draft\` | boolean? | Set true to create as draft |
|
|
597
|
-
|
|
598
|
-
## Special Cases
|
|
145
|
+
- uses: activadee/open-workflows/actions/release@main
|
|
146
|
+
with:
|
|
147
|
+
bump: \${{ inputs.bump }}
|
|
148
|
+
version: \${{ inputs.version }}
|
|
149
|
+
env:
|
|
150
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
151
|
+
`;var Eo=(s=!0)=>`name: OpenCode Auth
|
|
599
152
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
-
|
|
153
|
+
on:
|
|
154
|
+
schedule:
|
|
155
|
+
- cron: '0 3 * * *'
|
|
156
|
+
workflow_dispatch:
|
|
603
157
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
-
|
|
158
|
+
jobs:
|
|
159
|
+
refresh:
|
|
160
|
+
runs-on: ubuntu-latest
|
|
161
|
+
steps:
|
|
162
|
+
- id: cache
|
|
163
|
+
uses: actions/cache@v4
|
|
164
|
+
with:
|
|
165
|
+
path: ~/.local/share/opencode/auth.json
|
|
166
|
+
key: opencode-auth
|
|
607
167
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
-
|
|
611
|
-
|
|
168
|
+
- if: steps.cache.outputs.cache-hit != 'true'
|
|
169
|
+
run: |
|
|
170
|
+
mkdir -p ~/.local/share/opencode
|
|
171
|
+
echo '\${{ secrets.OPENCODE_AUTH }}' > ~/.local/share/opencode/auth.json
|
|
612
172
|
|
|
613
|
-
|
|
173
|
+
- run: curl -fsSL https://opencode.ai/install | bash
|
|
614
174
|
|
|
615
|
-
-
|
|
616
|
-
-
|
|
617
|
-
-
|
|
618
|
-
- Do NOT include version bump commits in release notes
|
|
619
|
-
- Do NOT include merge commits in release notes
|
|
620
|
-
- Do NOT forget author handles (@username) in release notes
|
|
621
|
-
- Do NOT skip the todo list workflow
|
|
622
|
-
- Do NOT create a release when there are no new commits
|
|
623
|
-
`;var ve={"pr-review":{name:"pr-review",content:we},"issue-label":{name:"issue-label",content:ye},"doc-sync":{name:"doc-sync",content:xe},"release-notes":{name:"release-notes",content:ke}},fo=Object.keys(ve);var gs={"pr-review":fe,"issue-label":ge,"doc-sync":be,release:ue};function go(o){let{workflows:s,cwd:t=process.cwd(),useOAuth:i=!1}=o,n=[],r=O.join(t,".github","workflows");if(!b.existsSync(r))b.mkdirSync(r,{recursive:!0});for(let e of s){let l=ho[e],m=gs[l],c=O.join(r,`${l}.yml`);if(!m){n.push({type:"workflow",name:e,status:"error",path:c,message:`Unknown workflow: ${e}`});continue}let h=m(i);if(!h){n.push({type:"workflow",name:e,status:"error",path:c,message:`Unknown workflow: ${e}`});continue}if(b.existsSync(c)){n.push({type:"workflow",name:e,status:"skipped",path:`.github/workflows/${l}.yml`,message:"Skipped: already exists"});continue}try{b.writeFileSync(c,h,"utf-8"),n.push({type:"workflow",name:e,status:"created",path:`.github/workflows/${l}.yml`,message:"Created successfully"})}catch(p){n.push({type:"workflow",name:e,status:"error",path:c,message:`Failed to write file: ${p instanceof Error?p.message:"Unknown error"}`})}}return n}function bo(o){let{cwd:s=process.cwd()}=o,t=O.join(s,".github","workflows"),i=O.join(t,"opencode-auth.yml");if(!b.existsSync(t))b.mkdirSync(t,{recursive:!0});if(b.existsSync(i))return{type:"auth",name:"opencode-auth",status:"skipped",path:".github/workflows/opencode-auth.yml",message:"Skipped: already exists"};try{return b.writeFileSync(i,he,"utf-8"),{type:"auth",name:"opencode-auth",status:"created",path:".github/workflows/opencode-auth.yml",message:"Created successfully"}}catch(n){return{type:"auth",name:"opencode-auth",status:"error",path:i,message:`Failed to write file: ${n instanceof Error?n.message:"Unknown error"}`}}}function uo(o){let{cwd:s=process.cwd()}=o,t=[],i=O.join(s,".opencode","skill");for(let n of fo){let r=ve[n],e=O.join(i,n,"SKILL.md");if(b.existsSync(e)){t.push({type:"skill",name:n,status:"skipped",path:`.opencode/skill/${n}/SKILL.md`,message:"Skipped: already exists"});continue}try{b.mkdirSync(O.dirname(e),{recursive:!0}),b.writeFileSync(e,r.content,"utf-8"),t.push({type:"skill",name:n,status:"created",path:`.opencode/skill/${n}/SKILL.md`,message:"Created successfully"})}catch(l){t.push({type:"skill",name:n,status:"error",path:e,message:`Failed to write: ${l instanceof Error?l.message:"Unknown error"}`})}}return t}function wo(o=process.cwd()){let s=O.join(o,".opencode"),t=O.join(s,"opencode.json"),i="@activade/open-workflows",n={$schema:"https://opencode.ai/config.json",model:"anthropic/claude-sonnet-4-5",small_model:"anthropic/claude-haiku-4-5",plugin:["@activade/open-workflows"],permission:{skill:{"pr-review":"allow","issue-label":"allow","doc-sync":"allow","release-notes":"allow"}}};if(b.existsSync(t))try{let r=JSON.parse(b.readFileSync(t,"utf-8"));if(typeof r==="object"&&r!==null){if(!Array.isArray(r.plugin))r.plugin=[];if(!r.plugin.includes("@activade/open-workflows"))r.plugin.push("@activade/open-workflows");if(!r.model)r.model=n.model;if(!r.small_model)r.small_model=n.small_model;if(!r.permission?.skill)r.permission={...r.permission,skill:n.permission.skill};return b.writeFileSync(t,JSON.stringify(r,null,2),"utf-8"),{created:!1,path:".opencode/opencode.json"}}}catch{}if(!b.existsSync(s))b.mkdirSync(s,{recursive:!0});return b.writeFileSync(t,JSON.stringify(n,null,2),"utf-8"),{created:!0,path:".opencode/opencode.json"}}var us=await Promise.resolve().then(() => P(yo(),1)).catch(()=>({version:"unknown"})),Ce=us.version,$=process.argv.slice(2),ws=$.includes("--help")||$.includes("-h"),ys=$.includes("--version")||$.includes("-v"),xs=$.includes("--skills"),ks=$.includes("--workflows");if(ys)console.log(`@activade/open-workflows v${Ce}`),process.exit(0);if(ws)console.log(`@activade/open-workflows v${Ce}
|
|
175
|
+
- run: opencode models
|
|
176
|
+
`;var ko={review:"pr-review",label:"issue-label","doc-sync":"doc-sync",release:"release","opencode-auth":"opencode-auth"};var ce={"pr-review":bo,"issue-label":ho,"doc-sync":go,release:xo,"opencode-auth":Eo};function cs(s){let{workflows:e,cwd:n=process.cwd()}=s,l=L.join(n,".github","workflows"),r=[];for(let t of e){let o=ko[t],i=L.join(l,`${o}.yml`);if(S.existsSync(i))r.push({type:"workflow",name:t,path:`.github/workflows/${o}.yml`})}return r}function ms(s){let{workflows:e,cwd:n=process.cwd(),useOAuth:l=!1,override:r=!1,overrideNames:t}=s,o=[],i=L.join(n,".github","workflows");if(!S.existsSync(i))S.mkdirSync(i,{recursive:!0});for(let p of e){let m=ko[p],f=ce[m],c=L.join(i,`${m}.yml`);if(!f){o.push({type:"workflow",name:p,status:"error",path:c,message:`Unknown workflow: ${p}`});continue}let d=f(l);if(!d){o.push({type:"workflow",name:p,status:"error",path:c,message:`Unknown workflow: ${p}`});continue}let O=S.existsSync(c),P=r||t?.has(p);if(O&&!P){o.push({type:"workflow",name:p,status:"skipped",path:`.github/workflows/${m}.yml`,message:"Skipped: already exists"});continue}try{S.writeFileSync(c,d,"utf-8"),o.push({type:"workflow",name:p,status:O?"overwritten":"created",path:`.github/workflows/${m}.yml`,message:O?"Overwritten successfully":"Created successfully"})}catch(H){o.push({type:"workflow",name:p,status:"error",path:c,message:`Failed to write file: ${H instanceof Error?H.message:"Unknown error"}`})}}return o}var we=await Promise.resolve().then(() => B(ws(),1)).catch(()=>({version:"unknown"})),_o=we.version,R=process.argv.slice(2),fe=R.includes("--help")||R.includes("-h"),be=R.includes("--version")||R.includes("-v"),vo=R.includes("--force")||R.includes("-f");if(be)process.stdout.write(`@activade/open-workflows v${_o}
|
|
177
|
+
`),process.exit(0);if(fe)process.stdout.write(`@activade/open-workflows v${_o}
|
|
624
178
|
|
|
625
|
-
AI-powered GitHub automation workflows
|
|
179
|
+
AI-powered GitHub automation workflows.
|
|
626
180
|
|
|
627
181
|
USAGE
|
|
628
|
-
$ open-workflows [OPTIONS]
|
|
182
|
+
$ bunx open-workflows [OPTIONS]
|
|
629
183
|
|
|
630
184
|
OPTIONS
|
|
631
|
-
--
|
|
632
|
-
--workflows Install workflows only (no skills)
|
|
185
|
+
--force, -f Override existing files without prompts
|
|
633
186
|
--version, -v Display version
|
|
634
187
|
--help, -h Display this help
|
|
635
188
|
|
|
636
189
|
WHAT GETS INSTALLED
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
190
|
+
Workflow files that use composite actions from this repository:
|
|
191
|
+
.github/workflows/pr-review.yml
|
|
192
|
+
.github/workflows/issue-label.yml
|
|
193
|
+
.github/workflows/doc-sync.yml
|
|
194
|
+
.github/workflows/release.yml
|
|
195
|
+
.github/workflows/opencode-auth.yml (OAuth only)
|
|
196
|
+
|
|
197
|
+
REQUIRED SECRETS
|
|
198
|
+
For Claude Max (OAuth):
|
|
199
|
+
OPENCODE_AUTH - Your auth.json from ~/.local/share/opencode/auth.json
|
|
200
|
+
|
|
201
|
+
For API Key:
|
|
202
|
+
ANTHROPIC_API_KEY - Your Anthropic API key
|
|
640
203
|
|
|
641
204
|
For more information: https://github.com/activadee/open-workflows
|
|
642
|
-
`),process.exit(0);
|
|
643
|
-
${
|
|
205
|
+
`),process.exit(0);ts(E.default.bgCyan(E.default.black(` @activade/open-workflows v${_o} `)));var fs=await ps({workflows:()=>ls({message:"Select workflows to install:",options:[{value:"review",label:"PR Review",hint:"AI-powered code reviews"},{value:"label",label:"Issue Label",hint:"Auto-label issues"},{value:"doc-sync",label:"Doc Sync",hint:"Keep docs in sync"},{value:"release",label:"Release",hint:"Automated releases with notes"}],required:!0}),useOAuth:()=>mo({message:"Use Claude Max subscription (OAuth)? (No = API key)",initialValue:!1})},{onCancel:()=>{fo("Installation cancelled."),process.exit(0)}}),G=fs.workflows||[],So=Boolean(fs.useOAuth);if(So&&!G.includes("opencode-auth"))G=[...G,"opencode-auth"];var bs=new Set;if(!vo){let s=cs({workflows:G});if(s.length>0){x.warn(`Found ${s.length} existing file(s):`);for(let e of s){let n=await mo({message:`Override ${e.path}?`,initialValue:!1});if(K(n))fo("Installation cancelled."),process.exit(0);if(n)bs.add(e.name)}}}var hs=is();hs.start("Installing workflows...");var Y=ms({workflows:G,useOAuth:So,override:vo,overrideNames:vo?void 0:bs}),he=Y.some((s)=>s.status==="error");hs.stop(he?"Installation completed with errors":"Installation complete!");var yo=Y.filter((s)=>s.status==="created"),Oo=Y.filter((s)=>s.status==="overwritten"),Io=Y.filter((s)=>s.status==="skipped"),$o=Y.filter((s)=>s.status==="error");if(yo.length>0){x.success(`Created ${yo.length} file(s):`);for(let s of yo)x.message(` ${E.default.green("+")} ${s.path}`)}if(Oo.length>0){x.success(`Overwritten ${Oo.length} file(s):`);for(let s of Oo)x.message(` ${E.default.cyan("~")} ${s.path}`)}if(Io.length>0){x.warn(`Skipped ${Io.length} file(s) (already exist):`);for(let s of Io)x.message(` ${E.default.yellow("-")} ${s.path}`)}if($o.length>0){x.error(`Failed ${$o.length} file(s):`);for(let s of $o)x.message(` ${E.default.red("x")} ${s.path}: ${s.message}`)}if(So)wo(`${E.default.cyan("1.")} Export your OpenCode auth as a secret:
|
|
206
|
+
${E.default.dim("gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json")}
|
|
644
207
|
|
|
645
|
-
${
|
|
208
|
+
${E.default.cyan("2.")} Commit and push the workflow files
|
|
646
209
|
|
|
647
|
-
${
|
|
648
|
-
${
|
|
649
|
-
${
|
|
210
|
+
${E.default.cyan("3.")} Run the opencode-auth workflow manually to initialize the cache:
|
|
211
|
+
${E.default.dim("gh workflow run opencode-auth.yml")}`,"Next steps (OAuth)");else wo(`${E.default.cyan("1.")} Add your Anthropic API key:
|
|
212
|
+
${E.default.dim("gh secret set ANTHROPIC_API_KEY")}
|
|
650
213
|
|
|
651
|
-
${
|
|
214
|
+
${E.default.cyan("2.")} Commit and push the workflow files`,"Next steps");as(E.default.green("Done!"));
|