@humain/terminal 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/bundle/chunks/{anthropic-messages-XULXUBIG.js → anthropic-messages-QFCEKGI3.js} +1 -1
  3. package/dist/bundle/chunks/{azure-openai-responses-JEG2XOYC.js → azure-openai-responses-G4ZMHV37.js} +1 -1
  4. package/dist/bundle/chunks/chunk-7T6XCLJF.js +22 -0
  5. package/dist/bundle/chunks/chunk-D6HHRSB5.js +103 -0
  6. package/dist/bundle/chunks/chunk-EY4DWHQU.js +2 -0
  7. package/dist/bundle/chunks/{chunk-RM336IEI.js → chunk-I47ZWR55.js} +486 -509
  8. package/dist/bundle/chunks/{chunk-JUPSJTFQ.js → chunk-K4JAZYQH.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-HPPQHK3J.js → chunk-KKIB2TVR.js} +1 -1
  10. package/dist/bundle/chunks/chunk-LI2YVPWP.js +2 -0
  11. package/dist/bundle/chunks/{chunk-BZQ53VGE.js → chunk-XSR434CO.js} +1 -1
  12. package/dist/bundle/chunks/compat-QCV26HNS.js +2 -0
  13. package/dist/bundle/chunks/dist-PRPIUY3U.js +2 -0
  14. package/dist/bundle/chunks/esm-E7UVEYTO.js +4 -0
  15. package/dist/bundle/chunks/{extract-TRW5FBY6.js → extract-CTIFQZDJ.js} +15 -14
  16. package/dist/bundle/chunks/{google-generative-ai-OX6VSCA6.js → google-generative-ai-RSUU4MWO.js} +1 -1
  17. package/dist/bundle/chunks/{google-vertex-GW76GSS2.js → google-vertex-CKQPOITO.js} +1 -1
  18. package/dist/bundle/chunks/host-WP3MVKS2.js +2 -0
  19. package/dist/bundle/chunks/{node-KOIP55YZ.js → node-NF43OPII.js} +1 -1
  20. package/dist/bundle/chunks/{node-XY3CBY3C.js → node-UMFM7CDZ.js} +1 -1
  21. package/dist/bundle/chunks/{openai-codex-responses-NPLWP6ZC.js → openai-codex-responses-S34V5ZSD.js} +1 -1
  22. package/dist/bundle/chunks/{openai-completions-OT2GTJKC.js → openai-completions-T2IGVUEI.js} +1 -1
  23. package/dist/bundle/chunks/{openai-responses-5A6CR7GI.js → openai-responses-GYZODCT3.js} +1 -1
  24. package/dist/bundle/chunks/readability-LAGF34IB.js +3 -0
  25. package/dist/bundle/chunks/turndown.cjs-HRMZVRUL.js +2 -0
  26. package/dist/bundle/cli.js +1 -1
  27. package/dist/bundle/index.js +1 -1
  28. package/dist/bundle/rpc-entry.js +1 -1
  29. package/dist/cli.js +1 -5
  30. package/dist/core/agent-session.js +2 -2
  31. package/dist/core/agent-session.js.map +1 -1
  32. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  33. package/dist/core/tools/file-mutation-queue.js +21 -8
  34. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  35. package/dist/core/tools/subagent-env.d.ts +18 -0
  36. package/dist/core/tools/subagent-env.d.ts.map +1 -0
  37. package/dist/core/tools/subagent-env.js +43 -0
  38. package/dist/core/tools/subagent-env.js.map +1 -0
  39. package/dist/core/tools/subagent-scheduler.d.ts +31 -0
  40. package/dist/core/tools/subagent-scheduler.d.ts.map +1 -0
  41. package/dist/core/tools/subagent-scheduler.js +203 -0
  42. package/dist/core/tools/subagent-scheduler.js.map +1 -0
  43. package/dist/core/tools/subagent.d.ts +83 -3
  44. package/dist/core/tools/subagent.d.ts.map +1 -1
  45. package/dist/core/tools/subagent.js +214 -76
  46. package/dist/core/tools/subagent.js.map +1 -1
  47. package/dist/humain/index.d.ts.map +1 -1
  48. package/dist/humain/index.js +2 -0
  49. package/dist/humain/index.js.map +1 -1
  50. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  51. package/dist/humain/mcp-adapter/vendor/README.md +125 -19
  52. package/dist/humain/mcp-adapter/vendor/agent-plugin-loader.ts +69 -30
  53. package/dist/humain/mcp-adapter/vendor/agent-plugin-provenance.ts +36 -0
  54. package/dist/humain/mcp-adapter/vendor/claude-plugin-loader.ts +365 -0
  55. package/dist/humain/mcp-adapter/vendor/commands.ts +13 -15
  56. package/dist/humain/mcp-adapter/vendor/config.ts +198 -30
  57. package/dist/humain/mcp-adapter/vendor/consent-manager.ts +40 -9
  58. package/dist/humain/mcp-adapter/vendor/direct-tool-surface.ts +250 -0
  59. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +9 -228
  60. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js +74 -32
  61. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js.map +1 -1
  62. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.d.ts +1 -0
  63. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js +31 -0
  64. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js.map +1 -0
  65. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.d.ts +9 -0
  66. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js +362 -0
  67. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js.map +1 -0
  68. package/dist/humain/mcp-adapter/vendor/dist/config.d.ts +3 -1
  69. package/dist/humain/mcp-adapter/vendor/dist/config.js +189 -27
  70. package/dist/humain/mcp-adapter/vendor/dist/config.js.map +1 -1
  71. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js +7 -16
  72. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js.map +1 -1
  73. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js +5 -17
  74. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js.map +1 -1
  75. package/dist/humain/mcp-adapter/vendor/dist/types.d.ts +30 -4
  76. package/dist/humain/mcp-adapter/vendor/dist/types.js +26 -0
  77. package/dist/humain/mcp-adapter/vendor/dist/types.js.map +1 -1
  78. package/dist/humain/mcp-adapter/vendor/dist/utils.d.ts +6 -0
  79. package/dist/humain/mcp-adapter/vendor/dist/utils.js +65 -6
  80. package/dist/humain/mcp-adapter/vendor/dist/utils.js.map +1 -1
  81. package/dist/humain/mcp-adapter/vendor/host-html-template.ts +20 -19
  82. package/dist/humain/mcp-adapter/vendor/http-ca.ts +84 -0
  83. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +37102 -15103
  84. package/dist/humain/mcp-adapter/vendor/index.ts +828 -164
  85. package/dist/humain/mcp-adapter/vendor/init.ts +48 -10
  86. package/dist/humain/mcp-adapter/vendor/lazy-loader.ts +7 -0
  87. package/dist/humain/mcp-adapter/vendor/mcp-auth-fetch.ts +113 -0
  88. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +256 -77
  89. package/dist/humain/mcp-adapter/vendor/mcp-auth.ts +316 -54
  90. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +45 -18
  91. package/dist/humain/mcp-adapter/vendor/mcp-install.ts +60 -0
  92. package/dist/humain/mcp-adapter/vendor/mcp-oauth-provider.ts +70 -6
  93. package/dist/humain/mcp-adapter/vendor/mcp-output-guard.ts +53 -42
  94. package/dist/humain/mcp-adapter/vendor/mcp-panel-theme.ts +105 -0
  95. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +366 -331
  96. package/dist/humain/mcp-adapter/vendor/mcp-references.ts +9 -14
  97. package/dist/humain/mcp-adapter/vendor/mcp-script-worker.mjs +3 -1
  98. package/dist/humain/mcp-adapter/vendor/mcp-setup-panel.ts +383 -341
  99. package/dist/humain/mcp-adapter/vendor/mcp-status.ts +5 -0
  100. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +7 -16
  101. package/dist/humain/mcp-adapter/vendor/namespace-tools.ts +61 -3
  102. package/dist/humain/mcp-adapter/vendor/oauth.ts +6 -2
  103. package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +5 -17
  104. package/dist/humain/mcp-adapter/vendor/package.json +13 -3
  105. package/dist/humain/mcp-adapter/vendor/prompts.ts +35 -3
  106. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +108 -7
  107. package/dist/humain/mcp-adapter/vendor/runtime-owner.ts +16 -1
  108. package/dist/humain/mcp-adapter/vendor/sampling-handler.ts +9 -32
  109. package/dist/humain/mcp-adapter/vendor/sandbox-proxy-template.ts +20 -93
  110. package/dist/humain/mcp-adapter/vendor/server-manager.ts +227 -40
  111. package/dist/humain/mcp-adapter/vendor/session-approvals.ts +187 -0
  112. package/dist/humain/mcp-adapter/vendor/skills/mcp-scripting/SKILL.md +9 -1
  113. package/dist/humain/mcp-adapter/vendor/state.ts +10 -1
  114. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +10 -22
  115. package/dist/humain/mcp-adapter/vendor/tool-metadata.ts +14 -0
  116. package/dist/humain/mcp-adapter/vendor/types.ts +57 -4
  117. package/dist/humain/mcp-adapter/vendor/ui-server.ts +36 -28
  118. package/dist/humain/mcp-adapter/vendor/utils.ts +64 -6
  119. package/dist/humain/node-http.d.ts +3 -0
  120. package/dist/humain/node-http.d.ts.map +1 -0
  121. package/dist/humain/node-http.js +119 -0
  122. package/dist/humain/node-http.js.map +1 -0
  123. package/dist/humain/node-provider.d.ts +4 -0
  124. package/dist/humain/node-provider.d.ts.map +1 -0
  125. package/dist/humain/node-provider.js +359 -0
  126. package/dist/humain/node-provider.js.map +1 -0
  127. package/dist/humain/web-access/vendor/abortable.d.ts +3 -0
  128. package/dist/humain/web-access/vendor/abortable.d.ts.map +1 -0
  129. package/dist/humain/web-access/vendor/abortable.js +22 -0
  130. package/dist/humain/web-access/vendor/abortable.js.map +1 -0
  131. package/dist/humain/web-access/vendor/crawl4ai.d.ts +9 -0
  132. package/dist/humain/web-access/vendor/crawl4ai.d.ts.map +1 -0
  133. package/dist/humain/web-access/vendor/crawl4ai.js +187 -0
  134. package/dist/humain/web-access/vendor/crawl4ai.js.map +1 -0
  135. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
  136. package/dist/humain/web-access/vendor/credential-source.js +1 -0
  137. package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
  138. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  139. package/dist/humain/web-access/vendor/curator-page.js +20 -2
  140. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  141. package/dist/humain/web-access/vendor/curator-run.d.ts +11 -0
  142. package/dist/humain/web-access/vendor/curator-run.d.ts.map +1 -0
  143. package/dist/humain/web-access/vendor/curator-run.js +38 -0
  144. package/dist/humain/web-access/vendor/curator-run.js.map +1 -0
  145. package/dist/humain/web-access/vendor/curator-server.d.ts +1 -0
  146. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  147. package/dist/humain/web-access/vendor/curator-server.js +2 -0
  148. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  149. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
  150. package/dist/humain/web-access/vendor/duckduckgo.js +1 -1
  151. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
  152. package/dist/humain/web-access/vendor/extract.d.ts +1 -1
  153. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  154. package/dist/humain/web-access/vendor/extract.js +58 -11
  155. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  156. package/dist/humain/web-access/vendor/fetch-params.js +1 -1
  157. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
  158. package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
  159. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  160. package/dist/humain/web-access/vendor/gemini-search.js +12 -5
  161. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  162. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  163. package/dist/humain/web-access/vendor/index.js +23 -19
  164. package/dist/humain/web-access/vendor/index.js.map +1 -1
  165. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
  166. package/dist/humain/web-access/vendor/openai-search.js +40 -14
  167. package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
  168. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  169. package/dist/humain/web-access/vendor/page-query.js +6 -2
  170. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  171. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -1
  172. package/dist/humain/web-access/vendor/query-rewrite.js +6 -2
  173. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -1
  174. package/dist/humain/web-access/vendor/serpapi.d.ts +4 -0
  175. package/dist/humain/web-access/vendor/serpapi.d.ts.map +1 -0
  176. package/dist/humain/web-access/vendor/serpapi.js +215 -0
  177. package/dist/humain/web-access/vendor/serpapi.js.map +1 -0
  178. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
  179. package/dist/humain/web-access/vendor/ssrf-protection.js +5 -1
  180. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
  181. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
  182. package/dist/humain/web-access/vendor/storage.js +9 -0
  183. package/dist/humain/web-access/vendor/storage.js.map +1 -1
  184. package/dist/humain/web-access/vendor/summary-review.d.ts +1 -1
  185. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  186. package/dist/humain/web-access/vendor/summary-review.js +35 -24
  187. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  188. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  189. package/dist/humain/web-access/vendor/utils.js +5 -3
  190. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  191. package/dist/index.js +1 -51
  192. package/dist/main.d.ts.map +1 -1
  193. package/dist/main.js +16 -0
  194. package/dist/main.js.map +1 -1
  195. package/dist/modes/interactive/components/login-dialog.d.ts +7 -2
  196. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  197. package/dist/modes/interactive/components/login-dialog.js +46 -21
  198. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  199. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  200. package/dist/modes/interactive/interactive-mode.js +10 -13
  201. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  202. package/dist/modes/json-event.d.ts +8 -0
  203. package/dist/modes/json-event.d.ts.map +1 -1
  204. package/dist/modes/json-event.js +17 -0
  205. package/dist/modes/json-event.js.map +1 -1
  206. package/dist/modes/print-mode.d.ts.map +1 -1
  207. package/dist/modes/print-mode.js +3 -2
  208. package/dist/modes/print-mode.js.map +1 -1
  209. package/docs/environment-variables.md +8 -0
  210. package/docs/humain-terminal.md +6 -0
  211. package/docs/json.md +16 -0
  212. package/docs/providers.md +19 -1
  213. package/npm-shrinkwrap.json +6 -6
  214. package/package.json +2 -2
  215. package/src/humain/mcp-adapter/UPSTREAM.md +56 -7
  216. package/src/humain/mcp-adapter/upstream.json +6 -4
  217. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  218. package/src/humain/web-access/UPSTREAM.md +18 -8
  219. package/src/humain/web-access/upstream.json +6 -5
  220. package/dist/bundle/chunks/chunk-2LC3S3VV.js +0 -105
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1] - 2026-09-17
4
+
5
+ ## [0.2.0] - 2026-09-17
6
+
7
+ ### Added
8
+
9
+ - **Subagent task graphs.** Parallel `subagent` tasks accept `id`, `dependsOn`, `ownerPaths`, `thinking`, `context` and `onFailure`. Dependents start after their dependencies succeed and are skipped when one fails; siblings with overlapping `ownerPaths` run one at a time; a failed task can retry once or twice with another model or thinking level. Tool `details.taskEvents` records schedule, wait, serialize, start, complete, fail, escalate and skip with timestamps.
10
+ - **Stable child identity.** Every child receives `HUMAIN_TERMINAL_TASK_ID` and `HUMAIN_TERMINAL_PARENT_TASK_ID`, and JSON-mode events from a child carry `taskId`, `parentTaskId` and `depth`. Results carry `taskId`, `parentTaskId`, `depth`, `attempt` and `baseRevision`.
11
+ - **Envelope knobs.** `HUMAIN_TERMINAL_SUBAGENT_MAX_DEPTH` (1 to 3, default 1), `HUMAIN_TERMINAL_SUBAGENT_MAX_CONCURRENCY` (1 to 8, default 4) and `HUMAIN_TERMINAL_SUBAGENT_MAX_TASKS` (1 to 16, default 8).
12
+
13
+ ### Changed
14
+
15
+ - The nested-delegation guard now reports `depth N of M` and honors the configured maximum instead of a fixed depth of 1.
16
+ - Updated the bundled pi-web-access runtime to 0.29.0.
17
+ - Updated the bundled pi-mcp-adapter to 2.34.0.
18
+
19
+ ## [0.1.1] - 2026-09-08
20
+
21
+ ### New Features
22
+
23
+ - **HUMAIN Node login** — Connect with an API key and optional endpoint, discover available coding models, and track session token usage. See [HUMAIN Node](docs/providers.md#humain-node).
24
+
25
+ ### Added
26
+
27
+ - Added HUMAIN Node API-key authentication, dynamic model discovery, OpenAI Responses, Chat Completions, and Anthropic Messages routing, and actionable request diagnostics. See [HUMAIN Node](docs/providers.md#humain-node).
28
+ - Added masked secret entry and cancellable multi-step prompts to interactive provider login.
29
+
30
+ ### Fixed
31
+
32
+ - Respected structured provider retryability and `Retry-After` deadlines in automatic turn retries.
33
+ - Fixed configured HUMAIN Node models being unavailable during initial headless model selection and `--list-models`.
34
+ - Fixed SDK imports and programmatic login against published Pi dependencies by routing package entry points through the bundled runtime.
35
+
3
36
  ## [0.1.0] - 2026-09-08
4
37
 
5
38
  ### New Features
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{splitDeferredTools}from"./chunk-GMWCTUPB.js";import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.js";import{retryProviderRequest}from"./chunk-XNGRGP62.js";import{adjustMaxTokensForThinking,buildBaseOptions,clampMaxTokensToContext,getJsonSchemaToolParameters,getPiUserAgent,resolveJsonSchemaStrictSampling,transformMessages}from"./chunk-TXBQIIIO.js";import{sanitizeSurrogates}from"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-6R7UI4IY.js";import{getProviderEnvValue}from"./chunk-7DDKXS2Q.js";import{parseJsonWithRepair,parseStreamingJson}from"./chunk-D7XAASZM.js";import{calculateCost}from"./chunk-E6KP6V7F.js";import{AssistantMessageEventStream,appendAssistantMessageDiagnostic}from"./chunk-72KO4OMP.js";import{Anthropic}from"./chunk-JUPSJTFQ.js";import"./chunk-JXWJOIH4.js";function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("HUMAIN_TERMINAL_CACHE_RETENTION",env)==="long"||getProviderEnvValue("PI_CACHE_RETENTION",env)==="long"?"long":"short")}function getCacheControl(model,cacheRetention,env){let retention=resolveCacheRetention(cacheRetention,env);if(retention==="none")return{retention};let ttl=retention==="long"&&getAnthropicCompat(model).supportsLongCacheRetention?"1h":void 0;return{retention,cacheControl:{type:"ephemeral",...ttl&&{ttl}}}}var claudeCodeVersion="2.1.251",claudeCodeTools=["Read","Write","Edit","Bash","Grep","Glob","AskUserQuestion","EnterPlanMode","ExitPlanMode","KillShell","NotebookEdit","Skill","Task","TaskOutput","TodoWrite","WebFetch","WebSearch"],ccToolLookup=new Map(claudeCodeTools.map(t=>[t.toLowerCase(),t])),toClaudeCodeName=name=>ccToolLookup.get(name.toLowerCase())??name,fromClaudeCodeName=(name,tools)=>{if(tools&&tools.length>0){let lowerName=name.toLowerCase(),matchedTool=tools.find(tool=>tool.name.toLowerCase()===lowerName);if(matchedTool)return matchedTool.name}return name};function convertContentBlocks(content){if(!content.some(c=>c.type==="image"))return sanitizeSurrogates(content.map(c=>c.text).join(`
2
+ import{splitDeferredTools}from"./chunk-GMWCTUPB.js";import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.js";import{adjustMaxTokensForThinking,buildBaseOptions,clampMaxTokensToContext,getJsonSchemaToolParameters,getPiUserAgent,resolveJsonSchemaStrictSampling,transformMessages}from"./chunk-TXBQIIIO.js";import{retryProviderRequest}from"./chunk-XNGRGP62.js";import{sanitizeSurrogates}from"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-6R7UI4IY.js";import{getProviderEnvValue}from"./chunk-7DDKXS2Q.js";import{parseJsonWithRepair,parseStreamingJson}from"./chunk-D7XAASZM.js";import{calculateCost}from"./chunk-E6KP6V7F.js";import{AssistantMessageEventStream,appendAssistantMessageDiagnostic}from"./chunk-72KO4OMP.js";import{Anthropic}from"./chunk-K4JAZYQH.js";import"./chunk-JXWJOIH4.js";function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("HUMAIN_TERMINAL_CACHE_RETENTION",env)==="long"||getProviderEnvValue("PI_CACHE_RETENTION",env)==="long"?"long":"short")}function getCacheControl(model,cacheRetention,env){let retention=resolveCacheRetention(cacheRetention,env);if(retention==="none")return{retention};let ttl=retention==="long"&&getAnthropicCompat(model).supportsLongCacheRetention?"1h":void 0;return{retention,cacheControl:{type:"ephemeral",...ttl&&{ttl}}}}var claudeCodeVersion="2.1.251",claudeCodeTools=["Read","Write","Edit","Bash","Grep","Glob","AskUserQuestion","EnterPlanMode","ExitPlanMode","KillShell","NotebookEdit","Skill","Task","TaskOutput","TodoWrite","WebFetch","WebSearch"],ccToolLookup=new Map(claudeCodeTools.map(t=>[t.toLowerCase(),t])),toClaudeCodeName=name=>ccToolLookup.get(name.toLowerCase())??name,fromClaudeCodeName=(name,tools)=>{if(tools&&tools.length>0){let lowerName=name.toLowerCase(),matchedTool=tools.find(tool=>tool.name.toLowerCase()===lowerName);if(matchedTool)return matchedTool.name}return name};function convertContentBlocks(content){if(!content.some(c=>c.type==="image"))return sanitizeSurrogates(content.map(c=>c.text).join(`
3
3
  `));let blocks=content.map(block=>block.type==="text"?{type:"text",text:sanitizeSurrogates(block.text)}:{type:"image",source:{type:"base64",media_type:block.mimeType,data:block.data}});return blocks.some(b=>b.type==="text")||blocks.unshift({type:"text",text:"(see attached image)"}),blocks}var FINE_GRAINED_TOOL_STREAMING_BETA="fine-grained-tool-streaming-2025-05-14",INTERLEAVED_THINKING_BETA="interleaved-thinking-2025-05-14",SERVER_SIDE_FALLBACK_BETA="server-side-fallback-2026-07-01",MID_CONVERSATION_OUTPUT_CONFIG_BETA="mid-conversation-output-config-2026-07-01",THINKING_BINDING_CONTROLS_BETA="thinking-binding-controls-2026-08-01";function shouldUseServerSideFallbackBeta(model){return(model.compat?.allowedFallbackModels?.length??0)>0}function getAnthropicCompat(model){return{supportsEagerToolInputStreaming:model.compat?.supportsEagerToolInputStreaming??!0,supportsLongCacheRetention:model.compat?.supportsLongCacheRetention??!0,sendSessionAffinityHeaders:model.compat?.sendSessionAffinityHeaders??!1,supportsCacheControlOnTools:model.compat?.supportsCacheControlOnTools??!0,supportsTemperature:model.compat?.supportsTemperature??!0,allowEmptySignature:model.compat?.allowEmptySignature??!1,supportsStrictTools:model.compat?.supportsStrictTools??!1,supportsToolReferences:model.compat?.supportsToolReferences??defaultSupportsToolReferences(model)}}function defaultSupportsToolReferences(model){if(model.provider!=="anthropic"||model.id.includes("haiku"))return!1;let version=model.id.match(/^claude-(?:opus|sonnet|fable)-(\d+)(?:-(\d+))?(?:-|$)/);if(!version)return!1;let major=Number(version[1]),minor=version[2]&&version[2].length<8?Number(version[2]):0;return major>4||major===4&&minor>=5}function mergeHeaders(...headerSources){let merged={};for(let headers of headerSources)headers&&Object.assign(merged,headers);return merged}function mergeClientHeaders(...headerSources){return mergeHeaders({"User-Agent":getPiUserAgent()},...headerSources)}function hasHeader(headers,name){if(!headers)return!1;let expected=name.toLowerCase();for(let[key,value]of Object.entries(headers))if(key.toLowerCase()===expected&&value!==null&&value.trim().length>0)return!0;return!1}function assertRequestAuth(provider,apiKey,headers){if(!apiKey&&!(hasHeader(headers,"authorization")||hasHeader(headers,"x-api-key")||hasHeader(headers,"cf-aig-authorization")))throw new Error(`No API key for provider: ${provider}`)}var ANTHROPIC_MESSAGE_EVENTS=new Set(["message_start","message_delta","message_stop","content_block_start","content_block_delta","content_block_stop"]);function flushSseEvent(state){if(!state.event&&state.data.length===0)return null;let event={event:state.event,data:state.data.join(`
4
4
  `),raw:[...state.raw]};return state.event=null,state.data=[],state.raw=[],event}function decodeSseLine(line,state){if(line==="")return flushSseEvent(state);if(state.raw.push(line),line.startsWith(":"))return null;let delimiterIndex=line.indexOf(":"),fieldName=delimiterIndex===-1?line:line.slice(0,delimiterIndex),value=delimiterIndex===-1?"":line.slice(delimiterIndex+1);return value.startsWith(" ")&&(value=value.slice(1)),fieldName==="event"?state.event=value:fieldName==="data"&&state.data.push(value),null}function nextLineBreakIndex(text){let carriageReturnIndex=text.indexOf("\r"),newlineIndex=text.indexOf(`
5
5
  `);return carriageReturnIndex===-1?newlineIndex:newlineIndex===-1?carriageReturnIndex:Math.min(carriageReturnIndex,newlineIndex)}function consumeLine(text){let lineBreakIndex=nextLineBreakIndex(text);if(lineBreakIndex===-1)return null;let nextIndex=lineBreakIndex+1;return text[lineBreakIndex]==="\r"&&text[nextIndex]===`
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{convertResponsesMessages,convertResponsesTools,processResponsesStream}from"./chunk-46DC2JD6.js";import{clampOpenAIPromptCacheKey}from"./chunk-PRRNXB7S.js";import{AzureOpenAI}from"./chunk-43O5DDAH.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import"./chunk-PJACZCIR.js";import{retryProviderRequest}from"./chunk-XNGRGP62.js";import{buildBaseOptions,createGrammarToolInputProperties,getPiUserAgent}from"./chunk-TXBQIIIO.js";import"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-6R7UI4IY.js";import{getProviderEnvValue}from"./chunk-7DDKXS2Q.js";import"./chunk-D7XAASZM.js";import{clampThinkingLevel}from"./chunk-E6KP6V7F.js";import{AssistantMessageEventStream}from"./chunk-72KO4OMP.js";import"./chunk-JXWJOIH4.js";var DEFAULT_AZURE_API_VERSION="v1",AZURE_TOOL_CALL_PROVIDERS=new Set(["openai","openai-codex","opencode","azure-openai-responses"]),OPENAI_RESPONSES_MIN_OUTPUT_TOKENS=16;function parseDeploymentNameMap(value){let map=new Map;if(!value)return map;for(let entry of value.split(",")){let trimmed=entry.trim();if(!trimmed)continue;let[modelId,deploymentName]=trimmed.split("=",2);!modelId||!deploymentName||map.set(modelId.trim(),deploymentName.trim())}return map}function resolveDeploymentName(model,options){return options?.azureDeploymentName?options.azureDeploymentName:parseDeploymentNameMap(getProviderEnvValue("AZURE_OPENAI_DEPLOYMENT_NAME_MAP",options?.env)).get(model.id)||model.id}function formatAzureOpenAIError(error){return formatProviderError(normalizeProviderError(error),"Azure OpenAI API error")}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream;return(async()=>{let deploymentName=resolveDeploymentName(model,options),output={role:"assistant",content:[],api:"azure-openai-responses",provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"pending",timestamp:Date.now()};try{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key for provider: ${model.provider}`);let client=createClient(model,apiKey,options),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,model.compat?.supportsOpenAIGrammarTools??!1),params=buildParams(model,context,options,deploymentName,grammarToolInputProperties),nextParams=await options?.onPayload?.(params,model);nextParams!==void 0&&(params=nextParams);let requestOptions={...options?.signal?{signal:options.signal}:{},...options?.timeoutMs!==void 0?{timeout:options.timeoutMs}:{},maxRetries:0},{data:openaiStream,response}=await retryProviderRequest(()=>client.responses.create(params,requestOptions).withResponse(),{maxRetries:options?.maxRetries,maxRetryDelayMs:options?.maxRetryDelayMs,signal:options?.signal});if(await options?.onResponse?.({status:response.status,headers:headersToRecord(response.headers)},model),stream2.push({type:"start",partial:output}),await processResponsesStream(openaiStream,output,stream2,model,{grammarToolInputProperties}),options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="pending")throw new Error("Azure OpenAI Responses stream ended without a stop reason");if(output.stopReason==="aborted"||output.stopReason==="error")throw new Error(output.errorMessage||"An unknown error occurred");stream2.push({type:"done",reason:output.stopReason,message:output}),stream2.end()}catch(error){for(let block of output.content)delete block.index,delete block.partialJson,delete block.customInput;output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=formatAzureOpenAIError(error),stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key for provider: ${model.provider}`);let base={...buildBaseOptions(model,context,options,apiKey),toolChoice:options?.toolChoice},clampedReasoning=options?.reasoning?clampThinkingLevel(model,options.reasoning):void 0;return stream(model,context,{...base,reasoningEffort:clampedReasoning==="off"?void 0:clampedReasoning})};function normalizeAzureBaseUrl(baseUrl){let trimmed=baseUrl.trim().replace(/\/+$/,""),url;try{url=new URL(trimmed)}catch{throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`)}let isAzureHost=url.hostname.endsWith(".openai.azure.com")||url.hostname.endsWith(".cognitiveservices.azure.com")||url.hostname.endsWith(".ai.azure.com"),normalizedPath=url.pathname.replace(/\/+$/,"");return isAzureHost&&(normalizedPath===""||normalizedPath==="/"||normalizedPath==="/openai"||normalizedPath==="/openai/v1/responses")&&(url.pathname="/openai/v1",url.search=""),url.toString().replace(/\/+$/,"")}function buildDefaultBaseUrl(resourceName){return`https://${resourceName}.openai.azure.com/openai/v1`}function resolveAzureConfig(model,options){let apiVersion=options?.azureApiVersion||getProviderEnvValue("AZURE_OPENAI_API_VERSION",options?.env)||DEFAULT_AZURE_API_VERSION,baseUrl=options?.azureBaseUrl?.trim()||getProviderEnvValue("AZURE_OPENAI_BASE_URL",options?.env)?.trim()||void 0,resourceName=options?.azureResourceName||getProviderEnvValue("AZURE_OPENAI_RESOURCE_NAME",options?.env),resolvedBaseUrl=baseUrl;if(!resolvedBaseUrl&&resourceName&&(resolvedBaseUrl=buildDefaultBaseUrl(resourceName)),!resolvedBaseUrl&&model.baseUrl&&(resolvedBaseUrl=model.baseUrl),!resolvedBaseUrl)throw new Error("Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.");return{baseUrl:normalizeAzureBaseUrl(resolvedBaseUrl),apiVersion}}function createClient(model,apiKey,options){let headers={"User-Agent":getPiUserAgent(),...model.headers};options?.headers&&Object.assign(headers,options.headers);let{baseUrl,apiVersion}=resolveAzureConfig(model,options);return new AzureOpenAI({apiKey,apiVersion,dangerouslyAllowBrowser:!0,fetch:options?.fetch,defaultHeaders:headers,baseURL:baseUrl})}function buildParams(model,context,options,deploymentName,grammarToolInputProperties=createGrammarToolInputProperties(context.tools,model.compat?.supportsOpenAIGrammarTools??!1)){let messages=convertResponsesMessages(model,context,AZURE_TOOL_CALL_PROVIDERS,{grammarToolInputProperties}),params={model:deploymentName,input:messages,stream:!0,prompt_cache_key:clampOpenAIPromptCacheKey(options?.sessionId),store:!1};if(options?.maxTokens&&(params.max_output_tokens=Math.max(options.maxTokens,OPENAI_RESPONSES_MIN_OUTPUT_TOKENS)),options?.temperature!==void 0&&(params.temperature=options?.temperature),context.tools&&context.tools.length>0&&(params.tools=convertResponsesTools(context.tools,{supportsStrictMode:model.compat?.supportsStrictMode??!0,supportsOpenAIGrammarTools:model.compat?.supportsOpenAIGrammarTools??!1})),options?.toolChoice!==void 0&&(params.tool_choice=options.toolChoice),model.reasoning)if(options?.reasoningEffort||options?.reasoningSummary){let effort=options?.reasoningEffort?model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort:"medium";params.reasoning={effort,summary:options?.reasoningSummary||"auto"},params.include=["reasoning.encrypted_content"]}else model.thinkingLevelMap?.off!==null&&(params.reasoning={effort:model.thinkingLevelMap?.off??"none"});return options?.samplingParams&&Object.assign(params,options.samplingParams),params}export{stream,streamSimple};
2
+ import{convertResponsesMessages,convertResponsesTools,processResponsesStream}from"./chunk-46DC2JD6.js";import{clampOpenAIPromptCacheKey}from"./chunk-PRRNXB7S.js";import"./chunk-PJACZCIR.js";import{AzureOpenAI}from"./chunk-43O5DDAH.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import{buildBaseOptions,createGrammarToolInputProperties,getPiUserAgent}from"./chunk-TXBQIIIO.js";import{retryProviderRequest}from"./chunk-XNGRGP62.js";import"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-6R7UI4IY.js";import{getProviderEnvValue}from"./chunk-7DDKXS2Q.js";import"./chunk-D7XAASZM.js";import{clampThinkingLevel}from"./chunk-E6KP6V7F.js";import{AssistantMessageEventStream}from"./chunk-72KO4OMP.js";import"./chunk-JXWJOIH4.js";var DEFAULT_AZURE_API_VERSION="v1",AZURE_TOOL_CALL_PROVIDERS=new Set(["openai","openai-codex","opencode","azure-openai-responses"]),OPENAI_RESPONSES_MIN_OUTPUT_TOKENS=16;function parseDeploymentNameMap(value){let map=new Map;if(!value)return map;for(let entry of value.split(",")){let trimmed=entry.trim();if(!trimmed)continue;let[modelId,deploymentName]=trimmed.split("=",2);!modelId||!deploymentName||map.set(modelId.trim(),deploymentName.trim())}return map}function resolveDeploymentName(model,options){return options?.azureDeploymentName?options.azureDeploymentName:parseDeploymentNameMap(getProviderEnvValue("AZURE_OPENAI_DEPLOYMENT_NAME_MAP",options?.env)).get(model.id)||model.id}function formatAzureOpenAIError(error){return formatProviderError(normalizeProviderError(error),"Azure OpenAI API error")}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream;return(async()=>{let deploymentName=resolveDeploymentName(model,options),output={role:"assistant",content:[],api:"azure-openai-responses",provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"pending",timestamp:Date.now()};try{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key for provider: ${model.provider}`);let client=createClient(model,apiKey,options),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,model.compat?.supportsOpenAIGrammarTools??!1),params=buildParams(model,context,options,deploymentName,grammarToolInputProperties),nextParams=await options?.onPayload?.(params,model);nextParams!==void 0&&(params=nextParams);let requestOptions={...options?.signal?{signal:options.signal}:{},...options?.timeoutMs!==void 0?{timeout:options.timeoutMs}:{},maxRetries:0},{data:openaiStream,response}=await retryProviderRequest(()=>client.responses.create(params,requestOptions).withResponse(),{maxRetries:options?.maxRetries,maxRetryDelayMs:options?.maxRetryDelayMs,signal:options?.signal});if(await options?.onResponse?.({status:response.status,headers:headersToRecord(response.headers)},model),stream2.push({type:"start",partial:output}),await processResponsesStream(openaiStream,output,stream2,model,{grammarToolInputProperties}),options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="pending")throw new Error("Azure OpenAI Responses stream ended without a stop reason");if(output.stopReason==="aborted"||output.stopReason==="error")throw new Error(output.errorMessage||"An unknown error occurred");stream2.push({type:"done",reason:output.stopReason,message:output}),stream2.end()}catch(error){for(let block of output.content)delete block.index,delete block.partialJson,delete block.customInput;output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=formatAzureOpenAIError(error),stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key for provider: ${model.provider}`);let base={...buildBaseOptions(model,context,options,apiKey),toolChoice:options?.toolChoice},clampedReasoning=options?.reasoning?clampThinkingLevel(model,options.reasoning):void 0;return stream(model,context,{...base,reasoningEffort:clampedReasoning==="off"?void 0:clampedReasoning})};function normalizeAzureBaseUrl(baseUrl){let trimmed=baseUrl.trim().replace(/\/+$/,""),url;try{url=new URL(trimmed)}catch{throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`)}let isAzureHost=url.hostname.endsWith(".openai.azure.com")||url.hostname.endsWith(".cognitiveservices.azure.com")||url.hostname.endsWith(".ai.azure.com"),normalizedPath=url.pathname.replace(/\/+$/,"");return isAzureHost&&(normalizedPath===""||normalizedPath==="/"||normalizedPath==="/openai"||normalizedPath==="/openai/v1/responses")&&(url.pathname="/openai/v1",url.search=""),url.toString().replace(/\/+$/,"")}function buildDefaultBaseUrl(resourceName){return`https://${resourceName}.openai.azure.com/openai/v1`}function resolveAzureConfig(model,options){let apiVersion=options?.azureApiVersion||getProviderEnvValue("AZURE_OPENAI_API_VERSION",options?.env)||DEFAULT_AZURE_API_VERSION,baseUrl=options?.azureBaseUrl?.trim()||getProviderEnvValue("AZURE_OPENAI_BASE_URL",options?.env)?.trim()||void 0,resourceName=options?.azureResourceName||getProviderEnvValue("AZURE_OPENAI_RESOURCE_NAME",options?.env),resolvedBaseUrl=baseUrl;if(!resolvedBaseUrl&&resourceName&&(resolvedBaseUrl=buildDefaultBaseUrl(resourceName)),!resolvedBaseUrl&&model.baseUrl&&(resolvedBaseUrl=model.baseUrl),!resolvedBaseUrl)throw new Error("Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.");return{baseUrl:normalizeAzureBaseUrl(resolvedBaseUrl),apiVersion}}function createClient(model,apiKey,options){let headers={"User-Agent":getPiUserAgent(),...model.headers};options?.headers&&Object.assign(headers,options.headers);let{baseUrl,apiVersion}=resolveAzureConfig(model,options);return new AzureOpenAI({apiKey,apiVersion,dangerouslyAllowBrowser:!0,fetch:options?.fetch,defaultHeaders:headers,baseURL:baseUrl})}function buildParams(model,context,options,deploymentName,grammarToolInputProperties=createGrammarToolInputProperties(context.tools,model.compat?.supportsOpenAIGrammarTools??!1)){let messages=convertResponsesMessages(model,context,AZURE_TOOL_CALL_PROVIDERS,{grammarToolInputProperties}),params={model:deploymentName,input:messages,stream:!0,prompt_cache_key:clampOpenAIPromptCacheKey(options?.sessionId),store:!1};if(options?.maxTokens&&(params.max_output_tokens=Math.max(options.maxTokens,OPENAI_RESPONSES_MIN_OUTPUT_TOKENS)),options?.temperature!==void 0&&(params.temperature=options?.temperature),context.tools&&context.tools.length>0&&(params.tools=convertResponsesTools(context.tools,{supportsStrictMode:model.compat?.supportsStrictMode??!0,supportsOpenAIGrammarTools:model.compat?.supportsOpenAIGrammarTools??!1})),options?.toolChoice!==void 0&&(params.tool_choice=options.toolChoice),model.reasoning)if(options?.reasoningEffort||options?.reasoningSummary){let effort=options?.reasoningEffort?model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort:"medium";params.reasoning={effort,summary:options?.reasoningSummary||"auto"},params.include=["reasoning.encrypted_content"]}else model.thinkingLevelMap?.off!==null&&(params.reasoning={effort:model.thinkingLevelMap?.off??"none"});return options?.samplingParams&&Object.assign(params,options.samplingParams),params}export{stream,streamSimple};