@seanhogg/builderforce-agents 2026.10.3 → 2026.10.4
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.
- package/dist/{agent-CxhUn-aN.js → agent-Cu57zjv6.js} +1 -1
- package/dist/{agent-CiEaiH-p.js → agent-LoZ_09Jv.js} +1 -1
- package/dist/{agents-DkKFDcYq.js → agents-Dgrr6E7S.js} +1 -1
- package/dist/{agents-IZrPoZIi.js → agents-DiRof4zA.js} +1 -1
- package/dist/{audio-preflight-COZAlqnx.js → audio-preflight-Cg4vjX8I.js} +1 -1
- package/dist/{auth-choice-CrYQF7zX.js → auth-choice-BJmosINc.js} +1 -1
- package/dist/{auth-choice-DhUBmu6y.js → auth-choice-CDoW8QDy.js} +1 -1
- package/dist/{auth-choice.apply-Botyf6Sg.js → auth-choice.apply-25j_lhua.js} +1 -1
- package/dist/{auth-choice.apply-k9tk1hGj.js → auth-choice.apply-CE1TC_Ts.js} +1 -1
- package/dist/{auth-choice.apply-Cch5UXis.js → auth-choice.apply-DSHzvYNu.js} +1 -1
- package/dist/{auth-choice.apply-CXRcLO-h.js → auth-choice.apply-ND2C2oSe.js} +1 -1
- package/dist/{auth-choice.apply.transformers-BkN8HlZJ.js → auth-choice.apply.transformers-BF-qyu2L.js} +1 -1
- package/dist/{auth-choice.apply.transformers-B9SieNNk.js → auth-choice.apply.transformers-CBQbUAwr.js} +1 -1
- package/dist/{auth-choice.apply.transformers-D02W3zy7.js → auth-choice.apply.transformers-DE9QrzbX.js} +1 -1
- package/dist/{auth-choice.apply.transformers-Dnr7Izx1.js → auth-choice.apply.transformers-vr05ATPq.js} +1 -1
- package/dist/{banner-Bd45EXyp.js → banner-Bx4c92N8.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/{builderforce-BxVfTQsc.js → builderforce-DHU87PJG.js} +1 -1
- package/dist/{builderforce-C86noipf.js → builderforce-DgYCZ3Up.js} +1 -1
- package/dist/bundled/boot-md/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +1 -1
- package/dist/{channel-options-BHetVK54.js → channel-options-BZoCW2EZ.js} +1 -1
- package/dist/{channel-options-D5PmuxT-.js → channel-options-DAkHvC-x.js} +1 -1
- package/dist/{channel-web-B5QgCj6B.js → channel-web-BWEX1FnI.js} +1 -1
- package/dist/{channels-cli-sHtDH37K.js → channels-cli-DHFIXbTT.js} +1 -1
- package/dist/{channels-cli-CgZqXqUm.js → channels-cli-DvkQEBwz.js} +1 -1
- package/dist/chrome-CbBg1ngA.js +4 -0
- package/dist/{cli-DKoe6Ywl.js → cli-C9bsC2UP.js} +1 -1
- package/dist/{cli-DlaHihmr.js → cli-DnMFuBeA.js} +1 -1
- package/dist/{command-registry-FQIQbQAx.js → command-registry-DUOpdtcT.js} +1 -1
- package/dist/{command-registry-BhyY4aXy.js → command-registry-DrRz6Wgg.js} +1 -1
- package/dist/{completion-cli-D86ydD3X.js → completion-cli-BtLeKqh_.js} +1 -1
- package/dist/{completion-cli-H4iKy2_f.js → completion-cli-Cq33pQdJ.js} +1 -1
- package/dist/{completion-cli-CoFRiwNp.js → completion-cli-EbyCUnCP.js} +1 -1
- package/dist/{completion-cli-DF6vmGRs.js → completion-cli-mzQa8oTd.js} +1 -1
- package/dist/{config-cli-D6KAk3vw.js → config-cli-BIQl_nrn.js} +1 -1
- package/dist/{config-cli-9HoPtGDR.js → config-cli-Dw1pr9MW.js} +1 -1
- package/dist/{configure-B_FvthXy.js → configure-B1HJIRSM.js} +1 -1
- package/dist/{configure-CYwCU0Hw.js → configure-BPX5i4at.js} +1 -1
- package/dist/{configure-BgZGeNXf.js → configure-CKm9_xkS.js} +1 -1
- package/dist/{configure-6QCgecON.js → configure-CQPFd8N9.js} +1 -1
- package/dist/{deps-jUQM2eq1.js → deps-DN7fhGiB.js} +1 -1
- package/dist/{doctor-completion-CZrfkBfj.js → doctor-completion-B7JXY8EJ.js} +1 -1
- package/dist/{doctor-completion-BSbAN5p1.js → doctor-completion-BEVC1EV7.js} +1 -1
- package/dist/{embedded-CA0n2tyG.js → embedded-BBM-usEa.js} +7 -7
- package/dist/{embedded-SSuKQ6Yc.js → embedded-CIuP-6Ex.js} +2 -2
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-8SuDvuCq.js → gateway-cli-CvdguqNO.js} +2 -2
- package/dist/{gateway-cli-D5pW1jLs.js → gateway-cli-DvMzpFIF.js} +2 -2
- package/dist/{health-BLW40WUJ.js → health-Bd0YvHPq.js} +1 -1
- package/dist/{health-DqZB_jd8.js → health-CcUquV5P.js} +1 -1
- package/dist/{health-Cggr6c-2.js → health-CoTbsx1p.js} +1 -1
- package/dist/{hooks-cli-BQZjt-Fk.js → hooks-cli-D1mx0_F_.js} +1 -1
- package/dist/{hooks-cli-D5Zt0sN4.js → hooks-cli-Dr0hMOiz.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/llm-slug-generator.js +1 -1
- package/dist/{models-DH9Vrv7O.js → models-D3MukbTO.js} +1 -1
- package/dist/{models-cli-DLZZwy_m.js → models-cli-CBUEjJ_T.js} +1 -1
- package/dist/{models-cli-CAaWi4TX.js → models-cli-nD2MyRO3.js} +1 -1
- package/dist/{models-bp562zNz.js → models-px2EtCBB.js} +1 -1
- package/dist/{onboard-pzmSj6MG.js → onboard-CelRLEbD.js} +1 -1
- package/dist/{onboard-CpFQ-bpz.js → onboard-D_Ja6cJL.js} +1 -1
- package/dist/{onboard-channels-BsMS0Ehd.js → onboard-channels-C5v3gxTE.js} +1 -1
- package/dist/{onboard-channels-D1FMu5M8.js → onboard-channels-CEMtoVzX.js} +1 -1
- package/dist/{onboard-channels-CKWKLbTn.js → onboard-channels-DIvxrZLb.js} +1 -1
- package/dist/{onboard-channels-CqXCWPaQ.js → onboard-channels-pPjt4AF5.js} +1 -1
- package/dist/{onboard-interactive-BAcb1Yd8.js → onboard-interactive-BIVMtUaZ.js} +1 -1
- package/dist/{onboard-interactive-COTt-hGf.js → onboard-interactive-CeQp6fAt.js} +1 -1
- package/dist/{onboard-interactive-B_YG0JwA.js → onboard-interactive-D3YgFz9n.js} +1 -1
- package/dist/{onboard-interactive-BdwTeKJ2.js → onboard-interactive-tVpsWM3V.js} +1 -1
- package/dist/{onboarding-C8IDtM8O.js → onboarding-B9P9Rocf.js} +2 -2
- package/dist/{onboarding-BhMZqtBx.js → onboarding-DXxufSuN.js} +2 -2
- package/dist/{onboarding.finalize-DpyMh92r.js → onboarding.finalize-BJbv33Sa.js} +1 -1
- package/dist/{onboarding.finalize-DEhEHZPV.js → onboarding.finalize-CiIdxWgH.js} +1 -1
- package/dist/{outbound-send-deps-CKOfRpqk.js → outbound-send-deps-DL5n0r7v.js} +1 -1
- package/dist/{plugin-registry-Bi-9AQMd.js → plugin-registry-B5gTbK3m.js} +1 -1
- package/dist/{plugin-registry-nxUQWv6l.js → plugin-registry-CBXZbshG.js} +1 -1
- package/dist/{plugin-registry-BlKyKAq2.js → plugin-registry-DEWbh_9i.js} +1 -1
- package/dist/{plugin-registry-CqGq9jzk.js → plugin-registry-Glc-xriO.js} +1 -1
- package/dist/plugin-sdk/{channel-web-C3UtHX6b.js → channel-web-CW5s6vEZ.js} +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/{reply-BTKDKB2t.js → reply-pngAtrhW.js} +2 -2
- package/dist/plugin-sdk/{web-CsPSK9U2.js → web-DfrDkFj_.js} +1 -1
- package/dist/{plugins-CUhWH9-E.js → plugins-BJNBD6Si.js} +1 -1
- package/dist/{plugins-B8Lge-oB.js → plugins-BZnMash4.js} +1 -1
- package/dist/{plugins-cli-c36MSKiX.js → plugins-cli-Cv_bwpr4.js} +1 -1
- package/dist/{plugins-cli-CgjC_YvF.js → plugins-cli-DkFN_JgK.js} +1 -1
- package/dist/{program-QMtnfrM_.js → program-DYU1raxm.js} +2 -2
- package/dist/{program-context-BgCNjcCh.js → program-context-D4S-3zNt.js} +1 -1
- package/dist/{prompt-select-styled-CWG9o2CX.js → prompt-select-styled-BhKY5Oj4.js} +1 -1
- package/dist/{prompt-select-styled-m1_NXutn.js → prompt-select-styled-D1StbM6j.js} +1 -1
- package/dist/{provider-auth-helpers-BFCTgzr_.js → provider-auth-helpers-5ZQb3SEz.js} +1 -1
- package/dist/{provider-auth-helpers-D0eiRpeb.js → provider-auth-helpers-Cibq8oDi.js} +1 -1
- package/dist/{provider-dispatcher-Djomkp5i.js → provider-dispatcher-Bwaplzm8.js} +1 -1
- package/dist/{provider-dispatcher-B6kumPDM.js → provider-dispatcher-kL8Yl9XU.js} +1 -1
- package/dist/{push-apns-DalSFp-6.js → push-apns-BXmSvfvx.js} +1 -1
- package/dist/{push-apns-DwSjHMuA.js → push-apns-C9hsLIBU.js} +1 -1
- package/dist/{pw-ai-1DyAPekE.js → pw-ai-BLyUwyRC.js} +1 -1
- package/dist/{register.agent-BZn434eF.js → register.agent-C4x77WJe.js} +1 -1
- package/dist/{register.agent-DNaHcARI.js → register.agent-CbP_v3k5.js} +1 -1
- package/dist/{register.configure-GTH7BPIx.js → register.configure-B-j2lVkz.js} +1 -1
- package/dist/{register.configure-Bflad790.js → register.configure-BsBerk8U.js} +1 -1
- package/dist/{register.maintenance-Dl7P66Jm.js → register.maintenance-B83yzc-P.js} +1 -1
- package/dist/{register.maintenance-B1XK1zeY.js → register.maintenance-WLPWJ7vr.js} +1 -1
- package/dist/{register.message-CJS3PPCy.js → register.message-BVo8xLbS.js} +1 -1
- package/dist/{register.message-CA5LiG16.js → register.message-DZ9zcORn.js} +1 -1
- package/dist/{register.onboard-Bj6wFSzC.js → register.onboard-CWCqKyU7.js} +1 -1
- package/dist/{register.onboard-4y1mzgCn.js → register.onboard-D9mB9MLj.js} +1 -1
- package/dist/{register.setup-Cvk8SB1q.js → register.setup-BMFb9IC4.js} +1 -1
- package/dist/{register.setup-zLIWO_nF.js → register.setup-C22fWTFR.js} +1 -1
- package/dist/{register.status-health-sessions-CjxA4ATI.js → register.status-health-sessions-BqMqFeMA.js} +1 -1
- package/dist/{register.status-health-sessions-CIYKmgKO.js → register.status-health-sessions-C-jqKRZ5.js} +1 -1
- package/dist/{register.subclis-Ua7PkPpv.js → register.subclis-Ceyv8kgc.js} +1 -1
- package/dist/{register.subclis-Ct4QBaKi.js → register.subclis-DxcQwaQg.js} +1 -1
- package/dist/{reply-gZ_yr2mJ.js → reply-BeKidf2F.js} +4 -4
- package/dist/{run-main-Cyc_C0B-.js → run-main-EhlBxGJB.js} +1 -1
- package/dist/{runner-C1sy_uJN.js → runner-P3IfAnSL.js} +3 -3
- package/dist/{server-node-events-CSsH-eIF.js → server-node-events-BZuSkcbo.js} +1 -1
- package/dist/{server-node-events-Bz_Qo5BV.js → server-node-events-CIsEZSfR.js} +1 -1
- package/dist/{session-dirs-fh5kvbyH.js → session-dirs-DH7k5ehu.js} +1 -1
- package/dist/{session-dirs-DVL9vHmq.js → session-dirs-DgwMogyJ.js} +1 -1
- package/dist/{status-sAc6yoa3.js → status-BY0kS_wo.js} +1 -1
- package/dist/{status-SPonEO1J.js → status-B_SXw9W4.js} +1 -1
- package/dist/{status-DZYF4S6_.js → status-BqEzSHhZ.js} +1 -1
- package/dist/{status-ChEjU5un.js → status-Ca-hgLW_.js} +1 -1
- package/dist/{status-CpxCM8BO.js → status-_KIJcQH-.js} +1 -1
- package/dist/{subagent-registry-BHP3_ka8.js → subagent-registry-98yia-RN.js} +4 -4
- package/dist/{subagent-registry-BYK0Wq_w.js → subagent-registry-Ch9dN-TR.js} +1 -1
- package/dist/{subagent-registry-DR5M5QUP.js → subagent-registry-CiYeuaym.js} +1 -1
- package/dist/{tui-Ujq2bTco.js → tui-BIpdEy5i.js} +2 -2
- package/dist/{tui-BsMw6I4Y.js → tui-DeG1am8h.js} +2 -2
- package/dist/{tui-cli-CLYxMYyC.js → tui-cli-3mxSu-O0.js} +1 -1
- package/dist/{tui-cli-BBKMdwDt.js → tui-cli-CXRFHYWv.js} +1 -1
- package/dist/{update-cli-uQLI7RCN.js → update-cli-BYhJHTZ0.js} +1 -1
- package/dist/{update-cli-BKcCNOzz.js → update-cli-DkgHl95y.js} +1 -1
- package/dist/{web-Bkk568P6.js → web--D7qJmx6.js} +1 -1
- package/dist/{web-wR7gzEVJ.js → web-CgypI7gs.js} +1 -1
- package/dist/{web-CGo9DnE4.js → web-DKmwaw7q.js} +1 -1
- package/dist/{web-DktK5vCb.js → web-Dvcfg5Kd.js} +1 -1
- package/extensions/memory-lancedb/package.json +2 -2
- package/package.json +1 -1
- package/dist/chrome-CAuboFG7.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as formatXHighModelHint,G as normalizeThinkLevel,Y as supportsXHighThinking,q as normalizeVerboseLevel,z as formatThinkingLevels}from"./embedded-helpers-DHfhLu2W.js";import{D as AGENT_LANE_NESTED,Ht as getRemoteSkillEligibility,O as AGENT_LANE_SUBAGENT,Sr as registerAgentRunContext,Ti as resolveAgentTimeoutMs,U as resolveOutboundTarget,W as resolveSessionDeliveryTarget,a as getCliSessionId,ci as applyModelOverrideToSessionEntry,f as resolveSendPolicy,li as applyVerboseOverride,m as runEmbeddedAgent,ni as lookupContextTokens,o as setCliSessionId,ri as clearSessionAuthProfileOverride,s as runCliAgent,vr as clearAgentRunContext,yr as emitAgentEvent,zr as runWithModelFallback}from"./reply-gZ_yr2mJ.js";import{d as normalizeAgentId,f as normalizeMainKey,p as resolveAgentIdFromSessionKey}from"./session-key-EoB0qaG9.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-TdK-aV05.js";import{c as resolveAgentWorkspaceDir,d as resolveSessionAgentId,i as resolveAgentDir,n as listAgentIds,o as resolveAgentModelPrimary,s as resolveAgentSkillsFilter,u as resolveEffectiveModelFallbacks,w as ensureAgentWorkspace}from"./agent-scope-DPtjOxzp.js";import{b as resolveThinkingDefault,c as normalizeModelRef,cn as DEFAULT_MODEL,ln as DEFAULT_PROVIDER,m as resolveConfiguredModelRef,o as isCliProvider,qt as ensureAuthProfileStore,s as modelKey,sn as DEFAULT_CONTEXT_TOKENS,t as buildAllowedModelSet}from"./model-selection-DlYajIzF.js";import{t as formatCliCommand}from"./command-format-Dd7BgZsg.js";import{r as loadConfig}from"./io-DhUMGsxN.js";import{r as loadModelCatalog}from"./model-catalog-BQUEoIev.js";import{r as buildWorkspaceSkillSnapshot}from"./skills-vjE49XV9.js";import{A as evaluateSessionFreshness,M as resolveSessionResetPolicy,N as resolveSessionResetType,a as loadSessionStore,j as resolveChannelResetConfig,k as resolveSessionKey,u as updateSessionStore,y as normalizeAccountId,z as resolveExplicitAgentSessionKey}from"./sessions-Dv212g1O.js";import{a as isInternalMessageChannel,d as resolveMessageChannel,i as isGatewayMessageChannel,l as normalizeMessageChannel,n as isDeliverableMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"./message-channel-BW_q2nVi.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-C0lu7LGS.js";import{c as resolveStorePath,n as resolveSessionFilePath}from"./paths-DCzWXtSj.js";import{i as normalizeOutboundPayloadsForJson,n as formatOutboundPayloadLog,r as normalizeOutboundPayloads,t as deliverOutboundPayloads}from"./deliver-CrB451sO.js";import{i as getSkillsSnapshotVersion}from"./refresh-Cyy0oi_E.js";import{c as hasNonzeroUsage,s as deriveSessionTotalTokens}from"./session-cost-usage-BDkGtjt9.js";import{t as createDefaultDeps}from"./deps-jUQM2eq1.js";import{t as createOutboundSendDeps}from"./outbound-send-deps-DS_1j6Dm.js";import crypto from"node:crypto";function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&¶ms.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&¶ms.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&¶ms.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&®isterAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}export{resolveAgentOutboundTarget as i,resolveSessionKeyForRequest as n,resolveAgentDeliveryPlan as r,agentCommand as t};
|
|
1
|
+
import{B as formatXHighModelHint,G as normalizeThinkLevel,Y as supportsXHighThinking,q as normalizeVerboseLevel,z as formatThinkingLevels}from"./embedded-helpers-DHfhLu2W.js";import{D as AGENT_LANE_NESTED,Ht as getRemoteSkillEligibility,O as AGENT_LANE_SUBAGENT,Sr as registerAgentRunContext,Ti as resolveAgentTimeoutMs,U as resolveOutboundTarget,W as resolveSessionDeliveryTarget,a as getCliSessionId,ci as applyModelOverrideToSessionEntry,f as resolveSendPolicy,li as applyVerboseOverride,m as runEmbeddedAgent,ni as lookupContextTokens,o as setCliSessionId,ri as clearSessionAuthProfileOverride,s as runCliAgent,vr as clearAgentRunContext,yr as emitAgentEvent,zr as runWithModelFallback}from"./reply-BeKidf2F.js";import{d as normalizeAgentId,f as normalizeMainKey,p as resolveAgentIdFromSessionKey}from"./session-key-EoB0qaG9.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-TdK-aV05.js";import{c as resolveAgentWorkspaceDir,d as resolveSessionAgentId,i as resolveAgentDir,n as listAgentIds,o as resolveAgentModelPrimary,s as resolveAgentSkillsFilter,u as resolveEffectiveModelFallbacks,w as ensureAgentWorkspace}from"./agent-scope-DPtjOxzp.js";import{b as resolveThinkingDefault,c as normalizeModelRef,cn as DEFAULT_MODEL,ln as DEFAULT_PROVIDER,m as resolveConfiguredModelRef,o as isCliProvider,qt as ensureAuthProfileStore,s as modelKey,sn as DEFAULT_CONTEXT_TOKENS,t as buildAllowedModelSet}from"./model-selection-DlYajIzF.js";import{t as formatCliCommand}from"./command-format-Dd7BgZsg.js";import{r as loadConfig}from"./io-DhUMGsxN.js";import{r as loadModelCatalog}from"./model-catalog-BQUEoIev.js";import{r as buildWorkspaceSkillSnapshot}from"./skills-vjE49XV9.js";import{A as evaluateSessionFreshness,M as resolveSessionResetPolicy,N as resolveSessionResetType,a as loadSessionStore,j as resolveChannelResetConfig,k as resolveSessionKey,u as updateSessionStore,y as normalizeAccountId,z as resolveExplicitAgentSessionKey}from"./sessions-Dv212g1O.js";import{a as isInternalMessageChannel,d as resolveMessageChannel,i as isGatewayMessageChannel,l as normalizeMessageChannel,n as isDeliverableMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"./message-channel-BW_q2nVi.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-C0lu7LGS.js";import{c as resolveStorePath,n as resolveSessionFilePath}from"./paths-DCzWXtSj.js";import{i as normalizeOutboundPayloadsForJson,n as formatOutboundPayloadLog,r as normalizeOutboundPayloads,t as deliverOutboundPayloads}from"./deliver-CrB451sO.js";import{i as getSkillsSnapshotVersion}from"./refresh-Cyy0oi_E.js";import{c as hasNonzeroUsage,s as deriveSessionTotalTokens}from"./session-cost-usage-BDkGtjt9.js";import{t as createDefaultDeps}from"./deps-DN7fhGiB.js";import{t as createOutboundSendDeps}from"./outbound-send-deps-DS_1j6Dm.js";import crypto from"node:crypto";function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&¶ms.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&¶ms.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&¶ms.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&®isterAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}export{resolveAgentOutboundTarget as i,resolveSessionKeyForRequest as n,resolveAgentDeliveryPlan as r,agentCommand as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as DEFAULT_CHAT_CHANNEL}from"./registry-Cv7CoWAs.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{F as modelKey,H as resolveConfiguredModelRef,I as normalizeModelRef,J as resolveThinkingDefault,P as isCliProvider,an as DEFAULT_MODEL,b as ensureAuthProfileStore,in as DEFAULT_CONTEXT_TOKENS,k as buildAllowedModelSet,on as DEFAULT_PROVIDER}from"./auth-profiles-BcStSGQ1.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{d as normalizeAgentId,f as normalizeMainKey,p as resolveAgentIdFromSessionKey}from"./session-key-D--2AEus.js";import{c as resolveAgentWorkspaceDir,d as resolveSessionAgentId,i as resolveAgentDir,n as listAgentIds,o as resolveAgentModelPrimary,s as resolveAgentSkillsFilter,u as resolveEffectiveModelFallbacks,w as ensureAgentWorkspace}from"./agent-scope-BcoQBOwz.js";import{r as loadConfig}from"./io-wLHeSE2L.js";import{r as loadModelCatalog}from"./model-catalog-CVRB77_N.js";import{r as buildWorkspaceSkillSnapshot}from"./skills-CC5ozaMz.js";import{i as getSkillsSnapshotVersion}from"./refresh-B38IMhwx.js";import{a as isInternalMessageChannel,d as resolveMessageChannel,i as isGatewayMessageChannel,l as normalizeMessageChannel,n as isDeliverableMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"./message-channel-BjZV4RTT.js";import{Fn as applyVerboseOverride,J as setCliSessionId,Pn as applyModelOverrideToSessionEntry,Xn as resolveAgentTimeoutMs,Xt as AGENT_LANE_NESTED,Y as runCliAgent,Zt as AGENT_LANE_SUBAGENT,at as resolveOutboundTarget,cn as getRemoteSkillEligibility,di as clearAgentRunContext,fi as emitAgentEvent,h as runEmbeddedAgent,hi as registerAgentRunContext,kn as clearSessionAuthProfileOverride,ot as resolveSessionDeliveryTarget,q as getCliSessionId,qr as runWithModelFallback,sn as resolveSendPolicy}from"./subagent-registry-BHP3_ka8.js";import{C as evaluateSessionFreshness,E as resolveSessionResetType,M as resolveExplicitAgentSessionKey,S as resolveSessionKey,T as resolveSessionResetPolicy,a as loadSessionStore,rt as normalizeAccountId,u as updateSessionStore,w as resolveChannelResetConfig}from"./sessions-C5jAGWOS.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-DJGW_fnS.js";import{i as normalizeOutboundPayloadsForJson,n as formatOutboundPayloadLog,r as normalizeOutboundPayloads,t as deliverOutboundPayloads}from"./deliver-DDFTiLT4.js";import{a as formatXHighModelHint,f as normalizeVerboseLevel,i as formatThinkingLevels,m as supportsXHighThinking,u as normalizeThinkLevel}from"./embedded-helpers-CsRjxr3I.js";import{c as resolveStorePath,n as resolveSessionFilePath}from"./paths-BQ9W7Bs0.js";import{u as lookupContextTokens}from"./session-utils-DDDkCdFF.js";import{c as hasNonzeroUsage,s as deriveSessionTotalTokens}from"./session-cost-usage-BgZfN_WR.js";import{n as createDefaultDeps,t as createOutboundSendDeps}from"./outbound-send-deps-CKOfRpqk.js";import crypto from"node:crypto";function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&¶ms.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&¶ms.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&¶ms.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&®isterAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}export{resolveAgentOutboundTarget as i,resolveSessionKeyForRequest as n,resolveAgentDeliveryPlan as r,agentCommand as t};
|
|
1
|
+
import{r as DEFAULT_CHAT_CHANNEL}from"./registry-Cv7CoWAs.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{F as modelKey,H as resolveConfiguredModelRef,I as normalizeModelRef,J as resolveThinkingDefault,P as isCliProvider,an as DEFAULT_MODEL,b as ensureAuthProfileStore,in as DEFAULT_CONTEXT_TOKENS,k as buildAllowedModelSet,on as DEFAULT_PROVIDER}from"./auth-profiles-BcStSGQ1.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{d as normalizeAgentId,f as normalizeMainKey,p as resolveAgentIdFromSessionKey}from"./session-key-D--2AEus.js";import{c as resolveAgentWorkspaceDir,d as resolveSessionAgentId,i as resolveAgentDir,n as listAgentIds,o as resolveAgentModelPrimary,s as resolveAgentSkillsFilter,u as resolveEffectiveModelFallbacks,w as ensureAgentWorkspace}from"./agent-scope-BcoQBOwz.js";import{r as loadConfig}from"./io-wLHeSE2L.js";import{r as loadModelCatalog}from"./model-catalog-CVRB77_N.js";import{r as buildWorkspaceSkillSnapshot}from"./skills-CC5ozaMz.js";import{i as getSkillsSnapshotVersion}from"./refresh-B38IMhwx.js";import{a as isInternalMessageChannel,d as resolveMessageChannel,i as isGatewayMessageChannel,l as normalizeMessageChannel,n as isDeliverableMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"./message-channel-BjZV4RTT.js";import{Fn as applyVerboseOverride,J as setCliSessionId,Pn as applyModelOverrideToSessionEntry,Xn as resolveAgentTimeoutMs,Xt as AGENT_LANE_NESTED,Y as runCliAgent,Zt as AGENT_LANE_SUBAGENT,at as resolveOutboundTarget,cn as getRemoteSkillEligibility,di as clearAgentRunContext,fi as emitAgentEvent,h as runEmbeddedAgent,hi as registerAgentRunContext,kn as clearSessionAuthProfileOverride,ot as resolveSessionDeliveryTarget,q as getCliSessionId,qr as runWithModelFallback,sn as resolveSendPolicy}from"./subagent-registry-98yia-RN.js";import{C as evaluateSessionFreshness,E as resolveSessionResetType,M as resolveExplicitAgentSessionKey,S as resolveSessionKey,T as resolveSessionResetPolicy,a as loadSessionStore,rt as normalizeAccountId,u as updateSessionStore,w as resolveChannelResetConfig}from"./sessions-C5jAGWOS.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-DJGW_fnS.js";import{i as normalizeOutboundPayloadsForJson,n as formatOutboundPayloadLog,r as normalizeOutboundPayloads,t as deliverOutboundPayloads}from"./deliver-DDFTiLT4.js";import{a as formatXHighModelHint,f as normalizeVerboseLevel,i as formatThinkingLevels,m as supportsXHighThinking,u as normalizeThinkLevel}from"./embedded-helpers-CsRjxr3I.js";import{c as resolveStorePath,n as resolveSessionFilePath}from"./paths-BQ9W7Bs0.js";import{u as lookupContextTokens}from"./session-utils-DDDkCdFF.js";import{c as hasNonzeroUsage,s as deriveSessionTotalTokens}from"./session-cost-usage-BgZfN_WR.js";import{n as createDefaultDeps,t as createOutboundSendDeps}from"./outbound-send-deps-DL5n0r7v.js";import crypto from"node:crypto";function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&¶ms.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&¶ms.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&¶ms.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&®isterAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}export{resolveAgentOutboundTarget as i,resolveSessionKeyForRequest as n,resolveAgentDeliveryPlan as r,agentCommand as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-98yia-RN.js";import"./sessions-C5jAGWOS.js";import"./project-context-store-BFOv5caq.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-CgMJqDBP.js";import"./send-DfpZ9T_M.js";import"./with-timeout-ftXvzlo8.js";import"./deliver-DDFTiLT4.js";import"./accounts-DoJYLMfS.js";import"./send-5Vokn3Uv.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-CsRjxr3I.js";import"./sandbox-bEma8jFA.js";import"./chrome-Kt4wxGF2.js";import"./tailscale-CgCG7AVQ.js";import"./auth-BNeS9xde.js";import"./server-context-0vSm_r2R.js";import"./routes-BLhXC8oU.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-BnrYivUM.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-BBsTN63-.js";import"./manager-BXMwSRz1.js";import"./gemini-auth-qrDeJkh5.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-qhKGerma.js";import"./tool-display-BIswnHaq.js";import"./chunk-hYck1V5_.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-CTE1iR41.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-BTolQUtx.js";import"./session-utils-DDDkCdFF.js";import"./coding-tools.policy-CtBT-KXm.js";import"./pairing-store-sCqmKjk2.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-nRVDmUHj.js";import"./send-COUZMiIL.js";import"./outbound-attachment-Bed_0M10.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-De5-TWPH.js";import"./control-service-DYVIKl0J.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-CLFizn8u.js";import"./send-CWzV8Zdx.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-XzBUkZcJ.js";import"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CiPwT32C.js";import"./onboard-helpers-Xl1gvLzt.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DVbgCApx.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-CViPpwyy.js";import"./transformers-stream-nSL4Xu31.js";import"./catalog-myy00TyP.js";import"./note-BvXfFmlu.js";import"./clack-prompter-ZmHdfPGJ.js";import"./helpers-DDS6DSK4.js";import"./plugin-auto-enable-Cxqw7Sa6.js";import"./install-safe-path-BxCb3BJW.js";import"./npm-registry-spec-DXx5hKYJ.js";import"./skill-scanner-B9E9x-dj.js";import"./installs-DwlFaoUO.js";import"./onboard-channels-CEMtoVzX.js";import"./config-validation--7EIcLxH.js";import"./agents.config-DanaEBfo.js";import"./shared-WIJmFKqL.js";import"./onboard-auth.credentials-f-xn5D4D.js";import"./auth-token-DGYih1b5.js";import"./logging-CRzk-5ye.js";import"./provider-auth-helpers-Cibq8oDi.js";import{t as agentsListCommand}from"./agents-DiRof4zA.js";import"./auth-choice.apply-CE1TC_Ts.js";import"./openai-model-default-C9iQBo_x.js";import"./model-picker-Dz1ecLd0.js";import"./auth-choice.apply.transformers-CBQbUAwr.js";import"./auth-choice-BMeBDEfj.js";export{agentsListCommand};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{S as shortenHomePath,y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{C as resolveAuthStorePath,b as ensureAuthProfileStore}from"./auth-profiles-BcStSGQ1.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{d as normalizeAgentId,n as DEFAULT_ACCOUNT_ID,r as DEFAULT_AGENT_ID}from"./session-key-D--2AEus.js";import{A as resolveWorkspaceFilePath,C as WORKSPACE_RUNTIME_DIRNAME,_ as DEFAULT_IDENTITY_FILENAME,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,t as listAgentEntries}from"./agent-scope-BcoQBOwz.js";import{c as writeConfigFile}from"./io-wLHeSE2L.js";import{n as listChannelPlugins,r as normalizeChannelId,t as getChannelPlugin}from"./plugins-DJGW_fnS.js";import{s as resolveSessionTranscriptsDirForAgent}from"./paths-BQ9W7Bs0.js";import{a as ensureWorkspaceAndSessions,l as moveToTrash}from"./onboard-helpers-Xl1gvLzt.js";import{t as WizardCancelledError}from"./prompts-BUDxN7ef.js";import{t as createClackPrompter}from"./clack-prompter-ZmHdfPGJ.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DDS6DSK4.js";import{n as setupChannels}from"./onboard-channels-
|
|
1
|
+
import{S as shortenHomePath,y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{C as resolveAuthStorePath,b as ensureAuthProfileStore}from"./auth-profiles-BcStSGQ1.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{d as normalizeAgentId,n as DEFAULT_ACCOUNT_ID,r as DEFAULT_AGENT_ID}from"./session-key-D--2AEus.js";import{A as resolveWorkspaceFilePath,C as WORKSPACE_RUNTIME_DIRNAME,_ as DEFAULT_IDENTITY_FILENAME,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,t as listAgentEntries}from"./agent-scope-BcoQBOwz.js";import{c as writeConfigFile}from"./io-wLHeSE2L.js";import{n as listChannelPlugins,r as normalizeChannelId,t as getChannelPlugin}from"./plugins-DJGW_fnS.js";import{s as resolveSessionTranscriptsDirForAgent}from"./paths-BQ9W7Bs0.js";import{a as ensureWorkspaceAndSessions,l as moveToTrash}from"./onboard-helpers-Xl1gvLzt.js";import{t as WizardCancelledError}from"./prompts-BUDxN7ef.js";import{t as createClackPrompter}from"./clack-prompter-ZmHdfPGJ.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DDS6DSK4.js";import{n as setupChannels}from"./onboard-channels-CEMtoVzX.js";import{t as requireValidConfigSnapshot}from"./config-validation--7EIcLxH.js";import{a as pruneAgentConfig,c as parseIdentityMarkdown,i as loadAgentIdentity,n as buildAgentSummaries,o as identityHasValues,r as findAgentEntryIndex,t as applyAgentConfig}from"./agents.config-DanaEBfo.js";import{n as logConfigUpdated}from"./logging-CRzk-5ye.js";import{t as promptAuthChoiceGrouped}from"./auth-choice-prompt-DvWWxKmC.js";import{t as applyAuthChoice}from"./auth-choice.apply-CE1TC_Ts.js";import{n as warnIfModelConfigLooksOff}from"./auth-choice-BMeBDEfj.js";import path from"node:path";import fs from"node:fs/promises";function bindingMatchKey(match){let accountId=match.accountId?.trim()||DEFAULT_ACCOUNT_ID;return[match.channel,accountId,match.peer?.kind??``,match.peer?.id??``,match.guildId??``,match.teamId??``].join(`|`)}function describeBinding(binding){let match=binding.match,parts=[match.channel];return match.accountId&&parts.push(`accountId=${match.accountId}`),match.peer&&parts.push(`peer=${match.peer.kind}:${match.peer.id}`),match.guildId&&parts.push(`guild=${match.guildId}`),match.teamId&&parts.push(`team=${match.teamId}`),parts.join(` `)}function applyAgentBindings(cfg,bindings){let existing=cfg.bindings??[],existingMatchMap=new Map;for(let binding of existing){let key=bindingMatchKey(binding.match);existingMatchMap.has(key)||existingMatchMap.set(key,normalizeAgentId(binding.agentId))}let added=[],skipped=[],conflicts=[];for(let binding of bindings){let agentId=normalizeAgentId(binding.agentId),key=bindingMatchKey(binding.match),existingAgentId=existingMatchMap.get(key);if(existingAgentId){existingAgentId===agentId?skipped.push(binding):conflicts.push({binding,existingAgentId});continue}existingMatchMap.set(key,agentId),added.push({...binding,agentId})}return added.length===0?{config:cfg,added,skipped,conflicts}:{config:{...cfg,bindings:[...existing,...added]},added,skipped,conflicts}}function resolveDefaultAccountId$1(cfg,provider){let plugin=getChannelPlugin(provider);return plugin?resolveChannelDefaultAccountId({plugin,cfg}):DEFAULT_ACCOUNT_ID}function buildChannelBindings(params){let bindings=[],agentId=normalizeAgentId(params.agentId);for(let channel of params.selection){let match={channel},accountId=params.accountIds?.[channel]?.trim();accountId?match.accountId=accountId:getChannelPlugin(channel)?.meta.forceAccountBinding&&(match.accountId=resolveDefaultAccountId$1(params.config,channel)),bindings.push({agentId,match})}return bindings}function parseBindingSpecs(params){let bindings=[],errors=[],specs=params.specs??[],agentId=normalizeAgentId(params.agentId);for(let raw of specs){let trimmed=raw?.trim();if(!trimmed)continue;let[channelRaw,accountRaw]=trimmed.split(`:`,2),channel=normalizeChannelId(channelRaw);if(!channel){errors.push(`Unknown channel "${channelRaw}".`);continue}let accountId=accountRaw?.trim();if(accountRaw!==void 0&&!accountId){errors.push(`Invalid binding "${trimmed}" (empty account id).`);continue}accountId||getChannelPlugin(channel)?.meta.forceAccountBinding&&(accountId=resolveDefaultAccountId$1(params.config,channel));let match={channel};accountId&&(match.accountId=accountId),bindings.push({agentId,match})}return{bindings,errors}}function createQuietRuntime(runtime){return{...runtime,log:()=>{}}}async function requireValidConfig(runtime){return await requireValidConfigSnapshot(runtime)}async function fileExists(pathname){try{return await fs.stat(pathname),!0}catch{return!1}}async function agentsAddCommand(opts,runtime=defaultRuntime,params){let cfg=await requireValidConfig(runtime);if(!cfg)return;let workspaceFlag=opts.workspace?.trim(),nameInput=opts.name?.trim(),hasFlags=params?.hasFlags===!0,nonInteractive=!!(opts.nonInteractive||hasFlags);if(nonInteractive&&!workspaceFlag){runtime.error(`Non-interactive mode requires --workspace. Re-run without flags to use the wizard.`),runtime.exit(1);return}if(nonInteractive){if(!nameInput){runtime.error(`Agent name is required in non-interactive mode.`),runtime.exit(1);return}if(!workspaceFlag){runtime.error(`Non-interactive mode requires --workspace. Re-run without flags to use the wizard.`),runtime.exit(1);return}let agentId=normalizeAgentId(nameInput);if(agentId===DEFAULT_AGENT_ID){runtime.error(`"${DEFAULT_AGENT_ID}" is reserved. Choose another name.`),runtime.exit(1);return}if(agentId!==nameInput&&runtime.log(`Normalized agent id to "${agentId}".`),findAgentEntryIndex(listAgentEntries(cfg),agentId)>=0){runtime.error(`Agent "${agentId}" already exists.`),runtime.exit(1);return}let workspaceDir=resolveUserPath(workspaceFlag),agentDir=opts.agentDir?.trim()?resolveUserPath(opts.agentDir.trim()):resolveAgentDir(cfg,agentId),model=opts.model?.trim(),nextConfig=applyAgentConfig(cfg,{agentId,name:nameInput,workspace:workspaceDir,agentDir,...model?{model}:{}}),bindingParse=parseBindingSpecs({agentId,specs:opts.bind,config:nextConfig});if(bindingParse.errors.length>0){runtime.error(bindingParse.errors.join(`
|
|
2
2
|
`)),runtime.exit(1);return}let bindingResult=bindingParse.bindings.length>0?applyAgentBindings(nextConfig,bindingParse.bindings):{config:nextConfig,added:[],skipped:[],conflicts:[]};await writeConfigFile(bindingResult.config),opts.json||logConfigUpdated(runtime),await ensureWorkspaceAndSessions(workspaceDir,opts.json?createQuietRuntime(runtime):runtime,{skipBootstrap:!!bindingResult.config.agents?.defaults?.skipBootstrap,agentId});let payload={agentId,name:nameInput,workspace:workspaceDir,agentDir,model,bindings:{added:bindingResult.added.map(describeBinding),skipped:bindingResult.skipped.map(describeBinding),conflicts:bindingResult.conflicts.map(conflict=>`${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)}};opts.json?runtime.log(JSON.stringify(payload,null,2)):(runtime.log(`Agent: ${agentId}`),runtime.log(`Workspace: ${shortenHomePath(workspaceDir)}`),runtime.log(`Agent dir: ${shortenHomePath(agentDir)}`),model&&runtime.log(`Model: ${model}`),bindingResult.conflicts.length>0&&runtime.error([`Skipped bindings already claimed by another agent:`,...bindingResult.conflicts.map(conflict=>`- ${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)].join(`
|
|
3
3
|
`)));return}let prompter=createClackPrompter();try{await prompter.intro(`Add BuilderForceAgents agent`);let name=nameInput??await prompter.text({message:`Agent name`,validate:value=>{if(!value?.trim())return`Required`;if(normalizeAgentId(value)===DEFAULT_AGENT_ID)return`"${DEFAULT_AGENT_ID}" is reserved. Choose another name.`}}),agentName=String(name??``).trim(),agentId=normalizeAgentId(agentName);if(agentName!==agentId&&await prompter.note(`Normalized id to "${agentId}".`,`Agent id`),listAgentEntries(cfg).find(agent=>normalizeAgentId(agent.id)===agentId)&&!await prompter.confirm({message:`Agent "${agentId}" already exists. Update it?`,initialValue:!1})){await prompter.outro(`No changes made.`);return}let workspaceDefault=resolveAgentWorkspaceDir(cfg,agentId),workspaceInput=await prompter.text({message:`Workspace directory`,initialValue:workspaceDefault,validate:value=>value?.trim()?void 0:`Required`}),workspaceDir=resolveUserPath(String(workspaceInput??``).trim()||workspaceDefault),agentDir=resolveAgentDir(cfg,agentId),nextConfig=applyAgentConfig(cfg,{agentId,name:agentName,workspace:workspaceDir,agentDir}),defaultAgentId=resolveDefaultAgentId(cfg);if(defaultAgentId!==agentId){let sourceAuthPath=resolveAuthStorePath(resolveAgentDir(cfg,defaultAgentId)),destAuthPath=resolveAuthStorePath(agentDir);path.resolve(sourceAuthPath).toLowerCase()!==path.resolve(destAuthPath).toLowerCase()&&await fileExists(sourceAuthPath)&&!await fileExists(destAuthPath)&&await prompter.confirm({message:`Copy auth profiles from "${defaultAgentId}"?`,initialValue:!1})&&(await fs.mkdir(path.dirname(destAuthPath),{recursive:!0}),await fs.copyFile(sourceAuthPath,destAuthPath),await prompter.note(`Copied auth profiles from "${defaultAgentId}".`,`Auth profiles`))}if(await prompter.confirm({message:`Configure model/auth for this agent now?`,initialValue:!1})){let authResult=await applyAuthChoice({authChoice:await promptAuthChoiceGrouped({prompter,store:await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),includeSkip:!0}),config:nextConfig,prompter,runtime,agentDir,setDefaultModel:!1,agentId});nextConfig=authResult.config,authResult.agentModelOverride&&(nextConfig=applyAgentConfig(nextConfig,{agentId,model:authResult.agentModelOverride}))}await warnIfModelConfigLooksOff(nextConfig,prompter,{agentId,agentDir});let selection=[],channelAccountIds={};if(nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,onSelection:value=>{selection=value},promptAccountIds:!0,onAccountId:(channel,accountId)=>{channelAccountIds[channel]=accountId}}),selection.length>0)if(await prompter.confirm({message:`Route selected channels to this agent now? (bindings)`,initialValue:!1})){let desiredBindings=buildChannelBindings({agentId,selection,config:nextConfig,accountIds:channelAccountIds}),result=applyAgentBindings(nextConfig,desiredBindings);nextConfig=result.config,result.conflicts.length>0&&await prompter.note([`Skipped bindings already claimed by another agent:`,...result.conflicts.map(conflict=>`- ${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)].join(`
|
|
4
4
|
`),`Routing bindings`)}else await prompter.note([`Routing unchanged. Add bindings when you're ready.`,`Docs: https://docs.builderforce.ai/concepts/multi-agent`].join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-CAQcjxp2.js";import"./session-key-CYpYHc1e.js";import{G as logVerbose,J as shouldLogVerbose}from"./registry-j1UKIotU.js";import"./agent-scope-C7zGN7Pz.js";import"./subsystem-ykSbyaud.js";import"./model-selection-C3ZZhhap.js";import"./env-44XUbLhk.js";import"./src-izs0XSXm.js";import"./plugins-CjU7Ut5E.js";import"./accounts-xbnfJmsd.js";import"./bindings-6UAwilZE.js";import{a as runCapability,n as createMediaAttachmentCache,o as isAudioAttachment,r as normalizeMediaAttachments,t as buildProviderRegistry}from"./runner-
|
|
1
|
+
import"./paths-CAQcjxp2.js";import"./session-key-CYpYHc1e.js";import{G as logVerbose,J as shouldLogVerbose}from"./registry-j1UKIotU.js";import"./agent-scope-C7zGN7Pz.js";import"./subsystem-ykSbyaud.js";import"./model-selection-C3ZZhhap.js";import"./env-44XUbLhk.js";import"./src-izs0XSXm.js";import"./plugins-CjU7Ut5E.js";import"./accounts-xbnfJmsd.js";import"./bindings-6UAwilZE.js";import{a as runCapability,n as createMediaAttachmentCache,o as isAudioAttachment,r as normalizeMediaAttachments,t as buildProviderRegistry}from"./runner-P3IfAnSL.js";import"./fetch-D2i2BBd3.js";import"./model-catalog-DCZ6NJ5B.js";import"./redact-xFefzy4M.js";import"./errors-CguQr0Ja.js";import"./config-BP4Wc0fa.js";import"./chrome-CbBg1ngA.js";import"./message-channel-BKGbjp9g.js";import"./paths-ZHayVsQS.js";import"./gemini-auth-VegjWP39.js";import"./tool-images-B8YdlzZb.js";async function transcribeFirstAudio(params){let{ctx,cfg}=params,audioConfig=cfg.tools?.media?.audio;if(!audioConfig||audioConfig.enabled===!1)return;let attachments=normalizeMediaAttachments(ctx);if(!attachments||attachments.length===0)return;let firstAudio=attachments.find(att=>att&&isAudioAttachment(att)&&!att.alreadyTranscribed);if(!firstAudio)return;shouldLogVerbose()&&logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);let providerRegistry=buildProviderRegistry(params.providers),cache=createMediaAttachmentCache(attachments);try{let result=await runCapability({capability:`audio`,cfg,ctx,attachments:cache,media:attachments,agentDir:params.agentDir,providerRegistry,config:audioConfig,activeModel:params.activeModel});if(!result||result.outputs.length===0)return;let audioOutput=result.outputs.find(output=>output.kind===`audio.transcription`);return!audioOutput||!audioOutput.text?void 0:(firstAudio.alreadyTranscribed=!0,shouldLogVerbose()&&logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`),audioOutput.text)}catch(err){shouldLogVerbose()&&logVerbose(`audio-preflight: transcription failed: ${String(err)}`);return}finally{await cache.cleanup()}}export{transcribeFirstAudio};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-DHfhLu2W.js";import"./reply-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-DHfhLu2W.js";import"./reply-BeKidf2F.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./model-selection-DlYajIzF.js";import"./env-file-BI2jpOmF.js";import"./boolean-Cn4K2fc9.js";import"./env-BHP32i7Q.js";import"./src-CQLQD-1r.js";import"./io-DhUMGsxN.js";import"./manifest-registry-CBVaj2md.js";import"./config-lGOyM6Kq.js";import"./runner-CDpBWK3-.js";import"./model-catalog-BQUEoIev.js";import"./sandbox-Cq6rH4hg.js";import"./chrome-BW8dGyxs.js";import"./tailscale-0ey4P_at.js";import"./auth-C4PxZEj8.js";import"./server-context-1YSNvKDs.js";import"./frontmatter-DpzOtLJz.js";import"./skills-vjE49XV9.js";import"./plugin-skills-RFjYtysK.js";import"./routes-DsdK6VOy.js";import"./redact-BT5hARuQ.js";import"./errors-BK3rMW8O.js";import"./paths-CejDLFxE.js";import"./ssrf-DHJTyOuH.js";import"./image-ops-D7Ex-H05.js";import"./store-Nf9BxXC7.js";import"./ports-B-SXoPqJ.js";import"./trash-DlNzpifq.js";import"./sessions-Dv212g1O.js";import"./message-channel-BW_q2nVi.js";import"./plugins-C0lu7LGS.js";import"./accounts-2InvZDx2.js";import"./accounts-CrKsbGuP.js";import"./accounts-BnsrG5TA.js";import"./bindings-qYFdqpJ3.js";import"./send-DSwQqUiD.js";import"./send-BGZYkspG.js";import"./paths-DCzWXtSj.js";import"./tool-images-CR9Y0R5I.js";import"./tool-display-Dx-rz3CF.js";import"./fetch-guard-DxN_CtRp.js";import"./api-key-rotation-BbNoamfM.js";import"./fetch-CMEvVIy8.js";import"./sqlite-BxinAVYp.js";import"./tokens-Ct4DyfhX.js";import"./project-context-store-BPhHGfFl.js";import"./with-timeout-DTcvZn3s.js";import"./deliver-CrB451sO.js";import"./send-ZCmcplsV.js";import"./workspace-eFrsAV2Q.js";import"./reply-prefix-BwtP84WV.js";import"./memory-cli-Dgqoendm.js";import"./manager-pjodgk3H.js";import"./retry-Jis-ZZfm.js";import"./client-BxPDO8Ed.js";import"./call-DLeUWFtQ.js";import"./common-W8GhA4hE.js";import"./chunk-B9aj7NGY.js";import"./markdown-tables-iDNbGky8.js";import"./ir-EgWVNCXR.js";import"./render-CSLaFZoy.js";import"./builderforcellm-syscheck-BpNlQ4Rx.js";import"./send-iQicMwPr.js";import"./outbound-attachment-BR2FQu7J.js";import"./fetch-B6_hd7w9.js";import"./delivery-queue-BZWZDdpJ.js";import"./channel-activity-GeHNfvd4.js";import"./tables-D5WcKZWq.js";import"./pairing-store-PKyjZas4.js";import"./links-CYRGsVCu.js";import"./cli-utils-BLNnV_WG.js";import"./help-format-NhTn4dWd.js";import"./progress-OKwbfa23.js";import"./resolve-route-EE2-ObOq.js";import"./replies-BhjI7rPj.js";import"./refresh-Cyy0oi_E.js";import"./coding-tools.policy-DQxeoYmD.js";import"./send-C9xXqEqr.js";import"./onboard-helpers-DHGeaHZA.js";import"./prompt-style-BwwmGo3-.js";import"./pairing-labels-BpeDWVFP.js";import"./session-cost-usage-BDkGtjt9.js";import"./provider-usage-BqXFLAwn.js";import"./active-listener-DBdxNyOd.js";import"./exec-approvals-kmxxyvIe.js";import"./nodes-screen-BWDONgPE.js";import"./project-context-Dp8w9r_P.js";import"./control-service-Bkbx5ybP.js";import"./stagger-NaB6u1z1.js";import"./channel-selection-BjcuqdFb.js";import"./mamba-state-engine-DPAATSLG.js";import"./transformers-stream-QS2dnQob.js";import"./shared-BMSboHpU.js";import"./onboard-auth.credentials-Dt_yky3w.js";import"./auth-token-CeCyq7Zg.js";import"./logging-9jbJihk2.js";import"./provider-auth-helpers-5ZQb3SEz.js";import{t as applyAuthChoice}from"./auth-choice.apply-25j_lhua.js";import"./openai-model-default-DqkGItdN.js";import"./model-picker-DWc0Kexq.js";import"./auth-choice.apply.transformers-DE9QrzbX.js";import{n as warnIfModelConfigLooksOff,t as resolvePreferredProviderForAuthChoice}from"./auth-choice-DvKzhGrY.js";export{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-98yia-RN.js";import"./sessions-C5jAGWOS.js";import"./project-context-store-BFOv5caq.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-CgMJqDBP.js";import"./send-DfpZ9T_M.js";import"./with-timeout-ftXvzlo8.js";import"./deliver-DDFTiLT4.js";import"./accounts-DoJYLMfS.js";import"./send-5Vokn3Uv.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-CsRjxr3I.js";import"./sandbox-bEma8jFA.js";import"./chrome-Kt4wxGF2.js";import"./tailscale-CgCG7AVQ.js";import"./auth-BNeS9xde.js";import"./server-context-0vSm_r2R.js";import"./routes-BLhXC8oU.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-BnrYivUM.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-BBsTN63-.js";import"./manager-BXMwSRz1.js";import"./gemini-auth-qrDeJkh5.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-qhKGerma.js";import"./tool-display-BIswnHaq.js";import"./chunk-hYck1V5_.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-CTE1iR41.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-BTolQUtx.js";import"./session-utils-DDDkCdFF.js";import"./coding-tools.policy-CtBT-KXm.js";import"./pairing-store-sCqmKjk2.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-nRVDmUHj.js";import"./send-COUZMiIL.js";import"./outbound-attachment-Bed_0M10.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-De5-TWPH.js";import"./control-service-DYVIKl0J.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-CLFizn8u.js";import"./send-CWzV8Zdx.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-XzBUkZcJ.js";import"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CiPwT32C.js";import"./onboard-helpers-Xl1gvLzt.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DVbgCApx.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-CViPpwyy.js";import"./transformers-stream-nSL4Xu31.js";import"./shared-WIJmFKqL.js";import"./onboard-auth.credentials-f-xn5D4D.js";import"./auth-token-DGYih1b5.js";import"./logging-CRzk-5ye.js";import"./provider-auth-helpers-Cibq8oDi.js";import{t as applyAuthChoice}from"./auth-choice.apply-CE1TC_Ts.js";import"./openai-model-default-C9iQBo_x.js";import"./model-picker-Dz1ecLd0.js";import"./auth-choice.apply.transformers-CBQbUAwr.js";import{n as warnIfModelConfigLooksOff,t as resolvePreferredProviderForAuthChoice}from"./auth-choice-BMeBDEfj.js";export{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-DPtjOxzp.js";import{Ct as discoverHuggingfaceModels,F as VENICE_DEFAULT_MODEL_REF,Ft as CHUTES_AUTHORIZE_ENDPOINT,Gt as upsertAuthProfile,H as SYNTHETIC_DEFAULT_MODEL_REF,It as exchangeChutesCodeForTokens,Kt as upsertAuthProfileWithLock,Lt as generateChutesPkce,N as resolveOllamaApiBase,Ot as resolveAuthProfileOrder,Qt as resolveBuilderForceAgentsAgentDir,Rt as parseOAuthCallbackInput,Tt as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,mn as currentAnthropicModelId,qt as ensureAuthProfileStore,ut as resolveEnvApiKey,wt as isHuggingfacePolicyLocked,zt as loginOpenAICodex}from"./model-selection-DlYajIzF.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-Dz6Za7Ks.js";import{a as upsertSharedEnvVar}from"./env-file-BI2jpOmF.js";import{r as isLoopbackHost}from"./ws-s_ZQMnLb.js";import{d as openUrl}from"./onboard-helpers-DHGeaHZA.js";import{t as enablePluginInConfig}from"./enable-fuhbpGov.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as QIANFAN_DEFAULT_MODEL_REF,P as MOONSHOT_DEFAULT_MODEL_REF,R as XAI_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-Dt_yky3w.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-CeCyq7Zg.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-
|
|
1
|
+
import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-DPtjOxzp.js";import{Ct as discoverHuggingfaceModels,F as VENICE_DEFAULT_MODEL_REF,Ft as CHUTES_AUTHORIZE_ENDPOINT,Gt as upsertAuthProfile,H as SYNTHETIC_DEFAULT_MODEL_REF,It as exchangeChutesCodeForTokens,Kt as upsertAuthProfileWithLock,Lt as generateChutesPkce,N as resolveOllamaApiBase,Ot as resolveAuthProfileOrder,Qt as resolveBuilderForceAgentsAgentDir,Rt as parseOAuthCallbackInput,Tt as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,mn as currentAnthropicModelId,qt as ensureAuthProfileStore,ut as resolveEnvApiKey,wt as isHuggingfacePolicyLocked,zt as loginOpenAICodex}from"./model-selection-DlYajIzF.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-Dz6Za7Ks.js";import{a as upsertSharedEnvVar}from"./env-file-BI2jpOmF.js";import{r as isLoopbackHost}from"./ws-s_ZQMnLb.js";import{d as openUrl}from"./onboard-helpers-DHGeaHZA.js";import{t as enablePluginInConfig}from"./enable-fuhbpGov.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as QIANFAN_DEFAULT_MODEL_REF,P as MOONSHOT_DEFAULT_MODEL_REF,R as XAI_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-Dt_yky3w.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-CeCyq7Zg.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-5ZQb3SEz.js";import{a as GOOGLE_GEMINI_DEFAULT_MODEL,i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault,r as applyOpenAIProviderConfig,s as ensureModelAllowlistEntry,t as OPENAI_DEFAULT_MODEL}from"./openai-model-default-DqkGItdN.js";import{c as applyOpenAICodexModelDefault,o as promptAndConfigureVllm,r as applyPrimaryModel,s as OPENAI_CODEX_DEFAULT_MODEL}from"./model-picker-DWc0Kexq.js";import{s as applyAuthChoiceTransformers}from"./auth-choice.apply.transformers-DE9QrzbX.js";import{randomBytes}from"node:crypto";import{createServer}from"node:http";const DEFAULT_KEY_PREVIEW={head:4,tail:4};function normalizeApiKeyInput(raw){let trimmed=String(raw??``).trim();if(!trimmed)return``;let assignmentMatch=trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*(.+)$/),valuePart=assignmentMatch?assignmentMatch[1].trim():trimmed,unquoted=valuePart.length>=2&&(valuePart.startsWith(`"`)&&valuePart.endsWith(`"`)||valuePart.startsWith(`'`)&&valuePart.endsWith(`'`)||valuePart.startsWith("`")&&valuePart.endsWith("`"))?valuePart.slice(1,-1):valuePart;return(unquoted.endsWith(`;`)?unquoted.slice(0,-1):unquoted).trim()}const validateApiKeyInput=value=>normalizeApiKeyInput(value).length>0?void 0:`Required`;function formatApiKeyPreview(raw,opts={}){let trimmed=raw.trim();if(!trimmed)return`…`;let head=opts.head??DEFAULT_KEY_PREVIEW.head,tail=opts.tail??DEFAULT_KEY_PREVIEW.tail;if(trimmed.length<=head+tail){let shortHead=Math.min(2,trimmed.length),shortTail=Math.min(2,trimmed.length-shortHead);return shortTail<=0?`${trimmed.slice(0,shortHead)}…`:`${trimmed.slice(0,shortHead)}…${trimmed.slice(-shortTail)}`}return`${trimmed.slice(0,head)}…${trimmed.slice(-tail)}`}const DEFAULT_ANTHROPIC_MODEL=`anthropic/${currentAnthropicModelId(`sonnet`)}`;async function applyAuthChoiceAnthropic(params){if(params.authChoice===`setup-token`||params.authChoice===`oauth`||params.authChoice===`token`){let nextConfig=params.config;await params.prompter.note(["Run `claude setup-token` in your terminal.",`Then paste the generated token below.`].join(`
|
|
2
2
|
`),`Anthropic setup-token`);let tokenRaw=await params.prompter.text({message:`Paste Anthropic setup-token`,validate:value=>validateAnthropicSetupToken(String(value??``))}),token=String(tokenRaw??``).trim(),profileNameRaw=await params.prompter.text({message:`Token name (blank = default)`,placeholder:`default`}),provider=`anthropic`,namedProfileId=buildTokenProfileId({provider,name:String(profileNameRaw??``)});return await upsertAuthProfile({profileId:namedProfileId,agentDir:params.agentDir,credential:{type:`token`,provider,token}}),nextConfig=applyAuthProfileConfig(nextConfig,{profileId:namedProfileId,provider,mode:`token`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}if(params.authChoice===`apiKey`){if(params.opts?.tokenProvider&¶ms.opts.tokenProvider!==`anthropic`)return null;let nextConfig=params.config,hasCredential=!1,envKey=process.env.ANTHROPIC_API_KEY?.trim();if(params.opts?.token&&(await setAnthropicApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential&&envKey&&await params.prompter.confirm({message:`Use existing ANTHROPIC_API_KEY (env, ${formatApiKeyPreview(envKey)})?`,initialValue:!0})&&(await setAnthropicApiKey(envKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:`Enter Anthropic API key`,validate:validateApiKeyInput});await setAnthropicApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}return nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`anthropic:default`,provider:`anthropic`,mode:`api_key`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}return null}function createAuthChoiceAgentModelNoter(params){return async model=>{params.agentId&&await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`,`Model configured`)}}async function applyDefaultModelChoice(params){if(params.setDefaultModel){let next=params.applyDefaultConfig(params.config);return params.noteDefault&&await params.prompter.note(`Default model set to ${params.noteDefault}`,`Model configured`),{config:next}}let nextWithModel=ensureModelAllowlistEntry({cfg:params.applyProviderConfig(params.config),modelRef:params.defaultModel});return await params.noteAgentModel(params.defaultModel),{config:nextWithModel,agentModelOverride:params.defaultModel}}async function applyAuthChoiceHuggingface(params){if(params.authChoice!==`huggingface-api-key`)return null;let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),hasCredential=!1,hfKey=``;if(!hasCredential&¶ms.opts?.token&¶ms.opts.tokenProvider===`huggingface`&&(hfKey=normalizeApiKeyInput(params.opts.token),await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0),hasCredential||await params.prompter.note([`Hugging Face Inference Providers offer OpenAI-compatible chat completions.`,`Create a token at: https://huggingface.co/settings/tokens (fine-grained, 'Make calls to Inference Providers').`].join(`
|
|
3
3
|
`),`Hugging Face`),!hasCredential){let envKey=resolveEnvApiKey(`huggingface`);envKey&&await params.prompter.confirm({message:`Use existing Hugging Face token (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(hfKey=envKey.apiKey,await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter Hugging Face API key (HF token)`,validate:validateApiKeyInput});hfKey=normalizeApiKeyInput(String(key??``)),await setHuggingfaceApiKey(hfKey,params.agentDir)}nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`huggingface:default`,provider:`huggingface`,mode:`api_key`});let models=await discoverHuggingfaceModels(hfKey),options=[];for(let m of models){let baseRef=`huggingface/${m.id}`,label=m.name??m.id;options.push({value:baseRef,label}),options.push({value:`${baseRef}:cheapest`,label:`${label} (cheapest)`}),options.push({value:`${baseRef}:fastest`,label:`${label} (fastest)`})}let defaultRef=HUGGINGFACE_DEFAULT_MODEL_REF;options.sort((a,b)=>a.value===defaultRef?-1:b.value===defaultRef?1:a.label.localeCompare(b.label,void 0,{sensitivity:`base`}));let selectedModelRef=options.length===0?defaultRef:options.length===1?options[0].value:await params.prompter.select({message:`Default Hugging Face model`,options,initialValue:options.some(o=>o.value===defaultRef)?defaultRef:options[0].value});isHuggingfacePolicyLocked(selectedModelRef)&&await params.prompter.note(`Provider locked — router will choose backend by cost or speed.`,`Hugging Face`);let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:selectedModelRef,applyDefaultConfig:config=>{let withProvider=applyHuggingfaceProviderConfig(config),existingModel=withProvider.agents?.defaults?.model;return ensureModelAllowlistEntry({cfg:{...withProvider,agents:{...withProvider.agents,defaults:{...withProvider.agents?.defaults,model:{...existingModel&&typeof existingModel==`object`&&`fallbacks`in existingModel?{fallbacks:existingModel.fallbacks}:{},primary:selectedModelRef}}}},modelRef:selectedModelRef})},applyProviderConfig:applyHuggingfaceProviderConfig,noteDefault:selectedModelRef,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}async function applyAuthChoiceOpenRouter(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`openrouter`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`openrouter:default`,mode=`api_key`,hasCredential=!1;if(existingProfileId&&existingCred?.type&&(profileId=existingProfileId,mode=existingCred.type===`oauth`?`oauth`:existingCred.type===`token`?`token`:`api_key`,hasCredential=!0),!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`openrouter`&&(await setOpenrouterApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){let envKey=resolveEnvApiKey(`openrouter`);envKey&&await params.prompter.confirm({message:`Use existing OPENROUTER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setOpenrouterApiKey(envKey.apiKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter OpenRouter API key`,validate:validateApiKeyInput});await setOpenrouterApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir),hasCredential=!0}hasCredential&&(nextConfig=applyAuthProfileConfig(nextConfig,{profileId,provider:`openrouter`,mode}));let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:OPENROUTER_DEFAULT_MODEL_REF,applyDefaultConfig:applyOpenrouterConfig,applyProviderConfig:applyOpenrouterProviderConfig,noteDefault:OPENROUTER_DEFAULT_MODEL_REF,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}const OPENCODE_ZEN_DEFAULT_MODEL=`opencode/claude-opus-4-6`;async function applyAuthChoiceApiProviders(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),authChoice=params.authChoice;authChoice===`apiKey`&¶ms.opts?.tokenProvider&¶ms.opts.tokenProvider!==`anthropic`&¶ms.opts.tokenProvider!==`openai`&&(params.opts.tokenProvider===`openrouter`?authChoice=`openrouter-api-key`:params.opts.tokenProvider===`litellm`?authChoice=`litellm-api-key`:params.opts.tokenProvider===`vercel-ai-gateway`?authChoice=`ai-gateway-api-key`:params.opts.tokenProvider===`cloudflare-ai-gateway`?authChoice=`cloudflare-ai-gateway-api-key`:params.opts.tokenProvider===`moonshot`?authChoice=`moonshot-api-key`:params.opts.tokenProvider===`kimi-code`||params.opts.tokenProvider===`kimi-coding`?authChoice=`kimi-code-api-key`:params.opts.tokenProvider===`google`?authChoice=`gemini-api-key`:params.opts.tokenProvider===`zai`?authChoice=`zai-api-key`:params.opts.tokenProvider===`xiaomi`?authChoice=`xiaomi-api-key`:params.opts.tokenProvider===`synthetic`?authChoice=`synthetic-api-key`:params.opts.tokenProvider===`venice`?authChoice=`venice-api-key`:params.opts.tokenProvider===`together`?authChoice=`together-api-key`:params.opts.tokenProvider===`huggingface`?authChoice=`huggingface-api-key`:params.opts.tokenProvider===`opencode`?authChoice=`opencode-zen`:params.opts.tokenProvider===`qianfan`&&(authChoice=`qianfan-api-key`));async function ensureMoonshotApiKeyCredential(promptMessage){let hasCredential=!1;!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`moonshot`&&(await setMoonshotApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0);let envKey=resolveEnvApiKey(`moonshot`);if(envKey&&await params.prompter.confirm({message:`Use existing MOONSHOT_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setMoonshotApiKey(envKey.apiKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:promptMessage,validate:validateApiKeyInput});await setMoonshotApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}}if(authChoice===`openrouter-api-key`)return applyAuthChoiceOpenRouter(params);if(authChoice===`builderforcellm`){await params.prompter.note(`Using BuilderForceAgentsLLM default proxy (no local API key required).`,`BuilderForceAgentsLLM`);let defaultModel=`builderforcellm/auto`,applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel,applyDefaultConfig:config=>applyAgentDefaultModelPrimary(config,defaultModel),applyProviderConfig:config=>config,noteDefault:defaultModel,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}if(authChoice===`litellm-api-key`){let store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`litellm`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`litellm:default`,hasCredential=!1;if(existingProfileId&&existingCred?.type===`api_key`&&(profileId=existingProfileId,hasCredential=!0),!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`litellm`&&(await setLitellmApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){await params.prompter.note(`LiteLLM provides a unified API to 100+ LLM providers.
|
|
4
4
|
Get your API key from your LiteLLM proxy or https://litellm.ai
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$t as discoverHuggingfaceModels,Rt as resolveEnvApiKey,T as resolveBuilderForceAgentsAgentDir,b as ensureAuthProfileStore,c as CHUTES_AUTHORIZE_ENDPOINT,d as parseOAuthCallbackInput,dn as currentAnthropicModelId,en as isHuggingfacePolicyLocked,f as loginOpenAICodex,gt as SYNTHETIC_DEFAULT_MODEL_REF,l as exchangeChutesCodeForTokens,lt as VENICE_DEFAULT_MODEL_REF,st as resolveOllamaApiBase,t as resolveAuthProfileOrder,tn as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,u as generateChutesPkce,v as upsertAuthProfile,y as upsertAuthProfileWithLock}from"./auth-profiles-BcStSGQ1.js";import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-BcoQBOwz.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-CaRxuDMW.js";import{a as upsertSharedEnvVar}from"./env-file-BIKVpYUN.js";import{n as isLoopbackHost}from"./net-BDBv0ZGP.js";import{d as openUrl}from"./onboard-helpers-Xl1gvLzt.js";import{t as enablePluginInConfig}from"./enable-BeT47v0c.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as QIANFAN_DEFAULT_MODEL_REF,P as MOONSHOT_DEFAULT_MODEL_REF,R as XAI_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-f-xn5D4D.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-DGYih1b5.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-
|
|
1
|
+
import{$t as discoverHuggingfaceModels,Rt as resolveEnvApiKey,T as resolveBuilderForceAgentsAgentDir,b as ensureAuthProfileStore,c as CHUTES_AUTHORIZE_ENDPOINT,d as parseOAuthCallbackInput,dn as currentAnthropicModelId,en as isHuggingfacePolicyLocked,f as loginOpenAICodex,gt as SYNTHETIC_DEFAULT_MODEL_REF,l as exchangeChutesCodeForTokens,lt as VENICE_DEFAULT_MODEL_REF,st as resolveOllamaApiBase,t as resolveAuthProfileOrder,tn as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,u as generateChutesPkce,v as upsertAuthProfile,y as upsertAuthProfileWithLock}from"./auth-profiles-BcStSGQ1.js";import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-BcoQBOwz.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-CaRxuDMW.js";import{a as upsertSharedEnvVar}from"./env-file-BIKVpYUN.js";import{n as isLoopbackHost}from"./net-BDBv0ZGP.js";import{d as openUrl}from"./onboard-helpers-Xl1gvLzt.js";import{t as enablePluginInConfig}from"./enable-BeT47v0c.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as QIANFAN_DEFAULT_MODEL_REF,P as MOONSHOT_DEFAULT_MODEL_REF,R as XAI_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-f-xn5D4D.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-DGYih1b5.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-Cibq8oDi.js";import{a as GOOGLE_GEMINI_DEFAULT_MODEL,i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault,r as applyOpenAIProviderConfig,s as ensureModelAllowlistEntry,t as OPENAI_DEFAULT_MODEL}from"./openai-model-default-C9iQBo_x.js";import{c as applyOpenAICodexModelDefault,o as promptAndConfigureVllm,r as applyPrimaryModel,s as OPENAI_CODEX_DEFAULT_MODEL}from"./model-picker-Dz1ecLd0.js";import{s as applyAuthChoiceTransformers}from"./auth-choice.apply.transformers-CBQbUAwr.js";import{randomBytes}from"node:crypto";import{createServer}from"node:http";const DEFAULT_KEY_PREVIEW={head:4,tail:4};function normalizeApiKeyInput(raw){let trimmed=String(raw??``).trim();if(!trimmed)return``;let assignmentMatch=trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*(.+)$/),valuePart=assignmentMatch?assignmentMatch[1].trim():trimmed,unquoted=valuePart.length>=2&&(valuePart.startsWith(`"`)&&valuePart.endsWith(`"`)||valuePart.startsWith(`'`)&&valuePart.endsWith(`'`)||valuePart.startsWith("`")&&valuePart.endsWith("`"))?valuePart.slice(1,-1):valuePart;return(unquoted.endsWith(`;`)?unquoted.slice(0,-1):unquoted).trim()}const validateApiKeyInput=value=>normalizeApiKeyInput(value).length>0?void 0:`Required`;function formatApiKeyPreview(raw,opts={}){let trimmed=raw.trim();if(!trimmed)return`…`;let head=opts.head??DEFAULT_KEY_PREVIEW.head,tail=opts.tail??DEFAULT_KEY_PREVIEW.tail;if(trimmed.length<=head+tail){let shortHead=Math.min(2,trimmed.length),shortTail=Math.min(2,trimmed.length-shortHead);return shortTail<=0?`${trimmed.slice(0,shortHead)}…`:`${trimmed.slice(0,shortHead)}…${trimmed.slice(-shortTail)}`}return`${trimmed.slice(0,head)}…${trimmed.slice(-tail)}`}const DEFAULT_ANTHROPIC_MODEL=`anthropic/${currentAnthropicModelId(`sonnet`)}`;async function applyAuthChoiceAnthropic(params){if(params.authChoice===`setup-token`||params.authChoice===`oauth`||params.authChoice===`token`){let nextConfig=params.config;await params.prompter.note(["Run `claude setup-token` in your terminal.",`Then paste the generated token below.`].join(`
|
|
2
2
|
`),`Anthropic setup-token`);let tokenRaw=await params.prompter.text({message:`Paste Anthropic setup-token`,validate:value=>validateAnthropicSetupToken(String(value??``))}),token=String(tokenRaw??``).trim(),profileNameRaw=await params.prompter.text({message:`Token name (blank = default)`,placeholder:`default`}),provider=`anthropic`,namedProfileId=buildTokenProfileId({provider,name:String(profileNameRaw??``)});return await upsertAuthProfile({profileId:namedProfileId,agentDir:params.agentDir,credential:{type:`token`,provider,token}}),nextConfig=applyAuthProfileConfig(nextConfig,{profileId:namedProfileId,provider,mode:`token`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}if(params.authChoice===`apiKey`){if(params.opts?.tokenProvider&¶ms.opts.tokenProvider!==`anthropic`)return null;let nextConfig=params.config,hasCredential=!1,envKey=process.env.ANTHROPIC_API_KEY?.trim();if(params.opts?.token&&(await setAnthropicApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential&&envKey&&await params.prompter.confirm({message:`Use existing ANTHROPIC_API_KEY (env, ${formatApiKeyPreview(envKey)})?`,initialValue:!0})&&(await setAnthropicApiKey(envKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:`Enter Anthropic API key`,validate:validateApiKeyInput});await setAnthropicApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}return nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`anthropic:default`,provider:`anthropic`,mode:`api_key`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}return null}function createAuthChoiceAgentModelNoter(params){return async model=>{params.agentId&&await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`,`Model configured`)}}async function applyDefaultModelChoice(params){if(params.setDefaultModel){let next=params.applyDefaultConfig(params.config);return params.noteDefault&&await params.prompter.note(`Default model set to ${params.noteDefault}`,`Model configured`),{config:next}}let nextWithModel=ensureModelAllowlistEntry({cfg:params.applyProviderConfig(params.config),modelRef:params.defaultModel});return await params.noteAgentModel(params.defaultModel),{config:nextWithModel,agentModelOverride:params.defaultModel}}async function applyAuthChoiceHuggingface(params){if(params.authChoice!==`huggingface-api-key`)return null;let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),hasCredential=!1,hfKey=``;if(!hasCredential&¶ms.opts?.token&¶ms.opts.tokenProvider===`huggingface`&&(hfKey=normalizeApiKeyInput(params.opts.token),await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0),hasCredential||await params.prompter.note([`Hugging Face Inference Providers offer OpenAI-compatible chat completions.`,`Create a token at: https://huggingface.co/settings/tokens (fine-grained, 'Make calls to Inference Providers').`].join(`
|
|
3
3
|
`),`Hugging Face`),!hasCredential){let envKey=resolveEnvApiKey(`huggingface`);envKey&&await params.prompter.confirm({message:`Use existing Hugging Face token (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(hfKey=envKey.apiKey,await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter Hugging Face API key (HF token)`,validate:validateApiKeyInput});hfKey=normalizeApiKeyInput(String(key??``)),await setHuggingfaceApiKey(hfKey,params.agentDir)}nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`huggingface:default`,provider:`huggingface`,mode:`api_key`});let models=await discoverHuggingfaceModels(hfKey),options=[];for(let m of models){let baseRef=`huggingface/${m.id}`,label=m.name??m.id;options.push({value:baseRef,label}),options.push({value:`${baseRef}:cheapest`,label:`${label} (cheapest)`}),options.push({value:`${baseRef}:fastest`,label:`${label} (fastest)`})}let defaultRef=HUGGINGFACE_DEFAULT_MODEL_REF;options.sort((a,b)=>a.value===defaultRef?-1:b.value===defaultRef?1:a.label.localeCompare(b.label,void 0,{sensitivity:`base`}));let selectedModelRef=options.length===0?defaultRef:options.length===1?options[0].value:await params.prompter.select({message:`Default Hugging Face model`,options,initialValue:options.some(o=>o.value===defaultRef)?defaultRef:options[0].value});isHuggingfacePolicyLocked(selectedModelRef)&&await params.prompter.note(`Provider locked — router will choose backend by cost or speed.`,`Hugging Face`);let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:selectedModelRef,applyDefaultConfig:config=>{let withProvider=applyHuggingfaceProviderConfig(config),existingModel=withProvider.agents?.defaults?.model;return ensureModelAllowlistEntry({cfg:{...withProvider,agents:{...withProvider.agents,defaults:{...withProvider.agents?.defaults,model:{...existingModel&&typeof existingModel==`object`&&`fallbacks`in existingModel?{fallbacks:existingModel.fallbacks}:{},primary:selectedModelRef}}}},modelRef:selectedModelRef})},applyProviderConfig:applyHuggingfaceProviderConfig,noteDefault:selectedModelRef,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}async function applyAuthChoiceOpenRouter(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`openrouter`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`openrouter:default`,mode=`api_key`,hasCredential=!1;if(existingProfileId&&existingCred?.type&&(profileId=existingProfileId,mode=existingCred.type===`oauth`?`oauth`:existingCred.type===`token`?`token`:`api_key`,hasCredential=!0),!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`openrouter`&&(await setOpenrouterApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){let envKey=resolveEnvApiKey(`openrouter`);envKey&&await params.prompter.confirm({message:`Use existing OPENROUTER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setOpenrouterApiKey(envKey.apiKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter OpenRouter API key`,validate:validateApiKeyInput});await setOpenrouterApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir),hasCredential=!0}hasCredential&&(nextConfig=applyAuthProfileConfig(nextConfig,{profileId,provider:`openrouter`,mode}));let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:OPENROUTER_DEFAULT_MODEL_REF,applyDefaultConfig:applyOpenrouterConfig,applyProviderConfig:applyOpenrouterProviderConfig,noteDefault:OPENROUTER_DEFAULT_MODEL_REF,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}const OPENCODE_ZEN_DEFAULT_MODEL=`opencode/claude-opus-4-6`;async function applyAuthChoiceApiProviders(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),authChoice=params.authChoice;authChoice===`apiKey`&¶ms.opts?.tokenProvider&¶ms.opts.tokenProvider!==`anthropic`&¶ms.opts.tokenProvider!==`openai`&&(params.opts.tokenProvider===`openrouter`?authChoice=`openrouter-api-key`:params.opts.tokenProvider===`litellm`?authChoice=`litellm-api-key`:params.opts.tokenProvider===`vercel-ai-gateway`?authChoice=`ai-gateway-api-key`:params.opts.tokenProvider===`cloudflare-ai-gateway`?authChoice=`cloudflare-ai-gateway-api-key`:params.opts.tokenProvider===`moonshot`?authChoice=`moonshot-api-key`:params.opts.tokenProvider===`kimi-code`||params.opts.tokenProvider===`kimi-coding`?authChoice=`kimi-code-api-key`:params.opts.tokenProvider===`google`?authChoice=`gemini-api-key`:params.opts.tokenProvider===`zai`?authChoice=`zai-api-key`:params.opts.tokenProvider===`xiaomi`?authChoice=`xiaomi-api-key`:params.opts.tokenProvider===`synthetic`?authChoice=`synthetic-api-key`:params.opts.tokenProvider===`venice`?authChoice=`venice-api-key`:params.opts.tokenProvider===`together`?authChoice=`together-api-key`:params.opts.tokenProvider===`huggingface`?authChoice=`huggingface-api-key`:params.opts.tokenProvider===`opencode`?authChoice=`opencode-zen`:params.opts.tokenProvider===`qianfan`&&(authChoice=`qianfan-api-key`));async function ensureMoonshotApiKeyCredential(promptMessage){let hasCredential=!1;!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`moonshot`&&(await setMoonshotApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0);let envKey=resolveEnvApiKey(`moonshot`);if(envKey&&await params.prompter.confirm({message:`Use existing MOONSHOT_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setMoonshotApiKey(envKey.apiKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:promptMessage,validate:validateApiKeyInput});await setMoonshotApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}}if(authChoice===`openrouter-api-key`)return applyAuthChoiceOpenRouter(params);if(authChoice===`builderforcellm`){await params.prompter.note(`Using BuilderForceAgentsLLM default proxy (no local API key required).`,`BuilderForceAgentsLLM`);let defaultModel=`builderforcellm/auto`,applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel,applyDefaultConfig:config=>applyAgentDefaultModelPrimary(config,defaultModel),applyProviderConfig:config=>config,noteDefault:defaultModel,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}if(authChoice===`litellm-api-key`){let store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`litellm`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`litellm:default`,hasCredential=!1;if(existingProfileId&&existingCred?.type===`api_key`&&(profileId=existingProfileId,hasCredential=!0),!hasCredential&¶ms.opts?.token&¶ms.opts?.tokenProvider===`litellm`&&(await setLitellmApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){await params.prompter.note(`LiteLLM provides a unified API to 100+ LLM providers.
|
|
4
4
|
Get your API key from your LiteLLM proxy or https://litellm.ai
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-DHfhLu2W.js";import"./reply-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-DHfhLu2W.js";import"./reply-BeKidf2F.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./model-selection-DlYajIzF.js";import"./env-file-BI2jpOmF.js";import"./boolean-Cn4K2fc9.js";import"./env-BHP32i7Q.js";import"./src-CQLQD-1r.js";import"./io-DhUMGsxN.js";import"./manifest-registry-CBVaj2md.js";import"./config-lGOyM6Kq.js";import"./runner-CDpBWK3-.js";import"./model-catalog-BQUEoIev.js";import"./sandbox-Cq6rH4hg.js";import"./chrome-BW8dGyxs.js";import"./tailscale-0ey4P_at.js";import"./auth-C4PxZEj8.js";import"./server-context-1YSNvKDs.js";import"./frontmatter-DpzOtLJz.js";import"./skills-vjE49XV9.js";import"./plugin-skills-RFjYtysK.js";import"./routes-DsdK6VOy.js";import"./redact-BT5hARuQ.js";import"./errors-BK3rMW8O.js";import"./paths-CejDLFxE.js";import"./ssrf-DHJTyOuH.js";import"./image-ops-D7Ex-H05.js";import"./store-Nf9BxXC7.js";import"./ports-B-SXoPqJ.js";import"./trash-DlNzpifq.js";import"./sessions-Dv212g1O.js";import"./message-channel-BW_q2nVi.js";import"./plugins-C0lu7LGS.js";import"./accounts-2InvZDx2.js";import"./accounts-CrKsbGuP.js";import"./accounts-BnsrG5TA.js";import"./bindings-qYFdqpJ3.js";import"./send-DSwQqUiD.js";import"./send-BGZYkspG.js";import"./paths-DCzWXtSj.js";import"./tool-images-CR9Y0R5I.js";import"./tool-display-Dx-rz3CF.js";import"./fetch-guard-DxN_CtRp.js";import"./api-key-rotation-BbNoamfM.js";import"./fetch-CMEvVIy8.js";import"./sqlite-BxinAVYp.js";import"./tokens-Ct4DyfhX.js";import"./project-context-store-BPhHGfFl.js";import"./with-timeout-DTcvZn3s.js";import"./deliver-CrB451sO.js";import"./send-ZCmcplsV.js";import"./workspace-eFrsAV2Q.js";import"./reply-prefix-BwtP84WV.js";import"./memory-cli-Dgqoendm.js";import"./manager-pjodgk3H.js";import"./retry-Jis-ZZfm.js";import"./client-BxPDO8Ed.js";import"./call-DLeUWFtQ.js";import"./common-W8GhA4hE.js";import"./chunk-B9aj7NGY.js";import"./markdown-tables-iDNbGky8.js";import"./ir-EgWVNCXR.js";import"./render-CSLaFZoy.js";import"./builderforcellm-syscheck-BpNlQ4Rx.js";import"./send-iQicMwPr.js";import"./outbound-attachment-BR2FQu7J.js";import"./fetch-B6_hd7w9.js";import"./delivery-queue-BZWZDdpJ.js";import"./channel-activity-GeHNfvd4.js";import"./tables-D5WcKZWq.js";import"./pairing-store-PKyjZas4.js";import"./links-CYRGsVCu.js";import"./cli-utils-BLNnV_WG.js";import"./help-format-NhTn4dWd.js";import"./progress-OKwbfa23.js";import"./resolve-route-EE2-ObOq.js";import"./replies-BhjI7rPj.js";import"./refresh-Cyy0oi_E.js";import"./coding-tools.policy-DQxeoYmD.js";import"./send-C9xXqEqr.js";import"./onboard-helpers-DHGeaHZA.js";import"./prompt-style-BwwmGo3-.js";import"./pairing-labels-BpeDWVFP.js";import"./session-cost-usage-BDkGtjt9.js";import"./provider-usage-BqXFLAwn.js";import"./active-listener-DBdxNyOd.js";import"./exec-approvals-kmxxyvIe.js";import"./nodes-screen-BWDONgPE.js";import"./project-context-Dp8w9r_P.js";import"./control-service-Bkbx5ybP.js";import"./stagger-NaB6u1z1.js";import"./channel-selection-BjcuqdFb.js";import"./mamba-state-engine-DPAATSLG.js";import"./transformers-stream-QS2dnQob.js";import"./shared-BMSboHpU.js";import"./onboard-auth.credentials-Dt_yky3w.js";import"./auth-token-CeCyq7Zg.js";import"./logging-9jbJihk2.js";import"./provider-auth-helpers-5ZQb3SEz.js";import{t as applyAuthChoice}from"./auth-choice.apply-25j_lhua.js";import"./openai-model-default-DqkGItdN.js";import"./model-picker-DWc0Kexq.js";import"./auth-choice.apply.transformers-DE9QrzbX.js";export{applyAuthChoice};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BcStSGQ1.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./src-DMo2gLcR.js";import"./io-wLHeSE2L.js";import"./manifest-registry-DZdPjBqs.js";import"./config-DBrFbWRm.js";import"./model-discovery-CfknTieh.js";import"./model-catalog-CVRB77_N.js";import"./frontmatter-CoaI_oW6.js";import"./skills-CC5ozaMz.js";import"./plugin-skills-DUy_aY2T.js";import"./refresh-B38IMhwx.js";import"./client-BlsvYCEu.js";import"./call-Gj5Bi_oV.js";import"./message-channel-BjZV4RTT.js";import"./subagent-registry-98yia-RN.js";import"./sessions-C5jAGWOS.js";import"./project-context-store-BFOv5caq.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-CgMJqDBP.js";import"./send-DfpZ9T_M.js";import"./with-timeout-ftXvzlo8.js";import"./deliver-DDFTiLT4.js";import"./accounts-DoJYLMfS.js";import"./send-5Vokn3Uv.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-CsRjxr3I.js";import"./sandbox-bEma8jFA.js";import"./chrome-Kt4wxGF2.js";import"./tailscale-CgCG7AVQ.js";import"./auth-BNeS9xde.js";import"./server-context-0vSm_r2R.js";import"./routes-BLhXC8oU.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-BnrYivUM.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-BBsTN63-.js";import"./manager-BXMwSRz1.js";import"./gemini-auth-qrDeJkh5.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-qhKGerma.js";import"./tool-display-BIswnHaq.js";import"./chunk-hYck1V5_.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-CTE1iR41.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-BTolQUtx.js";import"./session-utils-DDDkCdFF.js";import"./coding-tools.policy-CtBT-KXm.js";import"./pairing-store-sCqmKjk2.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-nRVDmUHj.js";import"./send-COUZMiIL.js";import"./outbound-attachment-Bed_0M10.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-De5-TWPH.js";import"./control-service-DYVIKl0J.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-CLFizn8u.js";import"./send-CWzV8Zdx.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-XzBUkZcJ.js";import"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CiPwT32C.js";import"./onboard-helpers-Xl1gvLzt.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DVbgCApx.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-CViPpwyy.js";import"./transformers-stream-nSL4Xu31.js";import"./shared-WIJmFKqL.js";import"./onboard-auth.credentials-f-xn5D4D.js";import"./auth-token-DGYih1b5.js";import"./logging-CRzk-5ye.js";import"./provider-auth-helpers-Cibq8oDi.js";import{t as applyAuthChoice}from"./auth-choice.apply-CE1TC_Ts.js";import"./openai-model-default-C9iQBo_x.js";import"./model-picker-Dz1ecLd0.js";import"./auth-choice.apply.transformers-CBQbUAwr.js";export{applyAuthChoice};
|