@humain/terminal 0.1.1 → 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 (193) hide show
  1. package/CHANGELOG.md +16 -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-LYAMSPR2.js → chunk-I47ZWR55.js} +483 -506
  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/core/tools/file-mutation-queue.d.ts.map +1 -1
  30. package/dist/core/tools/file-mutation-queue.js +21 -8
  31. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  32. package/dist/core/tools/subagent-env.d.ts +18 -0
  33. package/dist/core/tools/subagent-env.d.ts.map +1 -0
  34. package/dist/core/tools/subagent-env.js +43 -0
  35. package/dist/core/tools/subagent-env.js.map +1 -0
  36. package/dist/core/tools/subagent-scheduler.d.ts +31 -0
  37. package/dist/core/tools/subagent-scheduler.d.ts.map +1 -0
  38. package/dist/core/tools/subagent-scheduler.js +203 -0
  39. package/dist/core/tools/subagent-scheduler.js.map +1 -0
  40. package/dist/core/tools/subagent.d.ts +83 -3
  41. package/dist/core/tools/subagent.d.ts.map +1 -1
  42. package/dist/core/tools/subagent.js +214 -76
  43. package/dist/core/tools/subagent.js.map +1 -1
  44. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  45. package/dist/humain/mcp-adapter/vendor/README.md +125 -19
  46. package/dist/humain/mcp-adapter/vendor/agent-plugin-loader.ts +69 -30
  47. package/dist/humain/mcp-adapter/vendor/agent-plugin-provenance.ts +36 -0
  48. package/dist/humain/mcp-adapter/vendor/claude-plugin-loader.ts +365 -0
  49. package/dist/humain/mcp-adapter/vendor/commands.ts +13 -15
  50. package/dist/humain/mcp-adapter/vendor/config.ts +198 -30
  51. package/dist/humain/mcp-adapter/vendor/consent-manager.ts +40 -9
  52. package/dist/humain/mcp-adapter/vendor/direct-tool-surface.ts +250 -0
  53. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +9 -228
  54. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js +74 -32
  55. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js.map +1 -1
  56. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.d.ts +1 -0
  57. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js +31 -0
  58. package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-provenance.js.map +1 -0
  59. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.d.ts +9 -0
  60. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js +362 -0
  61. package/dist/humain/mcp-adapter/vendor/dist/claude-plugin-loader.js.map +1 -0
  62. package/dist/humain/mcp-adapter/vendor/dist/config.d.ts +3 -1
  63. package/dist/humain/mcp-adapter/vendor/dist/config.js +189 -27
  64. package/dist/humain/mcp-adapter/vendor/dist/config.js.map +1 -1
  65. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js +7 -16
  66. package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js.map +1 -1
  67. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js +5 -17
  68. package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js.map +1 -1
  69. package/dist/humain/mcp-adapter/vendor/dist/types.d.ts +30 -4
  70. package/dist/humain/mcp-adapter/vendor/dist/types.js +26 -0
  71. package/dist/humain/mcp-adapter/vendor/dist/types.js.map +1 -1
  72. package/dist/humain/mcp-adapter/vendor/dist/utils.d.ts +6 -0
  73. package/dist/humain/mcp-adapter/vendor/dist/utils.js +65 -6
  74. package/dist/humain/mcp-adapter/vendor/dist/utils.js.map +1 -1
  75. package/dist/humain/mcp-adapter/vendor/host-html-template.ts +20 -19
  76. package/dist/humain/mcp-adapter/vendor/http-ca.ts +84 -0
  77. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +37102 -15103
  78. package/dist/humain/mcp-adapter/vendor/index.ts +828 -164
  79. package/dist/humain/mcp-adapter/vendor/init.ts +48 -10
  80. package/dist/humain/mcp-adapter/vendor/lazy-loader.ts +7 -0
  81. package/dist/humain/mcp-adapter/vendor/mcp-auth-fetch.ts +113 -0
  82. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +256 -77
  83. package/dist/humain/mcp-adapter/vendor/mcp-auth.ts +316 -54
  84. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +45 -18
  85. package/dist/humain/mcp-adapter/vendor/mcp-install.ts +60 -0
  86. package/dist/humain/mcp-adapter/vendor/mcp-oauth-provider.ts +70 -6
  87. package/dist/humain/mcp-adapter/vendor/mcp-output-guard.ts +53 -42
  88. package/dist/humain/mcp-adapter/vendor/mcp-panel-theme.ts +105 -0
  89. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +366 -331
  90. package/dist/humain/mcp-adapter/vendor/mcp-references.ts +9 -14
  91. package/dist/humain/mcp-adapter/vendor/mcp-script-worker.mjs +3 -1
  92. package/dist/humain/mcp-adapter/vendor/mcp-setup-panel.ts +383 -341
  93. package/dist/humain/mcp-adapter/vendor/mcp-status.ts +5 -0
  94. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +7 -16
  95. package/dist/humain/mcp-adapter/vendor/namespace-tools.ts +61 -3
  96. package/dist/humain/mcp-adapter/vendor/oauth.ts +6 -2
  97. package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +5 -17
  98. package/dist/humain/mcp-adapter/vendor/package.json +13 -3
  99. package/dist/humain/mcp-adapter/vendor/prompts.ts +35 -3
  100. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +108 -7
  101. package/dist/humain/mcp-adapter/vendor/runtime-owner.ts +16 -1
  102. package/dist/humain/mcp-adapter/vendor/sampling-handler.ts +9 -32
  103. package/dist/humain/mcp-adapter/vendor/sandbox-proxy-template.ts +20 -93
  104. package/dist/humain/mcp-adapter/vendor/server-manager.ts +227 -40
  105. package/dist/humain/mcp-adapter/vendor/session-approvals.ts +187 -0
  106. package/dist/humain/mcp-adapter/vendor/skills/mcp-scripting/SKILL.md +9 -1
  107. package/dist/humain/mcp-adapter/vendor/state.ts +10 -1
  108. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +10 -22
  109. package/dist/humain/mcp-adapter/vendor/tool-metadata.ts +14 -0
  110. package/dist/humain/mcp-adapter/vendor/types.ts +57 -4
  111. package/dist/humain/mcp-adapter/vendor/ui-server.ts +36 -28
  112. package/dist/humain/mcp-adapter/vendor/utils.ts +64 -6
  113. package/dist/humain/web-access/vendor/abortable.d.ts +3 -0
  114. package/dist/humain/web-access/vendor/abortable.d.ts.map +1 -0
  115. package/dist/humain/web-access/vendor/abortable.js +22 -0
  116. package/dist/humain/web-access/vendor/abortable.js.map +1 -0
  117. package/dist/humain/web-access/vendor/crawl4ai.d.ts +9 -0
  118. package/dist/humain/web-access/vendor/crawl4ai.d.ts.map +1 -0
  119. package/dist/humain/web-access/vendor/crawl4ai.js +187 -0
  120. package/dist/humain/web-access/vendor/crawl4ai.js.map +1 -0
  121. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
  122. package/dist/humain/web-access/vendor/credential-source.js +1 -0
  123. package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
  124. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  125. package/dist/humain/web-access/vendor/curator-page.js +20 -2
  126. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  127. package/dist/humain/web-access/vendor/curator-run.d.ts +11 -0
  128. package/dist/humain/web-access/vendor/curator-run.d.ts.map +1 -0
  129. package/dist/humain/web-access/vendor/curator-run.js +38 -0
  130. package/dist/humain/web-access/vendor/curator-run.js.map +1 -0
  131. package/dist/humain/web-access/vendor/curator-server.d.ts +1 -0
  132. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  133. package/dist/humain/web-access/vendor/curator-server.js +2 -0
  134. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  135. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
  136. package/dist/humain/web-access/vendor/duckduckgo.js +1 -1
  137. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
  138. package/dist/humain/web-access/vendor/extract.d.ts +1 -1
  139. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  140. package/dist/humain/web-access/vendor/extract.js +58 -11
  141. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  142. package/dist/humain/web-access/vendor/fetch-params.js +1 -1
  143. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
  144. package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
  145. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  146. package/dist/humain/web-access/vendor/gemini-search.js +12 -5
  147. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  148. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  149. package/dist/humain/web-access/vendor/index.js +23 -19
  150. package/dist/humain/web-access/vendor/index.js.map +1 -1
  151. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
  152. package/dist/humain/web-access/vendor/openai-search.js +40 -14
  153. package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
  154. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  155. package/dist/humain/web-access/vendor/page-query.js +6 -2
  156. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  157. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -1
  158. package/dist/humain/web-access/vendor/query-rewrite.js +6 -2
  159. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -1
  160. package/dist/humain/web-access/vendor/serpapi.d.ts +4 -0
  161. package/dist/humain/web-access/vendor/serpapi.d.ts.map +1 -0
  162. package/dist/humain/web-access/vendor/serpapi.js +215 -0
  163. package/dist/humain/web-access/vendor/serpapi.js.map +1 -0
  164. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
  165. package/dist/humain/web-access/vendor/ssrf-protection.js +5 -1
  166. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
  167. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
  168. package/dist/humain/web-access/vendor/storage.js +9 -0
  169. package/dist/humain/web-access/vendor/storage.js.map +1 -1
  170. package/dist/humain/web-access/vendor/summary-review.d.ts +1 -1
  171. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  172. package/dist/humain/web-access/vendor/summary-review.js +35 -24
  173. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  174. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  175. package/dist/humain/web-access/vendor/utils.js +5 -3
  176. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  177. package/dist/modes/json-event.d.ts +8 -0
  178. package/dist/modes/json-event.d.ts.map +1 -1
  179. package/dist/modes/json-event.js +17 -0
  180. package/dist/modes/json-event.js.map +1 -1
  181. package/dist/modes/print-mode.d.ts.map +1 -1
  182. package/dist/modes/print-mode.js +3 -2
  183. package/dist/modes/print-mode.js.map +1 -1
  184. package/docs/environment-variables.md +8 -0
  185. package/docs/json.md +16 -0
  186. package/npm-shrinkwrap.json +6 -6
  187. package/package.json +2 -2
  188. package/src/humain/mcp-adapter/UPSTREAM.md +56 -7
  189. package/src/humain/mcp-adapter/upstream.json +6 -4
  190. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +78 -0
  191. package/src/humain/web-access/UPSTREAM.md +18 -8
  192. package/src/humain/web-access/upstream.json +6 -5
  193. package/dist/bundle/chunks/chunk-2LC3S3VV.js +0 -105
@@ -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{OpenAI}from"./chunk-43O5DDAH.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import"./chunk-PJACZCIR.js";import{splitDeferredTools}from"./chunk-GMWCTUPB.js";import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.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 OPENAI_TOOL_CALL_PROVIDERS=new Set(["openai","openai-codex","opencode"]),OPENAI_RESPONSES_MIN_OUTPUT_TOKENS=16;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 getClientApiKey(provider,apiKey,headers){if(apiKey)return apiKey;if(hasHeader(headers,"authorization")||hasHeader(headers,"cf-aig-authorization"))return"unused";throw new Error(`No API key for provider: ${provider}`)}function detectSessionAffinityFormat(model){return model.provider==="openrouter"||model.baseUrl.includes("openrouter.ai")?"openrouter":"openai"}function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("HUMAIN_TERMINAL_CACHE_RETENTION",env)==="long"||getProviderEnvValue("PI_CACHE_RETENTION",env)==="long"?"long":"short")}function getCompat(model){return{supportsDeveloperRole:model.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:model.compat?.sessionAffinityFormat??detectSessionAffinityFormat(model),supportsLongCacheRetention:model.compat?.supportsLongCacheRetention??!0,supportsStrictMode:model.compat?.supportsStrictMode??!1,supportsOpenAIGrammarTools:model.compat?.supportsOpenAIGrammarTools??!1,supportsAdditionalTools:model.compat?.supportsAdditionalTools??!1,supportsToolSearch:model.compat?.supportsToolSearch??!1,supportsExplicitPromptCacheMode:model.compat?.supportsExplicitPromptCacheMode??!1,supportsMaxOutputTokens:model.compat?.supportsMaxOutputTokens??!0}}function getPromptCacheRetention(compat,cacheRetention){return cacheRetention==="long"&&compat.supportsLongCacheRetention&&!compat.supportsExplicitPromptCacheMode?"24h":void 0}function getPromptCacheOptions(compat,cacheRetention){if(compat.supportsExplicitPromptCacheMode){if(cacheRetention==="none")return{mode:"explicit"};if(cacheRetention==="long"&&compat.supportsLongCacheRetention)return{ttl:"30m"}}}function formatOpenAIResponsesError(error){return formatProviderError(normalizeProviderError(error),"OpenAI API error")}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream;return(async()=>{let output={role:"assistant",content:[],api:model.api,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=getClientApiKey(model.provider,options?.apiKey,options?.headers),cacheSessionId=resolveCacheRetention(options?.cacheRetention,options?.env)==="none"?void 0:options?.sessionId,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,compat.supportsOpenAIGrammarTools),client=createClient(model,context,apiKey,options?.headers,options?.fetch,cacheSessionId),params=buildParams(model,context,options,compat,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,{serviceTier:options?.serviceTier,grammarToolInputProperties,applyServiceTierPricing:(usage,serviceTier)=>applyServiceTierPricing(usage,serviceTier,model)}),options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="pending")throw new Error("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=formatOpenAIResponsesError(error),stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{getClientApiKey(model.provider,options?.apiKey,options?.headers);let base={...buildBaseOptions(model,context,options,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 createClient(model,context,apiKey,optionsHeaders,fetch,sessionId){let compat=getCompat(model),headers={"User-Agent":getPiUserAgent(),...model.headers};if(model.provider==="github-copilot"){let hasImages=hasCopilotVisionInput(context.messages),copilotHeaders=buildCopilotDynamicHeaders({messages:context.messages,hasImages});Object.assign(headers,copilotHeaders)}return sessionId&&(compat.sessionAffinityFormat==="openrouter"?headers["x-session-id"]=sessionId:(compat.sessionAffinityFormat==="openai"&&(headers.session_id=sessionId),headers["x-client-request-id"]=sessionId)),optionsHeaders&&Object.assign(headers,optionsHeaders),new OpenAI({apiKey,baseURL:model.baseUrl,dangerouslyAllowBrowser:!0,fetch,defaultHeaders:headers})}function buildParams(model,context,options,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,compat.supportsOpenAIGrammarTools)){let deferredToolsMode=compat.supportsAdditionalTools?"additional-tools":compat.supportsToolSearch?"tool-search":void 0,toolPlacement=splitDeferredTools(context,deferredToolsMode!==void 0),messages=convertResponsesMessages(model,context,OPENAI_TOOL_CALL_PROVIDERS,{grammarToolInputProperties,deferredTools:toolPlacement.deferred,deferredToolsMode,toolOptions:{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools}}),cacheRetention=resolveCacheRetention(options?.cacheRetention,options?.env),params={model:model.id,input:messages,stream:!0,prompt_cache_key:cacheRetention==="none"?void 0:clampOpenAIPromptCacheKey(options?.sessionId),prompt_cache_retention:getPromptCacheRetention(compat,cacheRetention),prompt_cache_options:getPromptCacheOptions(compat,cacheRetention),store:!1};if(options?.maxTokens&&compat.supportsMaxOutputTokens&&(params.max_output_tokens=Math.max(options.maxTokens,OPENAI_RESPONSES_MIN_OUTPUT_TOKENS)),options?.temperature!==void 0&&(params.temperature=options?.temperature),options?.serviceTier!==void 0&&(params.service_tier=options.serviceTier),toolPlacement.immediate.length>0&&(params.tools=convertResponsesTools(toolPlacement.immediate,{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools})),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.provider!=="github-copilot"&&model.thinkingLevelMap?.off!==null&&(params.reasoning={effort:model.thinkingLevelMap?.off??"none"});model.provider==="xai"&&(params.include=["reasoning.encrypted_content"])}return options?.samplingParams&&Object.assign(params,options.samplingParams),params}function getServiceTierCostMultiplier(model,serviceTier){switch(serviceTier){case"flex":return .5;case"priority":return model.id==="gpt-5.5"?2.5:2;default:return 1}}function applyServiceTierPricing(usage,serviceTier,model){let multiplier=getServiceTierCostMultiplier(model,serviceTier);multiplier!==1&&(usage.cost.input*=multiplier,usage.cost.output*=multiplier,usage.cost.cacheRead*=multiplier,usage.cost.cacheWrite*=multiplier,usage.cost.total=usage.cost.input+usage.cost.output+usage.cost.cacheRead+usage.cost.cacheWrite)}export{stream,streamSimple};
2
+ import{splitDeferredTools}from"./chunk-GMWCTUPB.js";import{convertResponsesMessages,convertResponsesTools,processResponsesStream}from"./chunk-46DC2JD6.js";import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.js";import{clampOpenAIPromptCacheKey}from"./chunk-PRRNXB7S.js";import"./chunk-PJACZCIR.js";import{OpenAI}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 OPENAI_TOOL_CALL_PROVIDERS=new Set(["openai","openai-codex","opencode"]),OPENAI_RESPONSES_MIN_OUTPUT_TOKENS=16;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 getClientApiKey(provider,apiKey,headers){if(apiKey)return apiKey;if(hasHeader(headers,"authorization")||hasHeader(headers,"cf-aig-authorization"))return"unused";throw new Error(`No API key for provider: ${provider}`)}function detectSessionAffinityFormat(model){return model.provider==="openrouter"||model.baseUrl.includes("openrouter.ai")?"openrouter":"openai"}function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("HUMAIN_TERMINAL_CACHE_RETENTION",env)==="long"||getProviderEnvValue("PI_CACHE_RETENTION",env)==="long"?"long":"short")}function getCompat(model){return{supportsDeveloperRole:model.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:model.compat?.sessionAffinityFormat??detectSessionAffinityFormat(model),supportsLongCacheRetention:model.compat?.supportsLongCacheRetention??!0,supportsStrictMode:model.compat?.supportsStrictMode??!1,supportsOpenAIGrammarTools:model.compat?.supportsOpenAIGrammarTools??!1,supportsAdditionalTools:model.compat?.supportsAdditionalTools??!1,supportsToolSearch:model.compat?.supportsToolSearch??!1,supportsExplicitPromptCacheMode:model.compat?.supportsExplicitPromptCacheMode??!1,supportsMaxOutputTokens:model.compat?.supportsMaxOutputTokens??!0}}function getPromptCacheRetention(compat,cacheRetention){return cacheRetention==="long"&&compat.supportsLongCacheRetention&&!compat.supportsExplicitPromptCacheMode?"24h":void 0}function getPromptCacheOptions(compat,cacheRetention){if(compat.supportsExplicitPromptCacheMode){if(cacheRetention==="none")return{mode:"explicit"};if(cacheRetention==="long"&&compat.supportsLongCacheRetention)return{ttl:"30m"}}}function formatOpenAIResponsesError(error){return formatProviderError(normalizeProviderError(error),"OpenAI API error")}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream;return(async()=>{let output={role:"assistant",content:[],api:model.api,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=getClientApiKey(model.provider,options?.apiKey,options?.headers),cacheSessionId=resolveCacheRetention(options?.cacheRetention,options?.env)==="none"?void 0:options?.sessionId,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,compat.supportsOpenAIGrammarTools),client=createClient(model,context,apiKey,options?.headers,options?.fetch,cacheSessionId),params=buildParams(model,context,options,compat,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,{serviceTier:options?.serviceTier,grammarToolInputProperties,applyServiceTierPricing:(usage,serviceTier)=>applyServiceTierPricing(usage,serviceTier,model)}),options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="pending")throw new Error("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=formatOpenAIResponsesError(error),stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{getClientApiKey(model.provider,options?.apiKey,options?.headers);let base={...buildBaseOptions(model,context,options,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 createClient(model,context,apiKey,optionsHeaders,fetch,sessionId){let compat=getCompat(model),headers={"User-Agent":getPiUserAgent(),...model.headers};if(model.provider==="github-copilot"){let hasImages=hasCopilotVisionInput(context.messages),copilotHeaders=buildCopilotDynamicHeaders({messages:context.messages,hasImages});Object.assign(headers,copilotHeaders)}return sessionId&&(compat.sessionAffinityFormat==="openrouter"?headers["x-session-id"]=sessionId:(compat.sessionAffinityFormat==="openai"&&(headers.session_id=sessionId),headers["x-client-request-id"]=sessionId)),optionsHeaders&&Object.assign(headers,optionsHeaders),new OpenAI({apiKey,baseURL:model.baseUrl,dangerouslyAllowBrowser:!0,fetch,defaultHeaders:headers})}function buildParams(model,context,options,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(context.tools,compat.supportsOpenAIGrammarTools)){let deferredToolsMode=compat.supportsAdditionalTools?"additional-tools":compat.supportsToolSearch?"tool-search":void 0,toolPlacement=splitDeferredTools(context,deferredToolsMode!==void 0),messages=convertResponsesMessages(model,context,OPENAI_TOOL_CALL_PROVIDERS,{grammarToolInputProperties,deferredTools:toolPlacement.deferred,deferredToolsMode,toolOptions:{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools}}),cacheRetention=resolveCacheRetention(options?.cacheRetention,options?.env),params={model:model.id,input:messages,stream:!0,prompt_cache_key:cacheRetention==="none"?void 0:clampOpenAIPromptCacheKey(options?.sessionId),prompt_cache_retention:getPromptCacheRetention(compat,cacheRetention),prompt_cache_options:getPromptCacheOptions(compat,cacheRetention),store:!1};if(options?.maxTokens&&compat.supportsMaxOutputTokens&&(params.max_output_tokens=Math.max(options.maxTokens,OPENAI_RESPONSES_MIN_OUTPUT_TOKENS)),options?.temperature!==void 0&&(params.temperature=options?.temperature),options?.serviceTier!==void 0&&(params.service_tier=options.serviceTier),toolPlacement.immediate.length>0&&(params.tools=convertResponsesTools(toolPlacement.immediate,{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools})),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.provider!=="github-copilot"&&model.thinkingLevelMap?.off!==null&&(params.reasoning={effort:model.thinkingLevelMap?.off??"none"});model.provider==="xai"&&(params.include=["reasoning.encrypted_content"])}return options?.samplingParams&&Object.assign(params,options.samplingParams),params}function getServiceTierCostMultiplier(model,serviceTier){switch(serviceTier){case"flex":return .5;case"priority":return model.id==="gpt-5.5"?2.5:2;default:return 1}}function applyServiceTierPricing(usage,serviceTier,model){let multiplier=getServiceTierCostMultiplier(model,serviceTier);multiplier!==1&&(usage.cost.input*=multiplier,usage.cost.output*=multiplier,usage.cost.cacheRead*=multiplier,usage.cost.cacheWrite*=multiplier,usage.cost.total=usage.cost.input+usage.cost.output+usage.cost.cacheRead+usage.cost.cacheWrite)}export{stream,streamSimple};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{__commonJS}from"./chunk-JXWJOIH4.js";var require_Readability=__commonJS({"node_modules/@mozilla/readability/Readability.js"(exports,module){function Readability(doc,options){if(options&&options.documentElement)doc=options,options=arguments[2];else if(!doc||!doc.documentElement)throw new Error("First argument to Readability constructor should be a document object.");if(options=options||{},this._doc=doc,this._docJSDOMParser=this._doc.firstChild.__JSDOMParser__,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._metadata={},this._debug=!!options.debug,this._maxElemsToParse=options.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=options.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=options.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(options.classesToPreserve||[]),this._keepClasses=!!options.keepClasses,this._serializer=options.serializer||function(el){return el.innerHTML},this._disableJSONLD=!!options.disableJSONLD,this._allowedVideoRegex=options.allowedVideoRegex||this.REGEXPS.videos,this._linkDensityModifier=options.linkDensityModifier||0,this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug){let logNode=function(node){if(node.nodeType==node.TEXT_NODE)return`${node.nodeName} ("${node.textContent}")`;let attrPairs=Array.from(node.attributes||[],function(attr){return`${attr.name}="${attr.value}"`}).join(" ");return`<${node.localName} ${attrPairs}>`};this.log=function(){if(typeof console<"u"){let args=Array.from(arguments,arg=>arg&&arg.nodeType==this.ELEMENT_NODE?logNode(arg):arg);args.unshift("Reader: (Readability)"),console.log(...args)}else if(typeof dump<"u"){var msg=Array.prototype.map.call(arguments,function(x){return x&&x.nodeName?logNode(x):x}).join(" ");dump("Reader: (Readability) "+msg+`
3
+ `)}}}else this.log=function(){}}Readability.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|footer|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,shareElements:/(\b|_)(share|sharedaddy)(\b|_)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,tokenize:/\W+/g,whitespace:/^\s*$/,hasContent:/\S$/,hashUrl:/^#.+/,srcsetUrl:/(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g,b64DataUrl:/^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i,commas:/\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g,jsonLdArticleTypes:/^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/,adWords:/^(ad(vertising|vertisement)?|pub(licité)?|werb(ung)?|广告|Реклама|Anuncio)$/iu,loadingWords:/^((loading|正在加载|Загрузка|chargement|cargando)(…|\.\.\.)?)$/iu},UNLIKELY_ROLES:["menu","menubar","complementary","navigation","alert","alertdialog","dialog"],DIV_TO_P_ELEMS:new Set(["BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL"]),ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P","OL","UL"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],HTML_ESCAPE_MAP:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"},_postProcessContent(articleContent){this._fixRelativeUris(articleContent),this._simplifyNestedElements(articleContent),this._keepClasses||this._cleanClasses(articleContent)},_removeNodes(nodeList,filterFn){if(this._docJSDOMParser&&nodeList._isLiveNodeList)throw new Error("Do not pass live node lists to _removeNodes");for(var i=nodeList.length-1;i>=0;i--){var node=nodeList[i],parentNode=node.parentNode;parentNode&&(!filterFn||filterFn.call(this,node,i,nodeList))&&parentNode.removeChild(node)}},_replaceNodeTags(nodeList,newTagName){if(this._docJSDOMParser&&nodeList._isLiveNodeList)throw new Error("Do not pass live node lists to _replaceNodeTags");for(let node of nodeList)this._setNodeTag(node,newTagName)},_forEachNode(nodeList,fn){Array.prototype.forEach.call(nodeList,fn,this)},_findNode(nodeList,fn){return Array.prototype.find.call(nodeList,fn,this)},_someNode(nodeList,fn){return Array.prototype.some.call(nodeList,fn,this)},_everyNode(nodeList,fn){return Array.prototype.every.call(nodeList,fn,this)},_getAllNodesWithTag(node,tagNames){return node.querySelectorAll?node.querySelectorAll(tagNames.join(",")):[].concat.apply([],tagNames.map(function(tag){var collection=node.getElementsByTagName(tag);return Array.isArray(collection)?collection:Array.from(collection)}))},_cleanClasses(node){var classesToPreserve=this._classesToPreserve,className=(node.getAttribute("class")||"").split(/\s+/).filter(cls=>classesToPreserve.includes(cls)).join(" ");for(className?node.setAttribute("class",className):node.removeAttribute("class"),node=node.firstElementChild;node;node=node.nextElementSibling)this._cleanClasses(node)},_isUrl(str){try{return new URL(str),!0}catch{return!1}},_fixRelativeUris(articleContent){var baseURI=this._doc.baseURI,documentURI=this._doc.documentURI;function toAbsoluteURI(uri){if(baseURI==documentURI&&uri.charAt(0)=="#")return uri;try{return new URL(uri,baseURI).href}catch{}return uri}var links=this._getAllNodesWithTag(articleContent,["a"]);this._forEachNode(links,function(link){var href=link.getAttribute("href");if(href)if(href.indexOf("javascript:")===0)if(link.childNodes.length===1&&link.childNodes[0].nodeType===this.TEXT_NODE){var text=this._doc.createTextNode(link.textContent);link.parentNode.replaceChild(text,link)}else{for(var container=this._doc.createElement("span");link.firstChild;)container.appendChild(link.firstChild);link.parentNode.replaceChild(container,link)}else link.setAttribute("href",toAbsoluteURI(href))});var medias=this._getAllNodesWithTag(articleContent,["img","picture","figure","video","audio","source"]);this._forEachNode(medias,function(media){var src=media.getAttribute("src"),poster=media.getAttribute("poster"),srcset=media.getAttribute("srcset");if(src&&media.setAttribute("src",toAbsoluteURI(src)),poster&&media.setAttribute("poster",toAbsoluteURI(poster)),srcset){var newSrcset=srcset.replace(this.REGEXPS.srcsetUrl,function(_,p1,p2,p3){return toAbsoluteURI(p1)+(p2||"")+p3});media.setAttribute("srcset",newSrcset)}})},_simplifyNestedElements(articleContent){for(var node=articleContent;node;){if(node.parentNode&&["DIV","SECTION"].includes(node.tagName)&&!(node.id&&node.id.startsWith("readability"))){if(this._isElementWithoutContent(node)){node=this._removeAndGetNext(node);continue}else if(this._hasSingleTagInsideElement(node,"DIV")||this._hasSingleTagInsideElement(node,"SECTION")){for(var child=node.children[0],i=0;i<node.attributes.length;i++)child.setAttributeNode(node.attributes[i].cloneNode());node.parentNode.replaceChild(child,node),node=child;continue}}node=this._getNextNode(node)}},_getArticleTitle(){var doc=this._doc,curTitle="",origTitle="";try{curTitle=origTitle=doc.title.trim(),typeof curTitle!="string"&&(curTitle=origTitle=this._getInnerText(doc.getElementsByTagName("title")[0]))}catch{}var titleHadHierarchicalSeparators=!1;function wordCount(str){return str.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(curTitle)){titleHadHierarchicalSeparators=/ [\\\/>»] /.test(curTitle);let allSeparators=Array.from(origTitle.matchAll(/ [\|\-\\\/>»] /gi));curTitle=origTitle.substring(0,allSeparators.pop().index),wordCount(curTitle)<3&&(curTitle=origTitle.replace(/^[^\|\-\\\/>»]*[\|\-\\\/>»]/gi,""))}else if(curTitle.includes(": ")){var headings=this._getAllNodesWithTag(doc,["h1","h2"]),trimmedTitle=curTitle.trim(),match=this._someNode(headings,function(heading){return heading.textContent.trim()===trimmedTitle});match||(curTitle=origTitle.substring(origTitle.lastIndexOf(":")+1),wordCount(curTitle)<3?curTitle=origTitle.substring(origTitle.indexOf(":")+1):wordCount(origTitle.substr(0,origTitle.indexOf(":")))>5&&(curTitle=origTitle))}else if(curTitle.length>150||curTitle.length<15){var hOnes=doc.getElementsByTagName("h1");hOnes.length===1&&(curTitle=this._getInnerText(hOnes[0]))}curTitle=curTitle.trim().replace(this.REGEXPS.normalize," ");var curTitleWordCount=wordCount(curTitle);return curTitleWordCount<=4&&(!titleHadHierarchicalSeparators||curTitleWordCount!=wordCount(origTitle.replace(/[\|\-\\\/>»]+/g,""))-1)&&(curTitle=origTitle),curTitle},_prepDocument(){var doc=this._doc;this._removeNodes(this._getAllNodesWithTag(doc,["style"])),doc.body&&this._replaceBrs(doc.body),this._replaceNodeTags(this._getAllNodesWithTag(doc,["font"]),"SPAN")},_nextNode(node){for(var next=node;next&&next.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(next.textContent);)next=next.nextSibling;return next},_replaceBrs(elem){this._forEachNode(this._getAllNodesWithTag(elem,["br"]),function(br){for(var next=br.nextSibling,replaced=!1;(next=this._nextNode(next))&&next.tagName=="BR";){replaced=!0;var brSibling=next.nextSibling;next.remove(),next=brSibling}if(replaced){var p=this._doc.createElement("p");for(br.parentNode.replaceChild(p,br),next=p.nextSibling;next;){if(next.tagName=="BR"){var nextElem=this._nextNode(next.nextSibling);if(nextElem&&nextElem.tagName=="BR")break}if(!this._isPhrasingContent(next))break;var sibling=next.nextSibling;p.appendChild(next),next=sibling}for(;p.lastChild&&this._isWhitespace(p.lastChild);)p.lastChild.remove();p.parentNode.tagName==="P"&&this._setNodeTag(p.parentNode,"DIV")}})},_setNodeTag(node,tag){if(this.log("_setNodeTag",node,tag),this._docJSDOMParser)return node.localName=tag.toLowerCase(),node.tagName=tag.toUpperCase(),node;for(var replacement=node.ownerDocument.createElement(tag);node.firstChild;)replacement.appendChild(node.firstChild);node.parentNode.replaceChild(replacement,node),node.readability&&(replacement.readability=node.readability);for(var i=0;i<node.attributes.length;i++)replacement.setAttributeNode(node.attributes[i].cloneNode());return replacement},_prepArticle(articleContent){this._cleanStyles(articleContent),this._markDataTables(articleContent),this._fixLazyImages(articleContent),this._cleanConditionally(articleContent,"form"),this._cleanConditionally(articleContent,"fieldset"),this._clean(articleContent,"object"),this._clean(articleContent,"embed"),this._clean(articleContent,"footer"),this._clean(articleContent,"link"),this._clean(articleContent,"aside");var shareElementThreshold=this.DEFAULT_CHAR_THRESHOLD;this._forEachNode(articleContent.children,function(topCandidate){this._cleanMatchedNodes(topCandidate,function(node,matchString){return this.REGEXPS.shareElements.test(matchString)&&node.textContent.length<shareElementThreshold})}),this._clean(articleContent,"iframe"),this._clean(articleContent,"input"),this._clean(articleContent,"textarea"),this._clean(articleContent,"select"),this._clean(articleContent,"button"),this._cleanHeaders(articleContent),this._cleanConditionally(articleContent,"table"),this._cleanConditionally(articleContent,"ul"),this._cleanConditionally(articleContent,"div"),this._replaceNodeTags(this._getAllNodesWithTag(articleContent,["h1"]),"h2"),this._removeNodes(this._getAllNodesWithTag(articleContent,["p"]),function(paragraph){var contentElementCount=this._getAllNodesWithTag(paragraph,["img","embed","object","iframe"]).length;return contentElementCount===0&&!this._getInnerText(paragraph,!1)}),this._forEachNode(this._getAllNodesWithTag(articleContent,["br"]),function(br){var next=this._nextNode(br.nextSibling);next&&next.tagName=="P"&&br.remove()}),this._forEachNode(this._getAllNodesWithTag(articleContent,["table"]),function(table){var tbody=this._hasSingleTagInsideElement(table,"TBODY")?table.firstElementChild:table;if(this._hasSingleTagInsideElement(tbody,"TR")){var row=tbody.firstElementChild;if(this._hasSingleTagInsideElement(row,"TD")){var cell=row.firstElementChild;cell=this._setNodeTag(cell,this._everyNode(cell.childNodes,this._isPhrasingContent)?"P":"DIV"),table.parentNode.replaceChild(cell,table)}}})},_initializeNode(node){switch(node.readability={contentScore:0},node.tagName){case"DIV":node.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":node.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":node.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":node.readability.contentScore-=5;break}node.readability.contentScore+=this._getClassWeight(node)},_removeAndGetNext(node){var nextNode=this._getNextNode(node,!0);return node.remove(),nextNode},_getNextNode(node,ignoreSelfAndKids){if(!ignoreSelfAndKids&&node.firstElementChild)return node.firstElementChild;if(node.nextElementSibling)return node.nextElementSibling;do node=node.parentNode;while(node&&!node.nextElementSibling);return node&&node.nextElementSibling},_textSimilarity(textA,textB){var tokensA=textA.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean),tokensB=textB.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean);if(!tokensA.length||!tokensB.length)return 0;var uniqTokensB=tokensB.filter(token=>!tokensA.includes(token)),distanceB=uniqTokensB.join(" ").length/tokensB.join(" ").length;return 1-distanceB},_isValidByline(node,matchString){var rel=node.getAttribute("rel"),itemprop=node.getAttribute("itemprop"),bylineLength=node.textContent.trim().length;return(rel==="author"||itemprop&&itemprop.includes("author")||this.REGEXPS.byline.test(matchString))&&!!bylineLength&&bylineLength<100},_getNodeAncestors(node,maxDepth){maxDepth=maxDepth||0;for(var i=0,ancestors=[];node.parentNode&&(ancestors.push(node.parentNode),!(maxDepth&&++i===maxDepth));)node=node.parentNode;return ancestors},_grabArticle(page){this.log("**** grabArticle ****");var doc=this._doc,isPaging=page!==null;if(page=page||this._doc.body,!page)return this.log("No body found in document. Abort."),null;for(var pageCacheHtml=page.innerHTML;;){this.log("Starting grabArticle loop");var stripUnlikelyCandidates=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),elementsToScore=[],node=this._doc.documentElement;let shouldRemoveTitleHeader=!0;for(;node;){node.tagName==="HTML"&&(this._articleLang=node.getAttribute("lang"));var matchString=node.className+" "+node.id;if(!this._isProbablyVisible(node)){this.log("Removing hidden node - "+matchString),node=this._removeAndGetNext(node);continue}if(node.getAttribute("aria-modal")=="true"&&node.getAttribute("role")=="dialog"){node=this._removeAndGetNext(node);continue}if(!this._articleByline&&!this._metadata.byline&&this._isValidByline(node,matchString)){for(var endOfSearchMarkerNode=this._getNextNode(node,!0),next=this._getNextNode(node),itemPropNameNode=null;next&&next!=endOfSearchMarkerNode;){var itemprop=next.getAttribute("itemprop");if(itemprop&&itemprop.includes("name")){itemPropNameNode=next;break}else next=this._getNextNode(next)}this._articleByline=(itemPropNameNode??node).textContent.trim(),node=this._removeAndGetNext(node);continue}if(shouldRemoveTitleHeader&&this._headerDuplicatesTitle(node)){this.log("Removing header: ",node.textContent.trim(),this._articleTitle.trim()),shouldRemoveTitleHeader=!1,node=this._removeAndGetNext(node);continue}if(stripUnlikelyCandidates){if(this.REGEXPS.unlikelyCandidates.test(matchString)&&!this.REGEXPS.okMaybeItsACandidate.test(matchString)&&!this._hasAncestorTag(node,"table")&&!this._hasAncestorTag(node,"code")&&node.tagName!=="BODY"&&node.tagName!=="A"){this.log("Removing unlikely candidate - "+matchString),node=this._removeAndGetNext(node);continue}if(this.UNLIKELY_ROLES.includes(node.getAttribute("role"))){this.log("Removing content with role "+node.getAttribute("role")+" - "+matchString),node=this._removeAndGetNext(node);continue}}if((node.tagName==="DIV"||node.tagName==="SECTION"||node.tagName==="HEADER"||node.tagName==="H1"||node.tagName==="H2"||node.tagName==="H3"||node.tagName==="H4"||node.tagName==="H5"||node.tagName==="H6")&&this._isElementWithoutContent(node)){node=this._removeAndGetNext(node);continue}if(this.DEFAULT_TAGS_TO_SCORE.includes(node.tagName)&&elementsToScore.push(node),node.tagName==="DIV"){for(var p=null,childNode=node.firstChild;childNode;){var nextSibling=childNode.nextSibling;if(this._isPhrasingContent(childNode))p!==null?p.appendChild(childNode):this._isWhitespace(childNode)||(p=doc.createElement("p"),node.replaceChild(p,childNode),p.appendChild(childNode));else if(p!==null){for(;p.lastChild&&this._isWhitespace(p.lastChild);)p.lastChild.remove();p=null}childNode=nextSibling}if(this._hasSingleTagInsideElement(node,"P")&&this._getLinkDensity(node)<.25){var newNode=node.children[0];node.parentNode.replaceChild(newNode,node),node=newNode,elementsToScore.push(node)}else this._hasChildBlockElement(node)||(node=this._setNodeTag(node,"P"),elementsToScore.push(node))}node=this._getNextNode(node)}var candidates=[];this._forEachNode(elementsToScore,function(elementToScore){if(!(!elementToScore.parentNode||typeof elementToScore.parentNode.tagName>"u")){var innerText=this._getInnerText(elementToScore);if(!(innerText.length<25)){var ancestors2=this._getNodeAncestors(elementToScore,5);if(ancestors2.length!==0){var contentScore=0;contentScore+=1,contentScore+=innerText.split(this.REGEXPS.commas).length,contentScore+=Math.min(Math.floor(innerText.length/100),3),this._forEachNode(ancestors2,function(ancestor,level){if(!(!ancestor.tagName||!ancestor.parentNode||typeof ancestor.parentNode.tagName>"u")){if(typeof ancestor.readability>"u"&&(this._initializeNode(ancestor),candidates.push(ancestor)),level===0)var scoreDivider=1;else level===1?scoreDivider=2:scoreDivider=level*3;ancestor.readability.contentScore+=contentScore/scoreDivider}})}}}});for(var topCandidates=[],c=0,cl=candidates.length;c<cl;c+=1){var candidate=candidates[c],candidateScore=candidate.readability.contentScore*(1-this._getLinkDensity(candidate));candidate.readability.contentScore=candidateScore,this.log("Candidate:",candidate,"with score "+candidateScore);for(var t=0;t<this._nbTopCandidates;t++){var aTopCandidate=topCandidates[t];if(!aTopCandidate||candidateScore>aTopCandidate.readability.contentScore){topCandidates.splice(t,0,candidate),topCandidates.length>this._nbTopCandidates&&topCandidates.pop();break}}}var topCandidate=topCandidates[0]||null,neededToCreateTopCandidate=!1,parentOfTopCandidate;if(topCandidate===null||topCandidate.tagName==="BODY"){for(topCandidate=doc.createElement("DIV"),neededToCreateTopCandidate=!0;page.firstChild;)this.log("Moving child out:",page.firstChild),topCandidate.appendChild(page.firstChild);page.appendChild(topCandidate),this._initializeNode(topCandidate)}else if(topCandidate){for(var alternativeCandidateAncestors=[],i=1;i<topCandidates.length;i++)topCandidates[i].readability.contentScore/topCandidate.readability.contentScore>=.75&&alternativeCandidateAncestors.push(this._getNodeAncestors(topCandidates[i]));var MINIMUM_TOPCANDIDATES=3;if(alternativeCandidateAncestors.length>=MINIMUM_TOPCANDIDATES)for(parentOfTopCandidate=topCandidate.parentNode;parentOfTopCandidate.tagName!=="BODY";){for(var listsContainingThisAncestor=0,ancestorIndex=0;ancestorIndex<alternativeCandidateAncestors.length&&listsContainingThisAncestor<MINIMUM_TOPCANDIDATES;ancestorIndex++)listsContainingThisAncestor+=Number(alternativeCandidateAncestors[ancestorIndex].includes(parentOfTopCandidate));if(listsContainingThisAncestor>=MINIMUM_TOPCANDIDATES){topCandidate=parentOfTopCandidate;break}parentOfTopCandidate=parentOfTopCandidate.parentNode}topCandidate.readability||this._initializeNode(topCandidate),parentOfTopCandidate=topCandidate.parentNode;for(var lastScore=topCandidate.readability.contentScore,scoreThreshold=lastScore/3;parentOfTopCandidate.tagName!=="BODY";){if(!parentOfTopCandidate.readability){parentOfTopCandidate=parentOfTopCandidate.parentNode;continue}var parentScore=parentOfTopCandidate.readability.contentScore;if(parentScore<scoreThreshold)break;if(parentScore>lastScore){topCandidate=parentOfTopCandidate;break}lastScore=parentOfTopCandidate.readability.contentScore,parentOfTopCandidate=parentOfTopCandidate.parentNode}for(parentOfTopCandidate=topCandidate.parentNode;parentOfTopCandidate.tagName!="BODY"&&parentOfTopCandidate.children.length==1;)topCandidate=parentOfTopCandidate,parentOfTopCandidate=topCandidate.parentNode;topCandidate.readability||this._initializeNode(topCandidate)}var articleContent=doc.createElement("DIV");isPaging&&(articleContent.id="readability-content");var siblingScoreThreshold=Math.max(10,topCandidate.readability.contentScore*.2);parentOfTopCandidate=topCandidate.parentNode;for(var siblings=parentOfTopCandidate.children,s=0,sl=siblings.length;s<sl;s++){var sibling=siblings[s],append=!1;if(this.log("Looking at sibling node:",sibling,sibling.readability?"with score "+sibling.readability.contentScore:""),this.log("Sibling has score",sibling.readability?sibling.readability.contentScore:"Unknown"),sibling===topCandidate)append=!0;else{var contentBonus=0;if(sibling.className===topCandidate.className&&topCandidate.className!==""&&(contentBonus+=topCandidate.readability.contentScore*.2),sibling.readability&&sibling.readability.contentScore+contentBonus>=siblingScoreThreshold)append=!0;else if(sibling.nodeName==="P"){var linkDensity=this._getLinkDensity(sibling),nodeContent=this._getInnerText(sibling),nodeLength=nodeContent.length;(nodeLength>80&&linkDensity<.25||nodeLength<80&&nodeLength>0&&linkDensity===0&&nodeContent.search(/\.( |$)/)!==-1)&&(append=!0)}}append&&(this.log("Appending node:",sibling),this.ALTER_TO_DIV_EXCEPTIONS.includes(sibling.nodeName)||(this.log("Altering sibling:",sibling,"to div."),sibling=this._setNodeTag(sibling,"DIV")),articleContent.appendChild(sibling),siblings=parentOfTopCandidate.children,s-=1,sl-=1)}if(this._debug&&this.log("Article content pre-prep: "+articleContent.innerHTML),this._prepArticle(articleContent),this._debug&&this.log("Article content post-prep: "+articleContent.innerHTML),neededToCreateTopCandidate)topCandidate.id="readability-page-1",topCandidate.className="page";else{var div=doc.createElement("DIV");for(div.id="readability-page-1",div.className="page";articleContent.firstChild;)div.appendChild(articleContent.firstChild);articleContent.appendChild(div)}this._debug&&this.log("Article content after paging: "+articleContent.innerHTML);var parseSuccessful=!0,textLength=this._getInnerText(articleContent,!0).length;if(textLength<this._charThreshold)if(parseSuccessful=!1,page.innerHTML=pageCacheHtml,this._attempts.push({articleContent,textLength}),this._flagIsActive(this.FLAG_STRIP_UNLIKELYS))this._removeFlag(this.FLAG_STRIP_UNLIKELYS);else if(this._flagIsActive(this.FLAG_WEIGHT_CLASSES))this._removeFlag(this.FLAG_WEIGHT_CLASSES);else if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY))this._removeFlag(this.FLAG_CLEAN_CONDITIONALLY);else{if(this._attempts.sort(function(a,b){return b.textLength-a.textLength}),!this._attempts[0].textLength)return null;articleContent=this._attempts[0].articleContent,parseSuccessful=!0}if(parseSuccessful){var ancestors=[parentOfTopCandidate,topCandidate].concat(this._getNodeAncestors(parentOfTopCandidate));return this._someNode(ancestors,function(ancestor){if(!ancestor.tagName)return!1;var articleDir=ancestor.getAttribute("dir");return articleDir?(this._articleDir=articleDir,!0):!1}),articleContent}}},_unescapeHtmlEntities(str){if(!str)return str;var htmlEscapeMap=this.HTML_ESCAPE_MAP;return str.replace(/&(quot|amp|apos|lt|gt);/g,function(_,tag){return htmlEscapeMap[tag]}).replace(/&#(?:x([0-9a-f]+)|([0-9]+));/gi,function(_,hex,numStr){var num=parseInt(hex||numStr,hex?16:10);return(num==0||num>1114111||num>=55296&&num<=57343)&&(num=65533),String.fromCodePoint(num)})},_getJSONLD(doc){var scripts=this._getAllNodesWithTag(doc,["script"]),metadata;return this._forEachNode(scripts,function(jsonLdElement){if(!metadata&&jsonLdElement.getAttribute("type")==="application/ld+json")try{var content=jsonLdElement.textContent.replace(/^\s*<!\[CDATA\[|\]\]>\s*$/g,""),parsed=JSON.parse(content);if(Array.isArray(parsed)&&(parsed=parsed.find(it=>it["@type"]&&it["@type"].match(this.REGEXPS.jsonLdArticleTypes)),!parsed))return;var schemaDotOrgRegex=/^https?\:\/\/schema\.org\/?$/,matches=typeof parsed["@context"]=="string"&&parsed["@context"].match(schemaDotOrgRegex)||typeof parsed["@context"]=="object"&&typeof parsed["@context"]["@vocab"]=="string"&&parsed["@context"]["@vocab"].match(schemaDotOrgRegex);if(!matches||(!parsed["@type"]&&Array.isArray(parsed["@graph"])&&(parsed=parsed["@graph"].find(it=>(it["@type"]||"").match(this.REGEXPS.jsonLdArticleTypes))),!parsed||!parsed["@type"]||!parsed["@type"].match(this.REGEXPS.jsonLdArticleTypes)))return;if(metadata={},typeof parsed.name=="string"&&typeof parsed.headline=="string"&&parsed.name!==parsed.headline){var title=this._getArticleTitle(),nameMatches=this._textSimilarity(parsed.name,title)>.75,headlineMatches=this._textSimilarity(parsed.headline,title)>.75;headlineMatches&&!nameMatches?metadata.title=parsed.headline:metadata.title=parsed.name}else typeof parsed.name=="string"?metadata.title=parsed.name.trim():typeof parsed.headline=="string"&&(metadata.title=parsed.headline.trim());parsed.author&&(typeof parsed.author.name=="string"?metadata.byline=parsed.author.name.trim():Array.isArray(parsed.author)&&parsed.author[0]&&typeof parsed.author[0].name=="string"&&(metadata.byline=parsed.author.filter(function(author){return author&&typeof author.name=="string"}).map(function(author){return author.name.trim()}).join(", "))),typeof parsed.description=="string"&&(metadata.excerpt=parsed.description.trim()),parsed.publisher&&typeof parsed.publisher.name=="string"&&(metadata.siteName=parsed.publisher.name.trim()),typeof parsed.datePublished=="string"&&(metadata.datePublished=parsed.datePublished.trim())}catch(err){this.log(err.message)}}),metadata||{}},_getArticleMetadata(jsonld){var metadata={},values={},metaElements=this._doc.getElementsByTagName("meta"),propertyPattern=/\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi,namePattern=/^\s*(?:(dc|dcterm|og|twitter|parsely|weibo:(article|webpage))\s*[-\.:]\s*)?(author|creator|pub-date|description|title|site_name)\s*$/i;this._forEachNode(metaElements,function(element){var elementName=element.getAttribute("name"),elementProperty=element.getAttribute("property"),content=element.getAttribute("content");if(content){var matches=null,name=null;elementProperty&&(matches=elementProperty.match(propertyPattern),matches&&(name=matches[0].toLowerCase().replace(/\s/g,""),values[name]=content.trim())),!matches&&elementName&&namePattern.test(elementName)&&(name=elementName,content&&(name=name.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),values[name]=content.trim()))}}),metadata.title=jsonld.title||values["dc:title"]||values["dcterm:title"]||values["og:title"]||values["weibo:article:title"]||values["weibo:webpage:title"]||values.title||values["twitter:title"]||values["parsely-title"],metadata.title||(metadata.title=this._getArticleTitle());let articleAuthor=typeof values["article:author"]=="string"&&!this._isUrl(values["article:author"])?values["article:author"]:void 0;return metadata.byline=jsonld.byline||values["dc:creator"]||values["dcterm:creator"]||values.author||values["parsely-author"]||articleAuthor,metadata.excerpt=jsonld.excerpt||values["dc:description"]||values["dcterm:description"]||values["og:description"]||values["weibo:article:description"]||values["weibo:webpage:description"]||values.description||values["twitter:description"],metadata.siteName=jsonld.siteName||values["og:site_name"],metadata.publishedTime=jsonld.datePublished||values["article:published_time"]||values["parsely-pub-date"]||null,metadata.title=this._unescapeHtmlEntities(metadata.title),metadata.byline=this._unescapeHtmlEntities(metadata.byline),metadata.excerpt=this._unescapeHtmlEntities(metadata.excerpt),metadata.siteName=this._unescapeHtmlEntities(metadata.siteName),metadata.publishedTime=this._unescapeHtmlEntities(metadata.publishedTime),metadata},_isSingleImage(node){for(;node;){if(node.tagName==="IMG")return!0;if(node.children.length!==1||node.textContent.trim()!=="")return!1;node=node.children[0]}return!1},_unwrapNoscriptImages(doc){var imgs=Array.from(doc.getElementsByTagName("img"));this._forEachNode(imgs,function(img){for(var i=0;i<img.attributes.length;i++){var attr=img.attributes[i];switch(attr.name){case"src":case"srcset":case"data-src":case"data-srcset":return}if(/\.(jpg|jpeg|png|webp)/i.test(attr.value))return}img.remove()});var noscripts=Array.from(doc.getElementsByTagName("noscript"));this._forEachNode(noscripts,function(noscript){if(this._isSingleImage(noscript)){var tmp=doc.createElement("div");tmp.innerHTML=noscript.innerHTML;var prevElement=noscript.previousElementSibling;if(prevElement&&this._isSingleImage(prevElement)){var prevImg=prevElement;prevImg.tagName!=="IMG"&&(prevImg=prevElement.getElementsByTagName("img")[0]);for(var newImg=tmp.getElementsByTagName("img")[0],i=0;i<prevImg.attributes.length;i++){var attr=prevImg.attributes[i];if(attr.value!==""&&(attr.name==="src"||attr.name==="srcset"||/\.(jpg|jpeg|png|webp)/i.test(attr.value))){if(newImg.getAttribute(attr.name)===attr.value)continue;var attrName=attr.name;newImg.hasAttribute(attrName)&&(attrName="data-old-"+attrName),newImg.setAttribute(attrName,attr.value)}}noscript.parentNode.replaceChild(tmp.firstElementChild,prevElement)}}})},_removeScripts(doc){this._removeNodes(this._getAllNodesWithTag(doc,["script","noscript"]))},_hasSingleTagInsideElement(element,tag){return element.children.length!=1||element.children[0].tagName!==tag?!1:!this._someNode(element.childNodes,function(node){return node.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(node.textContent)})},_isElementWithoutContent(node){return node.nodeType===this.ELEMENT_NODE&&!node.textContent.trim().length&&(!node.children.length||node.children.length==node.getElementsByTagName("br").length+node.getElementsByTagName("hr").length)},_hasChildBlockElement(element){return this._someNode(element.childNodes,function(node){return this.DIV_TO_P_ELEMS.has(node.tagName)||this._hasChildBlockElement(node)})},_isPhrasingContent(node){return node.nodeType===this.TEXT_NODE||this.PHRASING_ELEMS.includes(node.tagName)||(node.tagName==="A"||node.tagName==="DEL"||node.tagName==="INS")&&this._everyNode(node.childNodes,this._isPhrasingContent)},_isWhitespace(node){return node.nodeType===this.TEXT_NODE&&node.textContent.trim().length===0||node.nodeType===this.ELEMENT_NODE&&node.tagName==="BR"},_getInnerText(e,normalizeSpaces){normalizeSpaces=typeof normalizeSpaces>"u"?!0:normalizeSpaces;var textContent=e.textContent.trim();return normalizeSpaces?textContent.replace(this.REGEXPS.normalize," "):textContent},_getCharCount(e,s){return s=s||",",this._getInnerText(e).split(s).length-1},_cleanStyles(e){if(!(!e||e.tagName.toLowerCase()==="svg")){for(var i=0;i<this.PRESENTATIONAL_ATTRIBUTES.length;i++)e.removeAttribute(this.PRESENTATIONAL_ATTRIBUTES[i]);this.DEPRECATED_SIZE_ATTRIBUTE_ELEMS.includes(e.tagName)&&(e.removeAttribute("width"),e.removeAttribute("height"));for(var cur=e.firstElementChild;cur!==null;)this._cleanStyles(cur),cur=cur.nextElementSibling}},_getLinkDensity(element){var textLength=this._getInnerText(element).length;if(textLength===0)return 0;var linkLength=0;return this._forEachNode(element.getElementsByTagName("a"),function(linkNode){var href=linkNode.getAttribute("href"),coefficient=href&&this.REGEXPS.hashUrl.test(href)?.3:1;linkLength+=this._getInnerText(linkNode).length*coefficient}),linkLength/textLength},_getClassWeight(e){if(!this._flagIsActive(this.FLAG_WEIGHT_CLASSES))return 0;var weight=0;return typeof e.className=="string"&&e.className!==""&&(this.REGEXPS.negative.test(e.className)&&(weight-=25),this.REGEXPS.positive.test(e.className)&&(weight+=25)),typeof e.id=="string"&&e.id!==""&&(this.REGEXPS.negative.test(e.id)&&(weight-=25),this.REGEXPS.positive.test(e.id)&&(weight+=25)),weight},_clean(e,tag){var isEmbed=["object","embed","iframe"].includes(tag);this._removeNodes(this._getAllNodesWithTag(e,[tag]),function(element){if(isEmbed){for(var i=0;i<element.attributes.length;i++)if(this._allowedVideoRegex.test(element.attributes[i].value))return!1;if(element.tagName==="object"&&this._allowedVideoRegex.test(element.innerHTML))return!1}return!0})},_hasAncestorTag(node,tagName,maxDepth,filterFn){maxDepth=maxDepth||3,tagName=tagName.toUpperCase();for(var depth=0;node.parentNode;){if(maxDepth>0&&depth>maxDepth)return!1;if(node.parentNode.tagName===tagName&&(!filterFn||filterFn(node.parentNode)))return!0;node=node.parentNode,depth++}return!1},_getRowAndColumnCount(table){for(var rows=0,columns=0,trs=table.getElementsByTagName("tr"),i=0;i<trs.length;i++){var rowspan=trs[i].getAttribute("rowspan")||0;rowspan&&(rowspan=parseInt(rowspan,10)),rows+=rowspan||1;for(var columnsInThisRow=0,cells=trs[i].getElementsByTagName("td"),j=0;j<cells.length;j++){var colspan=cells[j].getAttribute("colspan")||0;colspan&&(colspan=parseInt(colspan,10)),columnsInThisRow+=colspan||1}columns=Math.max(columns,columnsInThisRow)}return{rows,columns}},_markDataTables(root){for(var tables=root.getElementsByTagName("table"),i=0;i<tables.length;i++){var table=tables[i],role=table.getAttribute("role");if(role=="presentation"){table._readabilityDataTable=!1;continue}var datatable=table.getAttribute("datatable");if(datatable=="0"){table._readabilityDataTable=!1;continue}var summary=table.getAttribute("summary");if(summary){table._readabilityDataTable=!0;continue}var caption=table.getElementsByTagName("caption")[0];if(caption&&caption.childNodes.length){table._readabilityDataTable=!0;continue}var dataTableDescendants=["col","colgroup","tfoot","thead","th"],descendantExists=function(tag){return!!table.getElementsByTagName(tag)[0]};if(dataTableDescendants.some(descendantExists)){this.log("Data table because found data-y descendant"),table._readabilityDataTable=!0;continue}if(table.getElementsByTagName("table")[0]){table._readabilityDataTable=!1;continue}var sizeInfo=this._getRowAndColumnCount(table);if(sizeInfo.columns==1||sizeInfo.rows==1){table._readabilityDataTable=!1;continue}if(sizeInfo.rows>=10||sizeInfo.columns>4){table._readabilityDataTable=!0;continue}table._readabilityDataTable=sizeInfo.rows*sizeInfo.columns>10}},_fixLazyImages(root){this._forEachNode(this._getAllNodesWithTag(root,["img","picture","figure"]),function(elem){if(elem.src&&this.REGEXPS.b64DataUrl.test(elem.src)){var parts=this.REGEXPS.b64DataUrl.exec(elem.src);if(parts[1]==="image/svg+xml")return;for(var srcCouldBeRemoved=!1,i=0;i<elem.attributes.length;i++){var attr=elem.attributes[i];if(attr.name!=="src"&&/\.(jpg|jpeg|png|webp)/i.test(attr.value)){srcCouldBeRemoved=!0;break}}if(srcCouldBeRemoved){var b64starts=parts[0].length,b64length=elem.src.length-b64starts;b64length<133&&elem.removeAttribute("src")}}if(!((elem.src||elem.srcset&&elem.srcset!="null")&&!elem.className.toLowerCase().includes("lazy"))){for(var j=0;j<elem.attributes.length;j++)if(attr=elem.attributes[j],!(attr.name==="src"||attr.name==="srcset"||attr.name==="alt")){var copyTo=null;if(/\.(jpg|jpeg|png|webp)\s+\d/.test(attr.value)?copyTo="srcset":/^\s*\S+\.(jpg|jpeg|png|webp)\S*\s*$/.test(attr.value)&&(copyTo="src"),copyTo){if(elem.tagName==="IMG"||elem.tagName==="PICTURE")elem.setAttribute(copyTo,attr.value);else if(elem.tagName==="FIGURE"&&!this._getAllNodesWithTag(elem,["img","picture"]).length){var img=this._doc.createElement("img");img.setAttribute(copyTo,attr.value),elem.appendChild(img)}}}}})},_getTextDensity(e,tags){var textLength=this._getInnerText(e,!0).length;if(textLength===0)return 0;var childrenLength=0,children=this._getAllNodesWithTag(e,tags);return this._forEachNode(children,child=>childrenLength+=this._getInnerText(child,!0).length),childrenLength/textLength},_cleanConditionally(e,tag){this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)&&this._removeNodes(this._getAllNodesWithTag(e,[tag]),function(node){var isDataTable=function(t){return t._readabilityDataTable},isList=tag==="ul"||tag==="ol";if(!isList){var listLength=0,listNodes=this._getAllNodesWithTag(node,["ul","ol"]);this._forEachNode(listNodes,list=>listLength+=this._getInnerText(list).length),isList=listLength/this._getInnerText(node).length>.9}if(tag==="table"&&isDataTable(node)||this._hasAncestorTag(node,"table",-1,isDataTable)||this._hasAncestorTag(node,"code")||[...node.getElementsByTagName("table")].some(tbl=>tbl._readabilityDataTable))return!1;var weight=this._getClassWeight(node);this.log("Cleaning Conditionally",node);var contentScore=0;if(weight+contentScore<0)return!0;if(this._getCharCount(node,",")<10){for(var p=node.getElementsByTagName("p").length,img=node.getElementsByTagName("img").length,li=node.getElementsByTagName("li").length-100,input=node.getElementsByTagName("input").length,headingDensity=this._getTextDensity(node,["h1","h2","h3","h4","h5","h6"]),embedCount=0,embeds=this._getAllNodesWithTag(node,["object","embed","iframe"]),i=0;i<embeds.length;i++){for(var j=0;j<embeds[i].attributes.length;j++)if(this._allowedVideoRegex.test(embeds[i].attributes[j].value))return!1;if(embeds[i].tagName==="object"&&this._allowedVideoRegex.test(embeds[i].innerHTML))return!1;embedCount++}var innerText=this._getInnerText(node);if(this.REGEXPS.adWords.test(innerText)||this.REGEXPS.loadingWords.test(innerText))return!0;var contentLength=innerText.length,linkDensity=this._getLinkDensity(node),textishTags=["SPAN","LI","TD"].concat(Array.from(this.DIV_TO_P_ELEMS)),textDensity=this._getTextDensity(node,textishTags),isFigureChild=this._hasAncestorTag(node,"figure"),haveToRemove=(()=>{let errs=[];return!isFigureChild&&img>1&&p/img<.5&&errs.push(`Bad p to img ratio (img=${img}, p=${p})`),!isList&&li>p&&errs.push(`Too many li's outside of a list. (li=${li} > p=${p})`),input>Math.floor(p/3)&&errs.push(`Too many inputs per p. (input=${input}, p=${p})`),!isList&&!isFigureChild&&headingDensity<.9&&contentLength<25&&(img===0||img>2)&&linkDensity>0&&errs.push(`Suspiciously short. (headingDensity=${headingDensity}, img=${img}, linkDensity=${linkDensity})`),!isList&&weight<25&&linkDensity>.2+this._linkDensityModifier&&errs.push(`Low weight and a little linky. (linkDensity=${linkDensity})`),weight>=25&&linkDensity>.5+this._linkDensityModifier&&errs.push(`High weight and mostly links. (linkDensity=${linkDensity})`),(embedCount===1&&contentLength<75||embedCount>1)&&errs.push(`Suspicious embed. (embedCount=${embedCount}, contentLength=${contentLength})`),img===0&&textDensity===0&&errs.push(`No useful content. (img=${img}, textDensity=${textDensity})`),errs.length?(this.log("Checks failed",errs),!0):!1})();if(isList&&haveToRemove){for(var x=0;x<node.children.length;x++)if(node.children[x].children.length>1)return haveToRemove;let li_count=node.getElementsByTagName("li").length;if(img==li_count)return!1}return haveToRemove}return!1})},_cleanMatchedNodes(e,filter){for(var endOfSearchMarkerNode=this._getNextNode(e,!0),next=this._getNextNode(e);next&&next!=endOfSearchMarkerNode;)filter.call(this,next,next.className+" "+next.id)?next=this._removeAndGetNext(next):next=this._getNextNode(next)},_cleanHeaders(e){let headingNodes=this._getAllNodesWithTag(e,["h1","h2"]);this._removeNodes(headingNodes,function(node){let shouldRemove=this._getClassWeight(node)<0;return shouldRemove&&this.log("Removing header with low class weight:",node),shouldRemove})},_headerDuplicatesTitle(node){if(node.tagName!="H1"&&node.tagName!="H2")return!1;var heading=this._getInnerText(node,!1);return this.log("Evaluating similarity of header:",heading,this._articleTitle),this._textSimilarity(this._articleTitle,heading)>.75},_flagIsActive(flag){return(this._flags&flag)>0},_removeFlag(flag){this._flags=this._flags&~flag},_isProbablyVisible(node){return(!node.style||node.style.display!="none")&&(!node.style||node.style.visibility!="hidden")&&!node.hasAttribute("hidden")&&(!node.hasAttribute("aria-hidden")||node.getAttribute("aria-hidden")!="true"||node.className&&node.className.includes&&node.className.includes("fallback-image"))},parse(){if(this._maxElemsToParse>0){var numTags=this._doc.getElementsByTagName("*").length;if(numTags>this._maxElemsToParse)throw new Error("Aborting parsing document; "+numTags+" elements found")}this._unwrapNoscriptImages(this._doc);var jsonLd=this._disableJSONLD?{}:this._getJSONLD(this._doc);this._removeScripts(this._doc),this._prepDocument();var metadata=this._getArticleMetadata(jsonLd);this._metadata=metadata,this._articleTitle=metadata.title;var articleContent=this._grabArticle();if(!articleContent)return null;if(this.log("Grabbed: "+articleContent.innerHTML),this._postProcessContent(articleContent),!metadata.excerpt){var paragraphs=articleContent.getElementsByTagName("p");paragraphs.length&&(metadata.excerpt=paragraphs[0].textContent.trim())}var textContent=articleContent.textContent;return{title:this._articleTitle,byline:metadata.byline||this._articleByline,dir:this._articleDir,lang:this._articleLang,content:this._serializer(articleContent),textContent,length:textContent.length,excerpt:metadata.excerpt,siteName:metadata.siteName||this._articleSiteName,publishedTime:metadata.publishedTime}}};typeof module=="object"&&(module.exports=Readability)}});var require_Readability_readerable=__commonJS({"node_modules/@mozilla/readability/Readability-readerable.js"(exports,module){var REGEXPS={unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i};function isNodeVisible(node){return(!node.style||node.style.display!="none")&&!node.hasAttribute("hidden")&&(!node.hasAttribute("aria-hidden")||node.getAttribute("aria-hidden")!="true"||node.className&&node.className.includes&&node.className.includes("fallback-image"))}function isProbablyReaderable(doc,options={}){typeof options=="function"&&(options={visibilityChecker:options});var defaultOptions={minScore:20,minContentLength:140,visibilityChecker:isNodeVisible};options=Object.assign(defaultOptions,options);var nodes=doc.querySelectorAll("p, pre, article"),brNodes=doc.querySelectorAll("div > br");if(brNodes.length){var set=new Set(nodes);[].forEach.call(brNodes,function(node){set.add(node.parentNode)}),nodes=Array.from(set)}var score=0;return[].some.call(nodes,function(node){if(!options.visibilityChecker(node))return!1;var matchString=node.className+" "+node.id;if(REGEXPS.unlikelyCandidates.test(matchString)&&!REGEXPS.okMaybeItsACandidate.test(matchString)||node.matches("li p"))return!1;var textContentLength=node.textContent.trim().length;return textContentLength<options.minContentLength?!1:(score+=Math.sqrt(textContentLength-options.minContentLength),score>options.minScore)})}typeof module=="object"&&(module.exports=isProbablyReaderable)}});var require_readability=__commonJS({"node_modules/@mozilla/readability/index.js"(exports,module){var Readability=require_Readability(),isProbablyReaderable=require_Readability_readerable();module.exports={Readability,isProbablyReaderable}}});export default require_readability();
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{require_turndown_cjs}from"./chunk-XSR434CO.js";import"./chunk-JXWJOIH4.js";export default require_turndown_cjs();
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{configureHttpDispatcher,main}from"./chunks/chunk-LYAMSPR2.js";import{APP_NAME,ENV_PREFIX}from"./chunks/chunk-2LC3S3VV.js";import"./chunks/chunk-MA4UUCYX.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";function setupCli(){process.title=APP_NAME,process.env.PI_CODING_AGENT="true",process.env[`${ENV_PREFIX}_CODING_AGENT`]="true",process.env.AI_AGENT="pi",process.emitWarning=(()=>{}),configureHttpDispatcher()}setupCli();main(process.argv.slice(2));
3
+ import{configureHttpDispatcher,main}from"./chunks/chunk-I47ZWR55.js";import"./chunks/chunk-D6HHRSB5.js";import{APP_NAME,ENV_PREFIX}from"./chunks/chunk-LI2YVPWP.js";import"./chunks/chunk-EY4DWHQU.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7T6XCLJF.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";function setupCli(){process.title=APP_NAME,process.env.PI_CODING_AGENT="true",process.env[`${ENV_PREFIX}_CODING_AGENT`]="true",process.env.AI_AGENT="pi",process.emitWarning=(()=>{}),configureHttpDispatcher()}setupCli();main(process.argv.slice(2));
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{AgentExecInputError,AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,HUMAIN_AGENT_EXECUTION_FAILURE_CODES,HUMAIN_AGENT_EXECUTION_SCHEMA_VERSION,HumainAgentArtifactSchema,HumainAgentExecutionClaimSchema,HumainAgentExecutionControlsSchema,HumainAgentExecutionOutcomeSchema,HumainAgentExecutionRequestSchema,HumainAgentExecutionResponseSchema,HumainAgentRouteRefSchema,HumainAgentUsageSchema,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPiAgentExecutionHost,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,executeHumainAgentRequest,findCutPoint,findTurnStartIndex,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPowerShellConfig,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseHumainAgentExecutionRequest,parseHumainAgentExecutionResponse,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resolveCliModel,resolveModelScopeWithDiagnostics,runAgentExecMode,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-LYAMSPR2.js";import{CONFIG_DIR_NAME,UPSTREAM_PI_VERSION,VERSION,formatDimensionNote,getAgentDir,getDocsPath,getExamplesPath,getPackageDir,getReadmePath,resizeImage}from"./chunks/chunk-2LC3S3VV.js";import"./chunks/chunk-MA4UUCYX.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";export{AgentExecInputError,AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,HUMAIN_AGENT_EXECUTION_FAILURE_CODES,HUMAIN_AGENT_EXECUTION_SCHEMA_VERSION,HumainAgentArtifactSchema,HumainAgentExecutionClaimSchema,HumainAgentExecutionControlsSchema,HumainAgentExecutionOutcomeSchema,HumainAgentExecutionRequestSchema,HumainAgentExecutionResponseSchema,HumainAgentRouteRefSchema,HumainAgentUsageSchema,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UPSTREAM_PI_VERSION,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPiAgentExecutionHost,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,executeHumainAgentRequest,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseHumainAgentExecutionRequest,parseHumainAgentExecutionResponse,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runAgentExecMode,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
2
+ import{AgentExecInputError,AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,HUMAIN_AGENT_EXECUTION_FAILURE_CODES,HUMAIN_AGENT_EXECUTION_SCHEMA_VERSION,HumainAgentArtifactSchema,HumainAgentExecutionClaimSchema,HumainAgentExecutionControlsSchema,HumainAgentExecutionOutcomeSchema,HumainAgentExecutionRequestSchema,HumainAgentExecutionResponseSchema,HumainAgentRouteRefSchema,HumainAgentUsageSchema,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPiAgentExecutionHost,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,executeHumainAgentRequest,findCutPoint,findTurnStartIndex,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPowerShellConfig,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseHumainAgentExecutionRequest,parseHumainAgentExecutionResponse,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resolveCliModel,resolveModelScopeWithDiagnostics,runAgentExecMode,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-I47ZWR55.js";import"./chunks/chunk-D6HHRSB5.js";import{CONFIG_DIR_NAME,UPSTREAM_PI_VERSION,VERSION,formatDimensionNote,getAgentDir,getDocsPath,getExamplesPath,getPackageDir,getReadmePath,resizeImage}from"./chunks/chunk-LI2YVPWP.js";import"./chunks/chunk-EY4DWHQU.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7T6XCLJF.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";export{AgentExecInputError,AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,HUMAIN_AGENT_EXECUTION_FAILURE_CODES,HUMAIN_AGENT_EXECUTION_SCHEMA_VERSION,HumainAgentArtifactSchema,HumainAgentExecutionClaimSchema,HumainAgentExecutionControlsSchema,HumainAgentExecutionOutcomeSchema,HumainAgentExecutionRequestSchema,HumainAgentExecutionResponseSchema,HumainAgentRouteRefSchema,HumainAgentUsageSchema,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UPSTREAM_PI_VERSION,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPiAgentExecutionHost,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,executeHumainAgentRequest,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseHumainAgentExecutionRequest,parseHumainAgentExecutionResponse,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runAgentExecMode,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{configureHttpDispatcher,main}from"./chunks/chunk-LYAMSPR2.js";import{APP_NAME}from"./chunks/chunk-2LC3S3VV.js";import"./chunks/chunk-MA4UUCYX.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";process.title=`${APP_NAME}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
3
+ import{configureHttpDispatcher,main}from"./chunks/chunk-I47ZWR55.js";import"./chunks/chunk-D6HHRSB5.js";import{APP_NAME}from"./chunks/chunk-LI2YVPWP.js";import"./chunks/chunk-EY4DWHQU.js";import"./chunks/chunk-SGTGQNNP.js";import"./chunks/chunk-ECWELYBH.js";import"./chunks/chunk-74NVHVNZ.js";import"./chunks/chunk-PL7O7J4J.js";import"./chunks/chunk-7T6XCLJF.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-7DDKXS2Q.js";import"./chunks/chunk-D7XAASZM.js";import"./chunks/chunk-E6KP6V7F.js";import"./chunks/chunk-72KO4OMP.js";import"./chunks/chunk-JXWJOIH4.js";process.title=`${APP_NAME}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
@@ -1 +1 @@
1
- {"version":3,"file":"file-mutation-queue.d.ts","sourceRoot":"","sources":["../../../src/core/tools/file-mutation-queue.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA6BjG"}
1
+ {"version":3,"file":"file-mutation-queue.d.ts","sourceRoot":"","sources":["../../../src/core/tools/file-mutation-queue.ts"],"names":[],"mappings":"AAgDA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA6BjG"}
@@ -1,7 +1,20 @@
1
1
  import { realpath } from "node:fs/promises";
2
2
  import { resolve } from "node:path";
3
- const fileMutationQueues = new Map();
4
- let registrationQueue = Promise.resolve();
3
+ // The MCP adapter bundle inlines this module, so module-local state would hand
4
+ // vendored MCP tools a second queue and stop serializing them against edit,
5
+ // write and subagent. Share one state object across every module instance, the
6
+ // same way theme.ts shares the active theme.
7
+ const FILE_MUTATION_QUEUE_KEY = Symbol.for("humain-terminal:file-mutation-queue");
8
+ const globalScope = globalThis;
9
+ // Both fields have to be shared: a per-instance registration queue would let two
10
+ // instances read the same tail before either wrote, and both would then run.
11
+ if (!globalScope[FILE_MUTATION_QUEUE_KEY]) {
12
+ globalScope[FILE_MUTATION_QUEUE_KEY] = {
13
+ queues: new Map(),
14
+ registration: Promise.resolve(),
15
+ };
16
+ }
17
+ const state = globalScope[FILE_MUTATION_QUEUE_KEY];
5
18
  function isMissingPathError(error) {
6
19
  return (typeof error === "object" &&
7
20
  error !== null &&
@@ -25,18 +38,18 @@ async function getMutationQueueKey(filePath) {
25
38
  * Operations for different files still run in parallel.
26
39
  */
27
40
  export async function withFileMutationQueue(filePath, fn) {
28
- const registration = registrationQueue.then(async () => {
41
+ const registration = state.registration.then(async () => {
29
42
  const key = await getMutationQueueKey(filePath);
30
- const currentQueue = fileMutationQueues.get(key) ?? Promise.resolve();
43
+ const currentQueue = state.queues.get(key) ?? Promise.resolve();
31
44
  let releaseNext;
32
45
  const nextQueue = new Promise((resolveQueue) => {
33
46
  releaseNext = resolveQueue;
34
47
  });
35
48
  const chainedQueue = currentQueue.then(() => nextQueue);
36
- fileMutationQueues.set(key, chainedQueue);
49
+ state.queues.set(key, chainedQueue);
37
50
  return { key, currentQueue, chainedQueue, releaseNext };
38
51
  });
39
- registrationQueue = registration.then(() => undefined, () => undefined);
52
+ state.registration = registration.then(() => undefined, () => undefined);
40
53
  const { key, currentQueue, chainedQueue, releaseNext } = await registration;
41
54
  await currentQueue;
42
55
  try {
@@ -44,8 +57,8 @@ export async function withFileMutationQueue(filePath, fn) {
44
57
  }
45
58
  finally {
46
59
  releaseNext();
47
- if (fileMutationQueues.get(key) === chainedQueue) {
48
- fileMutationQueues.delete(key);
60
+ if (state.queues.get(key) === chainedQueue) {
61
+ state.queues.delete(key);
49
62
  }
50
63
  }
51
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-mutation-queue.js","sourceRoot":"","sources":["../../../src/core/tools/file-mutation-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC5D,IAAI,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1C,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC;QACJ,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAI,QAAgB,EAAE,EAAoB;IACpF,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAEtE,IAAI,WAAwB,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,EAAE;YACpD,WAAW,GAAG,YAAY,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxD,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAE1C,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,iBAAiB,GAAG,YAAY,CAAC,IAAI,CACpC,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC;IAC5E,MAAM,YAAY,CAAC;IACnB,IAAI,CAAC;QACJ,OAAO,MAAM,EAAE,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACV,WAAW,EAAE,CAAC;QACd,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC;YAClD,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["import { realpath } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nconst fileMutationQueues = new Map<string, Promise<void>>();\nlet registrationQueue = Promise.resolve();\n\nfunction isMissingPathError(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n\t);\n}\n\nasync function getMutationQueueKey(filePath: string): Promise<string> {\n\tconst resolvedPath = resolve(filePath);\n\ttry {\n\t\treturn await realpath(resolvedPath);\n\t} catch (error) {\n\t\tif (isMissingPathError(error)) {\n\t\t\treturn resolvedPath;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n/**\n * Serialize file mutation operations targeting the same file.\n * Operations for different files still run in parallel.\n */\nexport async function withFileMutationQueue<T>(filePath: string, fn: () => Promise<T>): Promise<T> {\n\tconst registration = registrationQueue.then(async () => {\n\t\tconst key = await getMutationQueueKey(filePath);\n\t\tconst currentQueue = fileMutationQueues.get(key) ?? Promise.resolve();\n\n\t\tlet releaseNext!: () => void;\n\t\tconst nextQueue = new Promise<void>((resolveQueue) => {\n\t\t\treleaseNext = resolveQueue;\n\t\t});\n\t\tconst chainedQueue = currentQueue.then(() => nextQueue);\n\t\tfileMutationQueues.set(key, chainedQueue);\n\n\t\treturn { key, currentQueue, chainedQueue, releaseNext };\n\t});\n\tregistrationQueue = registration.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\n\tconst { key, currentQueue, chainedQueue, releaseNext } = await registration;\n\tawait currentQueue;\n\ttry {\n\t\treturn await fn();\n\t} finally {\n\t\treleaseNext();\n\t\tif (fileMutationQueues.get(key) === chainedQueue) {\n\t\t\tfileMutationQueues.delete(key);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"file-mutation-queue.js","sourceRoot":"","sources":["../../../src/core/tools/file-mutation-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,6CAA6C;AAC7C,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AASlF,MAAM,WAAW,GAAG,UAAqC,CAAC;AAC1D,iFAAiF;AACjF,6EAA6E;AAC7E,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,CAAC;IAC3C,WAAW,CAAC,uBAAuB,CAAC,GAAG;QACtC,MAAM,EAAE,IAAI,GAAG,EAAyB;QACxC,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE;KACE,CAAC;AACpC,CAAC;AACD,MAAM,KAAK,GAAG,WAAW,CAAC,uBAAuB,CAA2B,CAAC;AAE7E,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC;QACJ,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAI,QAAgB,EAAE,EAAoB;IACpF,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAEhE,IAAI,WAAwB,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,EAAE;YACpD,WAAW,GAAG,YAAY,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEpC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CACrC,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC;IAC5E,MAAM,YAAY,CAAC;IACnB,IAAI,CAAC;QACJ,OAAO,MAAM,EAAE,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACV,WAAW,EAAE,CAAC;QACd,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC;YAC5C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["import { realpath } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\n// The MCP adapter bundle inlines this module, so module-local state would hand\n// vendored MCP tools a second queue and stop serializing them against edit,\n// write and subagent. Share one state object across every module instance, the\n// same way theme.ts shares the active theme.\nconst FILE_MUTATION_QUEUE_KEY = Symbol.for(\"humain-terminal:file-mutation-queue\");\n\ninterface FileMutationQueueState {\n\t/** Pending tail of the mutation chain, keyed by resolved path. */\n\tqueues: Map<string, Promise<void>>;\n\t/** Serializes the read-modify-write of `queues` across the realpath await. */\n\tregistration: Promise<void>;\n}\n\nconst globalScope = globalThis as Record<symbol, unknown>;\n// Both fields have to be shared: a per-instance registration queue would let two\n// instances read the same tail before either wrote, and both would then run.\nif (!globalScope[FILE_MUTATION_QUEUE_KEY]) {\n\tglobalScope[FILE_MUTATION_QUEUE_KEY] = {\n\t\tqueues: new Map<string, Promise<void>>(),\n\t\tregistration: Promise.resolve(),\n\t} satisfies FileMutationQueueState;\n}\nconst state = globalScope[FILE_MUTATION_QUEUE_KEY] as FileMutationQueueState;\n\nfunction isMissingPathError(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n\t);\n}\n\nasync function getMutationQueueKey(filePath: string): Promise<string> {\n\tconst resolvedPath = resolve(filePath);\n\ttry {\n\t\treturn await realpath(resolvedPath);\n\t} catch (error) {\n\t\tif (isMissingPathError(error)) {\n\t\t\treturn resolvedPath;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n/**\n * Serialize file mutation operations targeting the same file.\n * Operations for different files still run in parallel.\n */\nexport async function withFileMutationQueue<T>(filePath: string, fn: () => Promise<T>): Promise<T> {\n\tconst registration = state.registration.then(async () => {\n\t\tconst key = await getMutationQueueKey(filePath);\n\t\tconst currentQueue = state.queues.get(key) ?? Promise.resolve();\n\n\t\tlet releaseNext!: () => void;\n\t\tconst nextQueue = new Promise<void>((resolveQueue) => {\n\t\t\treleaseNext = resolveQueue;\n\t\t});\n\t\tconst chainedQueue = currentQueue.then(() => nextQueue);\n\t\tstate.queues.set(key, chainedQueue);\n\n\t\treturn { key, currentQueue, chainedQueue, releaseNext };\n\t});\n\tstate.registration = registration.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\n\tconst { key, currentQueue, chainedQueue, releaseNext } = await registration;\n\tawait currentQueue;\n\ttry {\n\t\treturn await fn();\n\t} finally {\n\t\treleaseNext();\n\t\tif (state.queues.get(key) === chainedQueue) {\n\t\t\tstate.queues.delete(key);\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Every process.env read the subagent tool performs lives here so the
3
+ * envelope (depth, concurrency, task count) and child identity have one
4
+ * definition. Children inherit these through spawn env.
5
+ */
6
+ export declare const SUBAGENT_DEPTH_ENV = "HUMAIN_TERMINAL_SUBAGENT_DEPTH";
7
+ export declare const SUBAGENT_MAX_DEPTH_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_DEPTH";
8
+ export declare const SUBAGENT_MAX_CONCURRENCY_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_CONCURRENCY";
9
+ export declare const SUBAGENT_MAX_TASKS_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_TASKS";
10
+ export declare const TASK_ID_ENV = "HUMAIN_TERMINAL_TASK_ID";
11
+ export declare const PARENT_TASK_ID_ENV = "HUMAIN_TERMINAL_PARENT_TASK_ID";
12
+ export declare const TASK_BASE_REVISION_ENV = "HUMAIN_TERMINAL_TASK_BASE_REVISION";
13
+ export declare function currentSubagentDepth(env?: NodeJS.ProcessEnv): number;
14
+ export declare function maxSubagentDepth(env?: NodeJS.ProcessEnv): number;
15
+ export declare function maxSubagentConcurrency(env?: NodeJS.ProcessEnv): number;
16
+ export declare function maxParallelTasks(env?: NodeJS.ProcessEnv): number;
17
+ export declare function currentTaskId(env?: NodeJS.ProcessEnv): string | undefined;
18
+ //# sourceMappingURL=subagent-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-env.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent-env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AACnE,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,6CAA6C,CAAC;AACvF,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,4BAA4B,CAAC;AACrD,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AACnE,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAgB3E,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE7E;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAGtF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Every process.env read the subagent tool performs lives here so the
3
+ * envelope (depth, concurrency, task count) and child identity have one
4
+ * definition. Children inherit these through spawn env.
5
+ */
6
+ export const SUBAGENT_DEPTH_ENV = "HUMAIN_TERMINAL_SUBAGENT_DEPTH";
7
+ export const SUBAGENT_MAX_DEPTH_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_DEPTH";
8
+ export const SUBAGENT_MAX_CONCURRENCY_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_CONCURRENCY";
9
+ export const SUBAGENT_MAX_TASKS_ENV = "HUMAIN_TERMINAL_SUBAGENT_MAX_TASKS";
10
+ export const TASK_ID_ENV = "HUMAIN_TERMINAL_TASK_ID";
11
+ export const PARENT_TASK_ID_ENV = "HUMAIN_TERMINAL_PARENT_TASK_ID";
12
+ export const TASK_BASE_REVISION_ENV = "HUMAIN_TERMINAL_TASK_BASE_REVISION";
13
+ const DEFAULT_MAX_DEPTH = 1;
14
+ const DEFAULT_MAX_CONCURRENCY = 4;
15
+ const DEFAULT_MAX_TASKS = 8;
16
+ // ponytail: hard ceilings; a policy layer may lower these, never raise them.
17
+ const CEILING_DEPTH = 3;
18
+ const CEILING_CONCURRENCY = 8;
19
+ const CEILING_TASKS = 16;
20
+ function clampedInt(raw, fallback, min, max) {
21
+ const n = Number(raw);
22
+ if (raw === undefined || raw.trim() === "" || !Number.isFinite(n))
23
+ return fallback;
24
+ return Math.min(max, Math.max(min, Math.floor(n)));
25
+ }
26
+ export function currentSubagentDepth(env = process.env) {
27
+ const raw = Number(env[SUBAGENT_DEPTH_ENV] ?? "0");
28
+ return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
29
+ }
30
+ export function maxSubagentDepth(env = process.env) {
31
+ return clampedInt(env[SUBAGENT_MAX_DEPTH_ENV], DEFAULT_MAX_DEPTH, 1, CEILING_DEPTH);
32
+ }
33
+ export function maxSubagentConcurrency(env = process.env) {
34
+ return clampedInt(env[SUBAGENT_MAX_CONCURRENCY_ENV], DEFAULT_MAX_CONCURRENCY, 1, CEILING_CONCURRENCY);
35
+ }
36
+ export function maxParallelTasks(env = process.env) {
37
+ return clampedInt(env[SUBAGENT_MAX_TASKS_ENV], DEFAULT_MAX_TASKS, 1, CEILING_TASKS);
38
+ }
39
+ export function currentTaskId(env = process.env) {
40
+ const raw = env[TASK_ID_ENV]?.trim();
41
+ return raw ? raw : undefined;
42
+ }
43
+ //# sourceMappingURL=subagent-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-env.js","sourceRoot":"","sources":["../../../src/core/tools/subagent-env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAC3E,MAAM,CAAC,MAAM,4BAA4B,GAAG,0CAA0C,CAAC;AACvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,6EAA6E;AAC7E,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,SAAS,UAAU,CAAC,GAAuB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IACtF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC1E,OAAO,UAAU,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,OAAO,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACjE,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * Every process.env read the subagent tool performs lives here so the\n * envelope (depth, concurrency, task count) and child identity have one\n * definition. Children inherit these through spawn env.\n */\nexport const SUBAGENT_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_DEPTH\";\nexport const SUBAGENT_MAX_DEPTH_ENV = \"HUMAIN_TERMINAL_SUBAGENT_MAX_DEPTH\";\nexport const SUBAGENT_MAX_CONCURRENCY_ENV = \"HUMAIN_TERMINAL_SUBAGENT_MAX_CONCURRENCY\";\nexport const SUBAGENT_MAX_TASKS_ENV = \"HUMAIN_TERMINAL_SUBAGENT_MAX_TASKS\";\nexport const TASK_ID_ENV = \"HUMAIN_TERMINAL_TASK_ID\";\nexport const PARENT_TASK_ID_ENV = \"HUMAIN_TERMINAL_PARENT_TASK_ID\";\nexport const TASK_BASE_REVISION_ENV = \"HUMAIN_TERMINAL_TASK_BASE_REVISION\";\n\nconst DEFAULT_MAX_DEPTH = 1;\nconst DEFAULT_MAX_CONCURRENCY = 4;\nconst DEFAULT_MAX_TASKS = 8;\n// ponytail: hard ceilings; a policy layer may lower these, never raise them.\nconst CEILING_DEPTH = 3;\nconst CEILING_CONCURRENCY = 8;\nconst CEILING_TASKS = 16;\n\nfunction clampedInt(raw: string | undefined, fallback: number, min: number, max: number): number {\n\tconst n = Number(raw);\n\tif (raw === undefined || raw.trim() === \"\" || !Number.isFinite(n)) return fallback;\n\treturn Math.min(max, Math.max(min, Math.floor(n)));\n}\n\nexport function currentSubagentDepth(env: NodeJS.ProcessEnv = process.env): number {\n\tconst raw = Number(env[SUBAGENT_DEPTH_ENV] ?? \"0\");\n\treturn Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n}\n\nexport function maxSubagentDepth(env: NodeJS.ProcessEnv = process.env): number {\n\treturn clampedInt(env[SUBAGENT_MAX_DEPTH_ENV], DEFAULT_MAX_DEPTH, 1, CEILING_DEPTH);\n}\n\nexport function maxSubagentConcurrency(env: NodeJS.ProcessEnv = process.env): number {\n\treturn clampedInt(env[SUBAGENT_MAX_CONCURRENCY_ENV], DEFAULT_MAX_CONCURRENCY, 1, CEILING_CONCURRENCY);\n}\n\nexport function maxParallelTasks(env: NodeJS.ProcessEnv = process.env): number {\n\treturn clampedInt(env[SUBAGENT_MAX_TASKS_ENV], DEFAULT_MAX_TASKS, 1, CEILING_TASKS);\n}\n\nexport function currentTaskId(env: NodeJS.ProcessEnv = process.env): string | undefined {\n\tconst raw = env[TASK_ID_ENV]?.trim();\n\treturn raw ? raw : undefined;\n}\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Pure scheduling for the subagent tool's parallel mode. No I/O, no spawn.
3
+ * Explicit `dependsOn` edges gate start and propagate failure as a skip.
4
+ * Implicit owner-path edges only order siblings; they never skip.
5
+ */
6
+ export interface SchedulableTask {
7
+ id: string;
8
+ dependsOn?: string[];
9
+ ownerPaths?: string[];
10
+ }
11
+ export type DagEvent = {
12
+ type: "wait";
13
+ id: string;
14
+ reason: "concurrency";
15
+ } | {
16
+ type: "serialize";
17
+ id: string;
18
+ after: string[];
19
+ } | {
20
+ type: "start";
21
+ id: string;
22
+ } | {
23
+ type: "skip";
24
+ id: string;
25
+ failedDependency: string;
26
+ };
27
+ export declare function validateTaskGraph(tasks: SchedulableTask[]): string | null;
28
+ export declare function ownerPathsOverlap(a: string[] | undefined, b: string[] | undefined): boolean;
29
+ export declare function implicitSerializationEdges(tasks: SchedulableTask[]): Map<string, string[]>;
30
+ export declare function runDag<TIn extends SchedulableTask, TOut>(tasks: TIn[], concurrency: number, run: (task: TIn, index: number) => Promise<TOut>, isFailed: (result: TOut) => boolean, skip: (task: TIn, index: number, failedDependency: string) => TOut, onEvent?: (event: DagEvent) => void, signal?: AbortSignal, onAbort?: (task: TIn, index: number) => TOut): Promise<TOut[]>;
31
+ //# sourceMappingURL=subagent-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-scheduler.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent-scheduler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,GAAG,IAAI,CA8BzE;AAUD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAK3F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAU1F;AAED,wBAAsB,MAAM,CAAC,GAAG,SAAS,eAAe,EAAE,IAAI,EAC7D,KAAK,EAAE,GAAG,EAAE,EACZ,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAChD,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,EACnC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,EAClE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACnC,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CAwIjB"}