@humain/terminal 0.0.7 → 0.0.10

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 (120) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +7 -6
  3. package/dist/bundle/chunks/chunk-74NVHVNZ.js +16 -0
  4. package/dist/bundle/chunks/{chunk-M2GYSCCG.js → chunk-PSKDLDLZ.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-HNVPY4LZ.js → chunk-SCJNLX2E.js} +94 -103
  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/agent-execution-failure.d.ts +4 -0
  54. package/dist/humain/agent-execution-failure.d.ts.map +1 -0
  55. package/dist/humain/agent-execution-failure.js +58 -0
  56. package/dist/humain/agent-execution-failure.js.map +1 -0
  57. package/dist/humain/agent-execution-runtime.d.ts +2 -2
  58. package/dist/humain/agent-execution-runtime.d.ts.map +1 -1
  59. package/dist/humain/agent-execution-runtime.js +13 -5
  60. package/dist/humain/agent-execution-runtime.js.map +1 -1
  61. package/dist/humain/mcp-adapter/vendor/package.json +2 -2
  62. package/dist/humain/pi-agent-execution-host.d.ts +1 -0
  63. package/dist/humain/pi-agent-execution-host.d.ts.map +1 -1
  64. package/dist/humain/pi-agent-execution-host.js +10 -3
  65. package/dist/humain/pi-agent-execution-host.js.map +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/main.d.ts.map +1 -1
  71. package/dist/main.js +2 -0
  72. package/dist/main.js.map +1 -1
  73. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  74. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  75. package/dist/modes/interactive/components/settings-selector.js +10 -0
  76. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  77. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  78. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  79. package/dist/modes/interactive/interactive-mode.js +48 -24
  80. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  81. package/dist/modes/rpc/jsonl.d.ts +6 -1
  82. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  83. package/dist/modes/rpc/jsonl.js +38 -11
  84. package/dist/modes/rpc/jsonl.js.map +1 -1
  85. package/dist/modes/rpc/rpc-client.d.ts +7 -0
  86. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  87. package/dist/modes/rpc/rpc-client.js +7 -0
  88. package/dist/modes/rpc/rpc-client.js.map +1 -1
  89. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  90. package/dist/modes/rpc/rpc-mode.js +99 -4
  91. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  92. package/dist/modes/rpc/rpc-types.d.ts +12 -0
  93. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  94. package/dist/modes/rpc/rpc-types.js.map +1 -1
  95. package/dist/utils/shell.d.ts.map +1 -1
  96. package/dist/utils/shell.js +6 -4
  97. package/dist/utils/shell.js.map +1 -1
  98. package/docs/compaction.md +2 -0
  99. package/docs/custom-provider.md +7 -7
  100. package/docs/environment-variables.md +4 -1
  101. package/docs/extensions.md +18 -0
  102. package/docs/keybindings.md +1 -1
  103. package/docs/quickstart.md +1 -1
  104. package/docs/rpc.md +23 -0
  105. package/docs/settings.md +12 -4
  106. package/docs/terminal-setup.md +12 -0
  107. package/docs/usage.md +4 -3
  108. package/examples/extensions/custom-provider-anthropic/package-lock.json +6 -6
  109. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  110. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  111. package/examples/extensions/gondolin/package-lock.json +2 -2
  112. package/examples/extensions/gondolin/package.json +1 -1
  113. package/examples/extensions/sandbox/package-lock.json +2 -2
  114. package/examples/extensions/sandbox/package.json +1 -1
  115. package/examples/extensions/with-deps/package-lock.json +2 -2
  116. package/examples/extensions/with-deps/package.json +1 -1
  117. package/npm-shrinkwrap.json +27 -26
  118. package/package.json +8 -8
  119. package/dist/bundle/chunks/chunk-3D3G2X5U.js +0 -6
  120. package/dist/bundle/chunks/dist-7DSXV2TY.js +0 -9
@@ -157,7 +157,7 @@ This routing remains configurable through the ordinary action bindings. For exam
157
157
  | Keybinding id | Default | Description |
158
158
  |--------|---------|-------------|
159
159
  | `app.tools.expand` | `ctrl+o` | Collapse or expand tool output |
160
- | `app.message.copy` | `ctrl+x` | Copy the last assistant message, or the selected message in `/tree` |
160
+ | `app.message.copy` | `ctrl+x` | Copy the selected message in `/tree`; otherwise copy the last assistant message, or the active fullscreen text selection when `fullscreenCopyOnSelect` is disabled |
161
161
  | `app.message.followUp` | `alt+enter` (`ctrl+q` on Windows and WSL) | Queue follow-up message |
162
162
  | `app.message.dequeue` | `alt+up` (`alt+q` on Windows and WSL) | Restore queued messages to editor |
163
163
 
@@ -129,7 +129,7 @@ The command output is sent to the model. Use `!!command` to run a command withou
129
129
 
130
130
  ### Switch models
131
131
 
132
- Use `/model` or Ctrl+L to choose a model. Use Shift+Tab to cycle thinking level. Use Ctrl+P / Shift+Ctrl+P to cycle through scoped models.
132
+ Use `/model` or Ctrl+L to choose a model for the current session. Press Ctrl+S in the model picker to save the highlighted model as the startup default. Use `/thinking` to choose a thinking level for the current session, or Ctrl+S in that picker to save the startup default thinking level. Use Shift+Tab to cycle thinking level. Use Ctrl+P / Shift+Ctrl+P to cycle through scoped models.
133
133
 
134
134
  ### Continue later
135
135
 
package/docs/rpc.md CHANGED
@@ -152,6 +152,29 @@ Response:
152
152
  {"type": "response", "command": "abort", "success": true}
153
153
  ```
154
154
 
155
+ #### clear_queue
156
+
157
+ Remove queued steering and follow-up messages and return their text.
158
+
159
+ ```json
160
+ {"type": "clear_queue"}
161
+ ```
162
+
163
+ Response:
164
+ ```json
165
+ {
166
+ "type": "response",
167
+ "command": "clear_queue",
168
+ "success": true,
169
+ "data": {
170
+ "steering": ["Change direction"],
171
+ "followUp": ["Summarize when finished"]
172
+ }
173
+ }
174
+ ```
175
+
176
+ To implement interactive Esc behavior, send `clear_queue` before `abort`, then restore the returned text in the client editor. `abort` continues queued messages when they remain in the session.
177
+
155
178
  #### new_session
156
179
 
157
180
  Start a fresh session. Can be cancelled by a `session_before_switch` extension event handler.
package/docs/settings.md CHANGED
@@ -7,7 +7,7 @@ HUMAIN Terminal uses JSON settings files with project settings overriding global
7
7
  | `~/.humain-terminal/agent/settings.json` | Global (all projects) |
8
8
  | `.humain-terminal/settings.json` | Project (current directory) |
9
9
 
10
- Edit directly or use `/settings` for common options.
10
+ Edit directly or use `/settings` for common options. To save startup model defaults interactively, use `/model` and press Ctrl+S on the desired model. To save the startup thinking level, use `/thinking` and press Ctrl+S.
11
11
 
12
12
  ## Project Trust
13
13
 
@@ -27,9 +27,10 @@ Use `/trust` in interactive mode to save a project trust decision for future ses
27
27
 
28
28
  | Setting | Type | Default | Description |
29
29
  |---------|------|---------|-------------|
30
- | `defaultProvider` | string | - | Default provider (e.g., `"anthropic"`, `"openai"`) |
31
- | `defaultModel` | string | - | Default model ID |
32
- | `defaultThinkingLevel` | string | - | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"` |
30
+ | `defaultProvider` | string | - | Startup provider (e.g., `"anthropic"`, `"openai"`; saved with Ctrl+S in `/model`, or edited manually) |
31
+ | `defaultModel` | string | - | Startup model ID (saved with Ctrl+S in `/model`, or edited manually) |
32
+ | `defaultThinkingLevel` | string | - | Startup thinking level (saved with Ctrl+S in `/thinking`, or edited manually): `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"` |
33
+ | `modelThinkingLevels` | object | - | Per-model startup thinking levels keyed by `"provider/modelId"`; configure from `/settings` → Default thinking level per model or edit manually |
33
34
  | `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
34
35
  | `showCacheMissNotices` | boolean | `false` | Show transcript notices for significant prompt-cache misses and compaction or branch-summary usage |
35
36
  | `thinkingBudgets` | object | - | Custom token budgets per thinking level. Anthropic, Google, and Bedrock use these natively. OpenAI-compatible models use them when `compat.thinkingTokenBudgetField` (or `supportsThinkingTokenBudget`) is set. |
@@ -68,6 +69,7 @@ Use `/trust` in interactive mode to save a project trust decision for future ses
68
69
  | `tuiMode` | string | `"regular"` | Interactive TUI mode: `"regular"` or experimental `"fullscreen"`. Changes from `/settings` apply immediately; `--tui-mode` overrides this setting at startup |
69
70
  | `fullscreenExitOutput` | string | `"transcript"` | Fullscreen exit output: `"transcript"` prints the final transcript and resume hint, while `"resume-hint"` restores the previous screen and prints only the resume hint. Has no effect in regular TUI mode |
70
71
  | `fullscreenScrollbar` | string | `"auto"` | Fullscreen transcript scrollbar: `"auto"` shows it temporarily while scrolling, `"always"` reserves the rightmost column and keeps it visible, and `"hidden"` hides it. Has no effect in regular TUI mode |
72
+ | `fullscreenCopyOnSelect` | boolean | `true` | Automatically copy selected text in fullscreen mode. When disabled, selections stay highlighted and `Ctrl+X` copies the active selection |
71
73
 
72
74
  For VS Code, include `--wait` so HUMAIN Terminal resumes after the editor exits:
73
75
 
@@ -181,6 +183,9 @@ Keep `retry.provider.maxRetries` at `0` unless provider-level retries are explic
181
183
  | `terminal.showImages` | boolean | `true` | Show images in terminal (if supported) |
182
184
  | `terminal.imageWidthCells` | number | `60` | Preferred inline image width in terminal cells |
183
185
  | `terminal.clearOnShrink` | boolean | `false` | Clear empty rows when content shrinks (can cause flicker) |
186
+ | `terminal.hyperlinks` | boolean or `"auto"` | `"auto"` | Override OSC 8 hyperlink support (advanced, JSON-only) |
187
+ | `terminal.images` | string or boolean | `"auto"` | Override image protocol support with `"kitty"`, `"iterm2"`, `false`, or `"auto"` (advanced, JSON-only) |
188
+ | `terminal.trueColor` | boolean or `"auto"` | `"auto"` | Override truecolor support (advanced, JSON-only) |
184
189
  | `images.autoResize` | boolean | `true` | Resize images to 2000x2000 max. Applies to `@file` attachments, `read`, and images returned by tools |
185
190
  | `images.blockImages` | boolean | `false` | Block all images from being sent to LLM |
186
191
 
@@ -319,6 +324,9 @@ See [packages.md](packages.md) for package management details.
319
324
  "defaultProvider": "anthropic",
320
325
  "defaultModel": "claude-sonnet-4-20250514",
321
326
  "defaultThinkingLevel": "medium",
327
+ "modelThinkingLevels": {
328
+ "anthropic/claude-sonnet-4-20250514": "high"
329
+ },
322
330
  "theme": "dark",
323
331
  "compaction": {
324
332
  "enabled": true,
@@ -2,6 +2,18 @@
2
2
 
3
3
  HUMAIN Terminal uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
4
4
 
5
+ ## Capability Overrides
6
+
7
+ Pi auto-detects OSC 8 hyperlinks, inline image protocols, and truecolor. If detection fails behind a terminal proxy or multiplexer, use these advanced overrides:
8
+
9
+ | Capability | Environment variable | JSON setting |
10
+ |------------|----------------------|--------------|
11
+ | OSC 8 hyperlinks | `HUMAIN_TERMINAL_HYPERLINKS=1\|0\|auto` | `terminal.hyperlinks: true\|false\|"auto"` |
12
+ | Inline images | `HUMAIN_TERMINAL_IMAGE_PROTOCOL=kitty\|iterm2\|none\|auto` | `terminal.images: "kitty"\|"iterm2"\|false\|"auto"` |
13
+ | Truecolor | `HUMAIN_TERMINAL_TRUE_COLOR=1\|0\|auto` | `terminal.trueColor: true\|false\|"auto"` |
14
+
15
+ Settings take precedence over environment variables; unset or `auto` preserves detection. Only force capabilities supported by the complete terminal path, since unsupported escape sequences can corrupt rendering.
16
+
5
17
  ## Kitty
6
18
 
7
19
  Works out of the box.
package/docs/usage.md CHANGED
@@ -22,7 +22,7 @@ The editor can be replaced temporarily by built-in UI such as `/settings` or by
22
22
  | File reference | Type `@` to fuzzy-search project files |
23
23
  | Path completion | Press Tab to complete paths |
24
24
  | Multi-line input | Shift+Enter, or Ctrl+Enter on Windows Terminal |
25
- | Copy response | Ctrl+X copies the last assistant message; in `/tree`, it copies the selected message |
25
+ | Copy response | Ctrl+X copies the selected message in `/tree`; otherwise it copies the last assistant message, or the active fullscreen text selection when `fullscreenCopyOnSelect` is disabled |
26
26
  | Images | Paste with Ctrl+V, Alt+V on Windows, or drag into the terminal |
27
27
  | Shell command | `!command` runs and sends output to the model |
28
28
  | Hidden shell command | `!!command` runs without sending output to the model |
@@ -38,9 +38,10 @@ Type `/` in the editor to open command completion. Extensions can register custo
38
38
  |---------|-------------|
39
39
  | `/login`, `/logout` | Manage OAuth or API-key credentials |
40
40
  | [`/llama`](llama-cpp.md) | Download, load, and unload llama.cpp router models |
41
- | `/model` | Switch models |
41
+ | `/model` | Switch models; Ctrl+S in the picker saves the startup default |
42
+ | `/thinking` | Switch thinking level; Ctrl+S in the picker saves the startup default |
42
43
  | `/scoped-models` | Enable/disable models for Ctrl+P cycling |
43
- | `/settings` | Thinking level, theme, message delivery, transport |
44
+ | `/settings` | Theme, message delivery, transport, and other preferences |
44
45
  | `/resume` | Pick from previous sessions |
45
46
  | `/new` | Start a new session |
46
47
  | `/name <name>` | Set session display name |
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
- "version": "0.84.3",
3
+ "version": "0.84.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider-anthropic",
9
- "version": "0.84.3",
9
+ "version": "0.84.4",
10
10
  "dependencies": {
11
- "@anthropic-ai/sdk": "0.120.0"
11
+ "@anthropic-ai/sdk": "0.121.0"
12
12
  }
13
13
  },
14
14
  "node_modules/@anthropic-ai/sdk": {
15
- "version": "0.120.0",
16
- "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.120.0.tgz",
17
- "integrity": "sha512-ZlvmNFT/iIF6JD13rxbbMWD8nvGR0RaUp6yMQnoc+4Af0YjVVe/bIdW1XSQQsoxXAtg1NaT6Vak0LKFlJ4d37Q==",
15
+ "version": "0.121.0",
16
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.121.0.tgz",
17
+ "integrity": "sha512-WFzwcH8l49CZHv0vQ9QQT51VJ1/DLDQfNSs9awpGlnKBdaSnqtdZa+tw/3cxxosTPIgK8uw1GqsJ2dSbCBD1Lg==",
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
20
  "json-schema-to-ts": "^3.1.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.84.3",
4
+ "version": "0.84.4",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.84.3",
4
+ "version": "0.84.4",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
- "version": "0.84.3",
3
+ "version": "0.84.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-gondolin",
9
- "version": "0.84.3",
9
+ "version": "0.84.4",
10
10
  "dependencies": {
11
11
  "@earendil-works/gondolin": "0.12.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
3
  "private": true,
4
- "version": "0.84.3",
4
+ "version": "0.84.4",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "1.14.3",
3
+ "version": "1.14.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.14.3",
9
+ "version": "1.14.4",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "0.0.74"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "1.14.3",
4
+ "version": "1.14.4",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.84.3",
3
+ "version": "0.84.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.84.3",
9
+ "version": "0.84.4",
10
10
  "dependencies": {
11
11
  "ms": "2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.84.3",
4
+ "version": "0.84.4",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@humain/terminal",
3
- "version": "0.0.7",
3
+ "version": "0.0.10",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@humain/terminal",
9
- "version": "0.0.7",
9
+ "version": "0.0.10",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@humain/terminal-contracts": "0.0.1",
12
+ "@humain/terminal-contracts": "0.0.2",
13
13
  "@aws-sdk/client-bedrock-runtime": "3.1119.0",
14
- "@earendil-works/pi-agent-core": "0.84.3",
15
- "@earendil-works/pi-ai": "0.84.3",
16
- "@earendil-works/pi-client": "0.84.3",
17
- "@earendil-works/pi-protocol": "0.84.3",
18
- "@earendil-works/pi-tui": "0.84.3",
14
+ "@earendil-works/pi-agent-core": "0.84.4",
15
+ "@earendil-works/pi-ai": "0.84.4",
16
+ "@earendil-works/pi-client": "0.84.4",
17
+ "@earendil-works/pi-protocol": "0.84.4",
18
+ "@earendil-works/pi-tui": "0.84.4",
19
19
  "@modelcontextprotocol/client": "2.0.0",
20
20
  "@modelcontextprotocol/core": "2.0.0",
21
21
  "@modelcontextprotocol/ext-apps": "1.7.5",
@@ -439,12 +439,12 @@
439
439
  }
440
440
  },
441
441
  "node_modules/@earendil-works/pi-agent-core": {
442
- "version": "0.84.3",
443
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.84.3.tgz",
442
+ "version": "0.84.4",
443
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.84.4.tgz",
444
444
  "license": "MIT",
445
445
  "dependencies": {
446
- "@earendil-works/pi-ai": "^0.84.3",
447
- "@earendil-works/pi-telemetry": "^0.84.3",
446
+ "@earendil-works/pi-ai": "^0.84.4",
447
+ "@earendil-works/pi-telemetry": "^0.84.4",
448
448
  "diff": "9.0.0",
449
449
  "ignore": "7.0.6",
450
450
  "typebox": "1.3.19",
@@ -455,13 +455,13 @@
455
455
  }
456
456
  },
457
457
  "node_modules/@earendil-works/pi-ai": {
458
- "version": "0.84.3",
459
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.3.tgz",
458
+ "version": "0.84.4",
459
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.4.tgz",
460
460
  "license": "MIT",
461
461
  "dependencies": {
462
462
  "@anthropic-ai/sdk": "0.121.0",
463
463
  "@aws-sdk/client-bedrock-runtime": "3.1119.0",
464
- "@earendil-works/pi-telemetry": "^0.84.3",
464
+ "@earendil-works/pi-telemetry": "^0.84.4",
465
465
  "@google/genai": "2.19.0",
466
466
  "@opentelemetry/api": "1.9.1",
467
467
  "@smithy/node-http-handler": "4.11.3",
@@ -479,19 +479,19 @@
479
479
  }
480
480
  },
481
481
  "node_modules/@earendil-works/pi-client": {
482
- "version": "0.84.3",
483
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.84.3.tgz",
482
+ "version": "0.84.4",
483
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.84.4.tgz",
484
484
  "license": "MIT",
485
485
  "dependencies": {
486
- "@earendil-works/pi-protocol": "^0.84.3"
486
+ "@earendil-works/pi-protocol": "^0.84.4"
487
487
  },
488
488
  "engines": {
489
489
  "node": ">=22.22.2"
490
490
  }
491
491
  },
492
492
  "node_modules/@earendil-works/pi-protocol": {
493
- "version": "0.84.3",
494
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.84.3.tgz",
493
+ "version": "0.84.4",
494
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.84.4.tgz",
495
495
  "license": "MIT",
496
496
  "dependencies": {
497
497
  "typebox": "1.3.19"
@@ -501,16 +501,16 @@
501
501
  }
502
502
  },
503
503
  "node_modules/@earendil-works/pi-telemetry": {
504
- "version": "0.84.3",
505
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.84.3.tgz",
504
+ "version": "0.84.4",
505
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.84.4.tgz",
506
506
  "license": "MIT",
507
507
  "engines": {
508
508
  "node": ">=22.22.2"
509
509
  }
510
510
  },
511
511
  "node_modules/@earendil-works/pi-tui": {
512
- "version": "0.84.3",
513
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.84.3.tgz",
512
+ "version": "0.84.4",
513
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.84.4.tgz",
514
514
  "license": "MIT",
515
515
  "dependencies": {
516
516
  "get-east-asian-width": "1.6.0",
@@ -545,8 +545,9 @@
545
545
  "hasInstallScript": true
546
546
  },
547
547
  "node_modules/@humain/terminal-contracts": {
548
- "version": "0.0.1",
549
- "resolved": "https://registry.npmjs.org/@humain/terminal-contracts/-/terminal-contracts-0.0.1.tgz",
548
+ "version": "0.0.2",
549
+ "resolved": "https://registry.npmjs.org/@humain/terminal-contracts/-/terminal-contracts-0.0.2.tgz",
550
+ "integrity": "sha512-YWiHPH1PZxgh8rmeofnfClBqnXc4zcidFf+MbepX1shkpCvzdC+KZijgZZLQTV3XLkyyEJgm48CEMEQCY/D3Fg==",
550
551
  "license": "MIT",
551
552
  "dependencies": {
552
553
  "typebox": "1.3.19"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humain/terminal",
3
- "version": "0.0.7",
3
+ "version": "0.0.10",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "humainTerminalConfig": {
@@ -9,7 +9,7 @@
9
9
  "configDir": ".humain-terminal",
10
10
  "envPrefix": "HUMAIN_TERMINAL",
11
11
  "firstTimeSetup": true,
12
- "upstreamPiVersion": "0.84.3"
12
+ "upstreamPiVersion": "0.84.4"
13
13
  },
14
14
  "piConfig": {
15
15
  "name": "humain-terminal",
@@ -62,13 +62,13 @@
62
62
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
63
63
  },
64
64
  "dependencies": {
65
- "@humain/terminal-contracts": "0.0.1",
65
+ "@humain/terminal-contracts": "0.0.2",
66
66
  "@aws-sdk/client-bedrock-runtime": "3.1119.0",
67
- "@earendil-works/pi-agent-core": "0.84.3",
68
- "@earendil-works/pi-ai": "0.84.3",
69
- "@earendil-works/pi-client": "0.84.3",
70
- "@earendil-works/pi-protocol": "0.84.3",
71
- "@earendil-works/pi-tui": "0.84.3",
67
+ "@earendil-works/pi-agent-core": "0.84.4",
68
+ "@earendil-works/pi-ai": "0.84.4",
69
+ "@earendil-works/pi-client": "0.84.4",
70
+ "@earendil-works/pi-protocol": "0.84.4",
71
+ "@earendil-works/pi-tui": "0.84.4",
72
72
  "@modelcontextprotocol/client": "2.0.0",
73
73
  "@modelcontextprotocol/core": "2.0.0",
74
74
  "@modelcontextprotocol/ext-apps": "1.7.5",
@@ -1,6 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{__commonJS,__require}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){createDebug.debug=createDebug,createDebug.default=createDebug,createDebug.coerce=coerce,createDebug.disable=disable,createDebug.enable=enable,createDebug.enabled=enabled,createDebug.humanize=require_ms(),createDebug.destroy=destroy,Object.keys(env).forEach(key=>{createDebug[key]=env[key]}),createDebug.names=[],createDebug.skips=[],createDebug.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 createDebug.colors[Math.abs(hash)%createDebug.colors.length]}createDebug.selectColor=selectColor;function createDebug(namespace){let prevTime,enableOverride=null,namespacesCache,enabledCache;function debug(...args){if(!debug.enabled)return;let self=debug,curr=Number(new Date),ms=curr-(prevTime||curr);self.diff=ms,self.prev=prevTime,self.curr=curr,prevTime=curr,args[0]=createDebug.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=createDebug.formatters[format];if(typeof formatter=="function"){let val=args[index];match=formatter.call(self,val),args.splice(index,1),index--}return match}),createDebug.formatArgs.call(self,args),(self.log||createDebug.log).apply(self,args)}return debug.namespace=namespace,debug.useColors=createDebug.useColors(),debug.color=createDebug.selectColor(namespace),debug.extend=extend,debug.destroy=createDebug.destroy,Object.defineProperty(debug,"enabled",{enumerable:!0,configurable:!1,get:()=>enableOverride!==null?enableOverride:(namespacesCache!==createDebug.namespaces&&(namespacesCache=createDebug.namespaces,enabledCache=createDebug.enabled(namespace)),enabledCache),set:v=>{enableOverride=v}}),typeof createDebug.init=="function"&&createDebug.init(debug),debug}function extend(namespace,delimiter){let newDebug=createDebug(this.namespace+(typeof delimiter>"u"?":":delimiter)+namespace);return newDebug.log=this.log,newDebug}function enable(namespaces){createDebug.save(namespaces),createDebug.namespaces=namespaces,createDebug.names=[],createDebug.skips=[];let split=(typeof namespaces=="string"?namespaces:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let ns of split)ns[0]==="-"?createDebug.skips.push(ns.slice(1)):createDebug.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=[...createDebug.names,...createDebug.skips.map(namespace=>"-"+namespace)].join(",");return createDebug.enable(""),namespaces}function enabled(name){for(let skip of createDebug.skips)if(matchesTemplate(name,skip))return!1;for(let ns of createDebug.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 createDebug.enable(createDebug.load()),createDebug}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(debug){debug.inspectOpts={};let keys=Object.keys(exports.inspectOpts);for(let i=0;i<keys.length;i++)debug.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()}});export{require_src};
@@ -1,9 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{require_src}from"./chunk-3D3G2X5U.js";import{__commonJS,__require}from"./chunk-JXWJOIH4.js";var require_helpers=__commonJS({"node_modules/gaxios/node_modules/agent-base/dist/helpers.js"(exports){"use strict";var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__setModuleDefault=exports&&exports.__setModuleDefault||(Object.create?(function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}):function(o,v){o.default=v}),__importStar=exports&&exports.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod)k!=="default"&&Object.prototype.hasOwnProperty.call(mod,k)&&__createBinding(result,mod,k);return __setModuleDefault(result,mod),result};Object.defineProperty(exports,"__esModule",{value:!0});exports.req=exports.json=exports.toBuffer=void 0;var http=__importStar(__require("http")),https=__importStar(__require("https"));async function toBuffer(stream){let length=0,chunks=[];for await(let chunk of stream)length+=chunk.length,chunks.push(chunk);return Buffer.concat(chunks,length)}exports.toBuffer=toBuffer;async function json(stream){let str=(await toBuffer(stream)).toString("utf8");try{return JSON.parse(str)}catch(_err){let err=_err;throw err.message+=` (input: ${str})`,err}}exports.json=json;function req(url,opts={}){let req2=((typeof url=="string"?url:url.href).startsWith("https:")?https:http).request(url,opts),promise=new Promise((resolve,reject)=>{req2.once("response",resolve).once("error",reject).end()});return req2.then=promise.then.bind(promise),req2}exports.req=req}});var require_dist=__commonJS({"node_modules/gaxios/node_modules/agent-base/dist/index.js"(exports){"use strict";var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__setModuleDefault=exports&&exports.__setModuleDefault||(Object.create?(function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}):function(o,v){o.default=v}),__importStar=exports&&exports.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod)k!=="default"&&Object.prototype.hasOwnProperty.call(mod,k)&&__createBinding(result,mod,k);return __setModuleDefault(result,mod),result},__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p)&&__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});exports.Agent=void 0;var net=__importStar(__require("net")),http=__importStar(__require("http")),https_1=__require("https");__exportStar(require_helpers(),exports);var INTERNAL=Symbol("AgentBaseInternalState"),Agent=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(`
3
- `).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)?https_1.Agent.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),socket instanceof http.Agent)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)}};exports.Agent=Agent}});var require_parse_proxy_response=__commonJS({"node_modules/gaxios/node_modules/https-proxy-agent/dist/parse-proxy-response.js"(exports){"use strict";var __importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.parseProxyResponse=void 0;var debug_1=__importDefault(require_src()),debug=(0,debug_1.default)("https-proxy-agent:parse-proxy-response");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
4
- \r
5
- `);if(endOfHeaders===-1){debug("have not received end of HTTP headers yet..."),read();return}let headerParts=buffered.slice(0,endOfHeaders).toString("ascii").split(`\r
6
- `),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()})}exports.parseProxyResponse=parseProxyResponse}});var require_dist2=__commonJS({"node_modules/gaxios/node_modules/https-proxy-agent/dist/index.js"(exports){var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__setModuleDefault=exports&&exports.__setModuleDefault||(Object.create?(function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}):function(o,v){o.default=v}),__importStar=exports&&exports.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod)k!=="default"&&Object.prototype.hasOwnProperty.call(mod,k)&&__createBinding(result,mod,k);return __setModuleDefault(result,mod),result},__importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.HttpsProxyAgent=void 0;var net=__importStar(__require("net")),tls=__importStar(__require("tls")),assert_1=__importDefault(__require("assert")),debug_1=__importDefault(require_src()),agent_base_1=require_dist(),url_1=__require("url"),parse_proxy_response_1=require_parse_proxy_response(),debug=(0,debug_1.default)("https-proxy-agent"),setServernameFromNonIpHost=options=>options.servername===void 0&&options.host&&!net.isIP(options.host)?{...options,servername:options.host}:options,HttpsProxyAgent=class extends agent_base_1.Agent{constructor(proxy,opts){super(opts),this.options={path:void 0},this.proxy=typeof proxy=="string"?new url_1.URL(proxy):proxy,this.proxyHeaders=opts?.headers??{},debug("Creating new HttpsProxyAgent instance: %o",this.proxy.href);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"):null,host,port}}async connect(req,opts){let{proxy}=this;if(!opts.host)throw new TypeError('No "host" provided');let socket;proxy.protocol==="https:"?(debug("Creating `tls.Socket`: %o",this.connectOpts),socket=tls.connect(setServernameFromNonIpHost(this.connectOpts))):(debug("Creating `net.Socket`: %o",this.connectOpts),socket=net.connect(this.connectOpts));let headers=typeof this.proxyHeaders=="function"?this.proxyHeaders():{...this.proxyHeaders},host=net.isIPv6(opts.host)?`[${opts.host}]`:opts.host,payload=`CONNECT ${host}:${opts.port} HTTP/1.1\r
7
- `;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
8
- `;let proxyResponsePromise=(0,parse_proxy_response_1.parseProxyResponse)(socket);socket.write(`${payload}\r
9
- `);let{connect,buffered}=await proxyResponsePromise;if(req.emit("proxyConnect",connect),this.emit("proxyConnect",connect,req),connect.statusCode===200)return req.once("socket",resume),opts.secureEndpoint?(debug("Upgrading socket connection to TLS"),tls.connect({...omit(setServernameFromNonIpHost(opts),"host","path","port"),socket})):socket;socket.destroy();let fakeSocket=new net.Socket({writable:!1});return fakeSocket.readable=!0,req.once("socket",s=>{debug("Replaying proxy buffer for failed request"),(0,assert_1.default)(s.listenerCount("data")>0),s.push(buffered),s.push(null)}),fakeSocket}};HttpsProxyAgent.protocols=["http","https"];exports.HttpsProxyAgent=HttpsProxyAgent;function resume(socket){socket.resume()}function omit(obj,...keys){let ret={},key;for(key in obj)keys.includes(key)||(ret[key]=obj[key]);return ret}}});export default require_dist2();