@humain/terminal 0.0.7 → 0.0.8

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 (104) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +7 -6
  3. package/dist/bundle/chunks/chunk-74NVHVNZ.js +16 -0
  4. package/dist/bundle/chunks/{chunk-HNVPY4LZ.js → chunk-MMFBCF6F.js} +93 -102
  5. package/dist/bundle/chunks/{chunk-M2GYSCCG.js → chunk-PSKDLDLZ.js} +1 -1
  6. package/dist/bundle/chunks/{google-generative-ai-XT7NQJ2E.js → google-generative-ai-FF7M7XHT.js} +1 -1
  7. package/dist/bundle/chunks/{google-vertex-IDQ6Z53W.js → google-vertex-YMUBFRBA.js} +1 -1
  8. package/dist/bundle/chunks/https-proxy-agent-562J2I52.js +2 -0
  9. package/dist/bundle/chunks/{mistral-conversations-HHDZ4FHR.js → mistral-conversations-O4M7IQML.js} +1 -1
  10. package/dist/bundle/chunks/{openai-completions-6QBYTBXY.js → openai-completions-L4AHDQ5D.js} +1 -1
  11. package/dist/bundle/cli.js +1 -1
  12. package/dist/bundle/index.js +1 -1
  13. package/dist/bundle/rpc-entry.js +1 -1
  14. package/dist/cli/startup-ui.d.ts.map +1 -1
  15. package/dist/cli/startup-ui.js +2 -1
  16. package/dist/cli/startup-ui.js.map +1 -1
  17. package/dist/core/agent-session.d.ts +12 -1
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +77 -9
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  22. package/dist/core/compaction/branch-summarization.js +4 -3
  23. package/dist/core/compaction/branch-summarization.js.map +1 -1
  24. package/dist/core/compaction/compaction.d.ts +5 -0
  25. package/dist/core/compaction/compaction.d.ts.map +1 -1
  26. package/dist/core/compaction/compaction.js +19 -5
  27. package/dist/core/compaction/compaction.js.map +1 -1
  28. package/dist/core/extensions/index.d.ts +1 -1
  29. package/dist/core/extensions/index.d.ts.map +1 -1
  30. package/dist/core/extensions/index.js.map +1 -1
  31. package/dist/core/extensions/runner.d.ts +5 -0
  32. package/dist/core/extensions/runner.d.ts.map +1 -1
  33. package/dist/core/extensions/runner.js +44 -1
  34. package/dist/core/extensions/runner.js.map +1 -1
  35. package/dist/core/extensions/types.d.ts +18 -1
  36. package/dist/core/extensions/types.d.ts.map +1 -1
  37. package/dist/core/extensions/types.js.map +1 -1
  38. package/dist/core/session-manager.d.ts.map +1 -1
  39. package/dist/core/session-manager.js +4 -2
  40. package/dist/core/session-manager.js.map +1 -1
  41. package/dist/core/settings-manager.d.ts +8 -1
  42. package/dist/core/settings-manager.d.ts.map +1 -1
  43. package/dist/core/settings-manager.js +17 -0
  44. package/dist/core/settings-manager.js.map +1 -1
  45. package/dist/extensions/llama/client.d.ts +6 -0
  46. package/dist/extensions/llama/client.d.ts.map +1 -1
  47. package/dist/extensions/llama/client.js +7 -0
  48. package/dist/extensions/llama/client.js.map +1 -1
  49. package/dist/extensions/llama/provider.d.ts +3 -1
  50. package/dist/extensions/llama/provider.d.ts.map +1 -1
  51. package/dist/extensions/llama/provider.js +27 -6
  52. package/dist/extensions/llama/provider.js.map +1 -1
  53. package/dist/humain/mcp-adapter/vendor/package.json +2 -2
  54. package/dist/index.d.ts +2 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/main.d.ts.map +1 -1
  59. package/dist/main.js +2 -0
  60. package/dist/main.js.map +1 -1
  61. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  62. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  63. package/dist/modes/interactive/components/settings-selector.js +10 -0
  64. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  65. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  66. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  67. package/dist/modes/interactive/interactive-mode.js +48 -24
  68. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  69. package/dist/modes/rpc/rpc-client.d.ts +7 -0
  70. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  71. package/dist/modes/rpc/rpc-client.js +7 -0
  72. package/dist/modes/rpc/rpc-client.js.map +1 -1
  73. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  74. package/dist/modes/rpc/rpc-mode.js +3 -0
  75. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  76. package/dist/modes/rpc/rpc-types.d.ts +12 -0
  77. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  78. package/dist/modes/rpc/rpc-types.js.map +1 -1
  79. package/dist/utils/shell.d.ts.map +1 -1
  80. package/dist/utils/shell.js +6 -4
  81. package/dist/utils/shell.js.map +1 -1
  82. package/docs/compaction.md +2 -0
  83. package/docs/custom-provider.md +7 -7
  84. package/docs/environment-variables.md +4 -1
  85. package/docs/extensions.md +18 -0
  86. package/docs/keybindings.md +1 -1
  87. package/docs/quickstart.md +1 -1
  88. package/docs/rpc.md +23 -0
  89. package/docs/settings.md +12 -4
  90. package/docs/terminal-setup.md +12 -0
  91. package/docs/usage.md +4 -3
  92. package/examples/extensions/custom-provider-anthropic/package-lock.json +6 -6
  93. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  94. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  95. package/examples/extensions/gondolin/package-lock.json +2 -2
  96. package/examples/extensions/gondolin/package.json +1 -1
  97. package/examples/extensions/sandbox/package-lock.json +2 -2
  98. package/examples/extensions/sandbox/package.json +1 -1
  99. package/examples/extensions/with-deps/package-lock.json +2 -2
  100. package/examples/extensions/with-deps/package.json +1 -1
  101. package/npm-shrinkwrap.json +23 -23
  102. package/package.json +7 -7
  103. package/dist/bundle/chunks/chunk-3D3G2X5U.js +0 -6
  104. package/dist/bundle/chunks/dist-7DSXV2TY.js +0 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.8] - 2026-08-31
4
+
5
+ ### Added
6
+
7
+ - Inherited Pi 0.84.4 terminal capability overrides, extension UI prompt events, RPC queue clearing, fullscreen selection copy controls, and experimental DeepSeek vision support.
8
+
9
+ ### Fixed
10
+
11
+ - Inherited Pi 0.84.4 provider, proxy, compaction, session persistence, message ordering, model selection, autocomplete, and fullscreen rendering fixes.
12
+
3
13
  ## [0.0.7] - 2026-08-31
4
14
 
5
15
  ### Added
package/README.md CHANGED
@@ -98,7 +98,7 @@ Then just talk to pi. By default, pi gives the model four tools: `read`, `write`
98
98
 
99
99
  ## Providers & Models
100
100
 
101
- For each built-in provider, pi maintains a list of tool-capable models. Configured provider catalogs refresh automatically; run `pi update --models` to force an immediate refresh. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or Ctrl+L).
101
+ For each built-in provider, HUMAIN Terminal maintains a list of tool-capable models. Configured provider catalogs refresh automatically; run `humain-terminal update --models` to force an immediate refresh. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or Ctrl+L). Press Ctrl+S in the model picker to save the highlighted model as the startup default.
102
102
 
103
103
  **Subscriptions:**
104
104
  - Anthropic Claude Pro/Max
@@ -180,9 +180,10 @@ Type `/` in the editor to trigger commands. [Extensions](#extensions) can regist
180
180
  |---------|-------------|
181
181
  | `/login`, `/logout` | Manage provider credentials |
182
182
  | [`/llama`](docs/llama-cpp.md) | Download, load, and unload llama.cpp router models |
183
- | `/model` | Switch models |
183
+ | `/model` | Switch models; Ctrl+S in the picker saves the startup default |
184
+ | `/thinking` | Switch thinking level; Ctrl+S in the picker saves the startup default |
184
185
  | `/scoped-models` | Enable/disable models for Ctrl+P cycling |
185
- | `/settings` | Thinking level, theme, message delivery, transport |
186
+ | `/settings` | Theme, message delivery, transport, and other preferences |
186
187
  | `/resume` | Pick from previous sessions |
187
188
  | `/new` | Start a new session |
188
189
  | `/name <name>` | Set session display name |
@@ -218,7 +219,7 @@ See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`.
218
219
  | Shift+Tab | Cycle thinking level |
219
220
  | Ctrl+O | Collapse/expand tool output |
220
221
  | Ctrl+T | Collapse/expand thinking blocks |
221
- | Ctrl+X | Copy the last assistant message |
222
+ | Ctrl+X | Copy the last assistant message; with fullscreen copy-on-select disabled, copy the active text selection |
222
223
 
223
224
  ### Message Queue
224
225
 
@@ -429,7 +430,7 @@ pi list
429
430
  pi update # update pi only
430
431
  pi update --all # update pi and packages
431
432
  pi update --extensions # update packages only
432
- pi update --models # refresh model catalogs only
433
+ humain-terminal update --models # refresh model catalogs only
433
434
  pi update --self # update pi only
434
435
  pi update --self --force # reinstall pi even if current
435
436
  pi update npm:@foo/pi-tools # update one package
@@ -528,7 +529,7 @@ pi uninstall <source> [-l] # Alias for remove
528
529
  pi update [source|self|pi] # Update pi only, or one package source
529
530
  pi update --all # Update pi and packages
530
531
  pi update --extensions # Update packages only
531
- pi update --models # Refresh model catalogs only
532
+ humain-terminal update --models # Refresh model catalogs only
532
533
  pi update --self # Update pi only
533
534
  pi update --self --force # Reinstall pi even if current
534
535
  pi update --extension <src> # Update one package
@@ -0,0 +1,16 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{__commonJS,__esm,__require,__toESM}from"./chunk-JXWJOIH4.js";var require_ms=__commonJS({"node_modules/ms/index.js"(exports,module){var s=1e3,m=s*60,h=m*60,d=h*24,w=d*7,y=d*365.25;module.exports=function(val,options){options=options||{};var type=typeof val;if(type==="string"&&val.length>0)return parse(val);if(type==="number"&&isFinite(val))return options.long?fmtLong(val):fmtShort(val);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(val))};function parse(str){if(str=String(str),!(str.length>100)){var match=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);if(match){var n=parseFloat(match[1]),type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"yrs":case"yr":case"y":return n*y;case"weeks":case"week":case"w":return n*w;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"hrs":case"hr":case"h":return n*h;case"minutes":case"minute":case"mins":case"min":case"m":return n*m;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function fmtShort(ms){var msAbs=Math.abs(ms);return msAbs>=d?Math.round(ms/d)+"d":msAbs>=h?Math.round(ms/h)+"h":msAbs>=m?Math.round(ms/m)+"m":msAbs>=s?Math.round(ms/s)+"s":ms+"ms"}function fmtLong(ms){var msAbs=Math.abs(ms);return msAbs>=d?plural(ms,msAbs,d,"day"):msAbs>=h?plural(ms,msAbs,h,"hour"):msAbs>=m?plural(ms,msAbs,m,"minute"):msAbs>=s?plural(ms,msAbs,s,"second"):ms+" ms"}function plural(ms,msAbs,n,name){var isPlural=msAbs>=n*1.5;return Math.round(ms/n)+" "+name+(isPlural?"s":"")}}});var require_common=__commonJS({"node_modules/debug/src/common.js"(exports,module){function setup(env){createDebug3.debug=createDebug3,createDebug3.default=createDebug3,createDebug3.coerce=coerce,createDebug3.disable=disable,createDebug3.enable=enable,createDebug3.enabled=enabled,createDebug3.humanize=require_ms(),createDebug3.destroy=destroy,Object.keys(env).forEach(key=>{createDebug3[key]=env[key]}),createDebug3.names=[],createDebug3.skips=[],createDebug3.formatters={};function selectColor(namespace){let hash=0;for(let i=0;i<namespace.length;i++)hash=(hash<<5)-hash+namespace.charCodeAt(i),hash|=0;return createDebug3.colors[Math.abs(hash)%createDebug3.colors.length]}createDebug3.selectColor=selectColor;function createDebug3(namespace){let prevTime,enableOverride=null,namespacesCache,enabledCache;function debug3(...args){if(!debug3.enabled)return;let self=debug3,curr=Number(new Date),ms=curr-(prevTime||curr);self.diff=ms,self.prev=prevTime,self.curr=curr,prevTime=curr,args[0]=createDebug3.coerce(args[0]),typeof args[0]!="string"&&args.unshift("%O");let index=0;args[0]=args[0].replace(/%([a-zA-Z%])/g,(match,format)=>{if(match==="%%")return"%";index++;let formatter=createDebug3.formatters[format];if(typeof formatter=="function"){let val=args[index];match=formatter.call(self,val),args.splice(index,1),index--}return match}),createDebug3.formatArgs.call(self,args),(self.log||createDebug3.log).apply(self,args)}return debug3.namespace=namespace,debug3.useColors=createDebug3.useColors(),debug3.color=createDebug3.selectColor(namespace),debug3.extend=extend,debug3.destroy=createDebug3.destroy,Object.defineProperty(debug3,"enabled",{enumerable:!0,configurable:!1,get:()=>enableOverride!==null?enableOverride:(namespacesCache!==createDebug3.namespaces&&(namespacesCache=createDebug3.namespaces,enabledCache=createDebug3.enabled(namespace)),enabledCache),set:v=>{enableOverride=v}}),typeof createDebug3.init=="function"&&createDebug3.init(debug3),debug3}function extend(namespace,delimiter){let newDebug=createDebug3(this.namespace+(typeof delimiter>"u"?":":delimiter)+namespace);return newDebug.log=this.log,newDebug}function enable(namespaces){createDebug3.save(namespaces),createDebug3.namespaces=namespaces,createDebug3.names=[],createDebug3.skips=[];let split=(typeof namespaces=="string"?namespaces:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let ns of split)ns[0]==="-"?createDebug3.skips.push(ns.slice(1)):createDebug3.names.push(ns)}function matchesTemplate(search,template){let searchIndex=0,templateIndex=0,starIndex=-1,matchIndex=0;for(;searchIndex<search.length;)if(templateIndex<template.length&&(template[templateIndex]===search[searchIndex]||template[templateIndex]==="*"))template[templateIndex]==="*"?(starIndex=templateIndex,matchIndex=searchIndex,templateIndex++):(searchIndex++,templateIndex++);else if(starIndex!==-1)templateIndex=starIndex+1,matchIndex++,searchIndex=matchIndex;else return!1;for(;templateIndex<template.length&&template[templateIndex]==="*";)templateIndex++;return templateIndex===template.length}function disable(){let namespaces=[...createDebug3.names,...createDebug3.skips.map(namespace=>"-"+namespace)].join(",");return createDebug3.enable(""),namespaces}function enabled(name){for(let skip of createDebug3.skips)if(matchesTemplate(name,skip))return!1;for(let ns of createDebug3.names)if(matchesTemplate(name,ns))return!0;return!1}function coerce(val){return val instanceof Error?val.stack||val.message:val}function destroy(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return createDebug3.enable(createDebug3.load()),createDebug3}module.exports=setup}});var require_browser=__commonJS({"node_modules/debug/src/browser.js"(exports,module){exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage=localstorage();exports.destroy=(()=>{let warned=!1;return()=>{warned||(warned=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();exports.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let m;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(m=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(m[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(args){if(args[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+args[0]+(this.useColors?"%c ":" ")+"+"+module.exports.humanize(this.diff),!this.useColors)return;let c="color: "+this.color;args.splice(1,0,c,"color: inherit");let index=0,lastC=0;args[0].replace(/%[a-zA-Z%]/g,match=>{match!=="%%"&&(index++,match==="%c"&&(lastC=index))}),args.splice(lastC,0,c)}exports.log=console.debug||console.log||(()=>{});function save(namespaces){try{namespaces?exports.storage.setItem("debug",namespaces):exports.storage.removeItem("debug")}catch{}}function load(){let r;try{r=exports.storage.getItem("debug")||exports.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function localstorage(){try{return localStorage}catch{}}module.exports=require_common()(exports);var{formatters}=module.exports;formatters.j=function(v){try{return JSON.stringify(v)}catch(error){return"[UnexpectedJSONParseError]: "+error.message}}}});var require_node=__commonJS({"node_modules/debug/src/node.js"(exports,module){var tty=__require("tty"),util=__require("util");exports.init=init;exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.destroy=util.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");exports.colors=[6,2,3,4,5,1];try{let supportsColor=__require("supports-color");supportsColor&&(supportsColor.stderr||supportsColor).level>=2&&(exports.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}exports.inspectOpts=Object.keys(process.env).filter(key=>/^debug_/i.test(key)).reduce((obj,key)=>{let prop=key.substring(6).toLowerCase().replace(/_([a-z])/g,(_,k)=>k.toUpperCase()),val=process.env[key];return/^(yes|on|true|enabled)$/i.test(val)?val=!0:/^(no|off|false|disabled)$/i.test(val)?val=!1:val==="null"?val=null:val=Number(val),obj[prop]=val,obj},{});function useColors(){return"colors"in exports.inspectOpts?!!exports.inspectOpts.colors:tty.isatty(process.stderr.fd)}function formatArgs(args){let{namespace:name,useColors:useColors2}=this;if(useColors2){let c=this.color,colorCode="\x1B[3"+(c<8?c:"8;5;"+c),prefix=` ${colorCode};1m${name} \x1B[0m`;args[0]=prefix+args[0].split(`
3
+ `).join(`
4
+ `+prefix),args.push(colorCode+"m+"+module.exports.humanize(this.diff)+"\x1B[0m")}else args[0]=getDate()+name+" "+args[0]}function getDate(){return exports.inspectOpts.hideDate?"":new Date().toISOString()+" "}function log(...args){return process.stderr.write(util.formatWithOptions(exports.inspectOpts,...args)+`
5
+ `)}function save(namespaces){namespaces?process.env.DEBUG=namespaces:delete process.env.DEBUG}function load(){return process.env.DEBUG}function init(debug3){debug3.inspectOpts={};let keys=Object.keys(exports.inspectOpts);for(let i=0;i<keys.length;i++)debug3.inspectOpts[keys[i]]=exports.inspectOpts[keys[i]]}module.exports=require_common()(exports);var{formatters}=module.exports;formatters.o=function(v){return this.inspectOpts.colors=this.useColors,util.inspect(v,this.inspectOpts).split(`
6
+ `).map(str=>str.trim()).join(" ")};formatters.O=function(v){return this.inspectOpts.colors=this.useColors,util.inspect(v,this.inspectOpts)}}});var require_src=__commonJS({"node_modules/debug/src/index.js"(exports,module){typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?module.exports=require_browser():module.exports=require_node()}});var init_helpers=__esm({"node_modules/agent-base/dist/helpers.js"(){}});import*as net from"net";import*as http from"http";import{Agent as HttpsAgent}from"https";var INTERNAL,Agent2,init_dist=__esm({"node_modules/agent-base/dist/index.js"(){init_helpers();INTERNAL=Symbol("AgentBaseInternalState"),Agent2=class extends http.Agent{constructor(opts){super(opts),this[INTERNAL]={}}isSecureEndpoint(options){if(options){if(typeof options.secureEndpoint=="boolean")return options.secureEndpoint;if(typeof options.protocol=="string")return options.protocol==="https:"}let{stack}=new Error;return typeof stack!="string"?!1:stack.split(`
7
+ `).some(l=>l.indexOf("(https.js:")!==-1||l.indexOf("node:https:")!==-1)}incrementSockets(name){if(this.maxSockets===1/0&&this.maxTotalSockets===1/0)return null;this.sockets[name]||(this.sockets[name]=[]);let fakeSocket=new net.Socket({writable:!1});return this.sockets[name].push(fakeSocket),this.totalSocketCount++,fakeSocket}decrementSockets(name,socket){if(!this.sockets[name]||socket===null)return;let sockets=this.sockets[name],index=sockets.indexOf(socket);index!==-1&&(sockets.splice(index,1),this.totalSocketCount--,sockets.length===0&&delete this.sockets[name])}getName(options){return this.isSecureEndpoint(options)?HttpsAgent.prototype.getName.call(this,options):super.getName(options)}createSocket(req,options,cb){let connectOpts={...options,secureEndpoint:this.isSecureEndpoint(options)},name=this.getName(connectOpts),fakeSocket=this.incrementSockets(name);Promise.resolve().then(()=>this.connect(req,connectOpts)).then(socket=>{if(this.decrementSockets(name,fakeSocket),typeof socket.addRequest=="function")try{return socket.addRequest(req,connectOpts)}catch(err){return cb(err)}this[INTERNAL].currentSocket=socket,super.createSocket(req,options,cb)},err=>{this.decrementSockets(name,fakeSocket),cb(err)})}createConnection(){let socket=this[INTERNAL].currentSocket;if(this[INTERNAL].currentSocket=void 0,!socket)throw new Error("No socket was returned in the `connect()` function");return socket}get defaultPort(){return this[INTERNAL].defaultPort??(this.protocol==="https:"?443:80)}set defaultPort(v){this[INTERNAL]&&(this[INTERNAL].defaultPort=v)}get protocol(){return this[INTERNAL].protocol??(this.isSecureEndpoint()?"https:":"http:")}set protocol(v){this[INTERNAL]&&(this[INTERNAL].protocol=v)}}}});function parseProxyResponse(socket){return new Promise((resolve,reject)=>{let buffersLength=0,buffers=[];function read(){let b=socket.read();b?ondata(b):socket.once("readable",read)}function cleanup(){socket.removeListener("end",onend),socket.removeListener("error",onerror),socket.removeListener("readable",read)}function onend(){cleanup(),debug("onend"),reject(new Error("Proxy connection ended before receiving CONNECT response"))}function onerror(err){cleanup(),debug("onerror %o",err),reject(err)}function ondata(b){buffers.push(b),buffersLength+=b.length;let buffered=Buffer.concat(buffers,buffersLength),endOfHeaders=buffered.indexOf(`\r
8
+ \r
9
+ `);if(endOfHeaders===-1){debug("have not received end of HTTP headers yet..."),read();return}let headerParts=buffered.slice(0,endOfHeaders).toString("ascii").split(`\r
10
+ `),firstLine=headerParts.shift();if(!firstLine)return socket.destroy(),reject(new Error("No header received from proxy CONNECT response"));let firstLineParts=firstLine.split(" "),statusCode=+firstLineParts[1],statusText=firstLineParts.slice(2).join(" "),headers={};for(let header of headerParts){if(!header)continue;let firstColon=header.indexOf(":");if(firstColon===-1)return socket.destroy(),reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));let key=header.slice(0,firstColon).toLowerCase(),value=header.slice(firstColon+1).trimStart(),current=headers[key];typeof current=="string"?headers[key]=[current,value]:Array.isArray(current)?current.push(value):headers[key]=value}debug("got proxy server response: %o %o",firstLine,headers),cleanup(),resolve({connect:{statusCode,statusText,headers},buffered})}socket.on("error",onerror),socket.on("end",onend),read()})}var import_debug,debug,init_parse_proxy_response=__esm({"node_modules/https-proxy-agent/dist/parse-proxy-response.js"(){import_debug=__toESM(require_src(),1),debug=(0,import_debug.default)("https-proxy-agent:parse-proxy-response")}});function createNegotiateAuth(){return async({response,scheme})=>{if(scheme.toLowerCase()!=="negotiate")throw new Error(`Expected Negotiate scheme but got "${scheme}"`);let kerberos;try{kerberos=await import("kerberos")}catch{throw new Error('The "kerberos" package is required for Negotiate proxy authentication. Install it with: npm install kerberos')}let proxyAuthenticate=response.headers["proxy-authenticate"]||"",challengeHeader=Array.isArray(proxyAuthenticate)?proxyAuthenticate[0]:proxyAuthenticate,serverToken=typeof challengeHeader=="string"&&challengeHeader.includes(" ")?challengeHeader.split(" ").slice(1).join(" "):void 0,token=await(await kerberos.initializeClient("HTTP@proxy",{mechOID:kerberos.GSS_MECH_OID_SPNEGO})).step(serverToken||"");if(!token)throw new Error("Kerberos client.step() returned no token");return{headers:{"Proxy-Authorization":`Negotiate ${token}`}}}}var init_dist2=__esm({"node_modules/proxy-agent-negotiate/dist/index.js"(){}});import*as net2 from"net";import*as tls from"tls";import assert from"assert";import{URL}from"url";function resume(socket){setImmediate(()=>{socket.resume()})}function omit(obj,...keys){let ret={},key;for(key in obj)keys.includes(key)||(ret[key]=obj[key]);return ret}var import_debug2,debug2,setServernameFromNonIpHost,HttpsProxyAgent,init_dist3=__esm({"node_modules/https-proxy-agent/dist/index.js"(){import_debug2=__toESM(require_src(),1);init_dist();init_parse_proxy_response();init_dist2();debug2=(0,import_debug2.default)("https-proxy-agent"),setServernameFromNonIpHost=options=>options.servername===void 0&&options.host&&!net2.isIP(options.host)?{...options,servername:options.host}:options,HttpsProxyAgent=class extends Agent2{constructor(proxy,opts){super(opts),this.options={path:void 0},this.proxy=typeof proxy=="string"?new URL(proxy):proxy,this.proxyHeaders=opts?.headers??{},debug2("Creating new HttpsProxyAgent instance: %o",this.proxy.href),opts?.negotiate?this.onProxyAuth=createNegotiateAuth():opts?.onProxyAuth&&(this.onProxyAuth=opts.onProxyAuth);let host=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),port=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol==="https:"?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...opts?omit(opts,"headers","onProxyAuth","negotiate"):null,host,port}}async connect(req,opts){let{proxy}=this;if(!opts.host)throw new TypeError('No "host" provided');let socket;proxy.protocol==="https:"?(debug2("Creating `tls.Socket`: %o",this.connectOpts),socket=tls.connect(setServernameFromNonIpHost(this.connectOpts))):(debug2("Creating `net.Socket`: %o",this.connectOpts),socket=net2.connect(this.connectOpts));let headers=typeof this.proxyHeaders=="function"?this.proxyHeaders():{...this.proxyHeaders},host=net2.isIPv6(opts.host)?`[${opts.host}]`:opts.host,payload=`CONNECT ${host}:${opts.port} HTTP/1.1\r
11
+ `;if(proxy.username||proxy.password){let auth=`${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;headers["Proxy-Authorization"]=`Basic ${Buffer.from(auth).toString("base64")}`}headers.Host=`${host}:${opts.port}`,headers["Proxy-Connection"]||(headers["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close");for(let name of Object.keys(headers))payload+=`${name}: ${headers[name]}\r
12
+ `;let proxyResponsePromise=parseProxyResponse(socket);socket.write(`${payload}\r
13
+ `);let{connect:connect3,buffered}=await proxyResponsePromise;if(req.emit("proxyConnect",connect3),this.emit("proxyConnect",connect3,req),req.emit("proxy",{proxy:this.proxy.href,socket}),connect3.statusCode===200)return req.once("socket",resume),opts.secureEndpoint?(debug2("Upgrading socket connection to TLS"),tls.connect({...omit(setServernameFromNonIpHost(opts),"host","path","port"),socket})):socket;if(connect3.statusCode===407&&this.onProxyAuth){debug2("Got 407 response, invoking onProxyAuth callback"),socket.destroy();let proxyAuthenticate=connect3.headers["proxy-authenticate"]||"",scheme=Array.isArray(proxyAuthenticate)?proxyAuthenticate[0].split(/\s/)[0]:proxyAuthenticate.split(/\s/)[0],authResponse=await this.onProxyAuth({response:connect3,scheme});return this._connectWithAuth(req,opts,authResponse.headers)}socket.destroy();let fakeSocket=new net2.Socket({writable:!1});return fakeSocket.readable=!0,req.once("socket",s=>{debug2("Replaying proxy buffer for failed request"),assert(s.listenerCount("data")>0),s.push(buffered),s.push(null)}),fakeSocket}async _connectWithAuth(req,opts,authHeaders){let{proxy}=this,socket;proxy.protocol==="https:"?socket=tls.connect(setServernameFromNonIpHost(this.connectOpts)):socket=net2.connect(this.connectOpts);let headers=typeof this.proxyHeaders=="function"?this.proxyHeaders():{...this.proxyHeaders},host=net2.isIPv6(opts.host)?`[${opts.host}]`:opts.host,payload=`CONNECT ${host}:${opts.port} HTTP/1.1\r
14
+ `;if(proxy.username||proxy.password){let auth=`${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;headers["Proxy-Authorization"]=`Basic ${Buffer.from(auth).toString("base64")}`}Object.assign(headers,authHeaders),headers.Host=`${host}:${opts.port}`,headers["Proxy-Connection"]||(headers["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close");for(let name of Object.keys(headers))payload+=`${name}: ${headers[name]}\r
15
+ `;let proxyResponsePromise=parseProxyResponse(socket);socket.write(`${payload}\r
16
+ `);let{connect:connect3}=await proxyResponsePromise;if(req.emit("proxyConnect",connect3),this.emit("proxyConnect",connect3,req),connect3.statusCode===200)return req.once("socket",resume),opts.secureEndpoint?(debug2("Upgrading socket connection to TLS"),tls.connect({...omit(setServernameFromNonIpHost(opts),"host","path","port"),socket})):socket;throw socket.destroy(),new Error(`Proxy authentication failed with status ${connect3.statusCode} after retry`)}};HttpsProxyAgent.protocols=["http","https"]}});export{require_src,Agent2 as Agent,init_dist,createNegotiateAuth,init_dist2,HttpsProxyAgent,init_dist3};