@oomerevren/tryforge 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +107 -13
  2. package/README.md +172 -232
  3. package/dist/cli/src/adapters/agents-md.js +24 -0
  4. package/dist/cli/src/adapters/base.js +99 -0
  5. package/dist/cli/src/adapters/claude.js +43 -14
  6. package/dist/cli/src/adapters/codex.js +18 -17
  7. package/dist/cli/src/adapters/cursor.js +44 -30
  8. package/dist/cli/src/adapters/dsh.js +28 -30
  9. package/dist/cli/src/adapters/generic.js +10 -7
  10. package/dist/cli/src/adapters/opencode.js +23 -23
  11. package/dist/cli/src/adapters/types.js +12 -9
  12. package/dist/cli/src/adapters/windsurf.js +48 -28
  13. package/dist/cli/src/commands/add-external.js +111 -0
  14. package/dist/cli/src/commands/audit.js +68 -30
  15. package/dist/cli/src/commands/init.js +2 -2
  16. package/dist/cli/src/commands/install.js +90 -15
  17. package/dist/cli/src/commands/pack.js +119 -0
  18. package/dist/cli/src/commands/sync.js +181 -0
  19. package/dist/cli/src/commands/test.js +72 -0
  20. package/dist/cli/src/commands/tui.js +191 -0
  21. package/dist/cli/src/commands/update.js +4 -4
  22. package/dist/cli/src/commands/verify.js +62 -0
  23. package/dist/cli/src/core/fsutil.js +37 -0
  24. package/dist/cli/src/core/installer.js +9 -9
  25. package/dist/cli/src/core/lock.js +97 -10
  26. package/dist/cli/src/core/merge.js +108 -0
  27. package/dist/cli/src/core/plugin.js +2 -2
  28. package/dist/cli/src/core/project.js +136 -4
  29. package/dist/cli/src/core/registry.js +9 -9
  30. package/dist/cli/src/core/scan.js +159 -0
  31. package/dist/cli/src/core/semver.js +7 -7
  32. package/dist/cli/src/core/sign.js +2 -2
  33. package/dist/cli/src/core/sources.js +171 -0
  34. package/dist/cli/src/index.js +83 -16
  35. package/dist/index.cjs +359 -0
  36. package/dist/scripts/build-registry.js +2 -4
  37. package/dist/scripts/publish-verified.js +17 -9
  38. package/dist/scripts/seed-registry-13lite.js +5 -5
  39. package/dist/scripts/seed-registry.js +4 -4
  40. package/dist/scripts/verify-npm-mcps.js +6 -4
  41. package/package.json +15 -6
package/dist/index.cjs ADDED
@@ -0,0 +1,359 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var lo=Object.create;var qr=Object.defineProperty;var co=Object.getOwnPropertyDescriptor;var Do=Object.getOwnPropertyNames;var po=Object.getPrototypeOf,fo=Object.prototype.hasOwnProperty;var $=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(s){throw r=[s],s}};var je=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}},jt=(t,e)=>{for(var r in e)qr(t,r,{get:e[r],enumerable:!0})},mo=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Do(e))!fo.call(t,i)&&i!==r&&qr(t,i,{get:()=>e[i],enumerable:!(s=co(e,i))||s.enumerable});return t};var L=(t,e,r)=>(r=t!=null?lo(po(t)):{},mo(e||!t||!t.__esModule?qr(r,"default",{value:t,enumerable:!0}):r,t));var It=je(Kr=>{var Qt=class extends Error{constructor(e,r,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=e,this.nestedError=void 0}},Ur=class extends Qt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Kr.CommanderError=Qt;Kr.InvalidArgumentError=Ur});var er=je(Zr=>{var{InvalidArgumentError:go}=It(),Jr=class{constructor(e,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,r){return r===this.defaultValue||!Array.isArray(r)?[e]:r.concat(e)}default(e,r){return this.defaultValue=e,this.defaultValueDescription=r,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(r,s)=>{if(!this.argChoices.includes(r))throw new go(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,s):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function ho(t){let e=t.name()+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}Zr.Argument=Jr;Zr.humanReadableArgName=ho});var Xr=je(gn=>{var{humanReadableArgName:yo}=er(),Yr=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let r=e.commands.filter(i=>!i._hidden),s=e._getHelpCommand();return s&&!s._hidden&&r.push(s),this.sortSubcommands&&r.sort((i,o)=>i.name().localeCompare(o.name())),r}compareOptions(e,r){let s=i=>i.short?i.short.replace(/^-/,""):i.long.replace(/^--/,"");return s(e).localeCompare(s(r))}visibleOptions(e){let r=e.options.filter(i=>!i.hidden),s=e._getHelpOption();if(s&&!s.hidden){let i=s.short&&e._findOption(s.short),o=s.long&&e._findOption(s.long);!i&&!o?r.push(s):s.long&&!o?r.push(e.createOption(s.long,s.description)):s.short&&!i&&r.push(e.createOption(s.short,s.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let r=[];for(let s=e.parent;s;s=s.parent){let i=s.options.filter(o=>!o.hidden);r.push(...i)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(r=>{r.description=r.description||e._argsDescription[r.name()]||""}),e.registeredArguments.find(r=>r.description)?e.registeredArguments:[]}subcommandTerm(e){let r=e.registeredArguments.map(s=>yo(s)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,r){return r.visibleCommands(e).reduce((s,i)=>Math.max(s,r.subcommandTerm(i).length),0)}longestOptionTermLength(e,r){return r.visibleOptions(e).reduce((s,i)=>Math.max(s,r.optionTerm(i).length),0)}longestGlobalOptionTermLength(e,r){return r.visibleGlobalOptions(e).reduce((s,i)=>Math.max(s,r.optionTerm(i).length),0)}longestArgumentTermLength(e,r){return r.visibleArguments(e).reduce((s,i)=>Math.max(s,r.argumentTerm(i).length),0)}commandUsage(e){let r=e._name;e._aliases[0]&&(r=r+"|"+e._aliases[0]);let s="";for(let i=e.parent;i;i=i.parent)s=i.name()+" "+s;return s+r+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let r=[];return e.argChoices&&r.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&r.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&r.push(`env: ${e.envVar}`),r.length>0?`${e.description} (${r.join(", ")})`:e.description}argumentDescription(e){let r=[];if(e.argChoices&&r.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&r.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),r.length>0){let s=`(${r.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}formatHelp(e,r){let s=r.padWidth(e,r),i=r.helpWidth||80,o=2,n=2;function a(f,y){if(y){let g=`${f.padEnd(s+n)}${y}`;return r.wrap(g,i-o,s+n)}return f}function u(f){return f.join(`
3
+ `).replace(/^/gm," ".repeat(o))}let l=[`Usage: ${r.commandUsage(e)}`,""],D=r.commandDescription(e);D.length>0&&(l=l.concat([r.wrap(D,i,0),""]));let p=r.visibleArguments(e).map(f=>a(r.argumentTerm(f),r.argumentDescription(f)));p.length>0&&(l=l.concat(["Arguments:",u(p),""]));let c=r.visibleOptions(e).map(f=>a(r.optionTerm(f),r.optionDescription(f)));if(c.length>0&&(l=l.concat(["Options:",u(c),""])),this.showGlobalOptions){let f=r.visibleGlobalOptions(e).map(y=>a(r.optionTerm(y),r.optionDescription(y)));f.length>0&&(l=l.concat(["Global Options:",u(f),""]))}let m=r.visibleCommands(e).map(f=>a(r.subcommandTerm(f),r.subcommandDescription(f)));return m.length>0&&(l=l.concat(["Commands:",u(m),""])),l.join(`
4
+ `)}padWidth(e,r){return Math.max(r.longestOptionTermLength(e,r),r.longestGlobalOptionTermLength(e,r),r.longestSubcommandTermLength(e,r),r.longestArgumentTermLength(e,r))}wrap(e,r,s,i=40){let o=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",n=new RegExp(`[\\n][${o}]+`);if(e.match(n))return e;let a=r-s;if(a<i)return e;let u=e.slice(0,s),l=e.slice(s).replace(`\r
5
+ `,`
6
+ `),D=" ".repeat(s),c="\\s\u200B",m=new RegExp(`
7
+ |.{1,${a-1}}([${c}]|$)|[^${c}]+?([${c}]|$)`,"g"),f=l.match(m)||[];return u+f.map((y,g)=>y===`
8
+ `?"":(g>0?D:"")+y.trimEnd()).join(`
9
+ `)}};gn.Help=Yr});var rs=je(ts=>{var{InvalidArgumentError:Co}=It(),Qr=class{constructor(e,r){this.flags=e,this.description=r||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let s=$o(e);this.short=s.shortFlag,this.long=s.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,r){return this.defaultValue=e,this.defaultValueDescription=r,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let r=e;return typeof e=="string"&&(r={[e]:!0}),this.implied=Object.assign(this.implied||{},r),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,r){return r===this.defaultValue||!Array.isArray(r)?[e]:r.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(r,s)=>{if(!this.argChoices.includes(r))throw new Co(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,s):r},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Fo(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},es=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(r=>{r.negate?this.negativeOptions.set(r.attributeName(),r):this.positiveOptions.set(r.attributeName(),r)}),this.negativeOptions.forEach((r,s)=>{this.positiveOptions.has(s)&&this.dualOptions.add(s)})}valueFromOption(e,r){let s=r.attributeName();if(!this.dualOptions.has(s))return!0;let i=this.negativeOptions.get(s).presetArg,o=i!==void 0?i:!1;return r.negate===(o===e)}};function Fo(t){return t.split("-").reduce((e,r)=>e+r[0].toUpperCase()+r.slice(1))}function $o(t){let e,r,s=t.split(/[ |,]+/);return s.length>1&&!/^[[<]/.test(s[1])&&(e=s.shift()),r=s.shift(),!e&&/^-[^-]$/.test(r)&&(e=r,r=void 0),{shortFlag:e,longFlag:r}}ts.Option=Qr;ts.DualOptions=es});var yn=je(hn=>{function wo(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);let r=[];for(let s=0;s<=t.length;s++)r[s]=[s];for(let s=0;s<=e.length;s++)r[0][s]=s;for(let s=1;s<=e.length;s++)for(let i=1;i<=t.length;i++){let o=1;t[i-1]===e[s-1]?o=0:o=1,r[i][s]=Math.min(r[i-1][s]+1,r[i][s-1]+1,r[i-1][s-1]+o),i>1&&s>1&&t[i-1]===e[s-2]&&t[i-2]===e[s-1]&&(r[i][s]=Math.min(r[i][s],r[i-2][s-2]+1))}return r[t.length][e.length]}function vo(t,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let r=t.startsWith("--");r&&(t=t.slice(2),e=e.map(n=>n.slice(2)));let s=[],i=3,o=.4;return e.forEach(n=>{if(n.length<=1)return;let a=wo(t,n),u=Math.max(t.length,n.length);(u-a)/u>o&&(a<i?(i=a,s=[n]):a===i&&s.push(n))}),s.sort((n,a)=>n.localeCompare(a)),r&&(s=s.map(n=>`--${n}`)),s.length>1?`
10
+ (Did you mean one of ${s.join(", ")}?)`:s.length===1?`
11
+ (Did you mean ${s[0]}?)`:""}hn.suggestSimilar=vo});var vn=je(wn=>{var Eo=require("node:events").EventEmitter,ss=require("node:child_process"),Ie=require("node:path"),ns=require("node:fs"),I=require("node:process"),{Argument:bo,humanReadableArgName:ko}=er(),{CommanderError:is}=It(),{Help:Ao}=Xr(),{Option:Cn,DualOptions:xo}=rs(),{suggestSimilar:Fn}=yn(),os=class t extends Eo{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:r=>I.stdout.write(r),writeErr:r=>I.stderr.write(r),getOutHelpWidth:()=>I.stdout.isTTY?I.stdout.columns:void 0,getErrHelpWidth:()=>I.stderr.isTTY?I.stderr.columns:void 0,outputError:(r,s)=>s(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let r=this;r;r=r.parent)e.push(r);return e}command(e,r,s){let i=r,o=s;typeof i=="object"&&i!==null&&(o=i,i=null),o=o||{};let[,n,a]=e.match(/([^ ]+) *(.*)/),u=this.createCommand(n);return i&&(u.description(i),u._executableHandler=!0),o.isDefault&&(this._defaultCommandName=u._name),u._hidden=!!(o.noHelp||o.hidden),u._executableFile=o.executableFile||null,a&&u.arguments(a),this._registerCommand(u),u.parent=this,u.copyInheritedSettings(this),i?this:u}createCommand(e){return new t(e)}createHelp(){return Object.assign(new Ao,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,r){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
12
+ - specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,r){return new bo(e,r)}argument(e,r,s,i){let o=this.createArgument(e,r);return typeof s=="function"?o.default(i).argParser(s):o.default(s),this.addArgument(o),this}arguments(e){return e.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(e){let r=this.registeredArguments.slice(-1)[0];if(r&&r.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,r){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,s,i]=e.match(/([^ ]+) *(.*)/),o=r??"display help for command",n=this.createCommand(s);return n.helpOption(!1),i&&n.arguments(i),o&&n.description(o),this._addImplicitHelpCommand=!0,this._helpCommand=n,this}addHelpCommand(e,r){return typeof e!="object"?(this.helpCommand(e,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,r){let s=["preSubcommand","preAction","postAction"];if(!s.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
+ Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(e,r,s){this._exitCallback&&this._exitCallback(new is(e,r,s)),I.exit(e)}action(e){let r=s=>{let i=this.registeredArguments.length,o=s.slice(0,i);return this._storeOptionsAsProperties?o[i]=this:o[i]=this.opts(),o.push(this),e.apply(this,o)};return this._actionHandler=r,this}createOption(e,r){return new Cn(e,r)}_callParseArg(e,r,s,i){try{return e.parseArg(r,s)}catch(o){if(o.code==="commander.invalidArgument"){let n=`${i} ${o.message}`;this.error(n,{exitCode:o.exitCode,code:o.code})}throw o}}_registerOption(e){let r=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(r){let s=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${s}'
14
+ - already used by option '${r.flags}'`)}this.options.push(e)}_registerCommand(e){let r=i=>[i.name()].concat(i.aliases()),s=r(e).find(i=>this._findCommand(i));if(s){let i=r(this._findCommand(s)).join("|"),o=r(e).join("|");throw new Error(`cannot add command '${o}' as already have command '${i}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let r=e.name(),s=e.attributeName();if(e.negate){let o=e.long.replace(/^--no-/,"--");this._findOption(o)||this.setOptionValueWithSource(s,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let i=(o,n,a)=>{o==null&&e.presetArg!==void 0&&(o=e.presetArg);let u=this.getOptionValue(s);o!==null&&e.parseArg?o=this._callParseArg(e,o,u,n):o!==null&&e.variadic&&(o=e._concatValue(o,u)),o==null&&(e.negate?o=!1:e.isBoolean()||e.optional?o=!0:o=""),this.setOptionValueWithSource(s,o,a)};return this.on("option:"+r,o=>{let n=`error: option '${e.flags}' argument '${o}' is invalid.`;i(o,n,"cli")}),e.envVar&&this.on("optionEnv:"+r,o=>{let n=`error: option '${e.flags}' value '${o}' from env '${e.envVar}' is invalid.`;i(o,n,"env")}),this}_optionEx(e,r,s,i,o){if(typeof r=="object"&&r instanceof Cn)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let n=this.createOption(r,s);if(n.makeOptionMandatory(!!e.mandatory),typeof i=="function")n.default(o).argParser(i);else if(i instanceof RegExp){let a=i;i=(u,l)=>{let D=a.exec(u);return D?D[0]:l},n.default(o).argParser(i)}else n.default(i);return this.addOption(n)}option(e,r,s,i){return this._optionEx({},e,r,s,i)}requiredOption(e,r,s,i){return this._optionEx({mandatory:!0},e,r,s,i)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,r){return this.setOptionValueWithSource(e,r,void 0)}setOptionValueWithSource(e,r,s){return this._storeOptionsAsProperties?this[e]=r:this._optionValues[e]=r,this._optionValueSources[e]=s,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let r;return this._getCommandAndAncestors().forEach(s=>{s.getOptionValueSource(e)!==void 0&&(r=s.getOptionValueSource(e))}),r}_prepareUserArgs(e,r){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},e===void 0&&r.from===void 0){I.versions?.electron&&(r.from="electron");let i=I.execArgv??[];(i.includes("-e")||i.includes("--eval")||i.includes("-p")||i.includes("--print"))&&(r.from="eval")}e===void 0&&(e=I.argv),this.rawArgs=e.slice();let s;switch(r.from){case void 0:case"node":this._scriptPath=e[1],s=e.slice(2);break;case"electron":I.defaultApp?(this._scriptPath=e[1],s=e.slice(2)):s=e.slice(1);break;case"user":s=e.slice(0);break;case"eval":s=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${r.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",s}parse(e,r){let s=this._prepareUserArgs(e,r);return this._parseCommand([],s),this}async parseAsync(e,r){let s=this._prepareUserArgs(e,r);return await this._parseCommand([],s),this}_executeSubCommand(e,r){r=r.slice();let s=!1,i=[".js",".ts",".tsx",".mjs",".cjs"];function o(D,p){let c=Ie.resolve(D,p);if(ns.existsSync(c))return c;if(i.includes(Ie.extname(p)))return;let m=i.find(f=>ns.existsSync(`${c}${f}`));if(m)return`${c}${m}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let D;try{D=ns.realpathSync(this._scriptPath)}catch{D=this._scriptPath}a=Ie.resolve(Ie.dirname(D),a)}if(a){let D=o(a,n);if(!D&&!e._executableFile&&this._scriptPath){let p=Ie.basename(this._scriptPath,Ie.extname(this._scriptPath));p!==this._name&&(D=o(a,`${p}-${e._name}`))}n=D||n}s=i.includes(Ie.extname(n));let u;I.platform!=="win32"?s?(r.unshift(n),r=$n(I.execArgv).concat(r),u=ss.spawn(I.argv[0],r,{stdio:"inherit"})):u=ss.spawn(n,r,{stdio:"inherit"}):(r.unshift(n),r=$n(I.execArgv).concat(r),u=ss.spawn(I.execPath,r,{stdio:"inherit"})),u.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{I.on(p,()=>{u.killed===!1&&u.exitCode===null&&u.kill(p)})});let l=this._exitCallback;u.on("close",D=>{D=D??1,l?l(new is(D,"commander.executeSubCommandAsync","(close)")):I.exit(D)}),u.on("error",D=>{if(D.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",c=`'${n}' does not exist
15
+ - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
16
+ - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
17
+ - ${p}`;throw new Error(c)}else if(D.code==="EACCES")throw new Error(`'${n}' not executable`);if(!l)I.exit(1);else{let p=new is(1,"commander.executeSubCommandAsync","(error)");p.nestedError=D,l(p)}}),this.runningCommand=u}_dispatchSubcommand(e,r,s){let i=this._findCommand(e);i||this.help({error:!0});let o;return o=this._chainOrCallSubCommandHook(o,i,"preSubcommand"),o=this._chainOrCall(o,()=>{if(i._executableHandler)this._executeSubCommand(i,r.concat(s));else return i._parseCommand(r,s)}),o}_dispatchHelpCommand(e){e||this.help();let r=this._findCommand(e);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,r)=>{e.required&&this.args[r]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(s,i,o)=>{let n=i;if(i!==null&&s.parseArg){let a=`error: command-argument value '${i}' is invalid for argument '${s.name()}'.`;n=this._callParseArg(s,i,o,a)}return n};this._checkNumberOfArguments();let r=[];this.registeredArguments.forEach((s,i)=>{let o=s.defaultValue;s.variadic?i<this.args.length?(o=this.args.slice(i),s.parseArg&&(o=o.reduce((n,a)=>e(s,a,n),s.defaultValue))):o===void 0&&(o=[]):i<this.args.length&&(o=this.args[i],s.parseArg&&(o=e(s,o,s.defaultValue))),r[i]=o}),this.processedArgs=r}_chainOrCall(e,r){return e&&e.then&&typeof e.then=="function"?e.then(()=>r()):r()}_chainOrCallHooks(e,r){let s=e,i=[];return this._getCommandAndAncestors().reverse().filter(o=>o._lifeCycleHooks[r]!==void 0).forEach(o=>{o._lifeCycleHooks[r].forEach(n=>{i.push({hookedCommand:o,callback:n})})}),r==="postAction"&&i.reverse(),i.forEach(o=>{s=this._chainOrCall(s,()=>o.callback(o.hookedCommand,this))}),s}_chainOrCallSubCommandHook(e,r,s){let i=e;return this._lifeCycleHooks[s]!==void 0&&this._lifeCycleHooks[s].forEach(o=>{i=this._chainOrCall(i,()=>o(this,r))}),i}_parseCommand(e,r){let s=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(s.operands),r=s.unknown,this.args=e.concat(r),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),r);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,e,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(s.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=()=>{s.unknown.length>0&&this.unknownOption(s.unknown[0])},o=`command:${this.name()}`;if(this._actionHandler){i(),this._processArguments();let n;return n=this._chainOrCallHooks(n,"preAction"),n=this._chainOrCall(n,()=>this._actionHandler(this.processedArgs)),this.parent&&(n=this._chainOrCall(n,()=>{this.parent.emit(o,e,r)})),n=this._chainOrCallHooks(n,"postAction"),n}if(this.parent&&this.parent.listenerCount(o))i(),this._processArguments(),this.parent.emit(o,e,r);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,r);this.listenerCount("command:*")?this.emit("command:*",e,r):this.commands.length?this.unknownCommand():(i(),this._processArguments())}else this.commands.length?(i(),this.help({error:!0})):(i(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(r=>r._name===e||r._aliases.includes(e))}_findOption(e){return this.options.find(r=>r.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(r=>{r.mandatory&&e.getOptionValue(r.attributeName())===void 0&&e.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(s=>{let i=s.attributeName();return this.getOptionValue(i)===void 0?!1:this.getOptionValueSource(i)!=="default"});e.filter(s=>s.conflictsWith.length>0).forEach(s=>{let i=e.find(o=>s.conflictsWith.includes(o.attributeName()));i&&this._conflictingOption(s,i)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let r=[],s=[],i=r,o=e.slice();function n(u){return u.length>1&&u[0]==="-"}let a=null;for(;o.length;){let u=o.shift();if(u==="--"){i===s&&i.push(u),i.push(...o);break}if(a&&!n(u)){this.emit(`option:${a.name()}`,u);continue}if(a=null,n(u)){let l=this._findOption(u);if(l){if(l.required){let D=o.shift();D===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,D)}else if(l.optional){let D=null;o.length>0&&!n(o[0])&&(D=o.shift()),this.emit(`option:${l.name()}`,D)}else this.emit(`option:${l.name()}`);a=l.variadic?l:null;continue}}if(u.length>2&&u[0]==="-"&&u[1]!=="-"){let l=this._findOption(`-${u[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,u.slice(2)):(this.emit(`option:${l.name()}`),o.unshift(`-${u.slice(2)}`));continue}}if(/^--[^=]+=/.test(u)){let l=u.indexOf("="),D=this._findOption(u.slice(0,l));if(D&&(D.required||D.optional)){this.emit(`option:${D.name()}`,u.slice(l+1));continue}}if(n(u)&&(i=s),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&s.length===0){if(this._findCommand(u)){r.push(u),o.length>0&&s.push(...o);break}else if(this._getHelpCommand()&&u===this._getHelpCommand().name()){r.push(u),o.length>0&&r.push(...o);break}else if(this._defaultCommandName){s.push(u),o.length>0&&s.push(...o);break}}if(this._passThroughOptions){i.push(u),o.length>0&&i.push(...o);break}i.push(u)}return{operands:r,unknown:s}}opts(){if(this._storeOptionsAsProperties){let e={},r=this.options.length;for(let s=0;s<r;s++){let i=this.options[s].attributeName();e[i]=i===this._versionOptionName?this._version:this[i]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,r)=>Object.assign(e,r.opts()),{})}error(e,r){this._outputConfiguration.outputError(`${e}
18
+ `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
19
+ `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
20
+ `),this.outputHelp({error:!0}));let s=r||{},i=s.exitCode||1,o=s.code||"commander.error";this._exit(i,o,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in I.env){let r=e.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,I.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new xo(this.options),r=s=>this.getOptionValue(s)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(s));this.options.filter(s=>s.implied!==void 0&&r(s.attributeName())&&e.valueFromOption(this.getOptionValue(s.attributeName()),s)).forEach(s=>{Object.keys(s.implied).filter(i=>!r(i)).forEach(i=>{this.setOptionValueWithSource(i,s.implied[i],"implied")})})}missingArgument(e){let r=`error: missing required argument '${e}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(e){let r=`error: option '${e.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let r=`error: required option '${e.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,r){let s=n=>{let a=n.attributeName(),u=this.getOptionValue(a),l=this.options.find(p=>p.negate&&a===p.attributeName()),D=this.options.find(p=>!p.negate&&a===p.attributeName());return l&&(l.presetArg===void 0&&u===!1||l.presetArg!==void 0&&u===l.presetArg)?l:D||n},i=n=>{let a=s(n),u=a.attributeName();return this.getOptionValueSource(u)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},o=`error: ${i(e)} cannot be used with ${i(r)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let r="";if(e.startsWith("--")&&this._showSuggestionAfterError){let i=[],o=this;do{let n=o.createHelp().visibleOptions(o).filter(a=>a.long).map(a=>a.long);i=i.concat(n),o=o.parent}while(o&&!o._enablePositionalOptions);r=Fn(e,i)}let s=`error: unknown option '${e}'${r}`;this.error(s,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let r=this.registeredArguments.length,s=r===1?"":"s",o=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${s} but got ${e.length}.`;this.error(o,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],r="";if(this._showSuggestionAfterError){let i=[];this.createHelp().visibleCommands(this).forEach(o=>{i.push(o.name()),o.alias()&&i.push(o.alias())}),r=Fn(e,i)}let s=`error: unknown command '${e}'${r}`;this.error(s,{code:"commander.unknownCommand"})}version(e,r,s){if(e===void 0)return this._version;this._version=e,r=r||"-V, --version",s=s||"output the version number";let i=this.createOption(r,s);return this._versionOptionName=i.attributeName(),this._registerOption(i),this.on("option:"+i.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
+ `),this._exit(0,"commander.version",e)}),this}description(e,r){return e===void 0&&r===void 0?this._description:(this._description=e,r&&(this._argsDescription=r),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let r=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(r=this.commands[this.commands.length-1]),e===r._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let i=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${i}'`)}return r._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(r=>this.alias(r)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let r=this.registeredArguments.map(s=>ko(s));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=Ie.basename(e,Ie.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let r=this.createHelp();return r.helpWidth===void 0&&(r.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),r.formatHelp(this,r)}_getHelpContext(e){e=e||{};let r={error:!!e.error},s;return r.error?s=i=>this._outputConfiguration.writeErr(i):s=i=>this._outputConfiguration.writeOut(i),r.write=e.write||s,r.command=this,r}outputHelp(e){let r;typeof e=="function"&&(r=e,e=void 0);let s=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",s)),this.emit("beforeHelp",s);let i=this.helpInformation(s);if(r&&(i=r(i),typeof i!="string"&&!Buffer.isBuffer(i)))throw new Error("outputHelp callback must return a string or a Buffer");s.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",s),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",s))}helpOption(e,r){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",r=r??"display help for command",this._helpOption=this.createOption(e,r),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let r=I.exitCode||0;r===0&&e&&typeof e!="function"&&e.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(e,r){let s=["beforeAll","before","after","afterAll"];if(!s.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
+ Expecting one of '${s.join("', '")}'`);let i=`${e}Help`;return this.on(i,o=>{let n;typeof r=="function"?n=r({error:o.error,command:o.command}):n=r,n&&o.write(`${n}
23
+ `)}),this}_outputHelpIfRequested(e){let r=this._getHelpOption();r&&e.find(i=>r.is(i))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function $n(t){return t.map(e=>{if(!e.startsWith("--inspect"))return e;let r,s="127.0.0.1",i="9229",o;return(o=e.match(/^(--inspect(-brk)?)$/))!==null?r=o[1]:(o=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=o[1],/^\d+$/.test(o[3])?i=o[3]:s=o[3]):(o=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=o[1],s=o[3],i=o[4]),r&&i!=="0"?`${r}=${s}:${parseInt(i)+1}`:e})}wn.Command=os});var An=je(ue=>{var{Argument:En}=er(),{Command:as}=vn(),{CommanderError:So,InvalidArgumentError:bn}=It(),{Help:_o}=Xr(),{Option:kn}=rs();ue.program=new as;ue.createCommand=t=>new as(t);ue.createOption=(t,e)=>new kn(t,e);ue.createArgument=(t,e)=>new En(t,e);ue.Command=as;ue.Option=kn;ue.Argument=En;ue.Help=_o;ue.CommanderError=So;ue.InvalidArgumentError=bn;ue.InvalidOptionArgumentError=bn});function Re(){return(0,qe.join)((0,_n.homedir)(),".forge")}function Te(){return(0,qe.join)(Re(),"packages")}function Bn(){return(0,qe.join)(Re(),"cache")}function us(){return(0,qe.join)(Bn(),"tarballs")}function tr(){return(0,qe.join)(Re(),"links.json")}function N(){for(let t of[Re(),Te(),Bn(),us()])(0,X.existsSync)(t)||(0,X.mkdirSync)(t,{recursive:!0});(0,X.existsSync)(tr())||(0,X.writeFileSync)(tr(),JSON.stringify({},null,2))}function R(){N();try{return JSON.parse((0,X.readFileSync)(tr(),"utf-8"))}catch{return{}}}function Q(t){N(),(0,X.writeFileSync)(tr(),JSON.stringify(t,null,2))}function U(t,e){return(0,qe.join)(Te(),`${t}@${e}`)}function On(t,e){return(0,X.existsSync)(U(t,e))}function rr(){return N(),(0,X.existsSync)(Te())?(0,X.readdirSync)(Te(),{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>{let r=e.name.lastIndexOf("@");return r===-1?null:{slug:e.name.slice(0,r),version:e.name.slice(r+1),dir:(0,qe.join)(Te(),e.name)}}).filter(Boolean):[]}function v(t){return t.replace("/","-")}var _n,qe,X,le=$(()=>{"use strict";_n=require("os"),qe=require("path"),X=require("fs")});function Ue(t){let e=t.trim().match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:[-.]?([a-zA-Z0-9.]+))?/);return e?{major:parseInt(e[1],10),minor:e[2]!==void 0?parseInt(e[2],10):0,patch:e[3]!==void 0?parseInt(e[3],10):0,pre:e[4]}:{major:0,minor:0,patch:0}}function Me(t,e){let r=Ue(t),s=Ue(e);return r.major!==s.major?r.major-s.major:r.minor!==s.minor?r.minor-s.minor:r.patch!==s.patch?r.patch-s.patch:r.pre&&!s.pre?-1:!r.pre&&s.pre?1:r.pre&&s.pre?r.pre.localeCompare(s.pre):0}function sr(t){let e=t.trim();return!!(e==="*"||e===""||e==="latest"||/^v?\d+\.\d+\.\d+/.test(e)||/^\^v?\d+\.\d+\.\d+/.test(e)||/^\^\d+(\.\d+)?$/.test(e)||/^~v?\d+\.\d+\.\d+/.test(e)||/^\d+\.(\*|x)$/.test(e)||/^\d+\.\d+\.(\*|x)$/.test(e)||/^\^\d+$/.test(e)||/^~\d+$/.test(e)||/^~\d+\.\d+$/.test(e)||/^(>=|<=|>|<|=)\s*v?\d+\.\d+\.\d+/.test(e)||/^(>=|<=|>|<)\s*v?\d+\.\d+\.\d+\s+(>=|<=|>|<)\s*v?\d+\.\d+\.\d+/.test(e))}function nr(t,e){let r=e.trim();if(r==="*"||r===""||r==="latest")return!0;let s=r.match(/^(>=|<=|>|<)\s*(v?\d+\.\d+\.\d+)\s+(>=|<=|>|<)\s*(v?\d+\.\d+\.\d+)$/);if(s){let[,a,u,l,D]=s;return pt(t,a,u)&&pt(t,l,D)}if(r.startsWith("^")){let a=r.slice(1).trim(),u=Ue(a);if(Me(t,a)<0)return!1;let l=Ue(t);return a.match(/^\d+$/)?l.major===u.major:a.match(/^\d+\.\d+$/)?l.major===u.major&&l.minor===u.minor:u.major!==0?l.major===u.major:u.minor!==0?l.major===0&&l.minor===u.minor:l.major===0&&l.minor===0&&l.patch===u.patch}if(r.startsWith("~")){let a=r.slice(1).trim(),u=Ue(a);if(Me(t,a)<0)return!1;let l=Ue(t);return a.match(/^\d+\.\d+\.\d+$/)||a.match(/^\d+\.\d+$/)?l.major===u.major&&l.minor===u.minor:l.major===u.major}let i=r.match(/^(\d+)(?:\.(\d+))?\.(\*|x)$/);if(i){let[,a,u]=i,l=Ue(t);return u===void 0?l.major===parseInt(a,10):l.major===parseInt(a,10)&&l.minor===parseInt(u,10)}if(r.startsWith(">="))return pt(t,">=",r.slice(2).trim());if(r.startsWith("<="))return pt(t,"<=",r.slice(2).trim());if(r.startsWith(">"))return pt(t,">",r.slice(1).trim());if(r.startsWith("<"))return pt(t,"<",r.slice(1).trim());if(r.startsWith("="))return Me(t,r.slice(1).trim())===0;let o=r.startsWith("v")?r.slice(1):r,n=t.startsWith("v")?t.slice(1):t;return/^\d+\.\d+\.\d+/.test(o)?Me(n,o)===0:t===r}function pt(t,e,r){let s=Me(t,r);switch(e){case">=":return s>=0;case"<=":return s<=0;case">":return s>0;case"<":return s<0;default:return!1}}function ls(t,e){let r=t.filter(s=>nr(s,e));return r.length===0?null:(r.sort(Me),r[r.length-1])}var Tt=$(()=>{"use strict"});var Bo,Rt,cs=$(()=>{Bo=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,Rt=class t extends Date{#t=!1;#r=!1;#e=null;constructor(e){let r=!0,s=!0,i="Z";if(typeof e=="string"){let o=e.match(Bo);o?(o[1]||(r=!1,e=`0000-01-01T${e}`),s=!!o[2],s&&e[10]===" "&&(e=e.replace(" ","T")),o[2]&&+o[2]>23?e="":(i=o[3]||null,e=e.toUpperCase(),!i&&s&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=r,this.#r=s,this.#e=i)}isDateTime(){return this.#t&&this.#r}isLocal(){return!this.#t||!this.#r||!this.#e}isDate(){return this.#t&&!this.#r}isTime(){return this.#r&&!this.#t}isValid(){return this.#t||this.#r}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,r="Z"){let s=new t(e);return s.#e=r,s}static wrapAsLocalDateTime(e){let r=new t(e);return r.#e=null,r}static wrapAsLocalDate(e){let r=new t(e);return r.#r=!1,r.#e=null,r}static wrapAsLocalTime(e){let r=new t(e);return r.#t=!1,r.#e=null,r}}});function Oo(t,e){let r=t.slice(0,e).split(/\r\n|\n|\r/g);return[r.length,r.pop().length+1]}function Po(t,e,r){let s=t.split(/\r\n|\n|\r/g),i="",o=(Math.log10(e+1)|0)+1;for(let n=e-1;n<=e+1;n++){let a=s[n-1];a&&(i+=n.toString().padEnd(o," "),i+=": ",i+=a,i+=`
24
+ `,n===e&&(i+=" ".repeat(o+r+2),i+=`^
25
+ `))}return i}var F,tt=$(()=>{F=class extends Error{line;column;codeblock;constructor(e,r){let[s,i]=Oo(r.toml,r.ptr),o=Po(r.toml,s,i);super(`Invalid TOML document: ${e}
26
+
27
+ ${o}`,r),this.line=s,this.column=i,this.codeblock=o}}});function Ds(t,e=0){let r=t.indexOf(`
28
+ `,e);return t.charCodeAt(r-1)===13&&r--,r}function ir(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}if(e<32&&e!==9||e===127)throw new F("control characters are not allowed in comments",{toml:t.s,ptr:t.p})}}function ke(t,e,r){let s;for(;;){for(;(s=t.s.charCodeAt(t.p))===32||s===9||!e&&(s===10||s===13&&t.s.charCodeAt(t.p+1)===10);)t.p++;if(r||s!==35)break;ir(t)}}function Pn(t,e,r){let s=t.p;if(!r){s=Ds(t.s,s),t.p=s<0?t.s.length:s;return}for(;t.p<t.s.length;t.p++){let i=t.s.charCodeAt(t.p);if(i===35)ir(t);else if(i===r||i===e)return}throw new F("cannot find end of structure",{toml:t.s,ptr:s})}var or=$(()=>{tt();});function ar(t){let e=t.p,r=t.s.charCodeAt(t.p++),s=r,i=r===39,o=r===t.s.charCodeAt(t.p)&&r===t.s.charCodeAt(t.p+1);o&&((r=t.s.charCodeAt(t.p+=2))===10?t.p++:r===13&&t.s.charCodeAt(t.p+1)===10&&(t.p+=2));let n="",a=t.p,u=0;for(;t.p<t.s.length;t.p++)if(r=t.s.charCodeAt(t.p),o&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10))u=u&&3;else{if(r<32&&r!==9||r===127)throw new F("control characters are not allowed in strings",{toml:t.s,ptr:t.p});if((!u||u===3)&&r===s&&(!o||t.s.charCodeAt(t.p+1)===s&&t.s.charCodeAt(t.p+2)===s))return o&&(t.s.charCodeAt(t.p+3)===s&&t.p++,t.s.charCodeAt(t.p+3)===s&&t.p++),u||(n+=t.s.slice(a,t.p)),t.p+=o?3:1,n;if(!u)!i&&r===92&&(n+=t.s.slice(a,a=t.p),u=1);else if(u===1)if(r===120||r===117||r===85){let l=0,D=r===120?2:r===117?4:8;for(let p=0;p<D;p++,t.p++){let c=t.s.charCodeAt(t.p+1),m=c>=48&&c<=57?c-48:c>=65&&c<=70?c-65+10:c>=97&&c<=102?c-97+10:-1;if(m<0)throw new F("invalid non-hex character in unicode escape",{toml:t.s,ptr:t.p+1});l=l<<4|m}if(l<0||l>1114111||l>=55296&&l<=57343)throw new F("invalid unicode escape",{toml:t.s,ptr:t.p});n+=String.fromCodePoint(l),a=t.p+1,u=0}else if(r===32||r===9)u=2;else{if(r===98)n+="\b";else if(r===116)n+=" ";else if(r===110)n+=`
29
+ `;else if(r===102)n+="\f";else if(r===114)n+="\r";else if(r===101)n+="\x1B";else if(r===34)n+='"';else if(r===92)n+="\\";else throw new F("unrecognized escape sequence",{toml:t.s,ptr:t.p});a=t.p+1,u=0}else if(r!==32&&r!==9){if(u===2)throw new F("invalid escape: only line-ending whitespace may be escaped",{toml:t.s,ptr:a});u=!i&&r===92?1:0,a=t.p}}throw new F("unfinished string",{toml:t.s,ptr:e})}function Ro(t,e,r){let s=t.s.slice(e,r),i=s.indexOf("#");return i>0&&(ir({s,p:i,d:0}),s=s.slice(0,i)),s.trimEnd()}function jn(t,e,r){let s=t.p,i={toml:t.s,ptr:s};Pn(t,44,r);let o=Ro(t,s,t.p);if(!o)throw new F("incomplete declaration: value expected",i);if(o==="-inf")return-1/0;if(o==="inf"||o==="+inf")return 1/0;if(o==="nan"||o==="+nan"||o==="-nan")return NaN;if(o==="-0")return e?0n:0;let n=jo.test(o);if(n||Io.test(o)){if(To.test(o))throw new F("leading zeroes are not allowed",i);o=o.replace(/_/g,"");let u=+o;if(isNaN(u))throw new F("invalid number",i);if(n){if((n=!Number.isSafeInteger(u))&&!e)throw new F("integer value cannot be represented losslessly",i);(n||e===!0)&&(u=BigInt(o))}return u}let a=new Rt(o);if(!a.isValid())throw new F("invalid value",i);return a}var jo,Io,To,ps=$(()=>{cs();tt();or();jo=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,Io=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,To=/^[+-]?0[0-9_]/});function Mt(t,e,r){let s=t.p,i=t.s.charCodeAt(s);if(i===91||i===123){if(!t.d--)throw new F("document contains excessively nested structures. aborting.",{toml:t.s,ptr:s});let o=i===91?Tn(t,r):In(t,r);return t.d++,o}if(i===34||i===39)return ar(t);if(i===116){if(t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)throw new F("invalid value",{toml:t.s,ptr:s});return t.p++,!0}if(i===102){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)throw new F("invalid value",{toml:t.s,ptr:s});return t.p++,!1}return jn(t,r,e)}var fs=$(()=>{ps();ds();tt();});function ur(t,e="="){let r=t.p,s=r-1,i=[],o=t.s.indexOf(e,r);if(o<0)throw new F("incomplete key-value: cannot find end of key",{toml:t.s,ptr:r});do{let n=t.s.charCodeAt(t.p=++s);if(n!==32&&n!==9)if(n===34||n===39){if(n===t.s.charCodeAt(t.p+1)&&n===t.s.charCodeAt(t.p+2))throw new F("multiline strings are not allowed in keys",{toml:t.s,ptr:t.p});let a=ar(t);s=t.s.indexOf(".",t.p);let u=t.s.slice(t.p,s<0||s>o?o:s),l=Ds(u);if(l>-1)throw new F("newlines are not allowed in keys",{toml:t.s,ptr:l});if(u.trimStart())throw new F("found extra tokens after the string part",{toml:t.s,ptr:t.p});if(o<t.p&&(o=t.s.indexOf(e,t.p),o<0))throw new F("incomplete key-value: cannot find end of key",{toml:t.s,ptr:r});i.push(a)}else{s=t.s.indexOf(".",t.p);let a=t.s.slice(t.p,s<0||s>o?o:s);if(!Mo.test(a))throw new F("only letter, numbers, dashes and underscores are allowed in keys",{toml:t.s,ptr:t.p});i.push(a.trimEnd())}}while(s+1&&s<o);return t.p=o+1,ke(t,!0,!0),i}function In(t,e){let r={},s=new Set,i;for(t.p++;t.p<t.s.length;){if(ke(t),(i=t.s.charCodeAt(t.p))===125)return t.p++,r;let o,n=r,a=!1,u=t.p,l=ur(t);for(let p=0;p<l.length;p++){if(p&&(n=a?n[o]:n[o]={}),o=l[p],(a=Object.hasOwn(n,o))&&(typeof n[o]!="object"||s.has(n[o])))throw new F("trying to redefine an already defined value",{toml:t.s,ptr:u});!a&&o==="__proto__"&&Object.defineProperty(n,o,{enumerable:!0,configurable:!0,writable:!0})}if(a)throw new F("trying to redefine an already defined value",{toml:t.s,ptr:t.p});let D=Mt(t,125,e);if(s.add(n[o]=D),ke(t),(i=t.s.charCodeAt(t.p++))===125)return r;if(i!==44)throw new F("expected comma or end of structure",{toml:t.s,ptr:t.p-1})}throw new F("unfinished table encountered",{toml:t.s,ptr:t.p})}function Tn(t,e){let r=[],s;for(t.p++;t.p<t.s.length;){if(ke(t),(s=t.s.charCodeAt(t.p))===93)return t.p++,r;if(r.push(Mt(t,93,e)),ke(t),(s=t.s.charCodeAt(t.p++))===93)return r;if(s!==44)throw new F("expected comma or end of structure",{toml:t.s,ptr:t.p-1})}throw new F("unfinished array encountered",{toml:t.s,ptr:t.p})}var Mo,ds=$(()=>{ps();fs();or();tt();Mo=/^[a-zA-Z0-9-_]+[ \t]*$/});function Rn(t,e,r,s){let i=e,o=r,n,a=!1,u;for(let l=0;l<t.length;l++){if(l){if(i=a?i[n]:i[n]={},o=(u=o[n]).c,s===0&&(u.t===1||u.t===2))return null;if(u.t===2){let D=i.length-1;i=i[D],o=o[D].c}}if(n=t[l],(a=Object.hasOwn(i,n))&&o[n]?.t===0&&o[n]?.d)return null;a||(n==="__proto__"&&(Object.defineProperty(i,n,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,n,{enumerable:!0,configurable:!0,writable:!0})),o[n]={t:l<t.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(u=o[n],u.t!==s&&!(s===1&&u.t===3)||(s===2&&(u.d||(u.d=!0,i[n]=[]),i[n].push(i={}),u.c[u.i++]=u={t:1,d:!1,i:0,c:{}}),u.d))return null;if(u.d=!0,s===1)i=a?i[n]:i[n]={};else if(s===0&&a)return null;return[n,i,u.c]}function Le(t,{maxDepth:e=1e3,integersAsBigInt:r}={}){let s={s:t,p:0,d:e},i={},o={},n,a=i,u=o;for(ke(s);s.p<t.length;){if(t.charCodeAt(s.p)===91){let l=t.charCodeAt(++s.p)===91;n=s.p+=+l;let D=ur(s,"]");if(l){if(t.charCodeAt(s.p-1)!==93)throw new F("expected end of table declaration",{toml:t,ptr:s.p-1});s.p++}let p=Rn(D,i,o,l?2:1);if(!p)throw new F("trying to redefine an already defined table or value",{toml:t,ptr:n});u=p[2],a=p[1]}else{n=s.p;let l=ur(s),D=Rn(l,a,u,0);if(!D)throw new F("trying to redefine an already defined table or value",{toml:t,ptr:n});D[1][D[0]]=Mt(s,void 0,r)}if(ke(s,!0),s.p<t.length&&(n=t.charCodeAt(s.p))!==10&&n!==13)throw new F("each key-value declaration must be followed by an end-of-line",{toml:t,ptr:s.p});ke(s)}return i}var Mn=$(()=>{ds();fs();or();tt();});function Lt(t){let e=typeof t;if(e==="object"){if(Array.isArray(t))return"array";if(typeof t?.getUTCDate=="function"&&t instanceof Date)return"date";if(globalThis.Temporal&&typeof t?.since=="function"&&(t instanceof Temporal.Instant||t instanceof Temporal.PlainDate||t instanceof Temporal.PlainDateTime||t instanceof Temporal.PlainTime||t instanceof Temporal.ZonedDateTime))return"temporal"}return e}function Lo(t){for(let e=0;e<t.length;e++)if(Lt(t[e])!=="object")return!1;return t.length!=0}function ms(t){return JSON.stringify(t).replace(/\x7f/g,"\\u007f")}function No(t){return t.toString({calendarName:"never",timeZoneName:"never"})}function gs(t,e,r,s){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");switch(e){case"number":if(isNaN(t))return"nan";if(t===1/0)return"inf";if(t===-1/0)return"-inf";if(Number.isInteger(t)&&(s||!Number.isSafeInteger(t)))return t.toFixed(1);case"bigint":case"boolean":return t.toString();case"string":return ms(t);case"date":if(isNaN(t.getTime()))throw new TypeError("cannot serialize invalid date");return t.toISOString();case"object":return Vo(t,r,s);case"array":return Ho(t,r,s);case"temporal":return No(t)}}function Vo(t,e,r){let s=Object.keys(t);if(s.length===0)return"{}";let i="{ ";for(let o=0;o<s.length;o++){let n=s[o];o&&(i+=", "),i+=Ln.test(n)?n:ms(n),i+=" = ",i+=gs(t[n],Lt(t[n]),e-1,r)}return i+" }"}function Ho(t,e,r){if(t.length===0)return"[]";let s="[ ";for(let i=0;i<t.length;i++){if(i&&(s+=", "),t[i]===null||t[i]===void 0)throw new TypeError("arrays cannot contain null or undefined values");s+=gs(t[i],Lt(t[i]),e-1,r)}return s+" ]"}function Wo(t,e,r,s){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="";for(let o=0;o<t.length;o++)i+=`${i&&`
30
+ `}[[${e}]]
31
+ `,i+=hs(0,t[o],e,r,s);return i}function hs(t,e,r,s,i){if(s===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let o="",n="",a=Object.keys(e);for(let u=0;u<a.length;u++){let l=a[u];if(e[l]!==null&&e[l]!==void 0){let D=Lt(e[l]);if(D==="symbol"||D==="function")throw new TypeError(`cannot serialize values of type '${D}'`);let p=Ln.test(l)?l:ms(l);if(D==="array"&&Lo(e[l]))n+=(n&&`
32
+ `)+Wo(e[l],r?`${r}.${p}`:p,s-1,i);else if(D==="object"){let c=r?`${r}.${p}`:p;n+=(n&&`
33
+ `)+hs(c,e[l],c,s-1,i)}else o+=p,o+=" = ",o+=gs(e[l],D,s,i),o+=`
34
+ `}}return t&&(o||!n)&&(o=o?`[${t}]
35
+ ${o}`:`[${t}]`),o&&n?`${o}
36
+ ${n}`:o||n}function ys(t,{maxDepth:e=1e3,numbersAsFloat:r=!1}={}){if(Lt(t)!=="object")throw new TypeError("stringify can only be called with an object");let s=hs(0,t,"",e,r);return s[s.length-1]!==`
37
+ `?s+`
38
+ `:s}var Ln,Nn=$(()=>{Ln=/^[a-z0-9-_]+$/i});var Nt=$(()=>{Mn();Nn();cs();tt();});function Cs(){return(0,Vn.join)(Re(),"config.toml")}function rt(){let t=Cs();if(!(0,Ae.existsSync)(t))return{...lr};try{let e=(0,Ae.readFileSync)(t,"utf-8"),r=Le(e);return{registry:typeof r.registry=="string"?r.registry:lr.registry,defaultHarnesses:Array.isArray(r.defaultHarnesses)?r.defaultHarnesses:[],autoUpdate:typeof r.autoUpdate=="boolean"?r.autoUpdate:!1,telemetry:typeof r.telemetry=="boolean"?r.telemetry:!1}}catch{return{...lr}}}function Go(t){let e=Re();(0,Ae.existsSync)(e)||(0,Ae.mkdirSync)(e,{recursive:!0});let r=ys(t);(0,Ae.writeFileSync)(Cs(),r)}function Hn(){let t=Cs();if(!(0,Ae.existsSync)(t)){let e={...lr};return Go(e),e}return rt()}var Ae,Vn,lr,Vt=$(()=>{"use strict";Ae=require("fs"),Vn=require("path");Nt();le();lr={registry:"registry/index.json",defaultHarnesses:[],autoUpdate:!1,telemetry:!1}});function Wn(){try{let e=rt();if(e.registry&&/^https?:\/\//.test(e.registry))return e.registry}catch{}let t=[(0,Ke.join)(Fs.dirname??"./","../../../registry"),(0,Ke.join)(Fs.dirname??"./","../../../../registry"),(0,Ke.join)(process.cwd(),"registry")];for(let e of t)if((0,st.existsSync)((0,Ke.join)(e,"index.json")))return e;return(0,Ke.join)(Fs.dirname??"./","../../../registry")}async function $s(){let t=Wn();if(/^https?:\/\//.test(t))try{let r=await fetch(t+"/index.json");if(!r.ok)throw new Error(`HTTP ${r.status} for ${t}/index.json`);return await r.json()}catch(r){throw new Error(`Remote registry fetch failed: ${r.message}`,{cause:r})}let e=(0,Ke.join)(t,"index.json");if(!(0,st.existsSync)(e))throw new Error(`Registry index not found: ${e}`);return JSON.parse((0,st.readFileSync)(e,"utf-8"))}async function ce(t){let e=Wn(),r=v(t);if(/^https?:\/\//.test(e))try{let i=await fetch(`${e}/packages/${r}.json`);if(!i.ok)throw new Error(`HTTP ${i.status} for ${e}/packages/${r}.json`);return await i.json()}catch(i){throw new Error(`Package not found: ${t} (${i.message})`,{cause:i})}let s=(0,Ke.join)(e,"packages",`${r}.json`);if(!(0,st.existsSync)(s))throw new Error(`Package not found: ${t} (${s})`);return JSON.parse((0,st.readFileSync)(s,"utf-8"))}async function K(t,e){let r=await ce(t);if(!e||e==="latest"||e==="*"){let i=r.latest,o=r.versions[i];if(!o)throw new Error(`Latest version ${i} not found for ${t}`);return{detail:r,version:i,versionMeta:o}}if(r.versions[e])return{detail:r,version:e,versionMeta:r.versions[e]};let s=ls(Object.keys(r.versions),e);if(!s)throw new Error(`No version satisfying ${e} for ${t}. Available: ${Object.keys(r.versions).join(", ")}`);return{detail:r,version:s,versionMeta:r.versions[s]}}function ws(t){let e=t.lastIndexOf("@");return e>0&&t.slice(0,e).includes("/")?{name:t.slice(0,e),version:t.slice(e+1)}:{name:t}}async function cr(t,e={}){let r=await $s(),s=t.toLowerCase().split(/\s+/).filter(Boolean);if(s.length===0)return[];let i=[];for(let n of Object.values(r.packages)){if(e.type&&n.type!==e.type)continue;let a=n.name.toLowerCase(),u=(n.description??"").toLowerCase(),l=(n.keywords??[]).join(" ").toLowerCase(),D=(n.type??"").toLowerCase(),p=0;for(let c of s)a===c?p+=50:a.startsWith(c)?p+=15:a.includes(c)&&(p+=10),l.split(/\s+/).includes(c)?p+=8:l.includes(c)&&(p+=5),D===c&&(p+=6),u.includes(c)&&(p+=2);p>0&&(n.verified&&(p+=4),i.push({p:n,score:p}))}i.sort((n,a)=>a.score-n.score||n.p.name.localeCompare(a.p.name));let o=i.map(n=>n.p);return typeof e.limit=="number"?o.slice(0,e.limit):o}var st,Ke,Fs,Ne=$(()=>{"use strict";st=require("fs"),Ke=require("path");le();Tt();Vt();Tt();Fs={}});function $e(t,e){if(!(0,De.statSync)(t).isDirectory())throw new Error(`[forge] copyDirRecursive: not a directory: ${t}`);(0,De.existsSync)(e)&&(0,De.rmSync)(e,{recursive:!0,force:!0}),(0,De.mkdirSync)(e,{recursive:!0});let s=(0,De.readdirSync)(t,{withFileTypes:!0});for(let i of s){let o=(0,vs.join)(t,i.name),n=(0,vs.join)(e,i.name);if(i.isDirectory())$e(o,n);else if(i.isFile()||i.isSymbolicLink())try{(0,De.copyFileSync)(o,n)}catch(a){throw new Error(`[forge] copy failed ${o} \u2192 ${n}: ${a.message}`,{cause:a})}}}var De,vs,ft=$(()=>{"use strict";De=require("fs"),vs=require("path")});function Je(t){let e=t.trim();if(e.startsWith("./")||e.startsWith("../")||e.startsWith(".\\")||e.startsWith("/")||e.startsWith("~/")||/^[a-zA-Z]:[\\/]/.test(e))return{kind:"local",source:`local:${e}`,ref:e,explicit:!0};if(e.startsWith("github:")){let r=e.slice(7),s=r.indexOf("#"),i=s===-1?r:r.slice(0,s),o=s===-1?void 0:r.slice(s+1);return zo(i),{kind:"github",source:o?`github:${i}@${o}`:`github:${i}`,ref:i,want:o,explicit:!0}}if(/^(https?:\/\/|git@|ssh:\/\/)/.test(e)){let r=e,s,i=e.indexOf("://")+3,o=e.lastIndexOf("#");return o>i&&(s=e.slice(o+1),r=e.slice(0,o)),{kind:r.includes("github.com")?"github":"git",source:s?`${r}@${s}`:r,ref:r,want:s,explicit:!0}}if(/^[a-z0-9-]+\/[a-z0-9-_.]+(#[a-z0-9-_.]+)?$/i.test(e)){let r=e.indexOf("#"),s=r===-1?e:e.slice(0,r),i=r===-1?void 0:e.slice(r+1);return{kind:"github",source:i?`github:${s}@${i}`:`github:${s}`,ref:s,want:i,explicit:!1}}return{kind:"registry",source:"registry",ref:e,explicit:!0}}function zo(t){if(!/^[a-z0-9-]+\/[a-z0-9-_.]+$/i.test(t))throw new Error(`[forge] invalid GitHub repo "${t}" \u2014 expected owner/repo`)}function qn(){let t=(0,xe.join)((0,Gn.tmpdir)(),`forge-src-${process.pid}-${Date.now()}`);return(0,G.mkdirSync)(t,{recursive:!0}),t}function Un(t,e){let r=(0,xe.join)(t,"forge.toml");if((0,G.existsSync)(r))try{let a=Le((0,G.readFileSync)(r,"utf-8")).package;if(a&&typeof a.name=="string"){let u=typeof a.type=="string"?a.type:"skill";return{name:a.name,version:typeof a.version=="string"?a.version:"0.0.0",type:u,description:typeof a.description=="string"?a.description:`${a.name} (from external source)`}}}catch(n){throw new Error(`[forge] invalid forge.toml in ${t}: ${n.message}`,{cause:n})}let s=(0,xe.join)(t,"SKILL.md"),i=(0,xe.join)(t,"agent.md"),o=(0,G.existsSync)(s)?s:(0,G.existsSync)(i)?i:null;if(o){let a=(0,G.readFileSync)(o,"utf-8").split(`
39
+ `).map(l=>l.trim()).find(l=>l.startsWith("# ")),u=e.replace(/[^a-z0-9-]/gi,"").toLowerCase()||"external";return{name:`external/${(0,xe.basename)(t).replace(/[^a-z0-9-]/gi,"").toLowerCase()||u}`,version:"0.0.0",type:o===i?"agent":"skill",description:a?a.replace(/^#\s+/,"").slice(0,200):`${e} (from external source)`}}throw new Error(`[forge] no manifest in ${t}: expected forge.toml, SKILL.md, or agent.md`)}function qo(t){let e=(0,xe.resolve)(t.replace(/^~\//,`${process.env.HOME??""}/`));if(!(0,G.existsSync)(e))throw new Error(`[forge] local source not found: ${t}`);if(!(()=>{try{return{dir:(0,G.readdirSync)(e).length>=0}}catch{return null}})())throw new Error(`[forge] local source is not a directory: ${t}`);let s=Un(e,(0,xe.basename)(e)),i=qn();return $e(e,i),{kind:"local",source:`local:${t}`,...s,dir:i,cleanup:()=>(0,G.rmSync)(i,{recursive:!0,force:!0})}}function Uo(t,e){let r=t.includes("://")||t.startsWith("git@")?t:`https://github.com/${t}.git`;if(!/^(https?:\/\/|git@|ssh:\/\/)/.test(r))throw new Error(`[forge] invalid git source "${t}"`);let s=r.includes("github.com")?"github":"git",i=qn();try{(0,zn.execFileSync)("git",e&&e!=="HEAD"?["clone","--depth","1","--branch",e,r,i]:["clone","--depth","1",r,i],{stdio:"pipe"})}catch(u){throw(0,G.rmSync)(i,{recursive:!0,force:!0}),new Error(`[forge] git clone failed for ${r}${e?` (ref ${e})`:""}: ${u.message}
40
+ [forge] Check the URL/ref and that 'git' is installed.`,{cause:u})}let o=(t.split("/").pop()??"repo").replace(/\.git$/,""),n=Un(i,o),a=!t.includes("://")&&s==="github"?`github:${t}`:r;return{kind:s,source:e?`${a}@${e}`:a,...n,dir:i,cleanup:()=>(0,G.rmSync)(i,{recursive:!0,force:!0})}}function Ze(t){return t.kind==="local"?qo(t.ref):Uo(t.ref,t.want)}var G,xe,Gn,zn,dt=$(()=>{"use strict";G=require("fs"),xe=require("path"),Gn=require("os"),zn=require("child_process");Nt();ft()});async function ee(t,e,r,s,i={}){let o=v(t),n=U(o,e);if(On(o,e))try{let{readdirSync:p}=await import("fs");if(p(n).length>0)return n;(0,k.rmSync)(n,{recursive:!0,force:!0})}catch{return n}N();let a=s.tarball??"",u=s.sha256??"";if(u.startsWith("placeholder")||a.includes("placeholder")){if(!i.allowMock)throw new Error(`[forge] ${t}@${e} has no verified tarball yet (placeholder SHA).
41
+ [forge] Re-run with --mock to install mock content, or run 'forge audit' to see verification status.`);console.warn(`[forge] warning: installing MOCK content for ${t}@${e} (--mock)`);let p=!1;(0,k.existsSync)(n)||((0,k.mkdirSync)(n,{recursive:!0}),p=!0);try{Ko(t,e,r,s,n)}catch(c){if(p)try{(0,k.rmSync)(n,{recursive:!0,force:!0})}catch{}throw c}return n}let D=!1;(0,k.existsSync)(n)||((0,k.mkdirSync)(n,{recursive:!0}),D=!0);try{return await Jo(a,u,n,o),n}catch(p){if(D)try{(0,k.rmSync)(n,{recursive:!0,force:!0})}catch{}throw new Error(`[forge] download/verify failed for ${t}@${e}: ${p.message}
42
+ [forge] Nothing was installed. Re-run with --mock to install mock content instead.`,{cause:p})}}function Ko(t,e,r,s,i){let o=r.type,n=t.split("/")[1]??t;if(o==="skill"){let u=`# ${n} \u2014 ${r.description}
43
+
44
+ > Installed via Forge v0.1 \u2014 ${t}@${e}
45
+ > Source: ${r.repository??r.homepage??"registry"}
46
+ > Type: ${o}
47
+
48
+ ## Usage
49
+ This is a mock package generated by Forge when the real tarball is not yet available.
50
+ Replace with real content when tarball download is enabled.
51
+
52
+ ## Info
53
+ - Package: ${t}
54
+ - Version: ${e}
55
+ - Type: ${o}
56
+ - Keywords: ${(r.keywords??[]).join(", ")}
57
+
58
+ ## Forge
59
+ \`\`\`bash
60
+ forge info ${t}
61
+ forge list
62
+ forge doctor
63
+ \`\`\`
64
+ `;(0,k.writeFileSync)((0,B.join)(i,"SKILL.md"),u)}o==="agent"&&((0,k.writeFileSync)((0,B.join)(i,"agent.md"),`# ${n} \u2014 ${r.description}
65
+
66
+ > Installed via Forge \u2014 ${t}@${e}
67
+
68
+ Define your agent's system prompt here.
69
+ `),(0,k.writeFileSync)((0,B.join)(i,"SKILL.md"),`# ${n} \u2014 agent
70
+
71
+ See agent.md for system prompt.
72
+ `)),o==="command"&&(0,k.writeFileSync)((0,B.join)(i,"command.md"),`# ${n} \u2014 ${r.description}
73
+
74
+ > Installed via Forge \u2014 ${t}@${e}
75
+
76
+ Slash command: /${n}
77
+ `),o==="hook"&&((0,k.writeFileSync)((0,B.join)(i,"hook.json"),JSON.stringify({name:t,hooks:{"pre-tool":{entry:"./hook.js"}}},null,2)+`
78
+ `),(0,k.writeFileSync)((0,B.join)(i,"hook.js"),`// ${t} hook entry
79
+ module.exports = {};
80
+ `)),o==="plugin"&&((0,k.writeFileSync)((0,B.join)(i,"plugin.json"),JSON.stringify({name:n,entry:"index.js",hooks:["pre-tool","post-tool"]},null,2)+`
81
+ `),(0,k.writeFileSync)((0,B.join)(i,"index.js"),`// ${t} plugin entry
82
+ module.exports = {};
83
+ `)),o==="mcp"&&s.mcp&&((0,k.writeFileSync)((0,B.join)(i,"forge-mcp.json"),JSON.stringify(s.mcp,null,2)),(0,k.writeFileSync)((0,B.join)(i,"mcp.json"),JSON.stringify({mcpServers:{[n]:s.mcp}},null,2)+`
84
+ `),(0,k.writeFileSync)((0,B.join)(i,"SKILL.md"),`# ${t} \u2014 MCP Server
85
+
86
+ MCP command: \`${s.mcp.command} ${(s.mcp.args??[]).join(" ")}\`
87
+ `));let a=`# Generated by Forge \u2014 mock package
88
+ [package]
89
+ name = "${t}"
90
+ version = "${e}"
91
+ type = "${o}"
92
+ description = "${r.description.replace(/"/g,'\\"')}"
93
+ `;(0,k.writeFileSync)((0,B.join)(i,"forge.toml"),a),(0,k.writeFileSync)((0,B.join)(i,".forge-meta.json"),JSON.stringify({name:t,version:e,type:o,installedAt:new Date().toISOString(),tarball:s.tarball},null,2)),(0,k.writeFileSync)((0,B.join)(i,".forge-mock"),JSON.stringify({mock:!0,name:t,version:e,installedAt:new Date().toISOString()},null,2)+`
94
+ `)}async function Jo(t,e,r,s){let i=(0,B.resolve)(Te())+B.sep;if(!(0,B.resolve)(r).startsWith(i))throw new Error(`refusing to extract outside packages dir: ${r}`);let o=(0,B.join)((0,Ht.tmpdir)(),`forge-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.tgz`);if(t.includes("github.com")&&t.includes("/releases/download/"))try{(0,Dr.execFileSync)("gh",["release","download","--repo","oomerevren-beep/forge","--pattern","*.tar.gz","-D",(0,Ht.tmpdir)(),"--clobber"],{stdio:"pipe"});let{readdirSync:c}=await import("fs"),m=c((0,Ht.tmpdir)()).filter(f=>f.endsWith(".tar.gz")&&f.startsWith(s));if(m.length>0){let f=(0,B.join)((0,Ht.tmpdir)(),m[0]),y=(0,k.readFileSync)(f),g=(0,Es.createHash)("sha256").update(y).digest("hex");if(g!==e)throw new Error(`sha256 mismatch: expected ${e}, got ${g}`);(0,Dr.execFileSync)("python",["-c",`
95
+ import tarfile, os, sys
96
+ with tarfile.open(sys.argv[1], 'r:gz') as tf:
97
+ tf.extractall(sys.argv[2], filter='data')
98
+ `,f,r],{stdio:"pipe"}),(0,k.rmSync)(f,{force:!0});return}}catch{}let n=await fetch(t);if(!n.ok)throw new Error(`HTTP ${n.status} for ${t}`);let a=Buffer.from(await n.arrayBuffer());if(e&&!e.startsWith("placeholder")){let c=(0,Es.createHash)("sha256").update(a).digest("hex");if(c!==e)throw new Error(`SHA256 mismatch: expected ${e}, got ${c}`)}let l=(t.split("/").pop()||"package.tgz").replace(/[^a-zA-Z0-9._-]/g,"_"),D=(0,B.join)(us(),`${s}--${l}`);try{let{writeFileSync:c}=await import("fs");c(D,a)}catch{}let{writeFileSync:p}=await import("fs");p(o,a);try{(0,Dr.execFileSync)("python",["-c",`
99
+ import tarfile, os, sys
100
+ with tarfile.open(sys.argv[1], 'r:gz') as tf:
101
+ tf.extractall(sys.argv[2], filter='data')
102
+ `,o,r],{stdio:"pipe"})}catch(c){throw new Error(`tar extract failed: ${c.message}`,{cause:c})}finally{try{let{unlinkSync:c}=await import("fs");c(o)}catch{}}await Zo(r)}async function Zo(t){let{readdirSync:e,lstatSync:r,realpathSync:s,readlinkSync:i}=await import("fs"),o=s(t),n=[t];for(;n.length>0;){let a=n.pop();for(let u of e(a,{withFileTypes:!0})){let l=(0,B.join)(a,u.name),D=r(l);if(D.isSymbolicLink())try{let p=i(l),c=s(l);if(!c.startsWith(o+B.sep)&&c!==o)throw new Error(`tarball symlink escapes package dir: ${u.name} \u2192 ${p}`)}catch(p){throw p.message?.includes("escapes")?p:new Error(`tarball contains unresolvable symlink (${u.name}) \u2014 refusing to install`,{cause:p})}else{try{let p=s(l);if(!p.startsWith(o+B.sep)&&p!==o)throw new Error(`tarball entry escapes package dir: ${u.name}`)}catch(p){if(p.message?.includes("escapes"))throw p}D.isDirectory()&&n.push(l)}}}}function Kn(t){return t.startsWith("placeholder")}var k,B,Es,Ht,Dr,nt=$(()=>{"use strict";k=require("fs"),B=require("path"),Es=require("crypto"),Ht=require("os"),Dr=require("child_process");le()});function Wt(t){(0,E.existsSync)(t)||(0,E.mkdirSync)(t,{recursive:!0})}function Yo(t,e){if(Wt((0,it.dirname)(e)),(0,E.existsSync)(e))try{(0,E.lstatSync)(e).isSymbolicLink()?(0,E.unlinkSync)(e):(0,E.rmSync)(e,{recursive:!0,force:!0})}catch{(0,E.rmSync)(e,{recursive:!0,force:!0})}try{let r=process.platform==="win32";(0,E.symlinkSync)(t,e,r?"junction":"dir");return}catch{$e(t,e)}}function bs(t){if((0,E.existsSync)(t))try{(0,E.lstatSync)(t).isSymbolicLink()?(0,E.unlinkSync)(t):(0,E.rmSync)(t,{recursive:!0,force:!0})}catch{(0,E.rmSync)(t,{recursive:!0,force:!0})}}function Gt(t){if(!(0,E.existsSync)(t))return null;let e=(0,E.readFileSync)(t,"utf-8");try{return JSON.parse(e)}catch(r){throw new Error(`[forge] MCP config at ${t} contains invalid JSON: ${r.message}
103
+ [forge] Refusing to modify. Fix the config manually or rename it, then retry.`,{cause:r})}}function ks(t,e){Wt((0,it.dirname)(t)),As(t);let r=t+".tmp."+Date.now();(0,E.writeFileSync)(r,JSON.stringify(e,null,2)+`
104
+ `),(0,E.renameSync)(r,t)}function As(t){if(!(0,E.existsSync)(t))return null;let e=t+".bak";try{return(0,E.copyFileSync)(t,e),console.log(`[forge] backup: ${t} \u2192 ${e}`),e}catch(r){return console.warn(`[forge] warning: could not back up ${t}: ${r.message}`),null}}function we(t,e,r){let s=Gt(t);s===null&&(s={}),s.mcpServers||(s.mcpServers={});let i=s.mcpServers;i[e]={command:r.command,args:r.args??[],...r.env?{env:r.env}:{}},ks(t,s)}function xs(t,e){let r=Gt(t);if(r===null)return;let s=r.mcpServers;s&&e in s&&(Reflect.deleteProperty(s,e),ks(t,r))}function Ss(t,e){return(0,it.join)(t,{skill:"skills",agent:"agents",command:"commands",hook:"hooks",plugin:"plugins"}[e]||"skills")}function pr(t,e,r,s){let i=(0,it.join)(s,e);Yo(r,i)}function fr(t,e){let r=(0,it.join)(e,t);bs(r)}async function Jn(t){if(!(0,E.existsSync)(t))return[];let{readdirSync:e}=await import("fs");return e(t,{withFileTypes:!0}).filter(r=>r.isDirectory()||r.isSymbolicLink()).map(r=>r.name)}var E,it,dr=$(()=>{"use strict";E=require("fs"),it=require("path");ft();le()});function Qo(t,e){return mr(t),`<!-- FORGE:START id="${t}" version="${e}" -->`}function ea(t){return mr(t),`<!-- FORGE:END id="${t}" -->`}function mr(t){if(!Xo.test(t)||t.includes("-->")||t.includes(`
105
+ `))throw new Error(`[forge] invalid forge block id "${t}" \u2014 marker injection refused`)}function Yn(t){mr(t);let e=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`<!-- FORGE:START id="${e}" version="[^"]*" -->\\r?\\n[\\s\\S]*?<!-- FORGE:END id="${e}" -->\\r?\\n?`)}function ta(t){let e=(0,Zn.dirname)(t);(0,z.existsSync)(e)||(0,z.mkdirSync)(e,{recursive:!0})}function gr(t,e,r,s){mr(e);let i=s.replace(/\r\n/g,`
106
+ `).replace(/\n+$/,"")+`
107
+ `,o=`${Qo(e,r)}
108
+ ${i}${ea(e)}
109
+ `;if(!(0,z.existsSync)(t))return ta(t),(0,z.writeFileSync)(t,o),"created";let n=(0,z.readFileSync)(t,"utf-8"),a=Yn(e);if(a.test(n)){let D=n.replace(a,o);return D===n?"unchanged":((0,z.writeFileSync)(t,D),"updated")}let u=n.length>0&&!n.endsWith(`
110
+ `)?`
111
+ `:"",l=n.length>0&&!n.endsWith(`
112
+
113
+ `)?`
114
+ `:"";return(0,z.writeFileSync)(t,`${n}${u}${l}${o}`),"updated"}function Xn(t,e,r={}){if(!(0,z.existsSync)(t))return!1;let s=(0,z.readFileSync)(t,"utf-8"),i=Yn(e);if(!i.test(s))return!1;let o=s.replace(i,"").replace(/^\n+/,"").replace(/\n{3,}/g,`
115
+
116
+ `);return o.trim().length===0&&r.deleteIfEmpty!==!1?((0,z.rmSync)(t,{force:!0}),!0):((0,z.writeFileSync)(t,o),!0)}var z,Zn,Xo,_s=$(()=>{"use strict";z=require("fs"),Zn=require("path"),Xo=/^[a-z0-9\-/_.@]+$/i});function w(){return process.env.FORGE_TEST_HOME??(0,Qn.homedir)()}function ei(t,e){for(let r of["SKILL.md","agent.md"])try{let s=(0,ot.join)(t,r);if((0,pe.existsSync)(s)){let i=(0,pe.readFileSync)(s,"utf-8").trim().slice(0,2e3);if(i.length>0)return`${i}
117
+ `}}catch{}return`${e}
118
+ `}function mt(t){let e=t.version?`@${t.version}`:"";return`- ${t.slug}${e}: ${t.description}
119
+ Full instructions: ${t.skillPath}
120
+ `}async function te(t){for(let e of t.skillBases())if((0,pe.existsSync)(e))return Jn(e);return[]}async function re(t,e){return t.skillBases().some(r=>(0,pe.existsSync)((0,ot.join)(r,e)))}function fe(t,e){for(let r of t.skillBases())fr(e,r)}function de(t,e,r){pr("forge",e,r,t.installBase())}function sa(t){return ra.some(e=>(0,pe.existsSync)((0,ot.join)(t,e)))}function gt(t,e){return(0,pe.existsSync)(e)||sa(t)}function ti(t,e,r){Wt((0,ot.dirname)(t)),(0,pe.existsSync)(t)&&((0,pe.readFileSync)(t,"utf-8").includes(`id="${e}"`)||As(t)),(0,pe.writeFileSync)(t,r)}function ht(t,e,r,s){Wt((0,ot.dirname)(t)),gr(t,e,r,s)}function yt(t,e){Xn(t,e,{deleteIfEmpty:!0})}var pe,ot,Qn,ra,Ve=$(()=>{"use strict";pe=require("fs"),ot=require("path"),Qn=require("os");dr();_s();ra=["forge.toml","package.json",".git","AGENTS.md","CLAUDE.md",".cursor","opencode.json",".codex",".windsurf",".dsh"]});function ri(){let t=(0,me.join)(w(),".claude");return{skillBases:()=>[(0,me.join)(t,"skills")],installBase:()=>(0,me.join)(t,"skills")}}function ni(t){return(0,me.join)(t,"CLAUDE.md")}function na(t,e,r){let s=ni(t);gt(t,s)&&ht(s,e,r?.version??"0.0.0",mt({slug:e,version:r?.version??"",description:r?.description??`${e} (installed via Forge)`,skillPath:(0,me.join)(w(),".claude","skills",e)}))}var si,me,Bs,Os=$(()=>{"use strict";si=require("fs"),me=require("path");dr();Ve();Bs={name:"claude-code",displayName:"Claude Code",version:"0.2.0",detect:()=>(0,si.existsSync)((0,me.join)(w(),".claude")),skillDir:t=>(0,me.join)(w(),".claude","skills",t),mcpConfigPath:()=>(0,me.join)(w(),".claude.json"),async install(t,e,r,s){let i=(0,me.join)(w(),".claude");pr("claude-code",t,e,Ss(i,r)),na(process.cwd(),t,s)},async uninstall(t,e){fr(t,(0,me.join)(w(),".claude","skills"));let r=(0,me.join)(w(),".claude","agents",t);bs(r),yt(ni(process.cwd()),t)},async list(){return te(ri())},async isInstalled(t){return re(ri(),t)}}});function oi(t){return(0,ii.join)(t,"AGENTS.md")}function Ct(t,e,r,s){let i=oi(t);gt(t,i)&&ht(i,e,s?.version??"0.0.0",mt({slug:e,version:s?.version??"",description:s?.description??`${e} (installed via Forge)`,skillPath:r}))}function Ft(t,e){yt(oi(t),e)}var ii,hr=$(()=>{"use strict";ii=require("path");Ve()});function $t(){let t=(0,wt.join)(w(),".codex","skills");return{skillBases:()=>[t],installBase:()=>t}}var ai,wt,Ps,js=$(()=>{"use strict";ai=require("fs"),wt=require("path");Ve();hr();Ps={name:"codex",displayName:"Codex",version:"0.2.0",detect:()=>(0,ai.existsSync)((0,wt.join)(w(),".codex")),skillDir:t=>(0,wt.join)($t().installBase(),t),mcpConfigPath:()=>(0,wt.join)(w(),".codex","mcp.json"),async install(t,e,r,s){de($t(),t,e),Ct(process.cwd(),t,(0,wt.join)($t().installBase(),t),s)},async uninstall(t,e){fe($t(),t),Ft(process.cwd(),t)},async list(){return te($t())},async isInstalled(t){return re($t(),t)}}});function ui(){return(0,yr.existsSync)((0,ve.join)(process.cwd(),"opencode.json"))}function vt(){return{skillBases:()=>[(0,ve.join)(process.cwd(),".opencode","skills"),(0,ve.join)(w(),".config","opencode","skills")],installBase:()=>ui()?(0,ve.join)(process.cwd(),".opencode","skills"):(0,ve.join)(w(),".config","opencode","skills")}}var yr,ve,Is,Ts=$(()=>{"use strict";yr=require("fs"),ve=require("path");Ve();hr();Is={name:"opencode",displayName:"OpenCode",version:"0.2.0",detect:()=>ui()||(0,yr.existsSync)((0,ve.join)(w(),".config","opencode","opencode.json")),skillDir:t=>(0,ve.join)(vt().installBase(),t),mcpConfigPath:()=>{let t=(0,ve.join)(process.cwd(),"opencode.json");return(0,yr.existsSync)(t)?t:(0,ve.join)(w(),".config","opencode","opencode.json")},async install(t,e,r,s){de(vt(),t,e),Ct(process.cwd(),t,(0,ve.join)(vt().installBase(),t),s)},async uninstall(t,e){fe(vt(),t),Ft(process.cwd(),t)},async list(){return te(vt())},async isInstalled(t){return re(vt(),t)}}});function Ms(){let t=(0,ie.join)(process.cwd(),".cursor");return(0,at.existsSync)(t)?t:(0,ie.join)(w(),".cursor")}function zt(){let t=Ms();return{skillBases:()=>[(0,ie.join)(process.cwd(),".cursor","skills"),(0,ie.join)(w(),".cursor","skills")],installBase:()=>(0,ie.join)(t,"skills")}}function Rs(t,e){return(0,ie.join)(t,"rules",`${e}.mdc`)}function ia(t,e,r){let s=r?.description??`${t} (installed via Forge)`,i=r?.version??"0.0.0",o=ei(e,`${t}@${i} \u2014 ${s}`);return`---
121
+ description: ${s}
122
+ globs:
123
+ alwaysApply: false
124
+ ---
125
+ <!-- FORGE:START id="${t}" version="${i}" -->
126
+ ${o}<!-- FORGE:END id="${t}" -->
127
+ `}var at,ie,Ls,Ns=$(()=>{"use strict";at=require("fs"),ie=require("path");Ve();Ls={name:"cursor",displayName:"Cursor",version:"0.2.0",detect:()=>(0,at.existsSync)((0,ie.join)(process.cwd(),".cursor"))||(0,at.existsSync)((0,ie.join)(w(),".cursor")),skillDir:t=>(0,ie.join)(zt().installBase(),t),mcpConfigPath:()=>(0,ie.join)(Ms(),"mcp.json"),async install(t,e,r,s){de(zt(),t,e),ti(Rs(Ms(),t),t,ia(t,e,s))},async uninstall(t,e){fe(zt(),t),(0,at.rmSync)(Rs((0,ie.join)(process.cwd(),".cursor"),t),{force:!0}),(0,at.rmSync)(Rs((0,ie.join)(w(),".cursor"),t),{force:!0})},async list(){return te(zt())},async isInstalled(t){return re(zt(),t)}}});function Vs(){return(0,Hs.existsSync)((0,Ee.join)(process.cwd(),".dsh"))}function Et(){return{skillBases:()=>[(0,Ee.join)(process.cwd(),".dsh","skills"),(0,Ee.join)(w(),".dsh","skills")],installBase:()=>Vs()?(0,Ee.join)(process.cwd(),".dsh","skills"):(0,Ee.join)(w(),".dsh","skills")}}var Hs,Ee,Ws,Gs=$(()=>{"use strict";Hs=require("fs"),Ee=require("path");Ve();hr();Ws={name:"dsh",displayName:"DeepSeek (DSH, community/untested)",version:"0.2.0",detect:()=>(0,Hs.existsSync)((0,Ee.join)(w(),".dsh"))||Vs(),skillDir:t=>(0,Ee.join)(Et().installBase(),t),mcpConfigPath:()=>Vs()?(0,Ee.join)(process.cwd(),".dsh","mcp.json"):(0,Ee.join)(w(),".dsh","mcp.json"),async install(t,e,r,s){de(Et(),t,e),Ct(process.cwd(),t,(0,Ee.join)(Et().installBase(),t),s)},async uninstall(t,e){fe(Et(),t),Ft(process.cwd(),t)},async list(){return te(Et())},async isInstalled(t){return re(Et(),t)}}});function li(){return(0,ut.existsSync)((0,q.join)(process.cwd(),".windsurf"))}function bt(){return{skillBases:()=>[(0,q.join)(process.cwd(),".windsurf","skills"),(0,q.join)(w(),".windsurf","skills")],installBase:()=>li()?(0,q.join)(process.cwd(),".windsurf","skills"):(0,q.join)(w(),".windsurf","skills")}}function oa(){return(0,q.join)(process.cwd(),".windsurfrules")}function aa(t,e,r){let s=(0,q.join)(t,".windsurfrules");gt(t,s)&&ht(s,e,r?.version??"0.0.0",mt({slug:e,version:r?.version??"",description:r?.description??`${e} (installed via Forge)`,skillPath:(0,q.join)(bt().installBase(),e)}))}var ut,q,zs,qs=$(()=>{"use strict";ut=require("fs"),q=require("path");Ve();zs={name:"windsurf",displayName:"Windsurf",version:"0.2.0",detect:()=>(0,ut.existsSync)((0,q.join)(process.cwd(),".windsurf"))||(0,ut.existsSync)((0,q.join)(w(),".windsurf"))||(0,ut.existsSync)((0,q.join)(w(),".codeium","windsurf")),skillDir:t=>(0,q.join)(bt().installBase(),t),mcpConfigPath:()=>li()?(0,q.join)(process.cwd(),".windsurf","mcp_config.json"):(0,q.join)(w(),".codeium","windsurf","mcp_config.json"),async install(t,e,r,s){de(bt(),t,e),aa(process.cwd(),t,s)},async uninstall(t,e){fe(bt(),t),yt(oa(),t),(0,ut.rmSync)((0,q.join)(process.cwd(),".windsurf","rules",`${t}.md`),{force:!0})},async list(){return te(bt())},async isInstalled(t){return re(bt(),t)}}});function Cr(){let t=(0,Fr.join)(process.cwd(),".forge","packages");return{skillBases:()=>[t],installBase:()=>t}}var Fr,qt,Us=$(()=>{"use strict";Fr=require("path");Ve();qt={name:"generic",displayName:"Generic (.forge)",detect:()=>!0,skillDir:t=>(0,Fr.join)(process.cwd(),".forge","packages",t),mcpConfigPath:()=>(0,Fr.join)(process.cwd(),".forge","mcp.json"),async install(t,e,r,s){de(Cr(),t,e)},async uninstall(t,e){fe(Cr(),t)},async list(){return te(Cr())},async isInstalled(t){return re(Cr(),t)}}});function se(){let t=W.filter(e=>e.name==="generic"?!1:e.detect());return t.length===0?[qt]:[...t,qt]}var W,He=$(()=>{"use strict";dr();Os();js();Ts();Ns();Gs();qs();Us();Os();js();Ts();Ns();Gs();qs();Us();W=[Bs,Ps,Is,Ls,Ws,zs,qt]});function ne(t){let e=(0,wr.join)((0,wr.resolve)(t),"forge.toml");return(0,$r.existsSync)(e)?e:null}function he(t){let e;try{e=(0,$r.readFileSync)(t,"utf-8")}catch(c){throw new Error(`Cannot read ${t}: ${c.message}`,{cause:c})}let r;try{r=Le(e)}catch(c){throw new Error(`${t}: invalid TOML \u2014 ${c.message}`,{cause:c})}if(r.package&&!r.dependencies&&!r.project)throw new Error(`${t} looks like a package manifest ([package]), not a project file. Use 'forge add <pkg>' or create a project forge.toml with [dependencies].`);let s=r.dependencies??{};if(typeof s!="object"||Array.isArray(s))throw new Error(`${t}: [dependencies] must be a table`);let i={};for(let[c,m]of Object.entries(s)){if(typeof m!="string")throw new Error(`${t}: dependency "${c}" must be a version string, got ${typeof m}`);i[c]=m}let o=r.forge,n=r.project,a;if(r.agents!==void 0){if(typeof r.agents!="object"||Array.isArray(r.agents))throw new Error(`${t}: [agents] must be a table of roles`);a={};for(let[c,m]of Object.entries(r.agents)){if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`${t}: [agents.${c}] must be a table`);let f=m;if(f.model!==void 0&&typeof f.model!="string")throw new Error(`${t}: [agents.${c}].model must be a string`);if(f.system_prompt!==void 0&&typeof f.system_prompt!="string")throw new Error(`${t}: [agents.${c}].system_prompt must be a string`);a[c]={...typeof f.model=="string"?{model:f.model}:{},...typeof f.system_prompt=="string"?{system_prompt:f.system_prompt}:{}}}}let u;if(r.skills!==void 0){if(typeof r.skills!="object"||Array.isArray(r.skills))throw new Error(`${t}: [skills] must be a table`);u={};for(let[c,m]of Object.entries(r.skills))if(typeof m=="string")u[c]={version:m};else if(typeof m=="object"&&m!==null&&!Array.isArray(m)){let f=m,y={};if(f.version!==void 0){if(typeof f.version!="string")throw new Error(`${t}: [skills.${c}].version must be a string`);y.version=f.version}if(f.source!==void 0){if(typeof f.source!="string")throw new Error(`${t}: [skills.${c}].source must be a string`);y.source=f.source}if(f.ref!==void 0){if(typeof f.ref!="string")throw new Error(`${t}: [skills.${c}].ref must be a string`);y.ref=f.ref}u[c]=y}else throw new Error(`${t}: [skills.${c}] must be a version string or { version, source, ref }`)}let l,D=r.mcp;if(D!==void 0){if(typeof D!="object"||Array.isArray(D))throw new Error(`${t}: [mcp] must be a table`);let c={},m=D.servers??{};if(typeof m!="object"||Array.isArray(m))throw new Error(`${t}: [mcp.servers] must be a table`);for(let[f,y]of Object.entries(m)){if(typeof y!="object"||y===null||Array.isArray(y))throw new Error(`${t}: [mcp.servers.${f}] must be a table`);let g=y;if(typeof g.command!="string"||g.command.length===0)throw new Error(`${t}: [mcp.servers.${f}].command is required`);if(g.args!==void 0&&(!Array.isArray(g.args)||!g.args.every(C=>typeof C=="string")))throw new Error(`${t}: [mcp.servers.${f}].args must be string[]`);if(g.env!==void 0&&(typeof g.env!="object"||g.env===null||Array.isArray(g.env)))throw new Error(`${t}: [mcp.servers.${f}].env must be a table`);c[f]={command:g.command,...Array.isArray(g.args)?{args:g.args}:{},...typeof g.env=="object"&&g.env!==null?{env:g.env}:{}}}l={servers:c}}let p;if(r.permissions!==void 0){if(typeof r.permissions!="object"||Array.isArray(r.permissions))throw new Error(`${t}: [permissions] must be a table`);let c=r.permissions;for(let m of["allowed_paths","denied_paths"]){let f=c[m];if(f!==void 0&&(!Array.isArray(f)||!f.every(y=>typeof y=="string")))throw new Error(`${t}: [permissions].${m} must be string[]`)}if(c.allow_network!==void 0&&typeof c.allow_network!="boolean")throw new Error(`${t}: [permissions].allow_network must be a boolean`);p={...Array.isArray(c.allowed_paths)?{allowed_paths:c.allowed_paths}:{},...Array.isArray(c.denied_paths)?{denied_paths:c.denied_paths}:{},...typeof c.allow_network=="boolean"?{allow_network:c.allow_network}:{}}}return{project:n,dependencies:i,forge:o,agents:a,skills:u,mcp:l,permissions:p,package:r.package}}function Er(t){let e=[];for(let[r,s]of Object.entries(t.dependencies))vr.test(r)||e.push(`Invalid dependency name "${r}" \u2014 expected scope/name (e.g. anthropics/plan)`),!s||typeof s!="string"?e.push(`Invalid range for "${r}": ${String(s)}`):sr(s)||e.push(`Invalid semver range for "${r}": "${s}"`);if(t.forge?.harnesses!==void 0&&!Array.isArray(t.forge.harnesses)&&e.push("[forge].harnesses must be an array"),t.skills)for(let[r,s]of Object.entries(t.skills))s.version&&!s.source&&!sr(s.version)&&e.push(`Invalid semver range for skill "${r}": "${s.version}"`),s.source!==void 0&&s.source.length===0&&e.push(`Empty source for skill "${r}"`);if(t.mcp?.servers)for(let[r,s]of Object.entries(t.mcp.servers))s.command||e.push(`[mcp.servers.${r}].command is required`);return e}var $r,wr,vr,We=$(()=>{"use strict";$r=require("fs"),wr=require("path");Nt();Tt();vr=/^[a-z0-9-]+\/[a-z0-9-]+$/});function Ye(t,e,r,s,i="registry"){return{name:t,version:e,type:r,...s.tarball?{tarball:s.tarball}:{},...s.sha256?{sha256:s.sha256}:{},source:i}}function Di(t=process.cwd()){return(0,br.join)((0,br.resolve)(t),"forge.lock")}function la(t){let e={name:String(t.name),version:String(t.version),type:String(t.type??"skill")};return typeof t.tarball=="string"&&t.tarball.length>0&&(e.tarball=t.tarball),typeof t.sha256=="string"&&t.sha256.length>0&&(e.sha256=t.sha256),typeof t.source=="string"&&t.source.length>0&&(e.source=t.source),e}function kr(t=process.cwd()){let e=Di(t);if(!(0,At.existsSync)(e))return null;try{let r=(0,At.readFileSync)(e,"utf-8"),i=Le(r).packages;return Array.isArray(i)?{packages:i.map(la)}:null}catch{return null}}function kt(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function xt(t,e=process.cwd()){let r=Di(e),s=[...t].sort((o,n)=>o.name.localeCompare(n.name)),i=["# Generated by Forge \u2014 do not edit manually",""];for(let o of s)i.push("[[packages]]"),i.push(`name = "${kt(o.name)}"`),i.push(`version = "${kt(o.version)}"`),i.push(`type = "${kt(o.type)}"`),o.tarball&&i.push(`tarball = "${kt(o.tarball)}"`),o.sha256&&i.push(`sha256 = "${kt(o.sha256)}"`),o.source&&i.push(`source = "${kt(o.source)}"`),i.push("");(0,At.writeFileSync)(r,i.join(`
128
+ `))}async function pi(t,e={}){let r=[];for(let s of t.packages){let i;try{i=await ce(s.name)}catch(l){r.push({name:s.name,kind:"yanked",message:`${s.name}: registry read failed (${l.message}) \u2014 refusing frozen install`});continue}let o=i.versions[s.version];if(!o){r.push({name:s.name,kind:"yanked",message:`${s.name}@${s.version} is yanked (version missing from registry) \u2014 refusing frozen install`});continue}let n=s.sha256??"",a=o.sha256??"",u=n.startsWith("placeholder")||n==="";if(u&&!e.allowMock){r.push({name:s.name,kind:"unverified",message:`${s.name}@${s.version} has no pinned integrity hash \u2014 refusing frozen install (re-run without --frozen, or pass --mock to allow mock content)`});continue}!u&&a!==""&&n!==a&&r.push({name:s.name,kind:"hash-mismatch",message:`${s.name}@${s.version} integrity mismatch: lock=${n.slice(0,12)}\u2026 registry=${a.slice(0,12)}\u2026 \u2014 refusing frozen install`})}return r}var At,br,Ar=$(()=>{"use strict";At=require("fs"),br=require("path");Nt();Ne()});function fi(t,e=[]){let r;try{r=(0,Xe.readdirSync)(t,{withFileTypes:!0})}catch{return e}for(let s of r){if(s.name.startsWith(".forge-"))continue;let i=(0,_e.join)(t,s.name);if(s.isDirectory())pa.has(s.name)||fi(i,e);else if(s.isFile())try{(0,Xe.statSync)(i).size<=Da&&e.push(i)}catch{}}return e}function fa(t){let e=t.trim();return e.length>120?`${e.slice(0,120)}\u2026`:e}function J(t,e={}){let r=[];if(!(0,Xe.existsSync)(t))return r;let s=fi(t).sort();for(let i of s){let o=(0,_e.relative)(t,i).replace(/\\/g,"/"),n=(0,_e.extname)(i).toLowerCase(),a;try{a=(0,Xe.readFileSync)(i,"utf-8")}catch{continue}if(a.indexOf("\0")!==-1)continue;let u=a.split(`
129
+ `);for(let l of ca)if(!(l.exts.length>0&&!l.exts.includes(n)&&(0,_e.basename)(i)!=="Dockerfile")){for(let D=0;D<u.length;D++)if(l.pattern.lastIndex=0,l.pattern.test(u[D])){r.push({rule:l.id,family:l.family,severity:l.severity,file:o,line:D+1,match:fa(u[D]),message:l.message});break}}}return r.push(...ma(t,s,e.permissions)),r.sort((i,o)=>i.file.localeCompare(o.file)||i.line-o.line||i.rule.localeCompare(o.rule)),r}function da(t){let e="FORGEGLOBSTAR",r=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,e).replace(/\*/g,"[^/]*").split(e).join(".*");return new RegExp(`(^|/)${r}$`,"i")}function ma(t,e,r){let s=r?.denied_paths??[];if(s.length===0)return[];let i=s.map(da),o=[];for(let n of e){let a=(0,_e.relative)(t,n).replace(/\\/g,"/"),u=(0,_e.basename)(n);i.some(l=>l.test(a)||l.test(u))&&o.push({rule:"denied-path-content",family:"perm-violation",severity:"high",file:a,line:0,match:a,message:`package ships content matching project denied_paths (${a})`})}return o}function St(t){let e={high:0,medium:0,low:0};for(let r of t)e[r.severity]++;return e}var Xe,_e,xr,ca,Da,pa,Qe=$(()=>{"use strict";Xe=require("fs"),_e=require("path"),xr=[".md",".mdc",".txt",".json",".yaml",".yml",".toml"],ca=[{id:"rm-rf-root",family:"shell-danger",severity:"high",pattern:/\brm\s+(-[a-z]*r[a-z]*f|--recursive\s+--force)\s+\/( |$)/,message:"recursive delete rooted at /",exts:[]},{id:"curl-pipe-shell",family:"shell-danger",severity:"high",pattern:/\bcurl\b[^\n|]*\|\s*(bash|sh)(\s|$)/,message:"curl piped into a shell (remote code execution)",exts:[]},{id:"wget-pipe-shell",family:"shell-danger",severity:"high",pattern:/\bwget\b[^\n|]*\|\s*(bash|sh)(\s|$)/,message:"wget piped into a shell (remote code execution)",exts:[]},{id:"fork-bomb",family:"shell-danger",severity:"high",pattern:/:\(\)\s*\{\s*:\s*\|\s*:\s*&?\s*\}\s*;?/,message:"shell fork bomb",exts:[]},{id:"disk-wipe",family:"shell-danger",severity:"high",pattern:/\b(mkfs|dd\s+[^\n]*of=\/dev\/)/,message:"disk wipe / raw device write",exts:[]},{id:"chmod-777-root",family:"shell-danger",severity:"high",pattern:/\bchmod\s+(-R\s+)?777\s+\//,message:"chmod 777 on a system path",exts:[]},{id:"reverse-shell",family:"shell-danger",severity:"high",pattern:/\bnc(\.exe)?\s+[^\n]*-e\s+\S|bash\s+-i\s+>&\s*\/dev\/tcp\//,message:"reverse shell",exts:[]},{id:"ssh-key-theft",family:"shell-danger",severity:"high",pattern:/\b(cat|type|Get-Content)\s+[^\n]*(id_rsa|id_ed25519|\.ssh\/)/,message:"reads private SSH keys",exts:[]},{id:"powershell-encoded",family:"shell-danger",severity:"high",pattern:/powershell[^\n]*-(e(nc(odedcommand)?)?)\b/i,message:"encoded PowerShell payload",exts:[]},{id:"sudo-curl",family:"shell-danger",severity:"medium",pattern:/\bsudo\s+(curl|wget)\b/,message:"privileged download",exts:[]},{id:"env-exfil-curl",family:"shell-danger",severity:"medium",pattern:/\bcurl\b[^\n]*\$(?:\{(?:AWS_|GITHUB_|OPENAI_|ANTHROPIC_|API_KEY|TOKEN|SECRET))/,message:"curl sends a secret-looking env var",exts:[]},{id:"ignore-instructions",family:"prompt-inject",severity:"high",pattern:/\b(ignore|disregard)\s+(all\s+)?(previous|prior|above)\s+instructions\b/i,message:"instruction override (prompt injection)",exts:xr},{id:"system-role-hijack",family:"prompt-inject",severity:"high",pattern:/you are now (a|an|the)\b.{0,80}?(assistant|agent|system|root|admin)/i,message:"role hijack (prompt injection)",exts:xr},{id:"send-secrets-http",family:"prompt-inject",severity:"high",pattern:/\b(send|post|upload|exfiltrat\w*)\b[^\n]{0,120}?(api[\s_-]?key|secret|token|password|private[\s_-]?key)[^\n]{0,80}?\bhttps?:\/\//i,message:"instructs secret exfiltration over http",exts:xr},{id:"embedded-aws-key",family:"prompt-inject",severity:"medium",pattern:/\bAKIA[0-9A-Z]{16}\b/,message:"embedded AWS access key",exts:[]},{id:"embedded-github-token",family:"prompt-inject",severity:"medium",pattern:/\bghp_[a-zA-Z0-9]{20,}\b/,message:"embedded GitHub token",exts:[]},{id:"embedded-private-key",family:"prompt-inject",severity:"medium",pattern:/-----BEGIN (RSA |OPENSSH |EC |DSA )?PRIVATE KEY-----/,message:"embedded private key",exts:[]},{id:"read-env-file",family:"prompt-inject",severity:"medium",pattern:/\b(cat|type|Get-Content|read)\s+[^\n]*\.env\b/i,message:"reads .env secrets file",exts:xr}],Da=512*1024,pa=new Set(["node_modules",".git",".hg",".svn","__pycache__","dist","build",".cache"])});var di={};jt(di,{installExternal:()=>ga,storeExternal:()=>_t});function _t(t){let e=U(v(t.name),t.version);try{return N(),$e(t.dir,e),e}finally{t.cleanup()}}async function ga(t,e={}){console.log(`[forge] resolving external source ${t.source}...`);let r;try{r=Ze(t)}catch(u){console.error(u.message),process.exitCode=1;return}let s=v(r.name);if(console.log(`[forge] found ${r.name}@${r.version} [${r.type}] \u2014 ${r.description}`),console.log(`[forge] source: ${r.source} (external \u2014 no registry pin)`),e.dryRun){console.log(`[forge] (dry-run) would install to ~/.forge/packages/${s}@${r.version}/`),r.cleanup();return}if(!e.skipScan){let u;try{let c=ne(process.cwd());c&&(u=he(c).permissions)}catch{}let l=J(r.dir,{permissions:u}),D=l.filter(c=>c.severity==="high"),p=l.filter(c=>c.severity==="medium");for(let c of p.slice(0,10))console.warn(`[forge] scan warn [${c.rule}] ${c.file}${c.line>0?`:${c.line}`:""} \u2014 ${c.message}`);if(D.length>0){console.error(`[forge] \u2717 security scan FAILED for ${r.name}: ${D.length} high-severity finding(s)`);for(let c of D.slice(0,10))console.error(`[forge] [high] [${c.rule}] ${c.file}${c.line>0?`:${c.line}`:""} \u2014 ${c.message}`);console.error("[forge] Refusing to install. Re-run with --skip-scan only if you trust this source."),r.cleanup(),process.exitCode=1;return}console.log(`[forge] scan clean (${l.length} finding(s), 0 high)`)}let i=_t(r);console.log(`[forge] package content ready: ${i}`);let o=se();console.log(`[forge] detected harnesses: ${o.map(u=>`${u.displayName} (${u.name})`).join(", ")}`);let n=0;for(let u of o)try{await u.install(s,i,r.type,{version:r.version,description:r.description}),console.log(` \u2713 ${u.displayName} \u2192 ${u.skillDir(s)}`)}catch(l){console.warn(` \u2717 ${u.displayName} failed: ${l.message}`),n++}n>0?(console.log(`
130
+ [forge] \u2717 ${n} harness(es) failed \u2014 installed on ${o.length-n}/${o.length}`),process.exitCode=1):console.log(`
131
+ [forge] \u2713 installed ${r.name}@${r.version} on ${o.length} harness(es)`),N();let a=R();a[r.name]={pkg:r.name,version:r.version,slug:s,type:r.type,adapters:o.map(u=>u.name),installedAt:new Date().toISOString(),source:r.source},Q(a)}var Sr=$(()=>{"use strict";dt();ft();le();He();Qe();We()});function Js(t,e){let r=0;for(let[s,i]of Object.entries(e))for(let o of t)try{let n=o.mcpConfigPath();n&&(we(n,s,{command:i.command,args:i.args,env:i.env}),r++)}catch(n){console.warn(` ! MCP ${s} \u2192 ${o.displayName} failed: ${n.message}`)}return r}function ha(t){if(t&&t.length>0){let e=W.filter(r=>t.includes(r.name));if(e.length>0)return e}return se()}async function ya(t,e,r){let s=e.source??"registry";if(s==="registry"){let{detail:n,version:a,versionMeta:u}=await K(t,e.version??"latest"),l=await ee(t,a,n,u,{allowMock:r.mock});if(!r.skipScan){let D=J(l).filter(p=>p.severity==="high");D.length>0&&console.warn(`[forge] scan: ${t} has ${D.length} high finding(s) (registry package \u2014 warning only)`)}return{name:t,version:a,type:n.type,description:n.description,srcDir:l,lock:Ye(t,a,n.type,u)}}let i=Je(e.ref?`${s}#${e.ref}`:s),o=Ze(i);try{if(!r.skipScan){let a=J(o.dir).filter(u=>u.severity==="high");if(a.length>0)throw new Error(`[forge] security scan FAILED for ${t} (${a.length} high): ${a[0].rule} ${a[0].file} \u2014 refusing sync`)}e.version&&o.version!==e.version&&console.warn(`[forge] warn: ${t} resolved ${o.version}, forge.toml pins ${e.version} (external sources pin via ref)`);let n=_t(o);return{name:t,version:o.version,type:o.type,description:o.description,srcDir:n,lock:Ye(t,o.version,o.type,{},o.source)}}catch(n){try{o.cleanup()}catch{}throw n}}async function Br(t={}){let e=(0,_r.resolve)(t.cwd??process.cwd()),r=ne(e);r||(console.error(`[forge] forge.toml not found in ${e}`),process.exit(1));let s;try{s=he(r)}catch(y){console.error(`[forge] ${y.message}`),process.exit(1)}let i=Er(s);if(i.length>0){for(let y of i)console.error(`[forge] ${y}`);process.exit(1)}let o=[...Object.entries(s.dependencies).map(([y,g])=>({name:y,ref:{version:g}})),...Object.entries(s.skills??{}).map(([y,g])=>({name:y,ref:g}))];if(o.length===0&&!s.mcp?.servers&&!s.agents){console.log(`[forge] nothing to sync in ${r}`);return}let n=ha(s.forge?.harnesses);console.log(`[forge] syncing ${o.length} skill(s) to ${n.map(y=>y.displayName).join(", ")}...`);let a=Date.now(),u=[],l=0;for(let{name:y,ref:g}of o)try{let C=await ya(y,g,t);for(let Ce of n)await Ce.install(v(C.name),C.srcDir,C.type,{version:C.version,description:C.description});N();let O=R();O[C.name]={pkg:C.name,version:C.version,slug:v(C.name),type:C.type,adapters:n.map(Ce=>Ce.name),installedAt:new Date().toISOString(),...C.lock.source!=="registry"?{source:C.lock.source}:{}},Q(O),u.push(C.lock),l++,console.log(` \u2713 ${C.name}@${C.version}`)}catch(C){console.error(` \u2717 ${y} failed: ${C.message}`)}let D=s.mcp?.servers??{},p=Js(n,D);Object.keys(D).length>0&&console.log(`[forge] \u2713 ${Object.keys(D).length} MCP server(s) injected (${p} config writes)`);let c=s.agents??{},m=Object.keys(c);if(m.length>0){let y=m.map(g=>{let C=c[g];return`- ${g}${C.model?` (model: ${C.model})`:""}${C.system_prompt?`
132
+ ${C.system_prompt}`:""}`}).join(`
133
+ `);gr((0,_r.join)(e,"AGENTS.md"),"forge/team-roles","1",`# Team agent roles (from forge.toml)
134
+
135
+ ${y}
136
+ `),console.log(`[forge] \u2713 ${m.length} agent role(s) synced to AGENTS.md`)}u.sort((y,g)=>y.name.localeCompare(g.name)),xt(u,e);let f=((Date.now()-a)/1e3).toFixed(1);console.log(`
137
+ [forge] \u2713 synced ${l}/${o.length} in ${f}s \u2014 every editor now shares the same context`)}var _r,Or=$(()=>{"use strict";_r=require("path");Ne();nt();le();He();We();Ar();dt();Sr();Qe();_s()});var Qs=je((DD,vi)=>{"use strict";var Xs={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},$a={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},wa={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?Xs.up():"");return t&&(e+=Xs.left),e}};vi.exports={cursor:Xs,scroll:$a,erase:wa,beep:"\x07"}});var Tr=je((pD,en)=>{var Ir=process||{},Ei=Ir.argv||[],jr=Ir.env||{},va=!(jr.NO_COLOR||Ei.includes("--no-color"))&&(!!jr.FORCE_COLOR||Ei.includes("--color")||Ir.platform==="win32"||(Ir.stdout||{}).isTTY&&jr.TERM!=="dumb"||!!jr.CI),Ea=(t,e,r=t)=>s=>{let i=""+s,o=i.indexOf(e,t.length);return~o?t+ba(i,e,r,o)+e:t+i+e},ba=(t,e,r,s)=>{let i="",o=0;do i+=t.substring(o,s)+r,o=s+e.length,s=t.indexOf(e,o);while(~s);return i+t.substring(o)},bi=(t=va)=>{let e=t?Ea:()=>String;return{isColorSupported:t,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")}};en.exports=bi();en.exports.createColors=bi});function ka({onlyFirst:t=!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,t?void 0:"g")}function Ti(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Aa,"")}function Ri(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function Ut(t,e={}){if(typeof t!="string"||t.length===0||(e={ambiguousIsNarrow:!0,...e},t=Ti(t),t.length===0))return 0;t=t.replace(Ba()," ");let r=e.ambiguousIsNarrow?1:2,s=0;for(let i of t){let o=i.codePointAt(0);if(!(o<=31||o>=127&&o<=159||o>=768&&o<=879))switch(Sa.eastAsianWidth(i)){case"F":case"W":s+=2;break;case"A":s+=r;break;default:s+=1}}return s}function ja(){let t=new Map;for(let[e,r]of Object.entries(P)){for(let[s,i]of Object.entries(r))P[s]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[s]=P[s],t.set(i[0],i[1]);Object.defineProperty(P,e,{value:r,enumerable:!1})}return Object.defineProperty(P,"codes",{value:t,enumerable:!1}),P.color.close="\x1B[39m",P.bgColor.close="\x1B[49m",P.color.ansi=ki(),P.color.ansi256=Ai(),P.color.ansi16m=xi(),P.bgColor.ansi=ki(tn),P.bgColor.ansi256=Ai(tn),P.bgColor.ansi16m=xi(tn),Object.defineProperties(P,{rgbToAnsi256:{value:(e,r,s)=>e===r&&r===s?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(s/255*5),enumerable:!1},hexToRgb:{value:e=>{let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!r)return[0,0,0];let[s]=r;s.length===3&&(s=[...s].map(o=>o+o).join(""));let i=Number.parseInt(s,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:e=>P.rgbToAnsi256(...P.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:e=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let r,s,i;if(e>=232)r=((e-232)*10+8)/255,s=r,i=r;else{e-=16;let a=e%36;r=Math.floor(e/36)/5,s=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,s,i)*2;if(o===0)return 30;let n=30+(Math.round(i)<<2|Math.round(s)<<1|Math.round(r));return o===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(e,r,s)=>P.ansi256ToAnsi(P.rgbToAnsi256(e,r,s)),enumerable:!1},hexToAnsi:{value:e=>P.ansi256ToAnsi(P.hexToAnsi256(e)),enumerable:!1}}),P}function Bi(t,e,r){return String(t).normalize().replace(/\r\n/g,`
138
+ `).split(`
139
+ `).map(s=>Na(s,e,r)).join(`
140
+ `)}function un(t,e){if(typeof t=="string")return Mr.aliases.get(t)===e;for(let r of t)if(r!==void 0&&un(r,e))return!0;return!1}function Ha(t,e){if(t===e)return;let r=t.split(`
141
+ `),s=e.split(`
142
+ `),i=[];for(let o=0;o<Math.max(r.length,s.length);o++)r[o]!==s[o]&&i.push(o);return i}function Ge(t){return t===nn}function Rr(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function Vi({input:t=Bt.stdin,output:e=Bt.stdout,overwrite:r=!0,hideCursor:s=!0}={}){let i=et.createInterface({input:t,output:e,prompt:"",tabSize:1});et.emitKeypressEvents(t,i),t.isTTY&&t.setRawMode(!0);let o=(n,{name:a,sequence:u})=>{let l=String(n);if(un([l,a,u],"cancel")){s&&e.write(Z.cursor.show),process.exit(0);return}if(!r)return;et.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{et.clearLine(e,1,()=>{t.once("keypress",o)})})};return s&&e.write(Z.cursor.hide),t.once("keypress",o),()=>{t.off("keypress",o),s&&e.write(Z.cursor.show),t.isTTY&&!Wa&&t.setRawMode(!1),i.terminal=!1,i.close()}}var Z,Bt,et,sn,ji,Ii,Aa,Mi,xa,Sa,_a,Ba,tn,ki,Ai,xi,P,Oa,Pa,Ia,Vr,Ta,on,Li,Ra,Ni,an,Si,_i,Ma,rn,La,Na,Va,Mr,Wa,nn,Ga,za,oe,Kt,qa,Ua,Ka,Oi,Hi,Ja,Za,Pi,Lr,Nr,ln=$(()=>{Z=L(Qs(),1),Bt=require("node:process"),et=L(require("node:readline"),1),sn=L(require("node:readline"),1),ji=require("node:stream"),Ii=L(Tr(),1);Aa=ka();Mi={exports:{}};(function(t){var e={};t.exports=e,e.eastAsianWidth=function(s){var i=s.charCodeAt(0),o=s.length==2?s.charCodeAt(1):0,n=i;return 55296<=i&&i<=56319&&56320<=o&&o<=57343&&(i&=1023,o&=1023,n=i<<10|o,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},e.characterLength=function(s){var i=this.eastAsianWidth(s);return i=="F"||i=="W"||i=="A"?2:1};function r(s){return s.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(s){for(var i=r(s),o=0,n=0;n<i.length;n++)o=o+this.characterLength(i[n]);return o},e.slice=function(s,i,o){textLen=e.length(s),i=i||0,o=o||1,i<0&&(i=textLen+i),o<0&&(o=textLen+o);for(var n="",a=0,u=r(s),l=0;l<u.length;l++){var D=u[l],p=e.length(D);if(a>=i-(p==2?1:0))if(a+p<=o)n+=D;else break;a+=p}return n}})(Mi);xa=Mi.exports,Sa=Ri(xa),_a=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},Ba=Ri(_a);tn=10,ki=(t=0)=>e=>`\x1B[${e+t}m`,Ai=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,xi=(t=0)=>(e,r,s)=>`\x1B[${38+t};2;${e};${r};${s}m`,P={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(P.modifier);Oa=Object.keys(P.color),Pa=Object.keys(P.bgColor);[...Oa,...Pa];Ia=ja(),Vr=new Set(["\x1B","\x9B"]),Ta=39,on="\x07",Li="[",Ra="]",Ni="m",an=`${Ra}8;;`,Si=t=>`${Vr.values().next().value}${Li}${t}${Ni}`,_i=t=>`${Vr.values().next().value}${an}${t}${on}`,Ma=t=>t.split(" ").map(e=>Ut(e)),rn=(t,e,r)=>{let s=[...e],i=!1,o=!1,n=Ut(Ti(t[t.length-1]));for(let[a,u]of s.entries()){let l=Ut(u);if(n+l<=r?t[t.length-1]+=u:(t.push(u),n=0),Vr.has(u)&&(i=!0,o=s.slice(a+1).join("").startsWith(an)),i){o?u===on&&(i=!1,o=!1):u===Ni&&(i=!1);continue}n+=l,n===r&&a<s.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},La=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(Ut(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},Na=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let s="",i,o,n=Ma(t),a=[""];for(let[l,D]of t.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=Ut(a[a.length-1]);if(l!==0&&(p>=e&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&n[l]>e){let c=e-p,m=1+Math.floor((n[l]-c-1)/e);Math.floor((n[l]-1)/e)<m&&a.push(""),rn(a,D,e);continue}if(p+n[l]>e&&p>0&&n[l]>0){if(r.wordWrap===!1&&p<e){rn(a,D,e);continue}a.push("")}if(p+n[l]>e&&r.wordWrap===!1){rn(a,D,e);continue}a[a.length-1]+=D}r.trim!==!1&&(a=a.map(l=>La(l)));let u=[...a.join(`
143
+ `)];for(let[l,D]of u.entries()){if(s+=D,Vr.has(D)){let{groups:c}=new RegExp(`(?:\\${Li}(?<code>\\d+)m|\\${an}(?<uri>.*)${on})`).exec(u.slice(l).join(""))||{groups:{}};if(c.code!==void 0){let m=Number.parseFloat(c.code);i=m===Ta?void 0:m}else c.uri!==void 0&&(o=c.uri.length===0?void 0:c.uri)}let p=Ia.codes.get(Number(i));u[l+1]===`
144
+ `?(o&&(s+=_i("")),i&&p&&(s+=Si(p))):D===`
145
+ `&&(i&&p&&(s+=Si(i)),o&&(s+=_i(o)))}return s};Va=["up","down","left","right","space","enter","cancel"],Mr={actions:new Set(Va),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};Wa=globalThis.process.platform.startsWith("win"),nn=Symbol("clack:cancel");Ga=Object.defineProperty,za=(t,e,r)=>e in t?Ga(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,oe=(t,e,r)=>(za(t,typeof e!="symbol"?e+"":e,r),r),Kt=class{constructor(e,r=!0){oe(this,"input"),oe(this,"output"),oe(this,"_abortSignal"),oe(this,"rl"),oe(this,"opts"),oe(this,"_render"),oe(this,"_track",!1),oe(this,"_prevFrame",""),oe(this,"_subscribers",new Map),oe(this,"_cursor",0),oe(this,"state","initial"),oe(this,"error",""),oe(this,"value");let{input:s=Bt.stdin,output:i=Bt.stdout,render:o,signal:n,...a}=e;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=r,this._abortSignal=n,this.input=s,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(e,r){let s=this._subscribers.get(e)??[];s.push(r),this._subscribers.set(e,s)}on(e,r){this.setSubscriber(e,{cb:r})}once(e,r){this.setSubscriber(e,{cb:r,once:!0})}emit(e,...r){let s=this._subscribers.get(e)??[],i=[];for(let o of s)o.cb(...r),o.once&&i.push(()=>s.splice(s.indexOf(o),1));for(let o of i)o()}prompt(){return new Promise((e,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(nn);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let s=new ji.Writable;s._write=(i,o,n)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),n()},this.input.pipe(s),this.rl=sn.default.createInterface({input:this.input,output:s,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),sn.default.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),Rr(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Z.cursor.show),this.output.off("resize",this.render),Rr(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Z.cursor.show),this.output.off("resize",this.render),Rr(this.input,!1),e(nn)})})}onKeypress(e,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&Mr.aliases.has(r.name)&&this.emit("cursor",Mr.aliases.get(r.name)),Mr.actions.has(r.name)&&this.emit("cursor",r.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),e===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),e&&this.emit("key",e.toLowerCase()),r?.name==="return"){if(this.opts.validate){let s=this.opts.validate(this.value);s&&(this.error=s instanceof Error?s.message:s,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}un([e,r?.name,r?.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(`
146
+ `),Rr(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Bi(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
147
+ `).length-1;this.output.write(Z.cursor.move(-999,e*-1))}render(){let e=Bi(this._render(this)??"",process.stdout.columns,{hard:!0});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Z.cursor.hide);else{let r=Ha(this._prevFrame,e);if(this.restoreCursor(),r&&r?.length===1){let s=r[0];this.output.write(Z.cursor.move(0,s)),this.output.write(Z.erase.lines(1));let i=e.split(`
148
+ `);this.output.write(i[s]),this._prevFrame=e,this.output.write(Z.cursor.move(0,i.length-s-1));return}if(r&&r?.length>1){let s=r[0];this.output.write(Z.cursor.move(0,s)),this.output.write(Z.erase.down());let i=e.split(`
149
+ `).slice(s);this.output.write(i.join(`
150
+ `)),this._prevFrame=e;return}this.output.write(Z.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};qa=new WeakMap;Ua=Object.defineProperty,Ka=(t,e,r)=>e in t?Ua(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Oi=(t,e,r)=>(Ka(t,typeof e!="symbol"?e+"":e,r),r),Hi=class extends Kt{constructor(t){super(t,!1),Oi(this,"options"),Oi(this,"cursor",0),this.options=t.options,this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===t.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 t=this.value.length===this.options.length;this.value=t?[]:this.options.map(e=>e.value)}toggleValue(){let t=this.value.includes(this._value);this.value=t?this.value.filter(e=>e!==this._value):[...this.value,this._value]}},Ja=Object.defineProperty,Za=(t,e,r)=>e in t?Ja(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Pi=(t,e,r)=>(Za(t,typeof e!="symbol"?e+"":e,r),r),Lr=class extends Kt{constructor(e){super(e,!1),Pi(this,"options"),Pi(this,"cursor",0),this.options=e.options,this.cursor=this.options.findIndex(({value:r})=>r===e.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",r=>{switch(r){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}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}},Nr=class extends Kt{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;let e=this.value.slice(0,this.cursor),[r,...s]=this.value.slice(this.cursor);return`${e}${Ii.default.inverse(r)}${s.join("")}`}get cursor(){return this._cursor}constructor(e){super(e),this.on("finalize",()=>{this.value||(this.value=e.defaultValue)})}}});function Ya(){return ye.default.platform!=="win32"?ye.default.env.TERM!=="linux":!!ye.default.env.CI||!!ye.default.env.WT_SESSION||!!ye.default.env.TERMINUS_SUBLIME||ye.default.env.ConEmuTask==="{cmd::Cmder}"||ye.default.env.TERM_PROGRAM==="Terminus-Sublime"||ye.default.env.TERM_PROGRAM==="vscode"||ye.default.env.TERM==="xterm-256color"||ye.default.env.TERM==="alacritty"||ye.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ye,d,Hr,cn,T,Xa,Gi,zi,qi,Qa,j,lt,eu,tu,ru,Wi,su,$D,wD,vD,ED,bD,kD,AD,xD,SD,pn,Dn,Ui,Wr,fn,ct,Ki,Be,_D,Gr,Ji=$(()=>{ln();ln();ye=L(require("node:process"),1),d=L(Tr(),1),Hr=L(Qs(),1);cn=Ya(),T=(t,e)=>cn?t:e,Xa=T("\u25C6","*"),Gi=T("\u25A0","x"),zi=T("\u25B2","x"),qi=T("\u25C7","o"),Qa=T("\u250C","T"),j=T("\u2502","|"),lt=T("\u2514","\u2014"),eu=T("\u25CF",">"),tu=T("\u25CB"," "),ru=T("\u25FB","[\u2022]"),Wi=T("\u25FC","[+]"),su=T("\u25FB","[ ]"),$D=T("\u25AA","\u2022"),wD=T("\u2500","-"),vD=T("\u256E","+"),ED=T("\u251C","+"),bD=T("\u256F","+"),kD=T("\u25CF","\u2022"),AD=T("\u25C6","*"),xD=T("\u25B2","!"),SD=T("\u25A0","x"),pn=t=>{switch(t){case"initial":case"active":return d.default.cyan(Xa);case"cancel":return d.default.red(Gi);case"error":return d.default.yellow(zi);case"submit":return d.default.green(qi)}},Dn=t=>{let{cursor:e,options:r,style:s}=t,i=t.maxItems??Number.POSITIVE_INFINITY,o=Math.max(process.stdout.rows-4,0),n=Math.min(o,Math.max(i,5)),a=0;e>=a+n-3?a=Math.max(Math.min(e-n+3,r.length-n),0):e<a+2&&(a=Math.max(e-2,0));let u=n<r.length&&a>0,l=n<r.length&&a+n<r.length;return r.slice(a,a+n).map((D,p,c)=>{let m=p===0&&u,f=p===c.length-1&&l;return m||f?d.default.dim("..."):s(D,p+a===e)})},Ui=t=>new Nr({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){let e=`${d.default.gray(j)}
151
+ ${pn(this.state)} ${t.message}
152
+ `,r=t.placeholder?d.default.inverse(t.placeholder[0])+d.default.dim(t.placeholder.slice(1)):d.default.inverse(d.default.hidden("_")),s=this.value?this.valueWithCursor:r;switch(this.state){case"error":return`${e.trim()}
153
+ ${d.default.yellow(j)} ${s}
154
+ ${d.default.yellow(lt)} ${d.default.yellow(this.error)}
155
+ `;case"submit":return`${e}${d.default.gray(j)} ${d.default.dim(this.value||t.placeholder)}`;case"cancel":return`${e}${d.default.gray(j)} ${d.default.strikethrough(d.default.dim(this.value??""))}${this.value?.trim()?`
156
+ ${d.default.gray(j)}`:""}`;default:return`${e}${d.default.cyan(j)} ${s}
157
+ ${d.default.cyan(lt)}
158
+ `}}}).prompt(),Wr=t=>{let e=(r,s)=>{let i=r.label??String(r.value);switch(s){case"selected":return`${d.default.dim(i)}`;case"active":return`${d.default.green(eu)} ${i} ${r.hint?d.default.dim(`(${r.hint})`):""}`;case"cancelled":return`${d.default.strikethrough(d.default.dim(i))}`;default:return`${d.default.dim(tu)} ${d.default.dim(i)}`}};return new Lr({options:t.options,initialValue:t.initialValue,render(){let r=`${d.default.gray(j)}
159
+ ${pn(this.state)} ${t.message}
160
+ `;switch(this.state){case"submit":return`${r}${d.default.gray(j)} ${e(this.options[this.cursor],"selected")}`;case"cancel":return`${r}${d.default.gray(j)} ${e(this.options[this.cursor],"cancelled")}
161
+ ${d.default.gray(j)}`;default:return`${r}${d.default.cyan(j)} ${Dn({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(s,i)=>e(s,i?"active":"inactive")}).join(`
162
+ ${d.default.cyan(j)} `)}
163
+ ${d.default.cyan(lt)}
164
+ `}}}).prompt()},fn=t=>{let e=(r,s)=>{let i=r.label??String(r.value);return s==="active"?`${d.default.cyan(ru)} ${i} ${r.hint?d.default.dim(`(${r.hint})`):""}`:s==="selected"?`${d.default.green(Wi)} ${d.default.dim(i)} ${r.hint?d.default.dim(`(${r.hint})`):""}`:s==="cancelled"?`${d.default.strikethrough(d.default.dim(i))}`:s==="active-selected"?`${d.default.green(Wi)} ${i} ${r.hint?d.default.dim(`(${r.hint})`):""}`:s==="submitted"?`${d.default.dim(i)}`:`${d.default.dim(su)} ${d.default.dim(i)}`};return new Hi({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(r){if(this.required&&r.length===0)return`Please select at least one option.
165
+ ${d.default.reset(d.default.dim(`Press ${d.default.gray(d.default.bgWhite(d.default.inverse(" space ")))} to select, ${d.default.gray(d.default.bgWhite(d.default.inverse(" enter ")))} to submit`))}`},render(){let r=`${d.default.gray(j)}
166
+ ${pn(this.state)} ${t.message}
167
+ `,s=(i,o)=>{let n=this.value.includes(i.value);return o&&n?e(i,"active-selected"):n?e(i,"selected"):e(i,o?"active":"inactive")};switch(this.state){case"submit":return`${r}${d.default.gray(j)} ${this.options.filter(({value:i})=>this.value.includes(i)).map(i=>e(i,"submitted")).join(d.default.dim(", "))||d.default.dim("none")}`;case"cancel":{let i=this.options.filter(({value:o})=>this.value.includes(o)).map(o=>e(o,"cancelled")).join(d.default.dim(", "));return`${r}${d.default.gray(j)} ${i.trim()?`${i}
168
+ ${d.default.gray(j)}`:""}`}case"error":{let i=this.error.split(`
169
+ `).map((o,n)=>n===0?`${d.default.yellow(lt)} ${d.default.yellow(o)}`:` ${o}`).join(`
170
+ `);return`${r+d.default.yellow(j)} ${Dn({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:s}).join(`
171
+ ${d.default.yellow(j)} `)}
172
+ ${i}
173
+ `}default:return`${r}${d.default.cyan(j)} ${Dn({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:s}).join(`
174
+ ${d.default.cyan(j)} `)}
175
+ ${d.default.cyan(lt)}
176
+ `}}}).prompt()},ct=(t="")=>{process.stdout.write(`${d.default.gray(lt)} ${d.default.red(t)}
177
+
178
+ `)},Ki=(t="")=>{process.stdout.write(`${d.default.gray(Qa)} ${t}
179
+ `)},Be=(t="")=>{process.stdout.write(`${d.default.gray(j)}
180
+ ${d.default.gray(lt)} ${t}
181
+
182
+ `)},_D=`${d.default.gray(j)} `,Gr=({indicator:t="dots"}={})=>{let e=cn?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],r=cn?80:120,s=process.env.CI==="true",i,o,n=!1,a="",u,l=performance.now(),D=h=>{let A=h>1?"Something went wrong":"Canceled";n&&Ce(A,h)},p=()=>D(2),c=()=>D(1),m=()=>{process.on("uncaughtExceptionMonitor",p),process.on("unhandledRejection",p),process.on("SIGINT",c),process.on("SIGTERM",c),process.on("exit",D)},f=()=>{process.removeListener("uncaughtExceptionMonitor",p),process.removeListener("unhandledRejection",p),process.removeListener("SIGINT",c),process.removeListener("SIGTERM",c),process.removeListener("exit",D)},y=()=>{if(u===void 0)return;s&&process.stdout.write(`
183
+ `);let h=u.split(`
184
+ `);process.stdout.write(Hr.cursor.move(-999,h.length-1)),process.stdout.write(Hr.erase.down(h.length))},g=h=>h.replace(/\.+$/,""),C=h=>{let A=(performance.now()-h)/1e3,b=Math.floor(A/60),x=Math.floor(A%60);return b>0?`[${b}m ${x}s]`:`[${x}s]`},O=(h="")=>{n=!0,i=Vi(),a=g(h),l=performance.now(),process.stdout.write(`${d.default.gray(j)}
185
+ `);let A=0,b=0;m(),o=setInterval(()=>{if(s&&a===u)return;y(),u=a;let x=d.default.magenta(e[A]);if(s)process.stdout.write(`${x} ${a}...`);else if(t==="timer")process.stdout.write(`${x} ${a} ${C(l)}`);else{let S=".".repeat(Math.floor(b)).slice(0,3);process.stdout.write(`${x} ${a}${S}`)}A=A+1<e.length?A+1:0,b=b<e.length?b+.125:0},r)},Ce=(h="",A=0)=>{n=!1,clearInterval(o),y();let b=A===0?d.default.green(qi):A===1?d.default.red(Gi):d.default.red(zi);a=g(h??a),t==="timer"?process.stdout.write(`${b} ${a} ${C(l)}
186
+ `):process.stdout.write(`${b} ${a}
187
+ `),f(),i()};return{start:O,stop:Ce,message:(h="")=>{a=g(h??a)}}}});var Zi={};jt(Zi,{runTui:()=>lu});function nu(){return se().map(e=>e.displayName)}function iu(){return[{value:"agent-pr-reviewer",label:"Agent PR Reviewer",hint:"Auto-review PRs"},{value:"agent-security-auditor",label:"Security Auditor",hint:"AST-based scan"},{value:"agent-test-generator",label:"Test Generator",hint:"Write tests"},{value:"cmd-plan",label:"Plan Command",hint:"/plan slash cmd"},{value:"cmd-review",label:"Review Command",hint:"/review slash cmd"}]}function ou(){return[{value:"mcp-filesystem",label:"Filesystem MCP",hint:"Local file access"},{value:"mcp-github",label:"GitHub MCP",hint:"Repos, PRs, issues"},{value:"mcp-postgres",label:"Postgres MCP",hint:"Database queries"},{value:"mcp-memory",label:"Memory MCP",hint:"Persistent memory"},{value:"mcp-sequential-thinking",label:"Sequential Thinking",hint:"Step-by-step"}]}function au(){return[{value:"role-developer",label:"Senior Developer",hint:"Full-stack coding"},{value:"role-reviewer",label:"Code Reviewer",hint:"PR review focus"},{value:"role-architect",label:"System Architect",hint:"Design & patterns"},{value:"role-tester",label:"QA Engineer",hint:"Testing strategy"}]}async function uu(){let t=await Ui({message:"Search packages (or press Enter to browse)",placeholder:"e.g. pdf, mcp, security..."});if(Ge(t)&&(ct("Cancelled."),process.exit(0)),t.trim()){let e=Gr();e.start(`Searching for "${t}"...`);try{let r=await cr(t);if(e.stop(`Found ${r.length} package(s)`),r.length===0){Be(Y.default.yellow("No results. Try a different query."));return}let s=await fn({message:`Select packages to install (${r.length} found)`,options:r.slice(0,15).map(i=>({value:i.name,label:`${i.name}@${i.latest}`,hint:i.description.slice(0,60)})),required:!1});Ge(s)&&(ct("Cancelled."),process.exit(0)),s.length>0&&Be(Y.default.cyan(`Selected: ${s.join(", ")} - run 'forge add <pkg>' to install.`))}catch(r){e.stop("Search failed"),Be(Y.default.red(`Error: ${r.message}`))}}}async function lu(){Ki(Y.default.bold(Y.default.magenta("\u{1F525} Forge - The Homebrew for AI Agents")));let t=nu();t.length>0?console.log(Y.default.dim(` Detected: ${t.join(", ")}`)):console.log(Y.default.dim(" No editor detected - installing for all harnesses."));let e=ne(process.cwd());e&&console.log(Y.default.dim(` Project: ${e}`));let r=await Wr({message:"What would you like to do?",options:[{value:"browse",label:"Browse & Install Packages",hint:"Skills, MCPs, agents"},{value:"search",label:"Search Registry",hint:"Fuzzy search all packages"},{value:"sync",label:"Sync Team Context",hint:"forge sync - all editors"},{value:"init",label:"Create New Package",hint:"forge init <name>"},{value:"audit",label:"Security Audit",hint:"Scan installed packages"}]});switch(Ge(r)&&(ct("Cancelled."),process.exit(0)),r){case"search":await uu();break;case"sync":{let s=Gr();s.start("Syncing team context...");try{await Br({}),s.stop("Sync complete"),Be(Y.default.green("\u2713 Every editor now shares the same context"))}catch(i){s.stop("Sync failed"),Be(Y.default.red(`Error: ${i.message}`))}break}case"init":{let s=await Wr({message:"Package type?",options:[{value:"skill",label:"Skill",hint:"SKILL.md capability"},{value:"mcp",label:"MCP Server",hint:"Model Context Protocol"},{value:"agent",label:"Agent",hint:"Subagent definition"},{value:"command",label:"Command",hint:"Slash command"}]});Ge(s)&&(ct("Cancelled."),process.exit(0)),Be(Y.default.cyan(`Run: forge init <name> --type ${s} --yes`));break}case"audit":Be(Y.default.cyan("Run: forge audit"));break;default:{let s=await Wr({message:"Browse category",options:[{value:"skills",label:"Popular Skills",hint:"Code review, planning, etc."},{value:"mcp",label:"MCP Servers",hint:"Postgres, GitHub, Filesystem"},{value:"roles",label:"Agent Role Templates",hint:"Pre-built team roles"}]});Ge(s)&&(ct("Cancelled."),process.exit(0));let i=[];switch(s){case"skills":i=iu();break;case"mcp":i=ou();break;case"roles":i=au();break}let o=await fn({message:`Select ${s} to install (Space to select, Enter to confirm)`,options:i,required:!1});if(Ge(o)&&(ct("Cancelled."),process.exit(0)),o.length===0){Be(Y.default.yellow("Nothing selected."));return}let n=Gr();n.start(`Installing ${o.length} package(s)...`),n.stop(`${o.length} package(s) selected`),Be(Y.default.cyan(`Run:
188
+ ${o.map(a=>` forge add ${a}`).join(`
189
+ `)}`));break}}}var Y,Yi=$(()=>{"use strict";Ji();Y=L(Tr(),1);He();Ne();Or();We()});var Qi={};jt(Qi,{runTest:()=>cu});async function cu(t,e={}){console.log(`[forge] testing ${t}...
190
+ `);let r,s=Je(t);if(s.kind!=="registry"||s.explicit){let l=Ze(s);try{r=l.dir}catch(D){console.error(`[forge] resolve failed: ${D.message}`),process.exitCode=1;return}}else try{let{detail:l,version:D,versionMeta:p}=await K(t,"latest");r=await ee(t,D,l,p,{allowMock:e.mock})}catch(l){console.error(`[forge] resolve failed: ${l.message}`),process.exitCode=1;return}let i=J(r),o=St(i);if(console.log(`[forge] security scan: ${o.high} high, ${o.medium} medium, ${o.low} low`),o.high>0){console.log("[forge] test FAILED \u2014 high-severity findings block install");for(let l of i.filter(D=>D.severity==="high"))console.log(` [high] ${l.rule}: ${l.file} \u2014 ${l.message}`);process.exitCode=1;return}let n=W.filter(l=>l.name!=="generic"),a=(0,zr.mkdtempSync)((0,Jt.join)((0,Xi.tmpdir)(),"forge-test-")),u=0;try{for(let l of n)try{let D=(0,Jt.resolve)(a,l.name,"skills"),p=(0,Jt.join)(D,"test-pkg");$e(r,p),console.log(` \u2713 ${l.displayName} \u2192 install OK`),u++}catch(D){console.log(` \u2717 ${l.displayName}: ${D.message}`)}}finally{(0,zr.rmSync)(a,{recursive:!0,force:!0})}console.log(`
191
+ [forge] \u2713 ${t}: ${u}/${n.length} harness(es) passed`),u===0&&(process.exitCode=1)}var Jt,zr,Xi,eo=$(()=>{"use strict";Jt=require("path"),zr=require("fs"),Xi=require("os");He();nt();Ne();Qe();dt();ft()});var no={};jt(no,{runPack:()=>pu});async function so(t,e=[]){let{readdirSync:r,statSync:s}=await import("fs"),i;try{i=r(t,{withFileTypes:!0})}catch{return e}for(let o of i){if(Du.has(o.name)||o.name.startsWith(".forge-"))continue;let n=(0,Zt.join)(t,o.name);try{let a=s(n);a.isDirectory()?await so(n,e):a.isFile()&&e.push(n)}catch{}}return e}async function pu(t={}){let e=process.cwd(),r=ne(e);r||(console.error("[forge] pack requires a forge.toml in the current directory"),process.exit(1));let s,i;try{let c=he(r);c.package||(console.error("[forge] pack requires [package] table in forge.toml"),process.exit(1)),s=c.package.name,i=c.package.version,(!s||!i)&&(console.error("[forge] [package] must have name and version"),process.exit(1))}catch(c){console.error(`[forge] forge.toml parse error: ${c.message}`),process.exit(1)}console.log(`[forge] packing ${s}@${i}...`);let o=J(e),n=St(o);if(console.log(`[forge] security: ${n.high} high, ${n.medium} medium, ${n.low} low`),n.high>0){console.log("[forge] pack FAILED \u2014 high-severity findings must be resolved first");for(let c of o.filter(m=>m.severity==="high"))console.log(` [high] ${c.rule}: ${c.file} \u2014 ${c.message}`);process.exit(1)}if(t.check){console.log("[forge] check passed");return}let a=(await so(e)).sort();a.length===0&&(console.error("[forge] pack: no files to pack (empty directory?)"),process.exit(1));let u=(0,Zt.join)(e,"dist");(0,Oe.existsSync)(u)||(0,Oe.mkdirSync)(u,{recursive:!0});let l=s.replace("/","-"),D=(0,Zt.join)(u,`${l}-${i}.tgz`);try{let c=a.map(y=>`"${y}"`).join(`
192
+ `),m=(0,Zt.join)(e,".forge-pack-list.txt");(0,Oe.writeFileSync)(m,c+`
193
+ `),(0,ro.execFileSync)("python",["-c",`
194
+ import tarfile, sys, os
195
+ cwd = os.getcwd()
196
+ with tarfile.open(sys.argv[1], 'w:gz') as tf:
197
+ for line in open('.forge-pack-list.txt'):
198
+ f = line.strip().strip('"')
199
+ if f and os.path.isfile(f):
200
+ tf.add(f, arcname=os.path.relpath(f, cwd))
201
+ `],{stdio:"pipe"});let{unlinkSync:f}=await import("fs");try{f(m)}catch{}}catch(c){console.error(`[forge] tarball creation failed: ${c.message}`),process.exit(1)}let p;try{let c=(0,Oe.readFileSync)(D);p=(0,to.createHash)("sha256").update(c).digest("hex")}catch(c){console.error(`[forge] sha256 failed: ${c.message}`),process.exit(1)}console.log(`[forge] packed ${D}`),console.log(`[forge] sha256: ${p}`),console.log(`[forge] files: ${a.length}`),console.log(`[forge] size: ${(0,Oe.statSync)(D).size} bytes`)}var Oe,Zt,to,ro,Du,io=$(()=>{"use strict";Oe=require("fs"),Zt=require("path"),to=require("crypto"),ro=require("child_process");We();Qe();Du=new Set(["node_modules",".git",".hg",".svn","__pycache__","dist","build",".cache",".forge"])});var ao={};jt(ao,{runVerify:()=>fu});async function fu(t){let e=(0,Ot.resolve)(t);if(!(0,Pt.existsSync)(e)){console.error(`[forge] verify: path not found: ${t}`),process.exitCode=1;return}console.log(`[forge] verifying ${t}...
202
+ `);let r=J(e),s=St(r);if(console.log(`[forge] security scan: ${s.high} high, ${s.medium} medium, ${s.low} low`),s.high>0){console.log(`[forge] \u2717 verify FAILED \u2014 ${s.high} high-severity finding(s)`);for(let a of r.filter(u=>u.severity==="high"))console.log(` [high] ${a.rule}: ${a.file} \u2014 ${a.message}`);process.exitCode=1;return}let i=W.filter(a=>a.name!=="generic"),o=(0,Pt.mkdtempSync)((0,Ot.join)((0,oo.tmpdir)(),"forge-verify-")),n=0;try{for(let a of i)try{let u=(0,Ot.resolve)(o,a.name,"skills"),l=(0,Ot.join)(u,"verify-pkg");$e(e,l),n++}catch(u){console.log(` \u2717 ${a.displayName}: ${u.message}`)}}finally{(0,Pt.rmSync)(o,{recursive:!0,force:!0})}console.log(`[forge] adapter matrix: ${n}/${i.length} harness(es) OK`),n===i.length&&s.high===0?console.log(`
203
+ [forge] \u2713 verify PASSED \u2014 ${t} is ready to publish`):(console.log(`
204
+ [forge] \u2717 verify FAILED`),process.exitCode=1)}var Ot,Pt,oo,uo=$(()=>{"use strict";Ot=require("path"),Pt=require("fs"),oo=require("os");He();Qe();ft()});var xn=L(An(),1),{program:wu,createCommand:vu,createArgument:Eu,createOption:bu,CommanderError:ku,InvalidArgumentError:Au,InvalidOptionArgumentError:xu,Command:Sn,Argument:Su,Option:_u,Help:Bu}=xn.default;var Pe=require("fs"),dn=require("path"),mn=require("os");Ne();dt();nt();le();He();var Se=require("fs"),ge=require("path"),Ks={skill:{forgeToml:t=>{let e=t.split("/")[1]??t;return`[package]
205
+ name = "${t}"
206
+ version = "0.1.0"
207
+ type = "skill"
208
+ description = "A new Forge skill \u2014 describe what it does"
209
+ license = "MIT"
210
+
211
+ [engines]
212
+ claude-code = "*"
213
+
214
+ [skill]
215
+ name = "${e}"
216
+ invocation = "/${e}"
217
+ allowed-tools = ["Read", "Write", "Bash"]
218
+ `},extraFiles:t=>({"SKILL.md":`# ${t}
219
+
220
+ A Forge skill. Replace this with your skill prompt.
221
+
222
+ ## Usage
223
+
224
+ Describe when Muse should use this skill.
225
+
226
+ ## Instructions
227
+
228
+ - Step 1: ...
229
+ - Step 2: ...
230
+ `})},mcp:{forgeToml:t=>`[package]
231
+ name = "${t}"
232
+ version = "0.1.0"
233
+ type = "mcp"
234
+ description = "A new MCP server"
235
+ license = "MIT"
236
+
237
+ [mcp]
238
+ command = "node"
239
+ args = ["./dist/index.js"]
240
+ `,extraFiles:t=>({"src/index.ts":`#!/usr/bin/env node
241
+ // ${t} \u2014 MCP server scaffold
242
+ console.log("MCP server: ${t}");
243
+ `,"mcp.json":JSON.stringify({mcpServers:{[t.split("/")[1]??t]:{command:"node",args:["./dist/index.js"]}}},null,2)+`
244
+ `,"README.md":`# ${t}
245
+
246
+ MCP server scaffold generated by \`forge init\`.
247
+ `})},agent:{forgeToml:t=>`[package]
248
+ name = "${t}"
249
+ version = "0.1.0"
250
+ type = "agent"
251
+ description = "A new Forge agent"
252
+ license = "MIT"
253
+
254
+ [agent]
255
+ model = "claude-sonnet-4"
256
+ tools = ["Read", "Write", "Bash"]
257
+ prompt = "agent.md"
258
+ `,extraFiles:t=>({"agent.md":`# ${t} \u2014 Agent
259
+
260
+ Define your agent's system prompt here.
261
+ `})},command:{forgeToml:t=>{let e=t.split("/")[1]??t;return`[package]
262
+ name = "${t}"
263
+ version = "0.1.0"
264
+ type = "command"
265
+ description = "A new Forge command"
266
+ license = "MIT"
267
+
268
+ [command]
269
+ name = "${e}"
270
+ invocation = "/${e}"
271
+ `},extraFiles:t=>({"command.md":`# ${t} \u2014 Command
272
+
273
+ Define the slash command here.
274
+ `})},hook:{forgeToml:t=>`[package]
275
+ name = "${t}"
276
+ version = "0.1.0"
277
+ type = "hook"
278
+ description = "A new Forge hook"
279
+ license = "MIT"
280
+
281
+ [hook]
282
+ event = "pre-tool"
283
+ entry = "hook.json"
284
+ `,extraFiles:t=>({"hook.json":JSON.stringify({name:t,hooks:{"pre-tool":{entry:"./hook.js"}}},null,2)+`
285
+ `})},plugin:{forgeToml:t=>`[package]
286
+ name = "${t}"
287
+ version = "0.1.0"
288
+ type = "plugin"
289
+ description = "A new Forge plugin"
290
+ license = "MIT"
291
+
292
+ [plugin]
293
+ entry = "index.js"
294
+ hooks = ["pre-tool", "post-tool"]
295
+ `,extraFiles:()=>({"plugin.json":JSON.stringify({name:"plugin",entry:"index.js",hooks:["pre-tool","post-tool"]},null,2)+`
296
+ `,"index.js":`// Forge plugin entry
297
+ module.exports = {};
298
+ `,"README.md":`# Plugin scaffold
299
+ `})}};async function ci(t){let e=(0,ge.resolve)(t.cwd??process.cwd()),r=t.name??(0,ge.basename)(e),s=ua(r),i=t.type??"skill";Ks[i]||(console.error(`[forge] unknown type "${i}" \u2014 choose: ${Object.keys(Ks).join(", ")}`),process.exit(1));let o=t.name?(0,ge.resolve)(e,t.name):e,n=(0,ge.resolve)(e);!o.startsWith(n+ge.sep)&&o!==n&&(console.error(`[forge] invalid path "${t.name}" \u2014 must be within the current directory`),process.exit(1));let a=(0,ge.join)(o,"forge.toml");(0,Se.existsSync)(a)&&!t.force&&(console.error(`[forge] ${a} already exists \u2014 use --force to overwrite`),process.exit(1)),(0,Se.existsSync)(o)||(0,Se.mkdirSync)(o,{recursive:!0});let u=Ks[i],l=u.forgeToml(s);(0,Se.writeFileSync)(a,l);let D=u.extraFiles(s);for(let[c,m]of Object.entries(D)){let f=(0,ge.join)(o,c);(0,Se.mkdirSync)((0,ge.join)(o,...c.split("/").slice(0,-1)),{recursive:!0}),(!(0,Se.existsSync)(f)||t.force)&&(0,Se.writeFileSync)(f,m)}let p=o===e?".":t.name??r;console.log(`[forge] \u2713 created ${p}/forge.toml [${i}]`),Object.keys(D).length&&console.log(`[forge] + ${Object.keys(D).join(", ")}`),console.log("[forge] next: edit forge.toml & SKILL.md, then 'forge publish' (Phase 8)")}function ua(t){return t.includes("/")?t:/^[a-z0-9-]+$/.test(t)?`local/${t}`:t}var gi=require("fs"),Pr=require("path"),hi=require("os");Ne();nt();le();He();We();Ar();Vt();Qe();dt();Sr();Or();function mi(t){if(t&&t.length>0){let r=W.filter(s=>t.includes(s.name));return r.length===0?(console.warn("[forge] warning: [forge].harnesses has no known adapter, falling back to auto-detect"),se()):r}let e=rt();if(e.defaultHarnesses.length>0){let r=W.filter(s=>e.defaultHarnesses.includes(s.name));if(r.length>0)return r}return se()}async function yi(t={}){let e=(0,Pr.resolve)(t.cwd??process.cwd()),r=ne(e);r||(console.error(`[forge] forge.toml not found in ${e}`),console.error("[forge] run 'forge init' to create a project, or create forge.toml with [dependencies]"),process.exit(1));let s;try{s=he(r)}catch(h){console.error(`[forge] ${h.message}`),process.exit(1)}let i=Er(s);if(i.length>0){for(let h of i)console.error(`[forge] ${h}`);process.exit(1)}let o=s.dependencies,n=Object.keys(s.skills??{}).length>0;if(Object.keys(o).length===0&&!n){console.log(`[forge] no dependencies in ${r}`);return}if(t.frozen){let h=kr(e);h||(console.error(`[forge] --frozen requires forge.lock, but none found in ${e}`),process.exit(1));let A=new Map(h.packages.map(_=>[_.name,_]));for(let[_,M]of Object.entries(o)){let Fe=A.get(_);Fe||(console.error(`[forge] --frozen: lock missing ${_} (run 'forge install' without --frozen to update lock)`),process.exit(1)),nr(Fe.version,M)||(console.error(`[forge] --frozen: locked ${_}@${Fe.version} does not satisfy forge.toml range "${M}" (run 'forge install' without --frozen to update lock)`),process.exit(1))}console.log(`[forge] installing ${h.packages.length} package(s) from forge.lock (frozen)...`);let b=await pi(h,{allowMock:t.mock});if(b.length>0){for(let _ of b)console.error(`[forge] \u2717 ${_.message}`);process.exit(1)}let x=mi(s.forge?.harnesses);console.log(`[forge] harnesses: ${x.map(_=>_.displayName).join(", ")}`);let S=Date.now(),be=0;for(let _ of h.packages)try{let{detail:M,version:Fe,versionMeta:H}=await K(_.name,_.version),ze=await ee(_.name,Fe,M,H,{allowMock:t.mock});for(let Dt of x)if(await Dt.install(v(_.name),ze,M.type,{version:Fe,description:M.description}),M.type==="mcp"&&H.mcp){let Xt=Dt.mcpConfigPath();Xt&&we(Xt,v(_.name),H.mcp)}let ae=R();ae[_.name]={pkg:_.name,version:Fe,slug:v(_.name),type:M.type,adapters:x.map(Dt=>Dt.name),installedAt:new Date().toISOString()},Q(ae),be++,console.log(` \u2713 ${_.name}@${Fe}`)}catch(M){console.warn(` \u2717 ${_.name} failed: ${M.message}`)}let Yt=((Date.now()-S)/1e3).toFixed(1);console.log(`
300
+ [forge] \u2713 installed ${be}/${h.packages.length} from lock in ${Yt}s`);return}let a=Object.entries(s.skills??{}),u=Object.keys(o).length+a.length;console.log(`[forge] installing ${u} package(s) from ${r}...`);let l=mi(s.forge?.harnesses);console.log(`[forge] harnesses: ${l.map(h=>h.displayName).join(", ")}`);let D=Date.now(),p=[],c=0,m=0;for(let[h,A]of a){let b=A.source??"registry";if(b!=="registry")try{let x=Je(A.ref?`${b}#${A.ref}`:b),S=Ze(x);try{let be=J(S.dir).filter(M=>M.severity==="high");if(be.length>0)throw new Error(`security scan FAILED (${be.length} high): ${be[0].rule} ${be[0].file} \u2014 refusing install`);let Yt=_t(S);for(let M of l)await M.install(v(h),Yt,S.type,{version:S.version,description:S.description});N();let _=R();_[h]={pkg:h,version:S.version,slug:v(h),type:S.type,adapters:l.map(M=>M.name),installedAt:new Date().toISOString(),source:S.source},Q(_),p.push(Ye(h,S.version,S.type,{},S.source)),c++,console.log(` \u2713 ${h}@${S.version} (from ${S.source})`)}catch(be){try{S.cleanup()}catch{}throw be}}catch(x){console.error(` \u2717 ${h} failed: ${x.message}`)}}let f={...o};for(let[h,A]of a)(A.source??"registry")==="registry"&&A.version&&f[h]===void 0&&(f[h]=A.version);let y=R();for(let[h,A]of Object.entries(f))try{let{detail:b,version:x,versionMeta:S}=await K(h,A);if(y[h]?.version===x&&Ca(v(h),x)){if(b.type==="mcp"){p.push(Ye(h,x,b.type,S)),m++,console.log(` = ${h}@${x} already installed`);continue}let H=!0;for(let ze of l)await ze.isInstalled(v(h))||(H=!1);if(H){p.push(Ye(h,x,b.type,S)),m++,console.log(` = ${h}@${x} already installed`);continue}}let _=await ee(h,x,b,S,{allowMock:t.mock});for(let H of l)if(await H.install(v(h),_,b.type,{version:x,description:b.description}),b.type==="mcp"&&S.mcp){let ze=H.mcpConfigPath();ze&&we(ze,v(h),S.mcp)}let M=S.dependencies??{};for(let[H,ze]of Object.entries(M))try{let ae=await K(H,ze),Dt=await ee(H,ae.version,ae.detail,ae.versionMeta,{allowMock:t.mock});for(let Xt of l)await Xt.install(v(H),Dt,ae.detail.type,{version:ae.version,description:ae.detail.description});console.log(` dep ${H}@${ae.version}`)}catch(ae){console.warn(` ! dep ${H} failed: ${ae.message}`)}N();let Fe=R();Fe[h]={pkg:h,version:x,slug:v(h),type:b.type,adapters:l.map(H=>H.name),installedAt:new Date().toISOString()},Q(Fe),p.push(Ye(h,x,b.type,S)),c++,console.log(` \u2713 ${h}@${x}`)}catch(b){console.error(` \u2717 ${h} failed: ${b.message}`)}p.sort((h,A)=>h.name.localeCompare(A.name)),xt(p,e);let g=s.mcp?.servers??{};if(Object.keys(g).length>0){let h=Js(l,g);console.log(`[forge] \u2713 ${Object.keys(g).length} MCP server(s) injected (${h} config writes)`)}let C=((Date.now()-D)/1e3).toFixed(1),O=c+m,Ce=u-O;Ce>0?(console.log(`
301
+ [forge] \u2717 ${Ce} package(s) failed \u2014 installed ${c} new, ${m} cached (${O}/${u}) on ${l.length} harness(es) in ${C}s`),process.exitCode=1):console.log(`
302
+ [forge] \u2713 installed ${c} new, ${m} cached (${O}/${u}) on ${l.length} harness(es) in ${C}s`),console.log(`[forge] lock written to ${e}/forge.lock`)}function Ca(t,e){return(0,gi.existsSync)((0,Pr.join)((0,hi.homedir)(),".forge","packages",`${t}@${e}`))}Or();le();Ne();Tt();nt();le();He();Vt();Ar();We();var Zs=require("path");function Fa(t){if(t&&t.length>0){let r=W.filter(s=>t.includes(s.name));if(r.length)return r}let e=rt();if(e.defaultHarnesses.length){let r=W.filter(s=>e.defaultHarnesses.includes(s.name));if(r.length)return r}return se()}async function Ci(t={}){let e=Date.now(),r=(0,Zs.resolve)(t.cwd??process.cwd()),s=R(),i=Object.values(s);if(i.length===0){console.log("[forge] no packages installed");return}let o=await $s(),n=0;for(let u of i)try{let D=o.packages[u.pkg]?.latest??(await ce(u.pkg)).latest;Me(D,u.version)>0&&(console.log(`${u.pkg} ${u.version} \u2192 ${D} (latest)`),n++)}catch{}let a=((Date.now()-e)/1e3).toFixed(1);console.log(n===0?`[forge] all packages up to date (${i.length} checked in ${a}s)`:`
303
+ [forge] ${n} package(s) outdated \u2014 run 'forge update' (${a}s)`)}async function Fi(t,e={}){let r=(0,Zs.resolve)(e.cwd??process.cwd()),s=R(),i=kr(r),o=ne(r),n;if(o)try{n=he(o).forge?.harnesses}catch{}let a=Fa(n),u=t?[t]:Object.keys(s);if(u.length===0){console.log("[forge] nothing to update \u2014 no installed packages");return}let l=0;for(let D of u){let p=s[D];if(!p){console.warn(`[forge] ${D} not installed \u2014 skipping`);continue}try{let c=await ce(D),m=c.latest;if(m===p.version){console.log(` = ${D}@${p.version} already latest`);continue}let{version:f,versionMeta:y}=await K(D,m),g=await ee(D,f,c,y,{allowMock:e.mock});for(let C of a)if(await C.install(v(D),g,c.type,{version:f,description:c.description}),c.type==="mcp"&&y.mcp){let O=C.mcpConfigPath();O&&we(O,v(D),y.mcp)}N(),s[D]={...p,version:f,adapters:a.map(C=>C.name),installedAt:new Date().toISOString()},Q(s),console.log(` \u2713 ${D} ${p.version} \u2192 ${f}`),l++}catch(c){console.warn(` \u2717 ${D} failed: ${c.message}`)}}if(i){let D=Object.values(s).map(p=>({name:p.pkg,version:p.version,type:p.type??"skill"}));D.sort((p,c)=>p.name.localeCompare(c.name)),xt(D,r),console.log(`[forge] lock refreshed: ${r}/forge.lock`)}console.log(l===0?"[forge] nothing updated":`
304
+ [forge] \u2713 updated ${l} package(s)`)}var Ys=require("fs"),$i=require("path");le();Ne();nt();Qe();We();async function wi(t={}){let e=t.dirs?Object.entries(t.dirs).map(([o,n])=>({pkg:o,dir:n,version:"scan",slug:o})):Object.values(R()).map(o=>({pkg:o.pkg,dir:U(o.slug,o.version),version:o.version,slug:o.slug})),r=[];if(e.length===0){console.log("[forge] audit: no installed packages \u2014 nothing to check");return}let s;try{let o=ne(process.cwd());o&&(s=he(o).permissions)}catch{}for(let o of e){if(!t.dirs)try{let a=(await ce(o.pkg)).versions[o.version];if(!a){r.push({pkg:o.pkg,level:"warn",message:`version ${o.version} not in registry`});continue}a.sha256&&Kn(a.sha256)?r.push({pkg:o.pkg,level:"info",message:"community tier (unverified tarball) \u2014 install needs --mock"}):a.verified||r.push({pkg:o.pkg,level:"warn",message:"sha256 not verified against tarball content"}),(!a.tarball||a.tarball.includes("placeholder"))&&r.push({pkg:o.pkg,level:"warn",message:"tarball URL placeholder"});try{(0,Ys.existsSync)((0,$i.join)(U(o.slug,o.version),".forge-mock"))&&r.push({pkg:o.pkg,level:"info",message:"installed from MOCK content (--mock was used)"})}catch{}}catch(n){r.push({pkg:o.pkg,level:"warn",message:`registry read failed: ${n.message}`})}if((0,Ys.existsSync)(o.dir)){let n=J(o.dir,{permissions:s});for(let a of n)r.push({pkg:o.pkg,level:a.severity==="high"?"high":a.severity==="medium"?"warn":"info",message:`[${a.rule}] ${a.file}${a.line>0?`:${a.line}`:""} \u2014 ${a.message}`})}}let i=r.filter(o=>o.level==="high").length;if(t.json){console.log(JSON.stringify({packages:e.length,findings:r,highs:i},null,2)),i>0&&(process.exitCode=1);return}if(console.log(`[forge] audit \u2014 ${e.length} package(s) checked:
305
+ `),r.length===0)console.log("[forge] \u2713 no issues");else{for(let o of r.slice(0,30))console.log(` [${o.level}] ${o.pkg}: ${o.message}`);r.length>30&&console.log(` ... and ${r.length-30} more`)}i>0?(console.log(`
306
+ [forge] \u2717 audit FAILED: ${i} high-severity finding(s) \u2014 refusing to pass`),process.exitCode=1):console.log(`
307
+ [forge] audit done: ${r.length} finding(s)`)}We();Vt();Hn();var V=new Sn;V.name("forge").description("The Homebrew for AI Agents \u2014 one CLI for skills, MCPs, plugins, agents").version("0.1.2").helpOption("-h, --help","display help for command");V.command("add").description("Install a package (registry, github:, git URL, or local path)").argument("<pkg>","package ref: scope/name[@range], github:owner/repo[#ref], <git-url>[#ref], ./local/path").option("--global","install globally (default)").option("--dry-run","show what would be installed without writing").option("--mock","allow mock content for packages with no verified tarball yet").option("--skip-scan","skip the pre-install security scan (not recommended)",!1).action(async(t,e)=>{let{installExternal:r}=await Promise.resolve().then(()=>(Sr(),di)),s={dryRun:e.dryRun,mock:e.mock,skipScan:e.skipScan},i=Je(t);if(i.kind!=="registry"&&i.explicit){await r(i,s);return}let{name:o,version:n}=ws(t);if(vr.test(o)||(console.error(`[forge] invalid package name "${o}" \u2014 expected scope/name (e.g. anthropics/plan)`),process.exit(1)),i.kind!=="registry")try{await ce(o)}catch{console.log(`[forge] ${o} not in registry \u2014 trying GitHub...`),await r({...i,explicit:!0},s);return}console.log(`[forge] resolving ${o}${n?"@"+n:""}...`);let a,u,l;try{let g=await K(o,n);a=g.detail,u=g.version,l=g.versionMeta}catch(g){console.error(`[forge] error: ${g.message}`),process.exit(1)}let D=v(o);if(console.log(`[forge] found ${o}@${u} [${a.type}] \u2014 ${a.description}`),console.log(l.verified?"[forge] verified tarball \u2713 (sha256 pinned)":"[forge] community tier (unverified) \u2014 install needs a verified tarball or --mock"),e.dryRun){console.log(`[forge] (dry-run) would install to ~/.forge/packages/${D}@${u}/`);let g=se();console.log(`[forge] (dry-run) would link to: ${g.map(C=>C.name).join(", ")}`),l.mcp&&console.log(`[forge] (dry-run) MCP: ${l.mcp.command} ${(l.mcp.args??[]).join(" ")}`);return}console.log(`[forge] installing ${o}@${u}...`);let p;try{p=await ee(o,u,a,l,{allowMock:e.mock})}catch(g){console.error(g.message),process.exitCode=1;return}console.log(`[forge] package content ready: ${p}`);let c=se();console.log(`[forge] detected harnesses: ${c.map(g=>`${g.displayName} (${g.name})`).join(", ")}`);let m=0;for(let g of c)try{if(await g.install(D,p,a.type,{version:u,description:a.description}),console.log(` \u2713 ${g.displayName} \u2192 ${g.skillDir(D)}`),a.type==="mcp"&&l.mcp){let C=g.mcpConfigPath();if(C){let O=D;we(C,O,l.mcp),console.log(` \u2713 MCP config \u2192 ${C} [${O}]`)}}}catch(C){console.warn(` \u2717 ${g.displayName} failed: ${C.message}`),m++}m>0?(console.log(`
308
+ [forge] \u2717 ${m} harness(es) failed \u2014 installed on ${c.length-m}/${c.length}`),process.exitCode=1):console.log(`
309
+ [forge] \u2713 installed ${o}@${u} on ${c.length} harness(es)`);let f=l.dependencies??{};if(Object.keys(f).length>0){console.log(`[forge] installing ${Object.keys(f).length} dependencies...`);for(let[g,C]of Object.entries(f))try{let O=await K(g,C),Ce=await ee(g,O.version,O.detail,O.versionMeta,{allowMock:e.mock});for(let h of c)await h.install(v(g),Ce,O.detail.type,{version:O.version,description:O.detail.description});console.log(` \u2713 dep ${g}@${O.version}`)}catch(O){console.warn(` \u2717 dep ${g} failed: ${O.message}`)}}N();let y=R();y[o]={pkg:o,version:u,slug:D,type:a.type,adapters:c.map(g=>g.name),installedAt:new Date().toISOString()},Q(y),console.log(`
310
+ [forge] \u2713 installed ${o}@${u} on ${c.length} harness(es)`),console.log("[forge] run 'forge list' to see installed packages, 'forge doctor' to check health")});V.command("remove").alias("rm").alias("uninstall").description("Remove a package").argument("<pkg>","package name").action(async t=>{let{name:e}=ws(t);vr.test(e)||(console.error(`[forge] invalid package name "${e}" \u2014 expected scope/name (e.g. anthropics/plan)`),process.exit(1));let r=v(e),s=R(),i=s[e];i||console.warn(`[forge] ${e} not found in ~/.forge/links.json \u2014 trying to remove anyway`);let o=i?.version??"unknown",n=W;for(let a of n){if(await a.isInstalled(r))try{await a.uninstall(r,"skill"),await a.uninstall(r,"mcp"),await a.uninstall(r,"agent"),console.log(` \u2713 removed from ${a.displayName}`)}catch(D){console.warn(` \u2717 ${a.displayName}: ${D.message}`)}let l=a.mcpConfigPath();if(l)try{xs(l,r)}catch{}}if(i){let a=U(r,i.version);(0,Pe.existsSync)(a)&&((0,Pe.rmSync)(a,{recursive:!0,force:!0}),console.log(`[forge] removed store: ${a}`)),Reflect.deleteProperty(s,e),Q(s)}else{s[e]&&(Reflect.deleteProperty(s,e),Q(s));for(let a of rr())a.slug===r&&((0,Pe.rmSync)(a.dir,{recursive:!0,force:!0}),console.log(`[forge] removed store: ${a.dir}`))}console.log(`[forge] \u2713 removed ${e}${o!=="unknown"?"@"+o:""}`)});V.command("list").alias("ls").description("List installed packages").action(async()=>{let t=R(),e=Object.values(t);if(e.length===0){let r=rr();if(r.length===0){console.log("[forge] no packages installed. Try: forge add anthropics/plan");return}console.log("[forge] installed packages (from store):");for(let s of r)console.log(` - ${s.slug}@${s.version} (${s.dir})`);return}console.log(`[forge] ${e.length} package(s) installed:
311
+ `);for(let r of e){let s=U(r.slug,r.version),i=(0,Pe.existsSync)(s)?"":" (missing dir!)";console.log(` - ${r.pkg}@${r.version} [${r.adapters.join(", ")}]${i}`),console.log(` ${s}`)}});V.command("doctor").description("Check harness health").option("--fix","try to fix broken links").option("--mock","allow mock content when --fix restores packages with no verified tarball").action(async t=>{N(),console.log(`[forge] doctor \u2014 checking harnesses...
312
+ `);for(let o of W){let n=o.detect(),a=n?"\u2713":"\u2717",u=n?"(found)":"(not found)",l="";if(n)try{l=` \u2014 ${(await o.list()).length} package(s)`}catch{l=""}let D="",p=o.mcpConfigPath();p&&(D=` mcp: ${p}`),console.log(`${a} ${o.displayName} (${o.name}) ${u}${l}${D?`
313
+ `+D:""}`)}console.log(`
314
+ [forge] store:`),console.log(` packages: ${(0,dn.join)((0,mn.homedir)(),".forge","packages")}`),console.log(` cache: ${(0,dn.join)((0,mn.homedir)(),".forge","cache")}`);let e=rr();if(console.log(` installed: ${e.length} package(s)`),e.length>0){for(let o of e.slice(0,5))console.log(` - ${o.slug}@${o.version}`);e.length>5&&console.log(` ... and ${e.length-5} more`)}let r=R(),s=0,i=0;for(let[o,n]of Object.entries(r)){let a=U(n.slug,n.version);if(!(0,Pe.existsSync)(a)&&(s++,console.log(` ! broken: ${o}@${n.version} \u2014 missing ${a}`),t.fix))try{let l=await ce(o),D=await K(o,n.version),p=await ee(o,D.version,l,D.versionMeta,{allowMock:t.mock});console.log(` \u2192 store restored: ${p}`),i++}catch(l){console.log(` \u2192 restore failed: ${l.message}`);continue}let u=(0,Pe.existsSync)(a)?a:U(n.slug,n.version);for(let l of n.adapters){let D=W.find(c=>c.name===l);if(!D)continue;if(n.type==="mcp"){let c=D.mcpConfigPath();if(c)try{let f=Gt(c)?.mcpServers;if((!f||!(n.slug in f))&&(console.log(` ! missing MCP config: ${o} on ${l} \u2192 ${c}`),t.fix&&(0,Pe.existsSync)(u)))try{let y=await K(o,n.version);y.versionMeta.mcp&&(we(c,n.slug,y.versionMeta.mcp),console.log(" \u2192 MCP config restored"),i++)}catch(y){console.log(` \u2192 cannot restore MCP config: ${y.message}`)}}catch{console.log(` ! MCP config unreadable: ${c}`)}continue}if(l==="generic")continue;if(!await D.isInstalled(n.slug)&&(console.log(` ! missing link: ${o} on ${l} \u2192 ${D.skillDir(n.slug)}`),t.fix)){let c=u;(0,Pe.existsSync)(c)?(await D.install(n.slug,c,n.type??"skill",{version:n.version}),console.log(" \u2192 fixed"),i++):console.log(" \u2192 cannot fix, store missing")}}}console.log(s===0?`
315
+ [forge] \u2713 no broken packages`:`
316
+ [forge] ${s} broken package(s)${t.fix?` (${i} fixed)`:" \u2014 run with --fix"}`)});V.command("search").description("Search registry").argument("<query>","search query").option("--type <type>","filter by type (skill/mcp/plugin/agent/command/hook)").option("--json","output JSON").action(async(t,e)=>{let s=await cr(t);if(e.type&&(s=s.filter(i=>i.type===e.type)),e.json){console.log(JSON.stringify(s,null,2));return}if(s.length===0){console.log(`No results for "${t}"${e.type?` [type=${e.type}]`:""}`);return}console.log(`Found ${s.length} package(s) for "${t}":
317
+ `);for(let i of s){let o=i.verified?" [\u2713 verified]":"";console.log(` - ${i.name}@${i.latest} [${i.type}]${o} \u2014 ${i.description}`),i.keywords?.length&&console.log(` keywords: ${i.keywords.join(", ")}`)}});V.command("info").description("Show package info").argument("<pkg>","package name").option("--json","output JSON").action(async(t,e)=>{try{let r=await ce(t);if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(`
318
+ ${r.name} [${r.type}] \u2014 ${r.description}
319
+ `),r.homepage&&console.log(`homepage: ${r.homepage}`),r.repository&&console.log(`repository: ${r.repository}`),r.keywords?.length&&console.log(`keywords: ${r.keywords.join(", ")}`),console.log(`latest: ${r.latest}`),console.log(`versions: ${Object.keys(r.versions).join(", ")}
320
+ `);for(let[s,i]of Object.entries(r.versions)){let o=s===r.latest?" (latest)":"",n=i.verified?"verified \u2713":"community (unverified)";console.log(` ${s}${o} [${n}]:`),console.log(` tarball: ${i.tarball}`),console.log(` sha256: ${i.sha256.slice(0,16)}...`),i.engines&&console.log(` engines: ${JSON.stringify(i.engines)}`),i.dependencies&&Object.keys(i.dependencies).length&&console.log(` deps: ${JSON.stringify(i.dependencies)}`),i.mcp&&console.log(` mcp: ${i.mcp.command} ${(i.mcp.args??[]).join(" ")}`)}}catch(r){console.error(`Package ${t} not found: ${r.message}`),process.exit(1)}});V.command("init").description("Scaffold a new package (e.g. forge init my-skill --type skill)").argument("[name]","package name (e.g. my-skill or scope/name)").option("--type <type>","package type (skill/mcp/agent/command/hook/plugin)","skill").option("--yes","skip prompts and use defaults",!1).option("--force","overwrite existing forge.toml",!1).action(async(t,e)=>{await ci({name:t,type:e.type,yes:e.yes,force:e.force})});V.command("install").alias("i").description("Install all dependencies from forge.toml (team sync, e.g. forge install)").option("--frozen","install exactly from forge.lock",!1).option("--mock","allow mock content for packages with no verified tarball yet",!1).action(async t=>{await yi({frozen:t.frozen,mock:t.mock})});V.command("sync").description("One-command team sync: skills + rules + MCP servers + agent roles (e.g. forge sync)").option("--mock","allow mock content for packages with no verified tarball yet",!1).option("--skip-scan","skip the pre-install security scan (not recommended)",!1).action(async t=>{await Br({mock:t.mock,skipScan:t.skipScan})});V.command("outdated").description("Show outdated packages").action(async()=>{await Ci()});V.command("update").description("Update packages to latest").argument("[pkg]","package to update (all if omitted)").option("--mock","allow mock content for packages with no verified tarball yet",!1).action(async(t,e)=>{await Fi(t,{mock:e.mock})});V.command("tui").description("Launch interactive TUI dashboard (no args = same as npx forge)").action(async()=>{let{runTui:t}=await Promise.resolve().then(()=>(Yi(),Zi));await t()});V.command("test").description("Test a package against the adapter matrix (dry-run install)").argument("<pkg>","package name or path").option("--mock","allow mock content for packages with no verified tarball yet",!1).action(async(t,e)=>{let{runTest:r}=await Promise.resolve().then(()=>(eo(),Qi));await r(t,{mock:e.mock})});V.command("pack").description("Package the current directory into a verified tarball").option("--check","validate only \u2014 do not write tarball",!1).action(async t=>{let{runPack:e}=await Promise.resolve().then(()=>(io(),no));await e({check:t.check})});V.command("verify").description("Verify a package: schema, permissions, security scan").argument("<pkg>","package name or path").action(async t=>{let{runVerify:e}=await Promise.resolve().then(()=>(uo(),ao));await e(t)});V.command("audit").description("Audit installed packages (skeleton \u2014 full DB in Phase 22)").option("--json","output JSON",!1).action(async t=>{await wi({json:t.json})});V.parse();
321
+ /*! Bundled license information:
322
+
323
+ smol-toml/dist/date.js:
324
+ smol-toml/dist/error.js:
325
+ smol-toml/dist/util.js:
326
+ smol-toml/dist/primitive.js:
327
+ smol-toml/dist/extract.js:
328
+ smol-toml/dist/struct.js:
329
+ smol-toml/dist/parse.js:
330
+ smol-toml/dist/stringify.js:
331
+ smol-toml/dist/index.js:
332
+ (*!
333
+ * Copyright (c) Squirrel Chat et al., All rights reserved.
334
+ * SPDX-License-Identifier: BSD-3-Clause
335
+ *
336
+ * Redistribution and use in source and binary forms, with or without
337
+ * modification, are permitted provided that the following conditions are met:
338
+ *
339
+ * 1. Redistributions of source code must retain the above copyright notice, this
340
+ * list of conditions and the following disclaimer.
341
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
342
+ * this list of conditions and the following disclaimer in the
343
+ * documentation and/or other materials provided with the distribution.
344
+ * 3. Neither the name of the copyright holder nor the names of its contributors
345
+ * may be used to endorse or promote products derived from this software without
346
+ * specific prior written permission.
347
+ *
348
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
349
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
350
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
351
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
352
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
353
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
354
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
355
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
356
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
357
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
358
+ *)
359
+ */