@chatpanel/events 0.112.1 → 0.114.0

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/compaction.js ADDED
@@ -0,0 +1,11 @@
1
+ import{keepRecentFor as m}from"./context-window.js";const h="You compress a conversation into a compact but COMPLETE summary for continuation. Preserve: the user’s goals, key facts, decisions made, current task/automation state, open questions, and specifics needed to keep going. Terse bullet points. No preamble.",f=4e3;function c(n=[]){return(Array.isArray(n)?n:[]).filter(t=>t&&!t.pending&&(t.role==="user"||t.role==="assistant")&&(t.content||t.attachments?.length))}function y({messages:n=[],keepRecent:t=4,budget:e=0,tokensOf:r=null}={}){const o=c(n);let i=Math.max(1,Math.floor(Number(t)||4));if(e>0&&typeof r=="function")for(;i>1&&o.slice(o.length-i).reduce((a,p)=>a+(r(p)||0),0)>e;)i-=1;if(o.length<=i+1)return null;const s=o.slice(0,o.length-i),l=o.slice(o.length-i),u=s.map(a=>`${a.role==="user"?"User":"Assistant"}: ${String(a.content||"").slice(0,f)}`).join(`
2
+
3
+ `);return{fold:s,keep:l,uptoId:s[s.length-1].id,transcript:u}}function g({transcript:n="",previousSummary:t=""}={}){return`${t?`Earlier summary to fold in:
4
+ ${t}
5
+
6
+ `:""}Summarize the conversation so far:
7
+
8
+ ${n}`}function x({summary:n,uptoId:t,now:e=Date.now()}={}){return{summary:String(n||"").trim(),uptoId:t,ts:e}}function S(n=[],t=null){const e=c(n);if(!t?.uptoId)return e;const r=e.findIndex(o=>o.id===t.uptoId);return r>=0?e.slice(r+1):e}function $(n="",t=null){const e=String(t?.summary||"").trim();return e?`${n?`${n}
9
+
10
+ `:""}[Summary of the earlier part of this conversation — continue seamlessly; do not mention this summary]
11
+ ${e}`:n||""}export{h as COMPACTION_SYSTEM,c as compactable,g as compactionPrompt,x as compactionRecord,m as keepRecentFor,S as messagesAfter,y as planCompaction,$ as systemWithSummary};
@@ -0,0 +1 @@
1
+ const a=[[/gpt-4\.1/,1e6],[/gpt-5|o3|o4|o1/,2e5],[/gpt-4o|gpt-4-turbo/,128e3],[/claude-(3|4|5|opus|sonnet|haiku|fable)/,2e5],[/gemini-(1\.5|2|2\.5|3)/,1e6],[/gemini/,1e6],[/deepseek/,128e3],[/mistral-large|mixtral|codestral/,128e3],[/grok/,128e3],[/llama-3\.[1-3]|llama-4/,128e3]];function l(t={},e=null){const i=String(t.id||""),r=String(t.model||t.id||"").toLowerCase(),u=e&&(e[i]||e[r]||e[String(t.model||"")]);if(Number(u)>0)return Number(u);const o=Number(t.window||t.contextLength||t.contextWindow||0);if(o>0)return o;if(t.reach==="device"||t.kind==="webllm")return 0;for(const[n,c]of a)if(n.test(r))return c;return 0}const s=.85;function d({promptTokens:t=0,floorTokens:e=0,window:i=0,reserve:r=1024,headroom:u=s}={}){const o=Number(i)||0;if(!o)return{status:"unknown",budget:0,over:0,window:0};const n=Math.max(0,Math.floor(o*u)-Math.max(0,Number(r)||0)),c=Math.max(0,Number(t)||0),m=Math.max(0,Number(e)||0);return c<=n?{status:"ok",budget:n,over:0,window:o}:m<=n?{status:"compact",budget:n,over:c-n,window:o}:{status:"too-big",budget:n,over:m-n,window:o}}function f(t=0){const e=Number(t)||0;return e?e<=8e3?2:e<=32768?4:e<=128e3?8:12:4}function x({floorTokens:t=0,reserve:e=1024,headroom:i=s}={}){const r=Math.max(0,Number(t)||0);return r?Math.ceil((r+Math.max(0,Number(e)||0))/i):0}function w(t){return/context.{0,8}(length|window|size)|context_length_exceeded|prompt is too long|too many tokens|maximum context|exceed.{0,20}context|reduce the (length|number|size)|input is too long|token limit|n_ctx|kv cache/i.test(String(t?.message||t||""))}export{s as FIT_HEADROOM,d as fitFor,w as isContextLimitError,f as keepRecentFor,x as minWindowFor,l as windowOf};
package/index.js CHANGED
@@ -1 +1 @@
1
- import{CURRENT_VERSION as o,EVENT_TYPES as t,ALL_TYPES as a,ACTOR_KINDS as i,SCOPE_KINDS as n,CLASSES as s,EFFECTS as S,EGRESS as E,EventError as l,validateEvent as T,isValidEvent as m,createAppender as c}from"./event.js";import{REF_KINDS as _,RESOLUTION as d,makeRef as A,isRef as R,resolveRef as f}from"./ref.js";import{linearize as I,compareEvents as N,causesAreWellFormed as u}from"./order.js";import{pendingQueue as g,isQueued as C,dequeue as L,moveQueued as P,promoteQueued as x}from"./queue.js";import{groupModels as F,filterSections as h,defaultModelId as y,modelSummary as k}from"./model-picker.js";import{NOTE_ACTIONS as b,NOTE_ACTION_ORDER as v,NOTE_ACTION_TEMPERATURE as G,NOTE_ACTION_ERRORS as K,NOTE_COMMANDS as B,NOTE_COMMAND_TEMPERATURE as H,NOTE_COMMAND_MAX_TOKENS as w,frameNoteAction as V,noteActionLabel as X,noteActionItems as W,filterNoteActions as J,commandLineAt as Y,triggerQueryAt as z}from"./note-actions.js";import{parseAgentMention as Q,agentMentionAt as q,parseSkillMention as Z,mergeSkillPrompt as $,findSkillByName as ee,findTargetByName as re,mentionAnswerPrefix as oe}from"./note-mentions.js";import{wikiQueryAt as ae,rankLinkTargets as ie}from"./note-links.js";import{SWARM_ROLES as se,roleById as Se,classifyModel as Ee,supportsSubagents as le,appoint as Te,routeTeam as me}from"./cowriter-router.js";import{SEARCH_ENGINES as pe,RESULTS_PER_ENGINE as _e,buildSearchUrl as de,unwrapRedirect as Ae,isResultHost as Re,pickResults as fe,mergeEngineResults as Oe,engineOrder as Ie}from"./web-search.js";import{MAX_GRAPH_NODES as ue,buildNoteGraph as Me,egoGraph as ge,trimGraph as Ce,graphStats as Le}from"./note-graph.js";import{lintText as xe,wordDiff as De,filterTypoEdits as Fe,editKey as he,applyEdits as ye,COWRITER_SYSTEM as ke,COWRITER_TEMPERATURE as Ue}from"./cowriter.js";import{salientTerms as ve,topicTerms as Ge,researchRelevance as Ke,webQuery as Be,researchSnippet as He,rankResearchCards as we,mergeResearchLanes as Ve}from"./note-research.js";import{PLAN_ROLES as We,PLAN_AUTHORS as Je,PLAN_DECOMPOSE_SYSTEM as Ye,PLAN_DECOMPOSE_MAX_TOKENS as ze,PLAN_DECOMPOSE_TEMPERATURE as je,PLAN_SECTION_MAX_TOKENS as Qe,PLAN_SECTION_TEMPERATURE as qe,planSectionSystem as Ze,parsePlanTasks as $e,planTitleFor as er,planParts as rr,planBody as or,planAttribution as tr}from"./note-plan.js";import{REACH as ir,reachRank as nr,reachSatisfies as sr}from"./reach.js";import{UPCASTERS as Er,upcast as lr,upcastAll as Tr}from"./upcast.js";import{validateCapability as cr,validateInvocation as pr,canSatisfy as _r,toModelSchema as dr,toModelSchemas as Ar}from"./capability.js";import{checkInvariants as fr,INVARIANTS as Or}from"./invariants.js";import{createMemoryAdapter as Nr,createLogStore as ur,createBlobStore as Mr}from"./store.js";import{createRegistry as Cr,REGISTRY_STATES as Lr}from"./registry.js";import{defineSearchEngine as xr,reconcileEngines as Dr,attemptOrder as Fr,ENGINE_KINDS as hr,SearchEngineError as yr}from"./search-engines.js";import{getWeather as Ur,weatherUrl as br,parseWeather as vr,formatWeather as Gr,areaLabel as Kr,isAmbiguousLocation as Br,WEATHER_HOST as Hr,WEATHER_TIMEOUT_MS as wr,WeatherError as Vr}from"./weather.js";import{defineToolGroup as Wr,createToolGroupRegistry as Jr,ToolGroupError as Yr}from"./tool-groups.js";import{toolNeedFor as jr,grantsNeededFor as Qr,equipmentFor as qr}from"./tool-need.js";import{parseFlowchart as $r,layoutFlowchart as eo,renderFlowchartSvg as ro}from"./flowchart.js";import{validateView as to,validateViewInvocation as ao,viewResult as io}from"./view.js";import{validateWidget as so,validateWidgetMessage as So,effectiveGrants as Eo,widgetIcon as lo,WIDGET_SURFACES as To}from"./widget.js";import{fuseRRF as co,planQueries as po,multiSearch as _o}from"./rrf.js";import{SUBJECT_KINDS as Ro,DEFAULT_THRESHOLD as fo,MAX_SUBJECTS as Oo,MAX_SUBJECT_CHARS as Io,normalizeSubject as No,subjectKey as uo,subjectTokens as Mo,isSubjectCandidate as go,aliasMap as Co,resolveSubjects as Lo,earnsBrief as Po,rankSubjects as xo,REDACTION_TOKEN_TYPES as Do,isRedactionToken as Fo,SELF_LABELS as ho,isSelfLabel as yo,stripQualifiers as ko,suggestMerges as Uo}from"./entity.js";import{BRIEF_STATES as vo,CLAIM_KINDS as Go,MAX_CLAIMS as Ko,MAX_CLAIM_REFS as Bo,MAX_BRIEF_RECORDS as Ho,MAX_BRIEF_CHARS as wo,contentHash as Vo,briefId as Xo,briefToText as Wo,briefTerms as Jo,briefLinks as Yo,checkKnowledgeInvariants as zo,parseBriefText as jo}from"./knowledge.js";import{deriveBrief as qo,deriveBriefs as Zo,driftedRefs as $o}from"./knowledge-derive.js";import{SYNTHESIS_SCHEMA as rt,synthesisPrompt as ot,claimsFromSynthesis as tt,MAX_SYNTHESIS_CLAIMS as at,MAX_EXCERPTS as it,MAX_EXCERPT_CHARS as nt}from"./synthesis.js";import{PROPOSAL_STATES as St,SUPERSEDE_OVERLAP as Et,propose as lt,accept as Tt,reject as mt,diffProposal as ct,converge as pt,linkClaims as _t}from"./promotion.js";import{normalizeRecord as At,normalizeRecords as Rt,wikilinksIn as ft,redactedTokensIn as Ot,redactionCost as It,wantedPages as Nt,orphanRecords as ut,duplicateTitles as Mt,vocabularyDrift as gt,mentionsFrom as Ct,spanningQuestions as Lt,surveyCorpus as Pt,thresholdSweep as xt,formatSurvey as Dt,NEAR_TITLE_DISTANCE as Ft,SPAN_MIN_TERMS as ht}from"./curate.js";import{PDF_MAX_CHARS as kt,linesFromItems as Ut,orderLines as bt,paragraphsFromLines as vt,pageTextFromItems as Gt,looksScanned as Kt,buildPdfDocument as Bt}from"./pdf-layout.js";import{YOUTUBE_HOSTS as wt,TRANSCRIPT_MAX_CHARS as Vt,parseYouTubeUrl as Xt,isYouTubeUrl as Wt,captionTracksFromPlayerResponse as Jt,videoMetaFromPlayerResponse as Yt,pickCaptionTrack as zt,timedTextUrl as jt,parseTimedText as Qt,groupSegments as qt,formatTimestamp as Zt,formatTranscript as $t,buildTranscriptDocument as ea,transcriptFromTracks as ra}from"./media-transcript.js";import{ACCESS_LOG_VERSION as ta,ACCESS_LOG_MAX as aa,redactAccessArgs as ia,makeAccessEvent as na,createAccessLog as sa,makeStorageTier as Sa,formatBytes as Ea}from"./observability.js";import{routeGraph as Ta,projectChain as ma}from"./route-graph.js";import{defineAdapter as pa,createAdapterRegistry as _a,AdapterError as da}from"./adapters.js";import{linkifyCitations as Ra,sourcesFromToolText as fa,createCitationCollector as Oa,RETRIEVAL_TOOLS as Ia}from"./citations.js";import{buildTrajectory as ua,phasesOf as Ma,lanesOf as ga,filterEntries as Ca,displayName as La,ENTRY_KINDS as Pa,threadsOf as xa,threadTitle as Da,promptEntries as Fa,turnsOf as ha,threadTree as ya}from"./trajectory.js";import{createTurnRunner as Ua,defineLoop as ba,LOOP_KINDS as va,LoopError as Ga}from"./loop.js";import{defineModel as Ba,defineMiddleware as Ha,defineRouteStrategy as wa,createModelRouter as Va,signalsFrom as Xa,requirementsFor as Wa,requirementsForStep as Ja,preferenceFor as Ya,failoverOrder as za,pinnedOrderOf as ja,FAILOVER_CLASS_GAP as Qa,FAILOVER_CAPABILITY_GAP as qa,sameModelKey as Za,RouterError as $a}from"./router.js";import{makeSourceStore as ri,manifestText as oi,shortUrl as ti,readSource as ai,sourceId as ii}from"./sources-retrieval.js";import{classifySource as si,extractUrls as Si,hostMatches as Ei,meetReach as li,sourcePolicyFor as Ti,sourceUrlsOf as mi,DEFAULT_INTERNAL_PATTERNS as ci,INTERNAL_PATTERN_CATALOG as pi}from"./sources.js";import{defineRule as di,createRuleEngine as Ai,SUPPRESSED as Ri,RuleError as fi}from"./rules.js";import{VAULT_VERSION as Ii,KDF_ITERATIONS as Ni,KDF_HASH as ui,DEFAULT_LOCK_MS as Mi,VaultError as gi,MAX_TITLE_CHARS as Ci,MAX_NOTE_CHARS as Li,MAX_SECRET_CHARS as Pi,MAX_ENTRIES as xi,createVault as Di,unlockVault as Fi,deriveKey as hi,sealEntry as yi,openEntry as ki,validateEntry as Ui,entryMeta as bi,searchEntries as vi,isLocked as Gi,lockedSummary as Ki,canAddEntry as Bi,toB64 as Hi,fromB64 as wi}from"./vault.js";import{SCHEDULE_KINDS as Xi,TRIGGER_KINDS as Wi,JOB_ACTIONS as Ji,MISSED_POLICIES as Yi,ScheduleError as zi,validateSchedule as ji,nextFireAt as Qi,occurrencesBetween as qi,nextWakeAt as Zi,defineTrigger as $i,createTriggerRegistry as en,BUILTIN_TRIGGERS as rn,timerTrigger as on,meetingStartedTrigger as tn,meetingEndedTrigger as an,personJoinedTrigger as nn,phraseTrigger as sn,topicTrigger as Sn,questionTrigger as En,voiceCommandTrigger as ln,defineJob as Tn,dueJobs as mn,jobsForEvent as cn,occurrenceKey as pn,clipText as _n,matchSummary as dn}from"./schedule.js";import{defineMeetingAnalyzer as Rn,createAnalyzerRegistry as fn,CADENCES as On,AnalyzerError as In}from"./meeting-analyzers.js";import{DEFAULT_WAKE as un,MAX_COMMANDS_PER_DELTA as Mn,DAYPART_HOUR as gn,VoiceIntentError as Cn,compileWake as Ln,findWakeCommand as Pn,parseCommand as xn,commandsFromSegments as Dn,parseDuration as Fn,parseClock as hn,parseWhen as yn,parseNumberWords as kn,normalizeSpeech as Un,tokenize as bn,editDistance as vn,defineVoiceIntent as Gn,createVoiceIntentRegistry as Kn,defaultVoiceIntents as Bn,BUILTIN_VOICE_INTENTS as Hn,timerIntent as wn,reminderIntent as Vn,scheduleIntent as Xn,noteIntent as Wn,monitorIntent as Jn,REFINEMENT_SCHEMA as Yn,refinementPrompt as zn,refinementFormat as jn,parseRefinement as Qn,refinementStream as qn,settleRefinement as Zn,refineSpokenCommand as $n,isFillerSentence as es,gistText as rs,gistOpening as os,commandLooksFinished as ts,sameUtterance as as,createUtteranceGate as is,UTTERANCE_SETTLE_MS as ns,UTTERANCE_DANGLING_MS as ss}from"./voice-intents.js";import{MAX_TOPICS as Es,MAX_TOPIC_CHARS as ls,TOPICS_SCHEMA as Ts,topicsSchema as ms,topicsPrompt as cs,topicsFormat as ps,parseTopics as _s,normalizeTopic as ds,normalizeTopics as As,topicsStream as Rs,ENTITY_TYPES as fs,ENTITIES_SCHEMA as Os,entitiesPrompt as Is,entitiesFormat as Ns,parseEntities as us,coerceEntities as Ms,entitiesStream as gs,MAX_SUGGESTIONS as Cs,MAX_SUGGESTION_CHARS as Ls,SUGGESTIONS_SCHEMA as Ps,suggestionsPrompt as xs,suggestionsFormat as Ds,parseSuggestions as Fs,suggestionsStream as hs}from"./extraction.js";import{FIELD_TYPES as ks,RESPONSE_MODES as Us,StructuredError as bs,defineSchema as vs,describeSchema as Gs,toJsonSchema as Ks,responseFormat as Bs,unfence as Hs,findJson as ws,rewriteJson as Vs,repairJson as Xs,isNothing as Ws,coerce as Js,parseStructured as Ys,createStructuredStream as zs}from"./structured.js";import{explainMcpError as Qs,packageFromArgs as qs,isStaleMcpSession as Zs}from"./mcp-errors.js";import{toolTraits as eS,bareToolName as rS,canRunConcurrently as oS,isCacheable as tS,needsConfirmation as aS,traitsIndex as iS,effectiveToolName as nS,parallelEligible as sS,PARALLEL_LOCAL_RE as SS}from"./tool-traits.js";import{planToolRound as lS,runToolRound as TS}from"./tool-round.js";import{createToolLoopGuard as cS,roundSignature as pS,stableToolCallKey as _S,toolMadeProgress as dS,isLoopableTool as AS,blockedToolResult as RS,OBSERVATION_TOOLS as fS,INPUT_PROGRESS_TOOLS as OS}from"./tool-loop-guard.js";import{classifyFailure as NS,createModelHealth as uS,COOLDOWN_MS as MS,UNAVAILABLE_REASONS as gS,normModelName as CS}from"./model-health.js";import{runWithFailover as PS,failoverExhausted as xS,FAILOVER_MAX_ATTEMPTS as DS}from"./failover.js";import{sourcePolicySettings as hS,sourceGuardFor as yS,sourceGate as kS,isSourceGateError as US,withinReach as bS}from"./source-gate.js";import{runTurnLoop as GS,createCallRunner as KS,roundCap as BS,withToolSystem as HS,describeCall as wS,stepResultText as VS,addUsage as XS,normalizeUsage as WS,openAiTranscript as JS,anthropicTranscript as YS,DEFAULT_MAX_ROUNDS as zS,DEFAULT_MAX_FINISH_TRIES as jS,FINISH_NUDGES as QS,LOOPING_NUDGE as qS,EXHAUSTED_NOTE as ZS,ROUND_SEPARATOR as $S}from"./turn-loop.js";import{createResultStore as rE,shieldToolResult as oE,runResultQuery as tE,withResultShield as aE,describeShape as iE,compactValue as nE,resultToolSpec as sE,RESULT_TOOL_NAME as SE,DEFAULT_SHIELD as EE,DEFAULT_STORE as lE}from"./tool-result.js";import{findTools as mE,findToolsResult as cE,findActionArgs as pE,oneLiner as _E,overlapRank as dE,FIND_ACTION as AE}from"./tool-discovery.js";import{buildToolset as fE}from"./toolset.js";import{DESCRIBE_ACTION as IE,actionMenu as NE,buildGroupDispatchSpec as uE,validateAction as ME,makeGroupDispatchExecutor as gE,withGuidance as CE,makeDispatchProvider as LE,estimateTokens as PE}from"./tool-dispatch.js";import{FIND_TOOL_NAME as DE,FIND_DESCRIPTION as FE,FIND_RESIDENT as hE,findDispatchProvider as yE}from"./find-tool.js";import{WEB_SEARCH_TOOL_NAME as UE,WEB_SEARCH_TOOL_SYSTEM as bE,WEB_SEARCH_SPEC as vE,searchResultsToText as GE,webSearchToolProvider as KE}from"./web-search-tool.js";import{compressToolSpec as HE,compressToolSpecs as wE,compressionStats as VE,trimDescription as XE,COMPRESSION_MODES as WE,DEFAULT_COMPRESSION as JE}from"./tool-schema.js";import{validateRecipe as zE,expandRecipe as jE,recipeParams as QE,mapInput as qE,dryRunRecipe as ZE,runPlan as $E,runRecipe as el,RecipeError as rl,RECIPE_MODES as ol}from"./recipe.js";import{recipeToolProvider as al,recipeToolSpec as il,describeRecipeForApproval as nl,RECIPE_TOOL_NAME as sl}from"./recipe-tool.js";import{createBudget as El,validateBudget as ll,normalizeBudget as Tl,usageOf as ml,BudgetError as cl,BUDGET_DIMENSIONS as pl}from"./budget.js";import{defineTeam as dl,validateTeam as Al,normalizeTeam as Rl,normalizeGrants as fl,grantAllows as Ol,scmAllows as Il,describeRole as Nl,TeamError as ul,ROLE_MODES as Ml,MERGE_POLICIES as gl,PLAN_MODES as Cl,GRANTABLE as Ll,WORK_GRANTS as Pl,GRANT_RE as xl,AGENT_REF_RE as Dl,STARTER_TEAMS as Fl,starterTeams as hl,blankTeam as yl,teamFromForm as kl,slugTeamName as Ul}from"./team.js";import{fixedPlan as vl,parsePlan as Gl,plannerPrompt as Kl,waves as Bl,breakCycles as Hl,TEAM_PLAN_SCHEMA as wl}from"./team-plan.js";import{createBoard as Xl,parseFindings as Wl,boardText as Jl,findingsInstruction as Yl,toBriefClaims as zl,FINDINGS_SCHEMA as jl,FINDING_KINDS as Ql,THREAD_KINDS as ql,THREAD_STATUSES as Zl,POST_KINDS as $l,POST_STATUSES as eT,ASK_TYPES as rT,emptyBoardState as oT,foldBoard as tT,findingsOf as aT}from"./team-board.js";import{boardToolProvider as nT,boardToolSpec as sT,createAnswerBox as ST,withBoardTool as ET,BOARD_TOOL_NAME as lT,DEFAULT_ASK_TIMEOUT_MS as TT}from"./board-tool.js";import{createRunCache as cT,withRunCache as pT}from"./team-cache.js";import{emptyRun as dT,foldRun as AT,runFromEvents as RT,checkpointFrom as fT,isResumable as OT,LIVE_RUN_STATUSES as IT,RESUMABLE_RUN_STATUSES as NT,spendOf as uT,describeSpend as MT,runState as gT,priorWorkFor as CT,STALLED_AFTER_MS as LT}from"./team-record.js";import{validateProject as xT,normalizeProject as DT,defineProject as FT,canTransition as hT,blankProject as yT,projectFromForm as kT,emptyProjectRecord as UT,foldProject as bT,projectProgress as vT,ProjectError as GT,PROJECT_STATUSES as KT,PROJECT_ID_RE as BT}from"./project.js";import{validateJob as wT,normalizeJob as VT,defineJob as XT,canTransition as WT,applyAll as JT,jobToRole as YT,readyJobs as zT,blankJob as jT,jobFromForm as QT,JobError as qT,JOB_STATUSES as ZT,JOB_ID_RE as $T}from"./job.js";import{validateGate as rm,normalizeGate as om,effectiveGate as tm,gateAllows as am,DEFAULT_GATE as im,AUTONOMY as nm,HUMAN_FLAGS as sm,CHECKS as Sm}from"./gate.js";import{runProject as lm,roundJobs as Tm,teamForRound as mm,jobResults as cm,roundBudget as pm,parseJobs as _m,parseReview as dm,jobsPrompt as Am,reviewPrompt as Rm,PROJECT_JOBS_SCHEMA as fm,PROJECT_REVIEW_SCHEMA as Om,ProjectRunError as Im,EXECUTIVE as Nm,MAX_JOBS_PER_ROUND as um,MAX_ROUNDS as Mm,PROJECT_RUN_STATUSES as gm}from"./project-run.js";import{canonical as Lm,sha256 as Pm,makeEntry as xm,verifyChain as Dm,attest as Fm,verifyAttested as hm,summarize as ym,fit as km,adjustSummary as Um,normalizeEngine as bm,engineKey as vm,normalizeScm as Gm,SCORECARD_ENTRY_KINDS as Km,ROLE_KINDS as Bm,SCORECARD_VERSION as Hm,ENGINE_KINDS as wm}from"./scorecard.js";import{ENGINE_KINDS as Xm,ROUTE_PREFERS as Wm,normalizePolicy as Jm,normalizeEngineSpec as Ym,validateEngineSpec as zm,engineRef as jm,engineKeyOf as Qm,describeEngine as qm,tierOf as Zm}from"./engine.js";import{AGENT_ID_RE as ec,APPLIES_TO as rc,EGRESS_CLASSES as oc,ASSISTANT_ID as tc,AgentError as ac,validateAgent as ic,normalizeAgent as nc,defineAgent as sc,assistantAgent as Sc,engineOf as Ec,describeAgent as lc,slugAgentId as Tc,resolveTeam as mc,STARTER_AGENTS as cc,starterAgents as pc,blankAgent as _c,agentFromForm as dc,poolFor as Ac}from"./agent.js";import{LEDGER_VERSION as fc,LEDGER_ENTRY_KINDS as Oc,DECLINE_REASONS as Ic,WITHDRAW_AFTER as Nc,ledgerKey as uc,normalizeCall as Mc,makeLedgerEntry as gc,summarizeEngine as Cc}from"./model-ledger.js";import{RECRUIT_SCHEMA as Pc,MIN_FIT as xc,engineRow as Dc,engineRows as Fc,needForJob as hc,routeFor as yc,engineWorth as kc,applications as Uc,evaluatorPrompt as bc,parseEvaluation as vc,decide as Gc,recruitForRun as Kc,proposalFromNeeds as Bc,proposalToAgent as Hc,carveBudget as wc,recruitEvents as Vc,recruitJob as Xc}from"./recruit.js";import{DEFAULT_MIN_CALLS as Jc,cardOverride as Yc,applyCard as zc}from"./model-candidates.js";import{SCM_KINDS as Qc,validateConnection as qc,normalizeConnection as Zc,parseRemote as $c,connectionFor as ep,branchFor as rp,worktreeDirFor as op,credentialEnv as tp,describeConnection as ap,blankConnection as ip,connectionFromForm as np}from"./scm-connection.js";import{messagesFor as Sp,mergeTranscript as Ep,clipTranscript as lp,clipMessage as Tp,newSteps as mp,continuationNote as cp,createControl as pp,STEP_MAX_CHARS as _p,TASK_TRANSCRIPT_MAX_CHARS as dp}from"./team-task.js";import{runTeam as Rp,resumeTeam as fp,dryRunTeam as Op,isModelUnavailable as Ip,TeamRunError as Np,RUN_STATUSES as up}from"./team-run.js";import{teamToolProvider as gp,teamToolSpec as Cp,teamToolTimeoutMs as Lp,describeTeamForApproval as Pp,TEAM_TOOL_NAME as xp,TEAM_MANUAL as Dp}from"./team-tool.js";import{workLogFor as hp,workLogText as yp,workLogEvidence as kp,describeCall as Up,WORKLOG_KINDS as bp}from"./team-worklog.js";import{normalizeRequest as Gp,subtaskFromRequest as Kp,takeUp as Bp,takeUpLine as Hp,holdsGrants as wp,jobFromSubtask as Vp,extendDependents as Xp,taskTree as Wp,threadRows as Jp,MAX_SUBTASKS as Yp,MAX_DEPTH as zp,MIN_TAKEUP_FIT as jp}from"./team-subtask.js";import{teamLine as qp,teamLanes as Zp}from"./team-trail.js";import{promoteRoles as e_,starterTeam as r_,missingStarters as o_,teamHealth as t_,teamShape as a_,describeTeamShape as i_,whereItWorks as n_,rosterRows as s_,agentKind as S_,agentHue as E_,agentColor as l_,agentInitials as T_,roleCardId as m_,cardNumbers as c_,upsertAgents as p_,soloTeam as __,teamsWithSolos as d_,builtinOrg as A_,isBuiltin as R_,grantChoices as f_,grantsFromChoices as O_,skillChoices as I_,GRANT_INFO as N_,SOLO_BUDGET as u_,TEAM_SHAPES as M_,ROSTER_KINDS as g_}from"./team-org.js";import{observeInbox as L_,observeStrip as P_,runLanes as x_,spendRows as D_,engineStrip as F_}from"./team-observe.js";import{mcpDispatchProvider as y_,MCP_TOOL_NAME as k_}from"./mcp-dispatch.js";import{createManifest as b_,ManifestError as v_,SOURCES as G_}from"./manifest.js";import{createKernel as B_,meetDecisions as H_,KernelError as w_,REQUIRED_PLUGINS as V_,ALLOW_ALL as X_}from"./kernel.js";import{replay as J_,formatReport as Y_,parseJsonl as z_,toJsonl as j_}from"./harness.js";import{compileQuery as q_,findMatches as Z_,matchIndexFor as $_,expandReplacement as ed,replaceMatch as rd,replaceAll as od,replaceAllInRange as td,MAX_MATCHES as ad}from"./text-search.js";import{DATA_SCOPES as nd}from"./scopes.js";import{MEMORY_VERSION as Sd,MEMORY_KINDS as Ed,MEMORY_KIND_NAMES as ld,AMBIENT_KINDS as Td,MAX_MEMORY_CHARS as md,MIN_MEMORY_CHARS as cd,DEFAULT_MAX_MEMORIES as pd,DEFAULT_BLOCK_CHARS as _d,SAME_FACT as dd,MEMORY_TOOL_SPEC as Ad,MEMORY_UPCASTERS as Rd,MemoryError as fd,normalizeMemory as Od,isValidMemory as Id,memoryKey as Nd,slotOf as ud,similarity as Md,containment as gd,candidatesFrom as Cd,reconcile as Ld,matchForForget as Pd,recall as xd,memoryBlock as Dd,markUsed as Fd,pruneMemories as hd,memoryToolSystem as yd,upcastMemory as kd}from"./memory.js";import{SOURCE_TRUST as bd,SkillSourceError as vd,defineSkillSource as Gd,createSkillSourceRegistry as Kd}from"./skill-sources.js";import{SKILL_MANIFEST_VERSION as Hd,SKILL_CONTEXTS as wd,SKILL_HISTORY_SCOPES as Vd,SKILL_MCP_MODES as Xd,SKILL_TRUST as Wd,SKILL_FILE_KINDS as Jd,SKILL_UPCASTERS as Yd,SkillManifestError as zd,isSafeSkillPath as jd,originOf as Qd,trustOf as qd,skillFiles as Zd,needsBridge as $d,declaredAccess as eA,originLabel as rA,sameSkillOrigin as oA,skillIsStale as tA,validateSkill as aA,upcastSkill as iA,upcastSkills as nA,normalizeSkill as sA}from"./skill-manifest.js";import{SKILL_VARS as EA,SKILL_VAR_NAMES as lA,skillVar as TA,skillVarPattern as mA,parseSkillVars as cA,lintSkillPrompt as pA,suggestSkillVar as _A,substituteSkillVars as dA,expandSkillPrompt as AA,skillVarGuidance as RA,SkillVarError as fA}from"./skill-vars.js";import{lineAt as IA,writerAffordance as NA,INSTRUCTION_RE as uA,instructionOnLine as MA,GOAL_MIN_NEW as gA,goalDraftAllowed as CA,createSpendMeter as LA,writerTail as PA,draftSeparator as xA,groundingBlock as DA,writerRequest as FA,AUTOCOMPLETE_SYSTEM as hA,AUTOCOMPLETE_MAX_TOKENS as yA,AUTOCOMPLETE_TEMPERATURE as kA,clipCompletion as UA,GEARS as bA,WRITER_PREFS as vA,WRITER_PREF_DEFAULTS as GA,normalizeWriterPrefs as KA,normalizeIntent as BA}from"./cowriter-writer.js";import{SLASH_TYPING_RE as wA,enabledSkills as VA,slashCommandItems as XA,matchSlashSkill as WA,matchSlashRecipe as JA,recipeInvocationText as YA,matchSlashTeam as zA,teamInvocationText as jA,slashCommandInsert as QA,skillInvocationOf as qA,skillInvocationLabel as ZA}from"./slash-commands.js";import{outlineOf as eR,parseListItem as rR,continueList as oR,indentSelection as tR,toggleWrap as aR,toggleLinePrefix as iR,toggleTask as nR,toggleLink as sR,docStats as SR,selectionStats as ER}from"./markdown-authoring.js";import{MAX_TAG_LENGTH as TR,MAX_TAGS as mR,normalizeTag as cR,normalizeTags as pR,hasTag as _R,addTag as dR,removeTag as AR,toggleTag as RR,sameTags as fR,formatTag as OR,parseTagQuery as IR,hasTagTerms as NR,formatTagQuery as uR,matchesTagFilter as MR,filterByTags as gR,tagFacets as CR,suggestExistingTags as LR,tagsSearchText as PR}from"./tags.js";import{UNTITLED_MEETING as DR,MAX_TITLE_LENGTH as FR,TITLE_RULES_VERSION as hR,cleanTitle as yR,isGenericTitle as kR,titleFromSummary as UR,titleFromTopics as bR,titleFromParticipants as vR,titleFromDate as GR,deriveMeetingTitle as KR,shouldAutoTitle as BR,isBetterTitleSource as HR,meetingTitlePrompt as wR,parseTitleResponse as VR}from"./titles.js";import{RECORD_KINDS as WR,MAX_TITLE_LEN as JR,LibraryError as YR,parseRecordId as zR,makeRecordId as jR,isRecordId as QR,normalizeStoredRecord as qR,isValidStoredRecord as ZR,toSearchRecord as $R,searchTextFor as ef,toIndexEntry as rf,deriveTitle as of,snippetOf as tf,wordCount as af}from"./library.js";import{CLOCK_TOLERANCE_MS as sf,SyncError as Sf,stampOf as Ef,decide as lf,planSync as Tf,isSettled as mf,forkConflict as cf,advanceBases as pf}from"./sync-plan.js";import{ENCRYPTED_TYPE as df,COMPRESSIONS as Af,BackupError as Rf,KDF_ITERATIONS as ff,encryptBackup as Of,decryptBackup as If,isEncryptedBackup as Nf,identityCodec as uf,streamCodec as Mf,nodeCodec as gf,bestCodec as Cf}from"./backup-envelope.js";import{OMNI_MODES as Pf,OMNI_GRAMMAR as xf,parseOmni as Df,extractFilters as Ff,resolveSince as hf,wantsModel as yf,isActionable as kf}from"./omni.js";import{THEMES as bf,LIGHT as vf,DARK as Gf,PALETTES as Kf,SHAPE as Bf,TOKEN_NAMES as Hf,TOKEN_ROLES as wf,paletteFor as Vf,cssVarName as Xf,toCssVars as Wf,themeStylesheet as Jf,resolveTheme as Yf}from"./theme.js";import{PLANS as jf,API_BASE as Qf,ENDPOINTS as qf,ENTITLEMENT_PUBLIC_JWK as Zf,UPGRADE_URL as $f,FEATURE_TIER as eO,PRO_FEATURES as rO,TEAM_FEATURES as oO,FREE_LIMITS as tO,COUNTED as aO,freeCap as iO,observeSince as nO,RECHECK_INTERVAL_MS as sO,EntitlementError as SO,checkoutUrl as EO,planOf as lO,planLabel as TO,isPro as mO,isTeam as cO,can as pO,tierFor as _O,withinFreeLimit as dO,verifyEntitlement as AO,verifySignedToken as RO,licenseFromPayload as fO,needsRecheck as OO}from"./entitlement.js";import{renderMarkdown as NO,defaultLinkPolicy as uO}from"./markdown-render.js";import{parseMeetingText as gO,speakerStats as CO,densityRibbon as LO}from"./meeting-text.js";import{speakerBreakdown as xO,speakerTimeline as DO,formatTalkTime as FO,SPEAKER_SLOTS as hO}from"./meeting-shape.js";import{isSpeakerImageValue as kO,speakerLabeller as UO}from"./meeting-shape.js";import{SORT_MODES as vO,SORT_LABELS as GO,sortStamp as KO,sortRecords as BO,filterRecords as HO,dayBucket as wO,rowTime as VO,groupRecords as XO}from"./record-list.js";import{INSIGHT_KINDS as JO,summarySections as YO,insightKindOf as zO,meetingInsights as jO,hasInsights as QO}from"./meeting-insights.js";import{demd as ZO,NOTE_SECTIONS as $O,noteSectionKind as eI,MOMENT_BADGES as rI,momentBadge as oI,parseMeetingNotes as tI,groupActionsByOwner as aI}from"./meeting-insights.js";import{PREF_SECTIONS as nI,PREF_SECTION_IDS as sI,sectionValue as SI,pickSections as EI,applySections as lI,sectionHash as TI,mergeStamped as mI,changedSections as cI}from"./client-prefs.js";import{McpClient as _I,mcpProvider as dI}from"./mcp-client.js";import{mcpSharedSystem as RI,mcpInventorySystem as fI,sourceCitationSystem as OI,combineSystemPrompt as II,toolStatus as NI,widgetAuthoringSystem as uI,vaultWidgetSystem as MI,wantsVaultGuidance as gI}from"./tool-hints.js";import{adaptiveToolRetryHint as LI,createAdaptiveToolPolicy as PI,isInvalidToolParametersResult as xI}from"./adaptive-tool-policy.js";import{getMcpProviders as FI,testMcpServer as hI,resetMcp as yI,mcpBackoff as kI}from"./mcp-manager.js";import{SIDELINE_COMMANDS as bI,BRINGBACK_COMMAND as vI,THREAD_TOOL_NAME as GI,SIDELINE_SLASH_ITEMS as KI,THREAD_TOOL_SPEC as BI,parseSideline as HI,parseBringBack as wI,resolveSidelineTarget as VI,threadManifest as XI,threadToolProvider as WI,readThread as JI,briefPrompt as YI,foldBackNote as zI,foldNotes as jI,nextSidelineIndex as QI,sourceOf as qI,noteUnits as ZI,sidelinePath as $I,foldBackFor as eN,SIDELINE_TOOL_NAME as rN,SIDELINE_TOOL_SPEC as oN,sidelineToolProvider as tN}from"./sideline.js";import{WEATHER_TOOL_NAME as iN,WEATHER_TOOL_SYSTEM as nN,weatherToolProvider as sN}from"./weather-tool.js";import{renderContent as EN,toChatMessages as lN,toMultimodalMessages as TN,imageAttachmentsOf as mN,deferAttachedSources as cN,withSourceTool as pN,SOURCE_TOOL_SPEC as _N}from"./context-attachments.js";import{prefetchPlan as AN,prefetchAttachment as RN,weatherPlace as fN,weatherFollowupPlace as ON}from"./prefetch.js";import{createFetchedStore as NN,withFetchedMemo as uN,fetchKey as MN,fetchTitle as gN,fetchedAsSources as CN,fetchedFacts as LN,defaultTtl as PN,FETCHED_TTL_MS as xN}from"./fetched.js";import{presenceFor as FN,presenceDelta as hN,reachOf as yN,withPresence as kN,presenceBlock as UN,roundCount as bN,roundMinutes as vN,PRESENCE_BUDGET_TOKENS as GN,PRESENCE_KINDS as KN}from"./presence.js";import{PolicyError as HN,POLICY_VERSION as wN,POLICY_TOKEN_TYPE as VN,REDACTION_TIERS as XN,LOCKABLE as WN,FEATURES as JN,PERMISSION_MODES as YN,PRODUCT_HOSTS as zN,normalizeOrgPolicy as jN,endpointAllowed as QN,modelAllowed as qN,agentAllowed as ZN,permissionMode as $N,routeAllowed as eu,redactionTier as ru,egressAllowed as ou,settingLocked as tu,featureEnabled as au,applyPolicyToSettings as iu,policyLabel as nu,policyHash as su,verifyPolicyToken as Su,globToRegExp as Eu}from"./policy.js";export{aa as ACCESS_LOG_MAX,ta as ACCESS_LOG_VERSION,i as ACTOR_KINDS,ec as AGENT_ID_RE,Dl as AGENT_REF_RE,X_ as ALLOW_ALL,a as ALL_TYPES,Td as AMBIENT_KINDS,Qf as API_BASE,rc as APPLIES_TO,rT as ASK_TYPES,tc as ASSISTANT_ID,yA as AUTOCOMPLETE_MAX_TOKENS,hA as AUTOCOMPLETE_SYSTEM,kA as AUTOCOMPLETE_TEMPERATURE,nm as AUTONOMY,da as AdapterError,ac as AgentError,In as AnalyzerError,ff as BACKUP_KDF_ITERATIONS,lT as BOARD_TOOL_NAME,vo as BRIEF_STATES,vI as BRINGBACK_COMMAND,pl as BUDGET_DIMENSIONS,rn as BUILTIN_TRIGGERS,Hn as BUILTIN_VOICE_INTENTS,Rf as BackupError,cl as BudgetError,On as CADENCES,Sm as CHECKS,Go as CLAIM_KINDS,s as CLASSES,sf as CLOCK_TOLERANCE_MS,Af as COMPRESSIONS,WE as COMPRESSION_MODES,MS as COOLDOWN_MS,aO as COUNTED,ke as COWRITER_SYSTEM,Ue as COWRITER_TEMPERATURE,o as CURRENT_VERSION,Gf as DARK,nd as DATA_SCOPES,gn as DAYPART_HOUR,Ic as DECLINE_REASONS,TT as DEFAULT_ASK_TIMEOUT_MS,_d as DEFAULT_BLOCK_CHARS,JE as DEFAULT_COMPRESSION,im as DEFAULT_GATE,ci as DEFAULT_INTERNAL_PATTERNS,Mi as DEFAULT_LOCK_MS,jS as DEFAULT_MAX_FINISH_TRIES,pd as DEFAULT_MAX_MEMORIES,zS as DEFAULT_MAX_ROUNDS,Jc as DEFAULT_MIN_CALLS,EE as DEFAULT_SHIELD,lE as DEFAULT_STORE,fo as DEFAULT_THRESHOLD,un as DEFAULT_WAKE,IE as DESCRIBE_ACTION,S as EFFECTS,E as EGRESS,oc as EGRESS_CLASSES,df as ENCRYPTED_TYPE,qf as ENDPOINTS,hr as ENGINE_KINDS,Xm as ENGINE_SPEC_KINDS,Os as ENTITIES_SCHEMA,Zf as ENTITLEMENT_PUBLIC_JWK,fs as ENTITY_TYPES,Pa as ENTRY_KINDS,t as EVENT_TYPES,Nm as EXECUTIVE,ZS as EXHAUSTED_NOTE,SO as EntitlementError,l as EventError,qa as FAILOVER_CAPABILITY_GAP,Qa as FAILOVER_CLASS_GAP,DS as FAILOVER_MAX_ATTEMPTS,JN as FEATURES,eO as FEATURE_TIER,xN as FETCHED_TTL_MS,ks as FIELD_TYPES,jl as FINDINGS_SCHEMA,Ql as FINDING_KINDS,AE as FIND_ACTION,FE as FIND_DESCRIPTION,hE as FIND_RESIDENT,DE as FIND_TOOL_NAME,QS as FINISH_NUDGES,tO as FREE_LIMITS,bA as GEARS,gA as GOAL_MIN_NEW,Ll as GRANTABLE,N_ as GRANT_INFO,xl as GRANT_RE,sm as HUMAN_FLAGS,OS as INPUT_PROGRESS_TOOLS,JO as INSIGHT_KINDS,uA as INSTRUCTION_RE,pi as INTERNAL_PATTERN_CATALOG,Or as INVARIANTS,Ji as JOB_ACTIONS,$T as JOB_POST_ID_RE,ZT as JOB_POST_STATUSES,qT as JobPostError,ui as KDF_HASH,Ni as KDF_ITERATIONS,w_ as KernelError,Oc as LEDGER_ENTRY_KINDS,fc as LEDGER_VERSION,vf as LIGHT,IT as LIVE_RUN_STATUSES,WN as LOCKABLE,qS as LOOPING_NUDGE,va as LOOP_KINDS,YR as LibraryError,Ga as LoopError,wo as MAX_BRIEF_CHARS,Ho as MAX_BRIEF_RECORDS,Ko as MAX_CLAIMS,Bo as MAX_CLAIM_REFS,Mn as MAX_COMMANDS_PER_DELTA,zp as MAX_DEPTH,xi as MAX_ENTRIES,it as MAX_EXCERPTS,nt as MAX_EXCERPT_CHARS,ue as MAX_GRAPH_NODES,um as MAX_JOBS_PER_ROUND,ad as MAX_MATCHES,md as MAX_MEMORY_CHARS,Li as MAX_NOTE_CHARS,Mm as MAX_ROUNDS,Pi as MAX_SECRET_CHARS,Oo as MAX_SUBJECTS,Io as MAX_SUBJECT_CHARS,Yp as MAX_SUBTASKS,Cs as MAX_SUGGESTIONS,Ls as MAX_SUGGESTION_CHARS,at as MAX_SYNTHESIS_CLAIMS,mR as MAX_TAGS,TR as MAX_TAG_LENGTH,Ci as MAX_TITLE_CHARS,JR as MAX_TITLE_LEN,FR as MAX_TITLE_LENGTH,Es as MAX_TOPICS,ls as MAX_TOPIC_CHARS,k_ as MCP_TOOL_NAME,Ed as MEMORY_KINDS,ld as MEMORY_KIND_NAMES,Ad as MEMORY_TOOL_SPEC,Rd as MEMORY_UPCASTERS,Sd as MEMORY_VERSION,gl as MERGE_POLICIES,xc as MIN_FIT,cd as MIN_MEMORY_CHARS,jp as MIN_TAKEUP_FIT,Yi as MISSED_POLICIES,rI as MOMENT_BADGES,v_ as ManifestError,_I as McpClient,fd as MemoryError,Ft as NEAR_TITLE_DISTANCE,b as NOTE_ACTIONS,K as NOTE_ACTION_ERRORS,v as NOTE_ACTION_ORDER,G as NOTE_ACTION_TEMPERATURE,B as NOTE_COMMANDS,w as NOTE_COMMAND_MAX_TOKENS,H as NOTE_COMMAND_TEMPERATURE,$O as NOTE_SECTIONS,fS as OBSERVATION_TOOLS,xf as OMNI_GRAMMAR,Pf as OMNI_MODES,Kf as PALETTES,SS as PARALLEL_LOCAL_RE,kt as PDF_MAX_CHARS,YN as PERMISSION_MODES,jf as PLANS,Je as PLAN_AUTHORS,ze as PLAN_DECOMPOSE_MAX_TOKENS,Ye as PLAN_DECOMPOSE_SYSTEM,je as PLAN_DECOMPOSE_TEMPERATURE,Cl as PLAN_MODES,We as PLAN_ROLES,Qe as PLAN_SECTION_MAX_TOKENS,qe as PLAN_SECTION_TEMPERATURE,VN as POLICY_TOKEN_TYPE,wN as POLICY_VERSION,$l as POST_KINDS,eT as POST_STATUSES,nI as PREF_SECTIONS,sI as PREF_SECTION_IDS,GN as PRESENCE_BUDGET_TOKENS,KN as PRESENCE_KINDS,zN as PRODUCT_HOSTS,BT as PROJECT_ID_RE,fm as PROJECT_JOBS_SCHEMA,Om as PROJECT_REVIEW_SCHEMA,gm as PROJECT_RUN_STATUSES,KT as PROJECT_STATUSES,St as PROPOSAL_STATES,rO as PRO_FEATURES,HN as PolicyError,GT as ProjectError,Im as ProjectRunError,ir as REACH,sO as RECHECK_INTERVAL_MS,ol as RECIPE_MODES,sl as RECIPE_TOOL_NAME,wm as RECORD_ENGINE_KINDS,WR as RECORD_KINDS,Pc as RECRUIT_SCHEMA,XN as REDACTION_TIERS,Do as REDACTION_TOKEN_TYPES,Yn as REFINEMENT_SCHEMA,_ as REF_KINDS,Lr as REGISTRY_STATES,V_ as REQUIRED_PLUGINS,d as RESOLUTION,Us as RESPONSE_MODES,_e as RESULTS_PER_ENGINE,SE as RESULT_TOOL_NAME,NT as RESUMABLE_RUN_STATUSES,Ia as RETRIEVAL_TOOLS,Bm as ROLE_KINDS,Ml as ROLE_MODES,g_ as ROSTER_KINDS,$S as ROUND_SEPARATOR,Wm as ROUTE_PREFERS,up as RUN_STATUSES,rl as RecipeError,$a as RouterError,fi as RuleError,dd as SAME_FACT,Xi as SCHEDULE_KINDS,Qc as SCM_KINDS,n as SCOPE_KINDS,Km as SCORECARD_ENTRY_KINDS,Hm as SCORECARD_VERSION,pe as SEARCH_ENGINES,ho as SELF_LABELS,Bf as SHAPE,bI as SIDELINE_COMMANDS,KI as SIDELINE_SLASH_ITEMS,rN as SIDELINE_TOOL_NAME,oN as SIDELINE_TOOL_SPEC,wd as SKILL_CONTEXTS,Jd as SKILL_FILE_KINDS,Vd as SKILL_HISTORY_SCOPES,Hd as SKILL_MANIFEST_VERSION,Xd as SKILL_MCP_MODES,Wd as SKILL_TRUST,Yd as SKILL_UPCASTERS,EA as SKILL_VARS,lA as SKILL_VAR_NAMES,wA as SLASH_TYPING_RE,u_ as SOLO_BUDGET,GO as SORT_LABELS,vO as SORT_MODES,G_ as SOURCES,_N as SOURCE_TOOL_SPEC,bd as SOURCE_TRUST,ht as SPAN_MIN_TERMS,hO as SPEAKER_SLOTS,LT as STALLED_AFTER_MS,cc as STARTER_AGENTS,Fl as STARTER_TEAMS,_p as STEP_MAX_CHARS,Ro as SUBJECT_KINDS,Ps as SUGGESTIONS_SCHEMA,Et as SUPERSEDE_OVERLAP,Ri as SUPPRESSED,se as SWARM_ROLES,rt as SYNTHESIS_SCHEMA,zi as ScheduleError,yr as SearchEngineError,zd as SkillManifestError,vd as SkillSourceError,fA as SkillVarError,bs as StructuredError,Sf as SyncError,dp as TASK_TRANSCRIPT_MAX_CHARS,oO as TEAM_FEATURES,Dp as TEAM_MANUAL,wl as TEAM_PLAN_SCHEMA,M_ as TEAM_SHAPES,xp as TEAM_TOOL_NAME,bf as THEMES,ql as THREAD_KINDS,Zl as THREAD_STATUSES,GI as THREAD_TOOL_NAME,BI as THREAD_TOOL_SPEC,hR as TITLE_RULES_VERSION,Hf as TOKEN_NAMES,wf as TOKEN_ROLES,Ts as TOPICS_SCHEMA,Vt as TRANSCRIPT_MAX_CHARS,Wi as TRIGGER_KINDS,ul as TeamError,Np as TeamRunError,Yr as ToolGroupError,gS as UNAVAILABLE_REASONS,DR as UNTITLED_MEETING,Er as UPCASTERS,$f as UPGRADE_URL,ss as UTTERANCE_DANGLING_MS,ns as UTTERANCE_SETTLE_MS,Ii as VAULT_VERSION,gi as VaultError,Cn as VoiceIntentError,Hr as WEATHER_HOST,wr as WEATHER_TIMEOUT_MS,iN as WEATHER_TOOL_NAME,nN as WEATHER_TOOL_SYSTEM,vE as WEB_SEARCH_SPEC,UE as WEB_SEARCH_TOOL_NAME,bE as WEB_SEARCH_TOOL_SYSTEM,To as WIDGET_SURFACES,Nc as WITHDRAW_AFTER,bp as WORKLOG_KINDS,Pl as WORK_GRANTS,vA as WRITER_PREFS,GA as WRITER_PREF_DEFAULTS,Vr as WeatherError,wt as YOUTUBE_HOSTS,Tt as accept,NE as actionMenu,LI as adaptiveToolRetryHint,dR as addTag,XS as addUsage,Um as adjustSummary,pf as advanceBases,ZN as agentAllowed,l_ as agentColor,dc as agentFromForm,E_ as agentHue,T_ as agentInitials,S_ as agentKind,q as agentMentionAt,Co as aliasMap,YS as anthropicTranscript,JT as applyAll,zc as applyCard,ye as applyEdits,iu as applyPolicyToSettings,lI as applySections,Te as appoint,Kr as areaLabel,Sc as assistantAgent,Fr as attemptOrder,Fm as attest,rS as bareToolName,Cf as bestCodec,_c as blankAgent,ip as blankConnection,jT as blankJobPost,yT as blankProject,yl as blankTeam,RS as blockedToolResult,Jl as boardText,nT as boardToolProvider,sT as boardToolSpec,rp as branchFor,Hl as breakCycles,Xo as briefId,Yo as briefLinks,YI as briefPrompt,Jo as briefTerms,Wo as briefToText,uE as buildGroupDispatchSpec,Me as buildNoteGraph,Bt as buildPdfDocument,de as buildSearchUrl,fE as buildToolset,ua as buildTrajectory,ea as buildTranscriptDocument,A_ as builtinOrg,pO as can,Bi as canAddEntry,WT as canJobPostTransition,hT as canProjectTransition,oS as canRunConcurrently,_r as canSatisfy,Cd as candidatesFrom,Lm as canonical,Jt as captionTracksFromPlayerResponse,c_ as cardNumbers,Yc as cardOverride,wc as carveBudget,u as causesAreWellFormed,cI as changedSections,fr as checkInvariants,zo as checkKnowledgeInvariants,EO as checkoutUrl,fT as checkpointFrom,tt as claimsFromSynthesis,NS as classifyFailure,Ee as classifyModel,si as classifySource,yR as cleanTitle,UA as clipCompletion,Tp as clipMessage,_n as clipText,lp as clipTranscript,Js as coerce,Ms as coerceEntities,II as combineSystemPrompt,Y as commandLineAt,ts as commandLooksFinished,Dn as commandsFromSegments,nE as compactValue,N as compareEvents,q_ as compileQuery,Ln as compileWake,HE as compressToolSpec,wE as compressToolSpecs,VE as compressionStats,ep as connectionFor,np as connectionFromForm,gd as containment,Vo as contentHash,cp as continuationNote,oR as continueList,pt as converge,sa as createAccessLog,_a as createAdapterRegistry,PI as createAdaptiveToolPolicy,fn as createAnalyzerRegistry,ST as createAnswerBox,c as createAppender,Mr as createBlobStore,Xl as createBoard,El as createBudget,KS as createCallRunner,Oa as createCitationCollector,pp as createControl,NN as createFetchedStore,B_ as createKernel,ur as createLogStore,b_ as createManifest,Nr as createMemoryAdapter,uS as createModelHealth,Va as createModelRouter,Cr as createRegistry,rE as createResultStore,Ai as createRuleEngine,cT as createRunCache,Kd as createSkillSourceRegistry,LA as createSpendMeter,zs as createStructuredStream,Jr as createToolGroupRegistry,cS as createToolLoopGuard,en as createTriggerRegistry,Ua as createTurnRunner,is as createUtteranceGate,Di as createVault,Kn as createVoiceIntentRegistry,tp as credentialEnv,Xf as cssVarName,wO as dayBucket,lf as decide,Gc as decideRecruit,eA as declaredAccess,If as decryptBackup,uO as defaultLinkPolicy,y as defaultModelId,PN as defaultTtl,Bn as defaultVoiceIntents,cN as deferAttachedSources,pa as defineAdapter,sc as defineAgent,Tn as defineJob,XT as defineJobPost,ba as defineLoop,Rn as defineMeetingAnalyzer,Ha as defineMiddleware,Ba as defineModel,FT as defineProject,wa as defineRouteStrategy,di as defineRule,vs as defineSchema,xr as defineSearchEngine,Gd as defineSkillSource,dl as defineTeam,Wr as defineToolGroup,$i as defineTrigger,Gn as defineVoiceIntent,ZO as demd,LO as densityRibbon,L as dequeue,qo as deriveBrief,Zo as deriveBriefs,hi as deriveKey,KR as deriveMeetingTitle,of as deriveTitle,lc as describeAgent,Up as describeCall,ap as describeConnection,qm as describeEngine,nl as describeRecipeForApproval,Nl as describeRole,Gs as describeSchema,iE as describeShape,MT as describeSpend,Pp as describeTeamForApproval,i_ as describeTeamShape,wS as describeToolCall,ct as diffProposal,La as displayName,SR as docStats,xA as draftSeparator,$o as driftedRefs,ZE as dryRunRecipe,Op as dryRunTeam,mn as dueJobs,Mt as duplicateTitles,Po as earnsBrief,vn as editDistance,he as editKey,tm as effectiveGate,Eo as effectiveGrants,nS as effectiveToolName,ge as egoGraph,ou as egressAllowed,oT as emptyBoardState,UT as emptyProjectRecord,dT as emptyRun,VA as enabledSkills,Of as encryptBackup,QN as endpointAllowed,vm as engineKey,Qm as engineKeyOf,Ec as engineOf,Ie as engineOrder,jm as engineRef,Dc as engineRow,Fc as engineRows,F_ as engineStrip,kc as engineWorth,Ns as entitiesFormat,Is as entitiesPrompt,gs as entitiesStream,bi as entryMeta,qr as equipmentFor,PE as estimateTokens,bc as evaluatorPrompt,jE as expandRecipe,ed as expandReplacement,AA as expandSkillPrompt,Qs as explainMcpError,Xp as extendDependents,Ff as extractFilters,Si as extractUrls,xS as failoverExhausted,za as failoverOrder,au as featureEnabled,MN as fetchKey,gN as fetchTitle,CN as fetchedAsSources,LN as fetchedFacts,gR as filterByTags,Ca as filterEntries,J as filterNoteActions,HO as filterRecords,h as filterSections,Fe as filterTypoEdits,pE as findActionArgs,yE as findDispatchProvider,ws as findJson,Z_ as findMatches,ee as findSkillByName,re as findTargetByName,mE as findTools,cE as findToolsResult,Pn as findWakeCommand,Yl as findingsInstruction,aT as findingsOf,km as fit,vl as fixedPlan,eN as foldBackFor,zI as foldBackNote,tT as foldBoard,jI as foldNotes,bT as foldProject,AT as foldRun,cf as forkConflict,Ea as formatBytes,Y_ as formatReport,Dt as formatSurvey,OR as formatTag,uR as formatTagQuery,FO as formatTalkTime,Zt as formatTimestamp,$t as formatTranscript,Gr as formatWeather,V as frameNoteAction,iO as freeCap,wi as fromB64,co as fuseRRF,am as gateAllows,FI as getMcpProviders,Ur as getWeather,os as gistOpening,rs as gistText,Eu as globToRegExp,CA as goalDraftAllowed,Ol as grantAllows,f_ as grantChoices,O_ as grantsFromChoices,Qr as grantsNeededFor,Le as graphStats,DA as groundingBlock,aI as groupActionsByOwner,F as groupModels,XO as groupRecords,qt as groupSegments,QO as hasInsights,_R as hasTag,NR as hasTagTerms,wp as holdsGrants,Ei as hostMatches,uf as identityCodec,mN as imageAttachmentsOf,tR as indentSelection,zO as insightKindOf,MA as instructionOnLine,kf as isActionable,Br as isAmbiguousLocation,HR as isBetterTitleSource,R_ as isBuiltin,tS as isCacheable,Nf as isEncryptedBackup,es as isFillerSentence,kR as isGenericTitle,xI as isInvalidToolParametersResult,Gi as isLocked,AS as isLoopableTool,Ip as isModelUnavailable,Ws as isNothing,mO as isPro,C as isQueued,QR as isRecordId,Fo as isRedactionToken,R as isRef,Re as isResultHost,OT as isResumable,jd as isSafeSkillPath,yo as isSelfLabel,mf as isSettled,US as isSourceGateError,kO as isSpeakerImageValue,Zs as isStaleMcpSession,go as isSubjectCandidate,cO as isTeam,m as isValidEvent,Id as isValidMemory,ZR as isValidStoredRecord,Wt as isYouTubeUrl,Uc as jobApplications,Vp as jobFromSubtask,QT as jobPostFromForm,cm as jobResults,YT as jobToRole,cn as jobsForEvent,Am as jobsPrompt,ga as lanesOf,eo as layoutFlowchart,uc as ledgerKey,fO as licenseFromPayload,IA as lineAt,I as linearize,Ut as linesFromItems,_t as linkClaims,Ra as linkifyCitations,pA as lintSkillPrompt,xe as lintText,Ki as lockedSummary,Kt as looksScanned,na as makeAccessEvent,LE as makeDispatchProvider,xm as makeEntry,gE as makeGroupDispatchExecutor,gc as makeLedgerEntry,jR as makeRecordId,A as makeRef,ri as makeSourceStore,Sa as makeStorageTier,oi as manifestText,qE as mapInput,Fd as markUsed,Pd as matchForForget,$_ as matchIndexFor,JA as matchSlashRecipe,WA as matchSlashSkill,zA as matchSlashTeam,dn as matchSummary,MR as matchesTagFilter,kI as mcpBackoff,y_ as mcpDispatchProvider,fI as mcpInventorySystem,dI as mcpProvider,RI as mcpSharedSystem,H_ as meetDecisions,li as meetReach,an as meetingEndedTrigger,jO as meetingInsights,tn as meetingStartedTrigger,wR as meetingTitlePrompt,Dd as memoryBlock,Nd as memoryKey,yd as memoryToolSystem,oe as mentionAnswerPrefix,Ct as mentionsFrom,Oe as mergeEngineResults,Ve as mergeResearchLanes,$ as mergeSkillPrompt,mI as mergeStamped,Ep as mergeTranscript,Sp as messagesFor,o_ as missingStarters,qN as modelAllowed,k as modelSummary,oI as momentBadge,Jn as monitorIntent,P as moveQueued,_o as multiSearch,hc as needForJob,$d as needsBridge,aS as needsConfirmation,OO as needsRecheck,mp as newSteps,Qi as nextFireAt,QI as nextSidelineIndex,Zi as nextWakeAt,gf as nodeCodec,CS as normModelName,nc as normalizeAgent,Tl as normalizeBudget,Mc as normalizeCall,Zc as normalizeConnection,bm as normalizeEngine,Ym as normalizeEngineSpec,om as normalizeGate,fl as normalizeGrants,BA as normalizeIntent,VT as normalizeJobPost,Od as normalizeMemory,jN as normalizeOrgPolicy,Jm as normalizePolicy,DT as normalizeProject,At as normalizeRecord,Rt as normalizeRecords,Gp as normalizeRequest,Gm as normalizeScm,sA as normalizeSkill,Un as normalizeSpeech,qR as normalizeStoredRecord,No as normalizeSubject,cR as normalizeTag,pR as normalizeTags,Rl as normalizeTeam,ds as normalizeTopic,As as normalizeTopics,WS as normalizeUsage,KA as normalizeWriterPrefs,W as noteActionItems,X as noteActionLabel,Wn as noteIntent,eI as noteSectionKind,ZI as noteUnits,L_ as observeInbox,nO as observeSince,P_ as observeStrip,pn as occurrenceKey,qi as occurrencesBetween,_E as oneLiner,JS as openAiTranscript,ki as openEntry,bt as orderLines,rA as originLabel,Qd as originOf,ut as orphanRecords,eR as outlineOf,dE as overlapRank,qs as packageFromArgs,Gt as pageTextFromItems,Vf as paletteFor,vt as paragraphsFromLines,sS as parallelEligible,Q as parseAgentMention,jo as parseBriefText,wI as parseBringBack,hn as parseClock,xn as parseCommand,Fn as parseDuration,us as parseEntities,vc as parseEvaluation,Wl as parseFindings,$r as parseFlowchart,_m as parseJobs,z_ as parseJsonl,rR as parseListItem,tI as parseMeetingNotes,gO as parseMeetingText,kn as parseNumberWords,Df as parseOmni,Gl as parsePlan,$e as parsePlanTasks,zR as parseRecordId,Qn as parseRefinement,$c as parseRemote,dm as parseReview,HI as parseSideline,Z as parseSkillMention,cA as parseSkillVars,Ys as parseStructured,Fs as parseSuggestions,IR as parseTagQuery,Qt as parseTimedText,VR as parseTitleResponse,_s as parseTopics,vr as parseWeather,yn as parseWhen,Xt as parseYouTubeUrl,g as pendingQueue,$N as permissionMode,nn as personJoinedTrigger,Ma as phasesOf,sn as phraseTrigger,zt as pickCaptionTrack,fe as pickResults,EI as pickSections,ja as pinnedOrderOf,tr as planAttribution,or as planBody,TO as planLabel,lO as planOf,rr as planParts,po as planQueries,Ze as planSectionSystem,Tf as planSync,er as planTitleFor,lS as planToolRound,Kl as plannerPrompt,su as policyHash,nu as policyLabel,Ac as poolFor,Ya as preferenceFor,RN as prefetchAttachment,AN as prefetchPlan,UN as presenceBlock,hN as presenceDelta,FN as presenceFor,CT as priorWorkFor,ma as projectChain,kT as projectFromForm,vT as projectProgress,x as promoteQueued,e_ as promoteRoles,Fa as promptEntries,Bc as proposalFromNeeds,Hc as proposalToAgent,lt as propose,hd as pruneMemories,En as questionTrigger,ie as rankLinkTargets,we as rankResearchCards,xo as rankSubjects,yN as reachOf,nr as reachRank,sr as reachSatisfies,ai as readSource,JI as readThread,zT as readyJobs,xd as recall,YA as recipeInvocationText,QE as recipeParams,al as recipeToolProvider,il as recipeToolSpec,Ld as reconcile,Dr as reconcileEngines,Vc as recruitEvents,Kc as recruitForRun,Xc as recruitJob,ia as redactAccessArgs,Ot as redactedTokensIn,It as redactionCost,ru as redactionTier,$n as refineSpokenCommand,jn as refinementFormat,zn as refinementPrompt,qn as refinementStream,mt as reject,Vn as reminderIntent,AR as removeTag,EN as renderContent,ro as renderFlowchartSvg,NO as renderMarkdown,Xs as repairJson,od as replaceAll,td as replaceAllInRange,rd as replaceMatch,J_ as replay,Wa as requirementsFor,Ja as requirementsForStep,Ke as researchRelevance,He as researchSnippet,yI as resetMcp,f as resolveRef,VI as resolveSidelineTarget,hf as resolveSince,Lo as resolveSubjects,mc as resolveTeam,Yf as resolveTheme,Bs as responseFormat,sE as resultToolSpec,fp as resumeTeam,Rm as reviewPrompt,Vs as rewriteJson,Se as roleById,m_ as roleCardId,s_ as rosterRows,pm as roundBudget,BS as roundCap,bN as roundCount,Tm as roundJobs,vN as roundMinutes,pS as roundSignature,eu as routeAllowed,yc as routeFor,Ta as routeGraph,me as routeTeam,VO as rowTime,RT as runFromEvents,x_ as runLanes,$E as runPlan,lm as runProject,el as runRecipe,tE as runResultQuery,gT as runState,Rp as runTeam,TS as runToolRound,GS as runTurnLoop,PS as runWithFailover,ve as salientTerms,Za as sameModelKey,oA as sameSkillOrigin,fR as sameTags,as as sameUtterance,Xn as scheduleIntent,Il as scmAllows,yi as sealEntry,vi as searchEntries,GE as searchResultsToText,ef as searchTextFor,TI as sectionHash,SI as sectionValue,ER as selectionStats,tu as settingLocked,Zn as settleRefinement,Pm as sha256,oE as shieldToolResult,ti as shortUrl,BR as shouldAutoTitle,$I as sidelinePath,tN as sidelineToolProvider,Xa as signalsFrom,Md as similarity,I_ as skillChoices,Zd as skillFiles,ZA as skillInvocationLabel,qA as skillInvocationOf,tA as skillIsStale,TA as skillVar,RA as skillVarGuidance,mA as skillVarPattern,QA as slashCommandInsert,XA as slashCommandItems,ud as slotOf,Tc as slugAgentId,Ul as slugTeamName,tf as snippetOf,__ as soloTeam,BO as sortRecords,KO as sortStamp,OI as sourceCitationSystem,kS as sourceGate,yS as sourceGuardFor,ii as sourceId,qI as sourceOf,Ti as sourcePolicyFor,hS as sourcePolicySettings,mi as sourceUrlsOf,fa as sourcesFromToolText,Lt as spanningQuestions,xO as speakerBreakdown,UO as speakerLabeller,CO as speakerStats,DO as speakerTimeline,uT as spendOf,D_ as spendRows,_S as stableToolCallKey,Ef as stampOf,pc as starterAgents,r_ as starterTeam,hl as starterTeams,VS as stepResultText,Mf as streamCodec,ko as stripQualifiers,uo as subjectKey,Mo as subjectTokens,dA as substituteSkillVars,Kp as subtaskFromRequest,LR as suggestExistingTags,Uo as suggestMerges,_A as suggestSkillVar,Ds as suggestionsFormat,xs as suggestionsPrompt,hs as suggestionsStream,ym as summarize,Cc as summarizeEngine,YO as summarySections,le as supportsSubagents,Pt as surveyCorpus,ot as synthesisPrompt,CR as tagFacets,PR as tagsSearchText,Bp as takeUp,Hp as takeUpLine,Wp as taskTree,mm as teamForRound,kl as teamFromForm,t_ as teamHealth,jA as teamInvocationText,Zp as teamLanes,qp as teamLine,a_ as teamShape,gp as teamToolProvider,Cp as teamToolSpec,Lp as teamToolTimeoutMs,d_ as teamsWithSolos,hI as testMcpServer,Jf as themeStylesheet,XI as threadManifest,Jp as threadRows,Da as threadTitle,WI as threadToolProvider,ya as threadTree,xa as threadsOf,xt as thresholdSweep,_O as tierFor,Zm as tierOf,jt as timedTextUrl,wn as timerIntent,on as timerTrigger,GR as titleFromDate,vR as titleFromParticipants,UR as titleFromSummary,bR as titleFromTopics,Hi as toB64,zl as toBriefClaims,lN as toChatMessages,Wf as toCssVars,rf as toIndexEntry,Ks as toJsonSchema,j_ as toJsonl,dr as toModelSchema,Ar as toModelSchemas,TN as toMultimodalMessages,$R as toSearchRecord,iR as toggleLinePrefix,sR as toggleLink,RR as toggleTag,nR as toggleTask,aR as toggleWrap,bn as tokenize,dS as toolMadeProgress,jr as toolNeedFor,NI as toolStatus,eS as toolTraits,Ge as topicTerms,Sn as topicTrigger,ps as topicsFormat,cs as topicsPrompt,ms as topicsSchema,Rs as topicsStream,iS as traitsIndex,ra as transcriptFromTracks,z as triggerQueryAt,XE as trimDescription,Ce as trimGraph,qd as trustOf,ha as turnsOf,Hs as unfence,Fi as unlockVault,Ae as unwrapRedirect,lr as upcast,Tr as upcastAll,kd as upcastMemory,iA as upcastSkill,nA as upcastSkills,p_ as upsertAgents,ml as usageOf,ME as validateAction,ic as validateAgent,ll as validateBudget,cr as validateCapability,qc as validateConnection,zm as validateEngineSpec,Ui as validateEntry,T as validateEvent,rm as validateGate,pr as validateInvocation,wT as validateJobPost,xT as validateProject,zE as validateRecipe,ji as validateSchedule,aA as validateSkill,Al as validateTeam,to as validateView,ao as validateViewInvocation,so as validateWidget,So as validateWidgetMessage,MI as vaultWidgetSystem,hm as verifyAttested,Dm as verifyChain,AO as verifyEntitlement,Su as verifyPolicyToken,RO as verifySignedToken,Yt as videoMetaFromPlayerResponse,io as viewResult,gt as vocabularyDrift,ln as voiceCommandTrigger,Nt as wantedPages,yf as wantsModel,gI as wantsVaultGuidance,Bl as waves,ON as weatherFollowupPlace,fN as weatherPlace,sN as weatherToolProvider,br as weatherUrl,Be as webQuery,KE as webSearchToolProvider,n_ as whereItWorks,uI as widgetAuthoringSystem,lo as widgetIcon,ae as wikiQueryAt,ft as wikilinksIn,ET as withBoardTool,uN as withFetchedMemo,CE as withGuidance,kN as withPresence,aE as withResultShield,pT as withRunCache,pN as withSourceTool,HS as withToolSystem,dO as withinFreeLimit,bS as withinReach,af as wordCount,De as wordDiff,kp as workLogEvidence,hp as workLogFor,yp as workLogText,op as worktreeDirFor,NA as writerAffordance,FA as writerRequest,PA as writerTail};
1
+ import{CURRENT_VERSION as o,EVENT_TYPES as t,ALL_TYPES as a,ACTOR_KINDS as i,SCOPE_KINDS as n,CLASSES as s,EFFECTS as S,EGRESS as E,EventError as l,validateEvent as T,isValidEvent as m,createAppender as c}from"./event.js";import{REF_KINDS as _,RESOLUTION as d,makeRef as A,isRef as R,resolveRef as f}from"./ref.js";import{linearize as I,compareEvents as N,causesAreWellFormed as u}from"./order.js";import{pendingQueue as g,isQueued as C,dequeue as L,moveQueued as P,promoteQueued as x}from"./queue.js";import{groupModels as F,filterSections as h,defaultModelId as y,modelSummary as k}from"./model-picker.js";import{NOTE_ACTIONS as b,NOTE_ACTION_ORDER as v,NOTE_ACTION_TEMPERATURE as G,NOTE_ACTION_ERRORS as B,NOTE_COMMANDS as K,NOTE_COMMAND_TEMPERATURE as H,NOTE_COMMAND_MAX_TOKENS as w,frameNoteAction as V,noteActionLabel as X,noteActionItems as W,filterNoteActions as J,commandLineAt as Y,triggerQueryAt as z}from"./note-actions.js";import{parseAgentMention as Q,agentMentionAt as q,parseSkillMention as Z,mergeSkillPrompt as $,findSkillByName as ee,findTargetByName as re,mentionAnswerPrefix as oe}from"./note-mentions.js";import{wikiQueryAt as ae,rankLinkTargets as ie}from"./note-links.js";import{SWARM_ROLES as se,roleById as Se,classifyModel as Ee,supportsSubagents as le,appoint as Te,routeTeam as me}from"./cowriter-router.js";import{SEARCH_ENGINES as pe,RESULTS_PER_ENGINE as _e,buildSearchUrl as de,unwrapRedirect as Ae,isResultHost as Re,pickResults as fe,mergeEngineResults as Oe,engineOrder as Ie}from"./web-search.js";import{MAX_GRAPH_NODES as ue,buildNoteGraph as Me,egoGraph as ge,trimGraph as Ce,graphStats as Le}from"./note-graph.js";import{lintText as xe,wordDiff as De,filterTypoEdits as Fe,editKey as he,applyEdits as ye,COWRITER_SYSTEM as ke,COWRITER_TEMPERATURE as Ue}from"./cowriter.js";import{salientTerms as ve,topicTerms as Ge,researchRelevance as Be,webQuery as Ke,researchSnippet as He,rankResearchCards as we,mergeResearchLanes as Ve}from"./note-research.js";import{PLAN_ROLES as We,PLAN_AUTHORS as Je,PLAN_DECOMPOSE_SYSTEM as Ye,PLAN_DECOMPOSE_MAX_TOKENS as ze,PLAN_DECOMPOSE_TEMPERATURE as je,PLAN_SECTION_MAX_TOKENS as Qe,PLAN_SECTION_TEMPERATURE as qe,planSectionSystem as Ze,parsePlanTasks as $e,planTitleFor as er,planParts as rr,planBody as or,planAttribution as tr}from"./note-plan.js";import{REACH as ir,reachRank as nr,reachSatisfies as sr}from"./reach.js";import{UPCASTERS as Er,upcast as lr,upcastAll as Tr}from"./upcast.js";import{validateCapability as cr,validateInvocation as pr,canSatisfy as _r,toModelSchema as dr,toModelSchemas as Ar}from"./capability.js";import{checkInvariants as fr,INVARIANTS as Or}from"./invariants.js";import{createMemoryAdapter as Nr,createLogStore as ur,createBlobStore as Mr}from"./store.js";import{createRegistry as Cr,REGISTRY_STATES as Lr}from"./registry.js";import{defineSearchEngine as xr,reconcileEngines as Dr,attemptOrder as Fr,ENGINE_KINDS as hr,SearchEngineError as yr}from"./search-engines.js";import{getWeather as Ur,weatherUrl as br,parseWeather as vr,formatWeather as Gr,areaLabel as Br,isAmbiguousLocation as Kr,WEATHER_HOST as Hr,WEATHER_TIMEOUT_MS as wr,WeatherError as Vr}from"./weather.js";import{defineToolGroup as Wr,createToolGroupRegistry as Jr,ToolGroupError as Yr}from"./tool-groups.js";import{toolNeedFor as jr,grantsNeededFor as Qr,equipmentFor as qr}from"./tool-need.js";import{parseFlowchart as $r,layoutFlowchart as eo,renderFlowchartSvg as ro}from"./flowchart.js";import{validateView as to,validateViewInvocation as ao,viewResult as io}from"./view.js";import{validateWidget as so,validateWidgetMessage as So,effectiveGrants as Eo,widgetIcon as lo,WIDGET_SURFACES as To}from"./widget.js";import{fuseRRF as co,planQueries as po,multiSearch as _o}from"./rrf.js";import{SUBJECT_KINDS as Ro,DEFAULT_THRESHOLD as fo,MAX_SUBJECTS as Oo,MAX_SUBJECT_CHARS as Io,normalizeSubject as No,subjectKey as uo,subjectTokens as Mo,isSubjectCandidate as go,aliasMap as Co,resolveSubjects as Lo,earnsBrief as Po,rankSubjects as xo,REDACTION_TOKEN_TYPES as Do,isRedactionToken as Fo,SELF_LABELS as ho,isSelfLabel as yo,stripQualifiers as ko,suggestMerges as Uo}from"./entity.js";import{BRIEF_STATES as vo,CLAIM_KINDS as Go,MAX_CLAIMS as Bo,MAX_CLAIM_REFS as Ko,MAX_BRIEF_RECORDS as Ho,MAX_BRIEF_CHARS as wo,contentHash as Vo,briefId as Xo,briefToText as Wo,briefTerms as Jo,briefLinks as Yo,checkKnowledgeInvariants as zo,parseBriefText as jo}from"./knowledge.js";import{deriveBrief as qo,deriveBriefs as Zo,driftedRefs as $o}from"./knowledge-derive.js";import{SYNTHESIS_SCHEMA as rt,synthesisPrompt as ot,claimsFromSynthesis as tt,MAX_SYNTHESIS_CLAIMS as at,MAX_EXCERPTS as it,MAX_EXCERPT_CHARS as nt}from"./synthesis.js";import{PROPOSAL_STATES as St,SUPERSEDE_OVERLAP as Et,propose as lt,accept as Tt,reject as mt,diffProposal as ct,converge as pt,linkClaims as _t}from"./promotion.js";import{normalizeRecord as At,normalizeRecords as Rt,wikilinksIn as ft,redactedTokensIn as Ot,redactionCost as It,wantedPages as Nt,orphanRecords as ut,duplicateTitles as Mt,vocabularyDrift as gt,mentionsFrom as Ct,spanningQuestions as Lt,surveyCorpus as Pt,thresholdSweep as xt,formatSurvey as Dt,NEAR_TITLE_DISTANCE as Ft,SPAN_MIN_TERMS as ht}from"./curate.js";import{PDF_MAX_CHARS as kt,linesFromItems as Ut,orderLines as bt,paragraphsFromLines as vt,pageTextFromItems as Gt,looksScanned as Bt,buildPdfDocument as Kt}from"./pdf-layout.js";import{YOUTUBE_HOSTS as wt,TRANSCRIPT_MAX_CHARS as Vt,parseYouTubeUrl as Xt,isYouTubeUrl as Wt,captionTracksFromPlayerResponse as Jt,videoMetaFromPlayerResponse as Yt,pickCaptionTrack as zt,timedTextUrl as jt,parseTimedText as Qt,groupSegments as qt,formatTimestamp as Zt,formatTranscript as $t,buildTranscriptDocument as ea,transcriptFromTracks as ra}from"./media-transcript.js";import{ACCESS_LOG_VERSION as ta,ACCESS_LOG_MAX as aa,redactAccessArgs as ia,makeAccessEvent as na,createAccessLog as sa,makeStorageTier as Sa,formatBytes as Ea}from"./observability.js";import{routeGraph as Ta,projectChain as ma}from"./route-graph.js";import{defineAdapter as pa,createAdapterRegistry as _a,AdapterError as da}from"./adapters.js";import{linkifyCitations as Ra,sourcesFromToolText as fa,createCitationCollector as Oa,RETRIEVAL_TOOLS as Ia}from"./citations.js";import{buildTrajectory as ua,phasesOf as Ma,lanesOf as ga,filterEntries as Ca,displayName as La,ENTRY_KINDS as Pa,threadsOf as xa,threadTitle as Da,promptEntries as Fa,turnsOf as ha,threadTree as ya}from"./trajectory.js";import{createTurnRunner as Ua,defineLoop as ba,LOOP_KINDS as va,LoopError as Ga}from"./loop.js";import{defineModel as Ka,defineMiddleware as Ha,defineRouteStrategy as wa,createModelRouter as Va,signalsFrom as Xa,requirementsFor as Wa,requirementsForStep as Ja,preferenceFor as Ya,failoverOrder as za,pinnedOrderOf as ja,FAILOVER_CLASS_GAP as Qa,FAILOVER_CAPABILITY_GAP as qa,sameModelKey as Za,RouterError as $a}from"./router.js";import{makeSourceStore as ri,manifestText as oi,shortUrl as ti,readSource as ai,sourceId as ii}from"./sources-retrieval.js";import{classifySource as si,extractUrls as Si,hostMatches as Ei,meetReach as li,sourcePolicyFor as Ti,sourceUrlsOf as mi,DEFAULT_INTERNAL_PATTERNS as ci,INTERNAL_PATTERN_CATALOG as pi}from"./sources.js";import{defineRule as di,createRuleEngine as Ai,SUPPRESSED as Ri,RuleError as fi}from"./rules.js";import{VAULT_VERSION as Ii,KDF_ITERATIONS as Ni,KDF_HASH as ui,DEFAULT_LOCK_MS as Mi,VaultError as gi,MAX_TITLE_CHARS as Ci,MAX_NOTE_CHARS as Li,MAX_SECRET_CHARS as Pi,MAX_ENTRIES as xi,createVault as Di,unlockVault as Fi,deriveKey as hi,sealEntry as yi,openEntry as ki,validateEntry as Ui,entryMeta as bi,searchEntries as vi,isLocked as Gi,lockedSummary as Bi,canAddEntry as Ki,toB64 as Hi,fromB64 as wi}from"./vault.js";import{SCHEDULE_KINDS as Xi,TRIGGER_KINDS as Wi,JOB_ACTIONS as Ji,MISSED_POLICIES as Yi,ScheduleError as zi,validateSchedule as ji,nextFireAt as Qi,occurrencesBetween as qi,nextWakeAt as Zi,defineTrigger as $i,createTriggerRegistry as en,BUILTIN_TRIGGERS as rn,timerTrigger as on,meetingStartedTrigger as tn,meetingEndedTrigger as an,personJoinedTrigger as nn,phraseTrigger as sn,topicTrigger as Sn,questionTrigger as En,voiceCommandTrigger as ln,defineJob as Tn,dueJobs as mn,jobsForEvent as cn,occurrenceKey as pn,clipText as _n,matchSummary as dn}from"./schedule.js";import{defineMeetingAnalyzer as Rn,createAnalyzerRegistry as fn,CADENCES as On,AnalyzerError as In}from"./meeting-analyzers.js";import{DEFAULT_WAKE as un,MAX_COMMANDS_PER_DELTA as Mn,DAYPART_HOUR as gn,VoiceIntentError as Cn,compileWake as Ln,findWakeCommand as Pn,parseCommand as xn,commandsFromSegments as Dn,parseDuration as Fn,parseClock as hn,parseWhen as yn,parseNumberWords as kn,normalizeSpeech as Un,tokenize as bn,editDistance as vn,defineVoiceIntent as Gn,createVoiceIntentRegistry as Bn,defaultVoiceIntents as Kn,BUILTIN_VOICE_INTENTS as Hn,timerIntent as wn,reminderIntent as Vn,scheduleIntent as Xn,noteIntent as Wn,monitorIntent as Jn,REFINEMENT_SCHEMA as Yn,refinementPrompt as zn,refinementFormat as jn,parseRefinement as Qn,refinementStream as qn,settleRefinement as Zn,refineSpokenCommand as $n,isFillerSentence as es,gistText as rs,gistOpening as os,commandLooksFinished as ts,sameUtterance as as,createUtteranceGate as is,UTTERANCE_SETTLE_MS as ns,UTTERANCE_DANGLING_MS as ss}from"./voice-intents.js";import{MAX_TOPICS as Es,MAX_TOPIC_CHARS as ls,TOPICS_SCHEMA as Ts,topicsSchema as ms,topicsPrompt as cs,topicsFormat as ps,parseTopics as _s,normalizeTopic as ds,normalizeTopics as As,topicsStream as Rs,ENTITY_TYPES as fs,ENTITIES_SCHEMA as Os,entitiesPrompt as Is,entitiesFormat as Ns,parseEntities as us,coerceEntities as Ms,entitiesStream as gs,MAX_SUGGESTIONS as Cs,MAX_SUGGESTION_CHARS as Ls,SUGGESTIONS_SCHEMA as Ps,suggestionsPrompt as xs,suggestionsFormat as Ds,parseSuggestions as Fs,suggestionsStream as hs}from"./extraction.js";import{FIELD_TYPES as ks,RESPONSE_MODES as Us,StructuredError as bs,defineSchema as vs,describeSchema as Gs,toJsonSchema as Bs,responseFormat as Ks,unfence as Hs,findJson as ws,rewriteJson as Vs,repairJson as Xs,isNothing as Ws,coerce as Js,parseStructured as Ys,createStructuredStream as zs}from"./structured.js";import{explainMcpError as Qs,packageFromArgs as qs,isStaleMcpSession as Zs}from"./mcp-errors.js";import{toolTraits as eS,bareToolName as rS,canRunConcurrently as oS,isCacheable as tS,needsConfirmation as aS,traitsIndex as iS,effectiveToolName as nS,parallelEligible as sS,PARALLEL_LOCAL_RE as SS}from"./tool-traits.js";import{planToolRound as lS,runToolRound as TS}from"./tool-round.js";import{createToolLoopGuard as cS,roundSignature as pS,stableToolCallKey as _S,toolMadeProgress as dS,isLoopableTool as AS,blockedToolResult as RS,OBSERVATION_TOOLS as fS,INPUT_PROGRESS_TOOLS as OS}from"./tool-loop-guard.js";import{classifyFailure as NS,createModelHealth as uS,COOLDOWN_MS as MS,UNAVAILABLE_REASONS as gS,normModelName as CS}from"./model-health.js";import{runWithFailover as PS,failoverExhausted as xS,FAILOVER_MAX_ATTEMPTS as DS}from"./failover.js";import{sourcePolicySettings as hS,sourceGuardFor as yS,sourceGate as kS,isSourceGateError as US,withinReach as bS}from"./source-gate.js";import{runTurnLoop as GS,createCallRunner as BS,roundCap as KS,withToolSystem as HS,describeCall as wS,stepResultText as VS,addUsage as XS,normalizeUsage as WS,openAiTranscript as JS,anthropicTranscript as YS,DEFAULT_MAX_ROUNDS as zS,DEFAULT_MAX_FINISH_TRIES as jS,FINISH_NUDGES as QS,LOOPING_NUDGE as qS,EXHAUSTED_NOTE as ZS,ROUND_SEPARATOR as $S}from"./turn-loop.js";import{createResultStore as rE,shieldToolResult as oE,runResultQuery as tE,withResultShield as aE,describeShape as iE,compactValue as nE,resultToolSpec as sE,RESULT_TOOL_NAME as SE,DEFAULT_SHIELD as EE,DEFAULT_STORE as lE}from"./tool-result.js";import{findTools as mE,findToolsResult as cE,findActionArgs as pE,oneLiner as _E,overlapRank as dE,FIND_ACTION as AE}from"./tool-discovery.js";import{buildToolset as fE}from"./toolset.js";import{DESCRIBE_ACTION as IE,actionMenu as NE,buildGroupDispatchSpec as uE,validateAction as ME,makeGroupDispatchExecutor as gE,withGuidance as CE,makeDispatchProvider as LE,estimateTokens as PE}from"./tool-dispatch.js";import{FIND_TOOL_NAME as DE,FIND_DESCRIPTION as FE,FIND_RESIDENT as hE,findDispatchProvider as yE}from"./find-tool.js";import{WEB_SEARCH_TOOL_NAME as UE,WEB_SEARCH_TOOL_SYSTEM as bE,WEB_SEARCH_SPEC as vE,searchResultsToText as GE,webSearchToolProvider as BE}from"./web-search-tool.js";import{compressToolSpec as HE,compressToolSpecs as wE,compressionStats as VE,trimDescription as XE,COMPRESSION_MODES as WE,DEFAULT_COMPRESSION as JE}from"./tool-schema.js";import{validateRecipe as zE,expandRecipe as jE,recipeParams as QE,mapInput as qE,dryRunRecipe as ZE,runPlan as $E,runRecipe as el,RecipeError as rl,RECIPE_MODES as ol}from"./recipe.js";import{recipeToolProvider as al,recipeToolSpec as il,describeRecipeForApproval as nl,RECIPE_TOOL_NAME as sl}from"./recipe-tool.js";import{createBudget as El,validateBudget as ll,normalizeBudget as Tl,usageOf as ml,BudgetError as cl,BUDGET_DIMENSIONS as pl}from"./budget.js";import{defineTeam as dl,validateTeam as Al,normalizeTeam as Rl,normalizeGrants as fl,grantAllows as Ol,scmAllows as Il,describeRole as Nl,TeamError as ul,ROLE_MODES as Ml,MERGE_POLICIES as gl,PLAN_MODES as Cl,GRANTABLE as Ll,WORK_GRANTS as Pl,GRANT_RE as xl,AGENT_REF_RE as Dl,STARTER_TEAMS as Fl,starterTeams as hl,blankTeam as yl,teamFromForm as kl,slugTeamName as Ul}from"./team.js";import{fixedPlan as vl,parsePlan as Gl,plannerPrompt as Bl,waves as Kl,breakCycles as Hl,TEAM_PLAN_SCHEMA as wl}from"./team-plan.js";import{createBoard as Xl,parseFindings as Wl,boardText as Jl,findingsInstruction as Yl,toBriefClaims as zl,FINDINGS_SCHEMA as jl,FINDING_KINDS as Ql,THREAD_KINDS as ql,THREAD_STATUSES as Zl,POST_KINDS as $l,POST_STATUSES as eT,ASK_TYPES as rT,emptyBoardState as oT,foldBoard as tT,findingsOf as aT}from"./team-board.js";import{boardToolProvider as nT,boardToolSpec as sT,createAnswerBox as ST,withBoardTool as ET,BOARD_TOOL_NAME as lT,DEFAULT_ASK_TIMEOUT_MS as TT}from"./board-tool.js";import{createRunCache as cT,withRunCache as pT}from"./team-cache.js";import{emptyRun as dT,foldRun as AT,runFromEvents as RT,checkpointFrom as fT,isResumable as OT,LIVE_RUN_STATUSES as IT,RESUMABLE_RUN_STATUSES as NT,spendOf as uT,describeSpend as MT,runState as gT,priorWorkFor as CT,STALLED_AFTER_MS as LT}from"./team-record.js";import{validateProject as xT,normalizeProject as DT,defineProject as FT,canTransition as hT,blankProject as yT,projectFromForm as kT,emptyProjectRecord as UT,foldProject as bT,projectProgress as vT,ProjectError as GT,PROJECT_STATUSES as BT,PROJECT_ID_RE as KT}from"./project.js";import{validateJob as wT,normalizeJob as VT,defineJob as XT,canTransition as WT,applyAll as JT,jobToRole as YT,readyJobs as zT,blankJob as jT,jobFromForm as QT,JobError as qT,JOB_STATUSES as ZT,JOB_ID_RE as $T}from"./job.js";import{validateGate as rm,normalizeGate as om,effectiveGate as tm,gateAllows as am,DEFAULT_GATE as im,AUTONOMY as nm,HUMAN_FLAGS as sm,CHECKS as Sm}from"./gate.js";import{runProject as lm,roundJobs as Tm,teamForRound as mm,jobResults as cm,roundBudget as pm,parseJobs as _m,parseReview as dm,jobsPrompt as Am,reviewPrompt as Rm,PROJECT_JOBS_SCHEMA as fm,PROJECT_REVIEW_SCHEMA as Om,ProjectRunError as Im,EXECUTIVE as Nm,MAX_JOBS_PER_ROUND as um,MAX_ROUNDS as Mm,PROJECT_RUN_STATUSES as gm}from"./project-run.js";import{canonical as Lm,sha256 as Pm,makeEntry as xm,verifyChain as Dm,attest as Fm,verifyAttested as hm,summarize as ym,fit as km,adjustSummary as Um,normalizeEngine as bm,engineKey as vm,normalizeScm as Gm,SCORECARD_ENTRY_KINDS as Bm,ROLE_KINDS as Km,SCORECARD_VERSION as Hm,ENGINE_KINDS as wm}from"./scorecard.js";import{ENGINE_KINDS as Xm,ROUTE_PREFERS as Wm,normalizePolicy as Jm,normalizeEngineSpec as Ym,validateEngineSpec as zm,engineRef as jm,engineKeyOf as Qm,describeEngine as qm,tierOf as Zm}from"./engine.js";import{AGENT_ID_RE as ec,APPLIES_TO as rc,EGRESS_CLASSES as oc,ASSISTANT_ID as tc,AgentError as ac,validateAgent as ic,normalizeAgent as nc,defineAgent as sc,assistantAgent as Sc,engineOf as Ec,describeAgent as lc,slugAgentId as Tc,resolveTeam as mc,STARTER_AGENTS as cc,starterAgents as pc,blankAgent as _c,agentFromForm as dc,poolFor as Ac}from"./agent.js";import{LEDGER_VERSION as fc,LEDGER_ENTRY_KINDS as Oc,DECLINE_REASONS as Ic,WITHDRAW_AFTER as Nc,ledgerKey as uc,normalizeCall as Mc,makeLedgerEntry as gc,summarizeEngine as Cc}from"./model-ledger.js";import{RECRUIT_SCHEMA as Pc,MIN_FIT as xc,engineRow as Dc,engineRows as Fc,needForJob as hc,routeFor as yc,engineWorth as kc,applications as Uc,evaluatorPrompt as bc,parseEvaluation as vc,decide as Gc,recruitForRun as Bc,proposalFromNeeds as Kc,proposalToAgent as Hc,carveBudget as wc,recruitEvents as Vc,recruitJob as Xc}from"./recruit.js";import{DEFAULT_MIN_CALLS as Jc,cardOverride as Yc,applyCard as zc}from"./model-candidates.js";import{SCM_KINDS as Qc,validateConnection as qc,normalizeConnection as Zc,parseRemote as $c,connectionFor as ep,branchFor as rp,worktreeDirFor as op,credentialEnv as tp,describeConnection as ap,blankConnection as ip,connectionFromForm as np}from"./scm-connection.js";import{messagesFor as Sp,mergeTranscript as Ep,clipTranscript as lp,clipMessage as Tp,newSteps as mp,continuationNote as cp,createControl as pp,STEP_MAX_CHARS as _p,TASK_TRANSCRIPT_MAX_CHARS as dp}from"./team-task.js";import{runTeam as Rp,resumeTeam as fp,dryRunTeam as Op,isModelUnavailable as Ip,TeamRunError as Np,RUN_STATUSES as up}from"./team-run.js";import{teamToolProvider as gp,teamToolSpec as Cp,teamToolTimeoutMs as Lp,describeTeamForApproval as Pp,TEAM_TOOL_NAME as xp,TEAM_MANUAL as Dp}from"./team-tool.js";import{workLogFor as hp,workLogText as yp,workLogEvidence as kp,describeCall as Up,WORKLOG_KINDS as bp}from"./team-worklog.js";import{normalizeRequest as Gp,subtaskFromRequest as Bp,takeUp as Kp,takeUpLine as Hp,holdsGrants as wp,jobFromSubtask as Vp,extendDependents as Xp,taskTree as Wp,threadRows as Jp,MAX_SUBTASKS as Yp,MAX_DEPTH as zp,MIN_TAKEUP_FIT as jp}from"./team-subtask.js";import{teamLine as qp,teamLanes as Zp}from"./team-trail.js";import{promoteRoles as e_,starterTeam as r_,missingStarters as o_,teamHealth as t_,teamShape as a_,describeTeamShape as i_,whereItWorks as n_,rosterRows as s_,agentKind as S_,agentHue as E_,agentColor as l_,agentInitials as T_,roleCardId as m_,cardNumbers as c_,upsertAgents as p_,soloTeam as __,teamsWithSolos as d_,builtinOrg as A_,isBuiltin as R_,grantChoices as f_,grantsFromChoices as O_,skillChoices as I_,GRANT_INFO as N_,SOLO_BUDGET as u_,TEAM_SHAPES as M_,ROSTER_KINDS as g_}from"./team-org.js";import{observeInbox as L_,observeStrip as P_,runLanes as x_,spendRows as D_,engineStrip as F_}from"./team-observe.js";import{mcpDispatchProvider as y_,MCP_TOOL_NAME as k_}from"./mcp-dispatch.js";import{createManifest as b_,ManifestError as v_,SOURCES as G_}from"./manifest.js";import{createKernel as K_,meetDecisions as H_,KernelError as w_,REQUIRED_PLUGINS as V_,ALLOW_ALL as X_}from"./kernel.js";import{replay as J_,formatReport as Y_,parseJsonl as z_,toJsonl as j_}from"./harness.js";import{compileQuery as q_,findMatches as Z_,matchIndexFor as $_,expandReplacement as ed,replaceMatch as rd,replaceAll as od,replaceAllInRange as td,MAX_MATCHES as ad}from"./text-search.js";import{DATA_SCOPES as nd}from"./scopes.js";import{MEMORY_VERSION as Sd,MEMORY_KINDS as Ed,MEMORY_KIND_NAMES as ld,AMBIENT_KINDS as Td,MAX_MEMORY_CHARS as md,MIN_MEMORY_CHARS as cd,DEFAULT_MAX_MEMORIES as pd,DEFAULT_BLOCK_CHARS as _d,SAME_FACT as dd,MEMORY_TOOL_SPEC as Ad,MEMORY_UPCASTERS as Rd,MemoryError as fd,normalizeMemory as Od,isValidMemory as Id,memoryKey as Nd,slotOf as ud,similarity as Md,containment as gd,candidatesFrom as Cd,reconcile as Ld,matchForForget as Pd,recall as xd,memoryBlock as Dd,markUsed as Fd,pruneMemories as hd,memoryToolSystem as yd,upcastMemory as kd,sameMemory as Ud,AMBIENT_MAX_WORDS as bd}from"./memory.js";import{SOURCE_TRUST as Gd,SkillSourceError as Bd,defineSkillSource as Kd,createSkillSourceRegistry as Hd}from"./skill-sources.js";import{SKILL_MANIFEST_VERSION as Vd,SKILL_CONTEXTS as Xd,SKILL_HISTORY_SCOPES as Wd,SKILL_MCP_MODES as Jd,SKILL_TRUST as Yd,SKILL_FILE_KINDS as zd,SKILL_UPCASTERS as jd,SkillManifestError as Qd,isSafeSkillPath as qd,originOf as Zd,trustOf as $d,skillFiles as eA,needsBridge as rA,declaredAccess as oA,originLabel as tA,sameSkillOrigin as aA,skillIsStale as iA,validateSkill as nA,upcastSkill as sA,upcastSkills as SA,normalizeSkill as EA}from"./skill-manifest.js";import{SKILL_VARS as TA,SKILL_VAR_NAMES as mA,skillVar as cA,skillVarPattern as pA,parseSkillVars as _A,lintSkillPrompt as dA,suggestSkillVar as AA,substituteSkillVars as RA,expandSkillPrompt as fA,skillVarGuidance as OA,SkillVarError as IA}from"./skill-vars.js";import{lineAt as uA,writerAffordance as MA,INSTRUCTION_RE as gA,instructionOnLine as CA,GOAL_MIN_NEW as LA,goalDraftAllowed as PA,createSpendMeter as xA,writerTail as DA,draftSeparator as FA,groundingBlock as hA,writerRequest as yA,AUTOCOMPLETE_SYSTEM as kA,AUTOCOMPLETE_MAX_TOKENS as UA,AUTOCOMPLETE_TEMPERATURE as bA,clipCompletion as vA,GEARS as GA,WRITER_PREFS as BA,WRITER_PREF_DEFAULTS as KA,normalizeWriterPrefs as HA,normalizeIntent as wA}from"./cowriter-writer.js";import{SLASH_TYPING_RE as XA,enabledSkills as WA,slashCommandItems as JA,matchSlashSkill as YA,matchSlashRecipe as zA,recipeInvocationText as jA,matchSlashTeam as QA,teamInvocationText as qA,slashCommandInsert as ZA,skillInvocationOf as $A,skillInvocationLabel as eR}from"./slash-commands.js";import{outlineOf as oR,parseListItem as tR,continueList as aR,indentSelection as iR,toggleWrap as nR,toggleLinePrefix as sR,toggleTask as SR,toggleLink as ER,docStats as lR,selectionStats as TR}from"./markdown-authoring.js";import{MAX_TAG_LENGTH as cR,MAX_TAGS as pR,normalizeTag as _R,normalizeTags as dR,hasTag as AR,addTag as RR,removeTag as fR,toggleTag as OR,sameTags as IR,formatTag as NR,parseTagQuery as uR,hasTagTerms as MR,formatTagQuery as gR,matchesTagFilter as CR,filterByTags as LR,tagFacets as PR,suggestExistingTags as xR,tagsSearchText as DR}from"./tags.js";import{UNTITLED_MEETING as hR,MAX_TITLE_LENGTH as yR,TITLE_RULES_VERSION as kR,cleanTitle as UR,isGenericTitle as bR,titleFromSummary as vR,titleFromTopics as GR,titleFromParticipants as BR,titleFromDate as KR,deriveMeetingTitle as HR,shouldAutoTitle as wR,isBetterTitleSource as VR,meetingTitlePrompt as XR,parseTitleResponse as WR}from"./titles.js";import{RECORD_KINDS as YR,MAX_TITLE_LEN as zR,LibraryError as jR,parseRecordId as QR,makeRecordId as qR,isRecordId as ZR,normalizeStoredRecord as $R,isValidStoredRecord as ef,toSearchRecord as rf,searchTextFor as of,toIndexEntry as tf,deriveTitle as af,snippetOf as nf,wordCount as sf}from"./library.js";import{CLOCK_TOLERANCE_MS as Ef,SyncError as lf,stampOf as Tf,decide as mf,planSync as cf,isSettled as pf,forkConflict as _f,advanceBases as df}from"./sync-plan.js";import{ENCRYPTED_TYPE as Rf,COMPRESSIONS as ff,BackupError as Of,KDF_ITERATIONS as If,encryptBackup as Nf,decryptBackup as uf,isEncryptedBackup as Mf,identityCodec as gf,streamCodec as Cf,nodeCodec as Lf,bestCodec as Pf}from"./backup-envelope.js";import{OMNI_MODES as Df,OMNI_GRAMMAR as Ff,parseOmni as hf,extractFilters as yf,resolveSince as kf,wantsModel as Uf,isActionable as bf}from"./omni.js";import{THEMES as Gf,LIGHT as Bf,DARK as Kf,PALETTES as Hf,SHAPE as wf,TOKEN_NAMES as Vf,TOKEN_ROLES as Xf,paletteFor as Wf,cssVarName as Jf,toCssVars as Yf,themeStylesheet as zf,resolveTheme as jf}from"./theme.js";import{PLANS as qf,API_BASE as Zf,ENDPOINTS as $f,ENTITLEMENT_PUBLIC_JWK as eO,UPGRADE_URL as rO,FEATURE_TIER as oO,PRO_FEATURES as tO,TEAM_FEATURES as aO,FREE_LIMITS as iO,COUNTED as nO,freeCap as sO,observeSince as SO,RECHECK_INTERVAL_MS as EO,EntitlementError as lO,checkoutUrl as TO,planOf as mO,planLabel as cO,isPro as pO,isTeam as _O,can as dO,tierFor as AO,withinFreeLimit as RO,verifyEntitlement as fO,verifySignedToken as OO,licenseFromPayload as IO,needsRecheck as NO}from"./entitlement.js";import{renderMarkdown as MO,defaultLinkPolicy as gO}from"./markdown-render.js";import{parseMeetingText as LO,speakerStats as PO,densityRibbon as xO}from"./meeting-text.js";import{speakerBreakdown as FO,speakerTimeline as hO,formatTalkTime as yO,SPEAKER_SLOTS as kO}from"./meeting-shape.js";import{isSpeakerImageValue as bO,speakerLabeller as vO}from"./meeting-shape.js";import{SORT_MODES as BO,SORT_LABELS as KO,sortStamp as HO,sortRecords as wO,filterRecords as VO,dayBucket as XO,rowTime as WO,groupRecords as JO}from"./record-list.js";import{INSIGHT_KINDS as zO,summarySections as jO,insightKindOf as QO,meetingInsights as qO,hasInsights as ZO}from"./meeting-insights.js";import{demd as eI,NOTE_SECTIONS as rI,noteSectionKind as oI,MOMENT_BADGES as tI,momentBadge as aI,parseMeetingNotes as iI,groupActionsByOwner as nI}from"./meeting-insights.js";import{PREF_SECTIONS as SI,PREF_SECTION_IDS as EI,sectionValue as lI,pickSections as TI,applySections as mI,sectionHash as cI,mergeStamped as pI,changedSections as _I}from"./client-prefs.js";import{McpClient as AI,mcpProvider as RI}from"./mcp-client.js";import{mcpSharedSystem as OI,mcpInventorySystem as II,sourceCitationSystem as NI,combineSystemPrompt as uI,toolStatus as MI,widgetAuthoringSystem as gI,vaultWidgetSystem as CI,wantsVaultGuidance as LI}from"./tool-hints.js";import{adaptiveToolRetryHint as xI,createAdaptiveToolPolicy as DI,isInvalidToolParametersResult as FI}from"./adaptive-tool-policy.js";import{getMcpProviders as yI,testMcpServer as kI,resetMcp as UI,mcpBackoff as bI}from"./mcp-manager.js";import{SIDELINE_COMMANDS as GI,BRINGBACK_COMMAND as BI,THREAD_TOOL_NAME as KI,SIDELINE_SLASH_ITEMS as HI,THREAD_TOOL_SPEC as wI,parseSideline as VI,parseBringBack as XI,resolveSidelineTarget as WI,threadManifest as JI,threadToolProvider as YI,readThread as zI,briefPrompt as jI,foldBackNote as QI,foldNotes as qI,nextSidelineIndex as ZI,sourceOf as $I,noteUnits as eN,sidelinePath as rN,foldBackFor as oN,SIDELINE_TOOL_NAME as tN,SIDELINE_TOOL_SPEC as aN,sidelineToolProvider as iN}from"./sideline.js";import{WEATHER_TOOL_NAME as sN,WEATHER_TOOL_SYSTEM as SN,weatherToolProvider as EN}from"./weather-tool.js";import{renderContent as TN,toChatMessages as mN,toMultimodalMessages as cN,imageAttachmentsOf as pN,deferAttachedSources as _N,withSourceTool as dN,SOURCE_TOOL_SPEC as AN}from"./context-attachments.js";import{prefetchPlan as fN,prefetchAttachment as ON,weatherPlace as IN,weatherFollowupPlace as NN}from"./prefetch.js";import{createFetchedStore as MN,withFetchedMemo as gN,fetchKey as CN,fetchTitle as LN,fetchedAsSources as PN,fetchedFacts as xN,defaultTtl as DN,FETCHED_TTL_MS as FN}from"./fetched.js";import{windowOf as yN,fitFor as kN,keepRecentFor as UN,minWindowFor as bN,isContextLimitError as vN,FIT_HEADROOM as GN}from"./context-window.js";import{planCompaction as KN,compactionPrompt as HN,compactionRecord as wN,messagesAfter as VN,systemWithSummary as XN,compactable as WN,COMPACTION_SYSTEM as JN}from"./compaction.js";import{presenceFor as zN,presenceDelta as jN,reachOf as QN,withPresence as qN,presenceBlock as ZN,roundCount as $N,roundMinutes as eu,PRESENCE_BUDGET_TOKENS as ru,PRESENCE_KINDS as ou}from"./presence.js";import{PolicyError as au,POLICY_VERSION as iu,POLICY_TOKEN_TYPE as nu,REDACTION_TIERS as su,LOCKABLE as Su,FEATURES as Eu,PERMISSION_MODES as lu,PRODUCT_HOSTS as Tu,normalizeOrgPolicy as mu,endpointAllowed as cu,modelAllowed as pu,agentAllowed as _u,permissionMode as du,routeAllowed as Au,redactionTier as Ru,egressAllowed as fu,settingLocked as Ou,featureEnabled as Iu,applyPolicyToSettings as Nu,policyLabel as uu,policyHash as Mu,verifyPolicyToken as gu,globToRegExp as Cu}from"./policy.js";export{aa as ACCESS_LOG_MAX,ta as ACCESS_LOG_VERSION,i as ACTOR_KINDS,ec as AGENT_ID_RE,Dl as AGENT_REF_RE,X_ as ALLOW_ALL,a as ALL_TYPES,Td as AMBIENT_KINDS,bd as AMBIENT_MAX_WORDS,Zf as API_BASE,rc as APPLIES_TO,rT as ASK_TYPES,tc as ASSISTANT_ID,UA as AUTOCOMPLETE_MAX_TOKENS,kA as AUTOCOMPLETE_SYSTEM,bA as AUTOCOMPLETE_TEMPERATURE,nm as AUTONOMY,da as AdapterError,ac as AgentError,In as AnalyzerError,If as BACKUP_KDF_ITERATIONS,lT as BOARD_TOOL_NAME,vo as BRIEF_STATES,BI as BRINGBACK_COMMAND,pl as BUDGET_DIMENSIONS,rn as BUILTIN_TRIGGERS,Hn as BUILTIN_VOICE_INTENTS,Of as BackupError,cl as BudgetError,On as CADENCES,Sm as CHECKS,Go as CLAIM_KINDS,s as CLASSES,Ef as CLOCK_TOLERANCE_MS,JN as COMPACTION_SYSTEM,ff as COMPRESSIONS,WE as COMPRESSION_MODES,MS as COOLDOWN_MS,nO as COUNTED,ke as COWRITER_SYSTEM,Ue as COWRITER_TEMPERATURE,o as CURRENT_VERSION,Kf as DARK,nd as DATA_SCOPES,gn as DAYPART_HOUR,Ic as DECLINE_REASONS,TT as DEFAULT_ASK_TIMEOUT_MS,_d as DEFAULT_BLOCK_CHARS,JE as DEFAULT_COMPRESSION,im as DEFAULT_GATE,ci as DEFAULT_INTERNAL_PATTERNS,Mi as DEFAULT_LOCK_MS,jS as DEFAULT_MAX_FINISH_TRIES,pd as DEFAULT_MAX_MEMORIES,zS as DEFAULT_MAX_ROUNDS,Jc as DEFAULT_MIN_CALLS,EE as DEFAULT_SHIELD,lE as DEFAULT_STORE,fo as DEFAULT_THRESHOLD,un as DEFAULT_WAKE,IE as DESCRIBE_ACTION,S as EFFECTS,E as EGRESS,oc as EGRESS_CLASSES,Rf as ENCRYPTED_TYPE,$f as ENDPOINTS,hr as ENGINE_KINDS,Xm as ENGINE_SPEC_KINDS,Os as ENTITIES_SCHEMA,eO as ENTITLEMENT_PUBLIC_JWK,fs as ENTITY_TYPES,Pa as ENTRY_KINDS,t as EVENT_TYPES,Nm as EXECUTIVE,ZS as EXHAUSTED_NOTE,lO as EntitlementError,l as EventError,qa as FAILOVER_CAPABILITY_GAP,Qa as FAILOVER_CLASS_GAP,DS as FAILOVER_MAX_ATTEMPTS,Eu as FEATURES,oO as FEATURE_TIER,FN as FETCHED_TTL_MS,ks as FIELD_TYPES,jl as FINDINGS_SCHEMA,Ql as FINDING_KINDS,AE as FIND_ACTION,FE as FIND_DESCRIPTION,hE as FIND_RESIDENT,DE as FIND_TOOL_NAME,QS as FINISH_NUDGES,GN as FIT_HEADROOM,iO as FREE_LIMITS,GA as GEARS,LA as GOAL_MIN_NEW,Ll as GRANTABLE,N_ as GRANT_INFO,xl as GRANT_RE,sm as HUMAN_FLAGS,OS as INPUT_PROGRESS_TOOLS,zO as INSIGHT_KINDS,gA as INSTRUCTION_RE,pi as INTERNAL_PATTERN_CATALOG,Or as INVARIANTS,Ji as JOB_ACTIONS,$T as JOB_POST_ID_RE,ZT as JOB_POST_STATUSES,qT as JobPostError,ui as KDF_HASH,Ni as KDF_ITERATIONS,w_ as KernelError,Oc as LEDGER_ENTRY_KINDS,fc as LEDGER_VERSION,Bf as LIGHT,IT as LIVE_RUN_STATUSES,Su as LOCKABLE,qS as LOOPING_NUDGE,va as LOOP_KINDS,jR as LibraryError,Ga as LoopError,wo as MAX_BRIEF_CHARS,Ho as MAX_BRIEF_RECORDS,Bo as MAX_CLAIMS,Ko as MAX_CLAIM_REFS,Mn as MAX_COMMANDS_PER_DELTA,zp as MAX_DEPTH,xi as MAX_ENTRIES,it as MAX_EXCERPTS,nt as MAX_EXCERPT_CHARS,ue as MAX_GRAPH_NODES,um as MAX_JOBS_PER_ROUND,ad as MAX_MATCHES,md as MAX_MEMORY_CHARS,Li as MAX_NOTE_CHARS,Mm as MAX_ROUNDS,Pi as MAX_SECRET_CHARS,Oo as MAX_SUBJECTS,Io as MAX_SUBJECT_CHARS,Yp as MAX_SUBTASKS,Cs as MAX_SUGGESTIONS,Ls as MAX_SUGGESTION_CHARS,at as MAX_SYNTHESIS_CLAIMS,pR as MAX_TAGS,cR as MAX_TAG_LENGTH,Ci as MAX_TITLE_CHARS,zR as MAX_TITLE_LEN,yR as MAX_TITLE_LENGTH,Es as MAX_TOPICS,ls as MAX_TOPIC_CHARS,k_ as MCP_TOOL_NAME,Ed as MEMORY_KINDS,ld as MEMORY_KIND_NAMES,Ad as MEMORY_TOOL_SPEC,Rd as MEMORY_UPCASTERS,Sd as MEMORY_VERSION,gl as MERGE_POLICIES,xc as MIN_FIT,cd as MIN_MEMORY_CHARS,jp as MIN_TAKEUP_FIT,Yi as MISSED_POLICIES,tI as MOMENT_BADGES,v_ as ManifestError,AI as McpClient,fd as MemoryError,Ft as NEAR_TITLE_DISTANCE,b as NOTE_ACTIONS,B as NOTE_ACTION_ERRORS,v as NOTE_ACTION_ORDER,G as NOTE_ACTION_TEMPERATURE,K as NOTE_COMMANDS,w as NOTE_COMMAND_MAX_TOKENS,H as NOTE_COMMAND_TEMPERATURE,rI as NOTE_SECTIONS,fS as OBSERVATION_TOOLS,Ff as OMNI_GRAMMAR,Df as OMNI_MODES,Hf as PALETTES,SS as PARALLEL_LOCAL_RE,kt as PDF_MAX_CHARS,lu as PERMISSION_MODES,qf as PLANS,Je as PLAN_AUTHORS,ze as PLAN_DECOMPOSE_MAX_TOKENS,Ye as PLAN_DECOMPOSE_SYSTEM,je as PLAN_DECOMPOSE_TEMPERATURE,Cl as PLAN_MODES,We as PLAN_ROLES,Qe as PLAN_SECTION_MAX_TOKENS,qe as PLAN_SECTION_TEMPERATURE,nu as POLICY_TOKEN_TYPE,iu as POLICY_VERSION,$l as POST_KINDS,eT as POST_STATUSES,SI as PREF_SECTIONS,EI as PREF_SECTION_IDS,ru as PRESENCE_BUDGET_TOKENS,ou as PRESENCE_KINDS,Tu as PRODUCT_HOSTS,KT as PROJECT_ID_RE,fm as PROJECT_JOBS_SCHEMA,Om as PROJECT_REVIEW_SCHEMA,gm as PROJECT_RUN_STATUSES,BT as PROJECT_STATUSES,St as PROPOSAL_STATES,tO as PRO_FEATURES,au as PolicyError,GT as ProjectError,Im as ProjectRunError,ir as REACH,EO as RECHECK_INTERVAL_MS,ol as RECIPE_MODES,sl as RECIPE_TOOL_NAME,wm as RECORD_ENGINE_KINDS,YR as RECORD_KINDS,Pc as RECRUIT_SCHEMA,su as REDACTION_TIERS,Do as REDACTION_TOKEN_TYPES,Yn as REFINEMENT_SCHEMA,_ as REF_KINDS,Lr as REGISTRY_STATES,V_ as REQUIRED_PLUGINS,d as RESOLUTION,Us as RESPONSE_MODES,_e as RESULTS_PER_ENGINE,SE as RESULT_TOOL_NAME,NT as RESUMABLE_RUN_STATUSES,Ia as RETRIEVAL_TOOLS,Km as ROLE_KINDS,Ml as ROLE_MODES,g_ as ROSTER_KINDS,$S as ROUND_SEPARATOR,Wm as ROUTE_PREFERS,up as RUN_STATUSES,rl as RecipeError,$a as RouterError,fi as RuleError,dd as SAME_FACT,Xi as SCHEDULE_KINDS,Qc as SCM_KINDS,n as SCOPE_KINDS,Bm as SCORECARD_ENTRY_KINDS,Hm as SCORECARD_VERSION,pe as SEARCH_ENGINES,ho as SELF_LABELS,wf as SHAPE,GI as SIDELINE_COMMANDS,HI as SIDELINE_SLASH_ITEMS,tN as SIDELINE_TOOL_NAME,aN as SIDELINE_TOOL_SPEC,Xd as SKILL_CONTEXTS,zd as SKILL_FILE_KINDS,Wd as SKILL_HISTORY_SCOPES,Vd as SKILL_MANIFEST_VERSION,Jd as SKILL_MCP_MODES,Yd as SKILL_TRUST,jd as SKILL_UPCASTERS,TA as SKILL_VARS,mA as SKILL_VAR_NAMES,XA as SLASH_TYPING_RE,u_ as SOLO_BUDGET,KO as SORT_LABELS,BO as SORT_MODES,G_ as SOURCES,AN as SOURCE_TOOL_SPEC,Gd as SOURCE_TRUST,ht as SPAN_MIN_TERMS,kO as SPEAKER_SLOTS,LT as STALLED_AFTER_MS,cc as STARTER_AGENTS,Fl as STARTER_TEAMS,_p as STEP_MAX_CHARS,Ro as SUBJECT_KINDS,Ps as SUGGESTIONS_SCHEMA,Et as SUPERSEDE_OVERLAP,Ri as SUPPRESSED,se as SWARM_ROLES,rt as SYNTHESIS_SCHEMA,zi as ScheduleError,yr as SearchEngineError,Qd as SkillManifestError,Bd as SkillSourceError,IA as SkillVarError,bs as StructuredError,lf as SyncError,dp as TASK_TRANSCRIPT_MAX_CHARS,aO as TEAM_FEATURES,Dp as TEAM_MANUAL,wl as TEAM_PLAN_SCHEMA,M_ as TEAM_SHAPES,xp as TEAM_TOOL_NAME,Gf as THEMES,ql as THREAD_KINDS,Zl as THREAD_STATUSES,KI as THREAD_TOOL_NAME,wI as THREAD_TOOL_SPEC,kR as TITLE_RULES_VERSION,Vf as TOKEN_NAMES,Xf as TOKEN_ROLES,Ts as TOPICS_SCHEMA,Vt as TRANSCRIPT_MAX_CHARS,Wi as TRIGGER_KINDS,ul as TeamError,Np as TeamRunError,Yr as ToolGroupError,gS as UNAVAILABLE_REASONS,hR as UNTITLED_MEETING,Er as UPCASTERS,rO as UPGRADE_URL,ss as UTTERANCE_DANGLING_MS,ns as UTTERANCE_SETTLE_MS,Ii as VAULT_VERSION,gi as VaultError,Cn as VoiceIntentError,Hr as WEATHER_HOST,wr as WEATHER_TIMEOUT_MS,sN as WEATHER_TOOL_NAME,SN as WEATHER_TOOL_SYSTEM,vE as WEB_SEARCH_SPEC,UE as WEB_SEARCH_TOOL_NAME,bE as WEB_SEARCH_TOOL_SYSTEM,To as WIDGET_SURFACES,Nc as WITHDRAW_AFTER,bp as WORKLOG_KINDS,Pl as WORK_GRANTS,BA as WRITER_PREFS,KA as WRITER_PREF_DEFAULTS,Vr as WeatherError,wt as YOUTUBE_HOSTS,Tt as accept,NE as actionMenu,xI as adaptiveToolRetryHint,RR as addTag,XS as addUsage,Um as adjustSummary,df as advanceBases,_u as agentAllowed,l_ as agentColor,dc as agentFromForm,E_ as agentHue,T_ as agentInitials,S_ as agentKind,q as agentMentionAt,Co as aliasMap,YS as anthropicTranscript,JT as applyAll,zc as applyCard,ye as applyEdits,Nu as applyPolicyToSettings,mI as applySections,Te as appoint,Br as areaLabel,Sc as assistantAgent,Fr as attemptOrder,Fm as attest,rS as bareToolName,Pf as bestCodec,_c as blankAgent,ip as blankConnection,jT as blankJobPost,yT as blankProject,yl as blankTeam,RS as blockedToolResult,Jl as boardText,nT as boardToolProvider,sT as boardToolSpec,rp as branchFor,Hl as breakCycles,Xo as briefId,Yo as briefLinks,jI as briefPrompt,Jo as briefTerms,Wo as briefToText,uE as buildGroupDispatchSpec,Me as buildNoteGraph,Kt as buildPdfDocument,de as buildSearchUrl,fE as buildToolset,ua as buildTrajectory,ea as buildTranscriptDocument,A_ as builtinOrg,dO as can,Ki as canAddEntry,WT as canJobPostTransition,hT as canProjectTransition,oS as canRunConcurrently,_r as canSatisfy,Cd as candidatesFrom,Lm as canonical,Jt as captionTracksFromPlayerResponse,c_ as cardNumbers,Yc as cardOverride,wc as carveBudget,u as causesAreWellFormed,_I as changedSections,fr as checkInvariants,zo as checkKnowledgeInvariants,TO as checkoutUrl,fT as checkpointFrom,tt as claimsFromSynthesis,NS as classifyFailure,Ee as classifyModel,si as classifySource,UR as cleanTitle,vA as clipCompletion,Tp as clipMessage,_n as clipText,lp as clipTranscript,Js as coerce,Ms as coerceEntities,uI as combineSystemPrompt,Y as commandLineAt,ts as commandLooksFinished,Dn as commandsFromSegments,nE as compactValue,WN as compactable,HN as compactionPrompt,wN as compactionRecord,N as compareEvents,q_ as compileQuery,Ln as compileWake,HE as compressToolSpec,wE as compressToolSpecs,VE as compressionStats,ep as connectionFor,np as connectionFromForm,gd as containment,Vo as contentHash,cp as continuationNote,aR as continueList,pt as converge,sa as createAccessLog,_a as createAdapterRegistry,DI as createAdaptiveToolPolicy,fn as createAnalyzerRegistry,ST as createAnswerBox,c as createAppender,Mr as createBlobStore,Xl as createBoard,El as createBudget,BS as createCallRunner,Oa as createCitationCollector,pp as createControl,MN as createFetchedStore,K_ as createKernel,ur as createLogStore,b_ as createManifest,Nr as createMemoryAdapter,uS as createModelHealth,Va as createModelRouter,Cr as createRegistry,rE as createResultStore,Ai as createRuleEngine,cT as createRunCache,Hd as createSkillSourceRegistry,xA as createSpendMeter,zs as createStructuredStream,Jr as createToolGroupRegistry,cS as createToolLoopGuard,en as createTriggerRegistry,Ua as createTurnRunner,is as createUtteranceGate,Di as createVault,Bn as createVoiceIntentRegistry,tp as credentialEnv,Jf as cssVarName,XO as dayBucket,mf as decide,Gc as decideRecruit,oA as declaredAccess,uf as decryptBackup,gO as defaultLinkPolicy,y as defaultModelId,DN as defaultTtl,Kn as defaultVoiceIntents,_N as deferAttachedSources,pa as defineAdapter,sc as defineAgent,Tn as defineJob,XT as defineJobPost,ba as defineLoop,Rn as defineMeetingAnalyzer,Ha as defineMiddleware,Ka as defineModel,FT as defineProject,wa as defineRouteStrategy,di as defineRule,vs as defineSchema,xr as defineSearchEngine,Kd as defineSkillSource,dl as defineTeam,Wr as defineToolGroup,$i as defineTrigger,Gn as defineVoiceIntent,eI as demd,xO as densityRibbon,L as dequeue,qo as deriveBrief,Zo as deriveBriefs,hi as deriveKey,HR as deriveMeetingTitle,af as deriveTitle,lc as describeAgent,Up as describeCall,ap as describeConnection,qm as describeEngine,nl as describeRecipeForApproval,Nl as describeRole,Gs as describeSchema,iE as describeShape,MT as describeSpend,Pp as describeTeamForApproval,i_ as describeTeamShape,wS as describeToolCall,ct as diffProposal,La as displayName,lR as docStats,FA as draftSeparator,$o as driftedRefs,ZE as dryRunRecipe,Op as dryRunTeam,mn as dueJobs,Mt as duplicateTitles,Po as earnsBrief,vn as editDistance,he as editKey,tm as effectiveGate,Eo as effectiveGrants,nS as effectiveToolName,ge as egoGraph,fu as egressAllowed,oT as emptyBoardState,UT as emptyProjectRecord,dT as emptyRun,WA as enabledSkills,Nf as encryptBackup,cu as endpointAllowed,vm as engineKey,Qm as engineKeyOf,Ec as engineOf,Ie as engineOrder,jm as engineRef,Dc as engineRow,Fc as engineRows,F_ as engineStrip,kc as engineWorth,Ns as entitiesFormat,Is as entitiesPrompt,gs as entitiesStream,bi as entryMeta,qr as equipmentFor,PE as estimateTokens,bc as evaluatorPrompt,jE as expandRecipe,ed as expandReplacement,fA as expandSkillPrompt,Qs as explainMcpError,Xp as extendDependents,yf as extractFilters,Si as extractUrls,xS as failoverExhausted,za as failoverOrder,Iu as featureEnabled,CN as fetchKey,LN as fetchTitle,PN as fetchedAsSources,xN as fetchedFacts,LR as filterByTags,Ca as filterEntries,J as filterNoteActions,VO as filterRecords,h as filterSections,Fe as filterTypoEdits,pE as findActionArgs,yE as findDispatchProvider,ws as findJson,Z_ as findMatches,ee as findSkillByName,re as findTargetByName,mE as findTools,cE as findToolsResult,Pn as findWakeCommand,Yl as findingsInstruction,aT as findingsOf,km as fit,kN as fitFor,vl as fixedPlan,oN as foldBackFor,QI as foldBackNote,tT as foldBoard,qI as foldNotes,bT as foldProject,AT as foldRun,_f as forkConflict,Ea as formatBytes,Y_ as formatReport,Dt as formatSurvey,NR as formatTag,gR as formatTagQuery,yO as formatTalkTime,Zt as formatTimestamp,$t as formatTranscript,Gr as formatWeather,V as frameNoteAction,sO as freeCap,wi as fromB64,co as fuseRRF,am as gateAllows,yI as getMcpProviders,Ur as getWeather,os as gistOpening,rs as gistText,Cu as globToRegExp,PA as goalDraftAllowed,Ol as grantAllows,f_ as grantChoices,O_ as grantsFromChoices,Qr as grantsNeededFor,Le as graphStats,hA as groundingBlock,nI as groupActionsByOwner,F as groupModels,JO as groupRecords,qt as groupSegments,ZO as hasInsights,AR as hasTag,MR as hasTagTerms,wp as holdsGrants,Ei as hostMatches,gf as identityCodec,pN as imageAttachmentsOf,iR as indentSelection,QO as insightKindOf,CA as instructionOnLine,bf as isActionable,Kr as isAmbiguousLocation,VR as isBetterTitleSource,R_ as isBuiltin,tS as isCacheable,vN as isContextLimitError,Mf as isEncryptedBackup,es as isFillerSentence,bR as isGenericTitle,FI as isInvalidToolParametersResult,Gi as isLocked,AS as isLoopableTool,Ip as isModelUnavailable,Ws as isNothing,pO as isPro,C as isQueued,ZR as isRecordId,Fo as isRedactionToken,R as isRef,Re as isResultHost,OT as isResumable,qd as isSafeSkillPath,yo as isSelfLabel,pf as isSettled,US as isSourceGateError,bO as isSpeakerImageValue,Zs as isStaleMcpSession,go as isSubjectCandidate,_O as isTeam,m as isValidEvent,Id as isValidMemory,ef as isValidStoredRecord,Wt as isYouTubeUrl,Uc as jobApplications,Vp as jobFromSubtask,QT as jobPostFromForm,cm as jobResults,YT as jobToRole,cn as jobsForEvent,Am as jobsPrompt,UN as keepRecentFor,ga as lanesOf,eo as layoutFlowchart,uc as ledgerKey,IO as licenseFromPayload,uA as lineAt,I as linearize,Ut as linesFromItems,_t as linkClaims,Ra as linkifyCitations,dA as lintSkillPrompt,xe as lintText,Bi as lockedSummary,Bt as looksScanned,na as makeAccessEvent,LE as makeDispatchProvider,xm as makeEntry,gE as makeGroupDispatchExecutor,gc as makeLedgerEntry,qR as makeRecordId,A as makeRef,ri as makeSourceStore,Sa as makeStorageTier,oi as manifestText,qE as mapInput,Fd as markUsed,Pd as matchForForget,$_ as matchIndexFor,zA as matchSlashRecipe,YA as matchSlashSkill,QA as matchSlashTeam,dn as matchSummary,CR as matchesTagFilter,bI as mcpBackoff,y_ as mcpDispatchProvider,II as mcpInventorySystem,RI as mcpProvider,OI as mcpSharedSystem,H_ as meetDecisions,li as meetReach,an as meetingEndedTrigger,qO as meetingInsights,tn as meetingStartedTrigger,XR as meetingTitlePrompt,Dd as memoryBlock,Nd as memoryKey,yd as memoryToolSystem,oe as mentionAnswerPrefix,Ct as mentionsFrom,Oe as mergeEngineResults,Ve as mergeResearchLanes,$ as mergeSkillPrompt,pI as mergeStamped,Ep as mergeTranscript,VN as messagesAfter,Sp as messagesFor,bN as minWindowFor,o_ as missingStarters,pu as modelAllowed,k as modelSummary,aI as momentBadge,Jn as monitorIntent,P as moveQueued,_o as multiSearch,hc as needForJob,rA as needsBridge,aS as needsConfirmation,NO as needsRecheck,mp as newSteps,Qi as nextFireAt,ZI as nextSidelineIndex,Zi as nextWakeAt,Lf as nodeCodec,CS as normModelName,nc as normalizeAgent,Tl as normalizeBudget,Mc as normalizeCall,Zc as normalizeConnection,bm as normalizeEngine,Ym as normalizeEngineSpec,om as normalizeGate,fl as normalizeGrants,wA as normalizeIntent,VT as normalizeJobPost,Od as normalizeMemory,mu as normalizeOrgPolicy,Jm as normalizePolicy,DT as normalizeProject,At as normalizeRecord,Rt as normalizeRecords,Gp as normalizeRequest,Gm as normalizeScm,EA as normalizeSkill,Un as normalizeSpeech,$R as normalizeStoredRecord,No as normalizeSubject,_R as normalizeTag,dR as normalizeTags,Rl as normalizeTeam,ds as normalizeTopic,As as normalizeTopics,WS as normalizeUsage,HA as normalizeWriterPrefs,W as noteActionItems,X as noteActionLabel,Wn as noteIntent,oI as noteSectionKind,eN as noteUnits,L_ as observeInbox,SO as observeSince,P_ as observeStrip,pn as occurrenceKey,qi as occurrencesBetween,_E as oneLiner,JS as openAiTranscript,ki as openEntry,bt as orderLines,tA as originLabel,Zd as originOf,ut as orphanRecords,oR as outlineOf,dE as overlapRank,qs as packageFromArgs,Gt as pageTextFromItems,Wf as paletteFor,vt as paragraphsFromLines,sS as parallelEligible,Q as parseAgentMention,jo as parseBriefText,XI as parseBringBack,hn as parseClock,xn as parseCommand,Fn as parseDuration,us as parseEntities,vc as parseEvaluation,Wl as parseFindings,$r as parseFlowchart,_m as parseJobs,z_ as parseJsonl,tR as parseListItem,iI as parseMeetingNotes,LO as parseMeetingText,kn as parseNumberWords,hf as parseOmni,Gl as parsePlan,$e as parsePlanTasks,QR as parseRecordId,Qn as parseRefinement,$c as parseRemote,dm as parseReview,VI as parseSideline,Z as parseSkillMention,_A as parseSkillVars,Ys as parseStructured,Fs as parseSuggestions,uR as parseTagQuery,Qt as parseTimedText,WR as parseTitleResponse,_s as parseTopics,vr as parseWeather,yn as parseWhen,Xt as parseYouTubeUrl,g as pendingQueue,du as permissionMode,nn as personJoinedTrigger,Ma as phasesOf,sn as phraseTrigger,zt as pickCaptionTrack,fe as pickResults,TI as pickSections,ja as pinnedOrderOf,tr as planAttribution,or as planBody,KN as planCompaction,cO as planLabel,mO as planOf,rr as planParts,po as planQueries,Ze as planSectionSystem,cf as planSync,er as planTitleFor,lS as planToolRound,Bl as plannerPrompt,Mu as policyHash,uu as policyLabel,Ac as poolFor,Ya as preferenceFor,ON as prefetchAttachment,fN as prefetchPlan,ZN as presenceBlock,jN as presenceDelta,zN as presenceFor,CT as priorWorkFor,ma as projectChain,kT as projectFromForm,vT as projectProgress,x as promoteQueued,e_ as promoteRoles,Fa as promptEntries,Kc as proposalFromNeeds,Hc as proposalToAgent,lt as propose,hd as pruneMemories,En as questionTrigger,ie as rankLinkTargets,we as rankResearchCards,xo as rankSubjects,QN as reachOf,nr as reachRank,sr as reachSatisfies,ai as readSource,zI as readThread,zT as readyJobs,xd as recall,jA as recipeInvocationText,QE as recipeParams,al as recipeToolProvider,il as recipeToolSpec,Ld as reconcile,Dr as reconcileEngines,Vc as recruitEvents,Bc as recruitForRun,Xc as recruitJob,ia as redactAccessArgs,Ot as redactedTokensIn,It as redactionCost,Ru as redactionTier,$n as refineSpokenCommand,jn as refinementFormat,zn as refinementPrompt,qn as refinementStream,mt as reject,Vn as reminderIntent,fR as removeTag,TN as renderContent,ro as renderFlowchartSvg,MO as renderMarkdown,Xs as repairJson,od as replaceAll,td as replaceAllInRange,rd as replaceMatch,J_ as replay,Wa as requirementsFor,Ja as requirementsForStep,Be as researchRelevance,He as researchSnippet,UI as resetMcp,f as resolveRef,WI as resolveSidelineTarget,kf as resolveSince,Lo as resolveSubjects,mc as resolveTeam,jf as resolveTheme,Ks as responseFormat,sE as resultToolSpec,fp as resumeTeam,Rm as reviewPrompt,Vs as rewriteJson,Se as roleById,m_ as roleCardId,s_ as rosterRows,pm as roundBudget,KS as roundCap,$N as roundCount,Tm as roundJobs,eu as roundMinutes,pS as roundSignature,Au as routeAllowed,yc as routeFor,Ta as routeGraph,me as routeTeam,WO as rowTime,RT as runFromEvents,x_ as runLanes,$E as runPlan,lm as runProject,el as runRecipe,tE as runResultQuery,gT as runState,Rp as runTeam,TS as runToolRound,GS as runTurnLoop,PS as runWithFailover,ve as salientTerms,Ud as sameMemory,Za as sameModelKey,aA as sameSkillOrigin,IR as sameTags,as as sameUtterance,Xn as scheduleIntent,Il as scmAllows,yi as sealEntry,vi as searchEntries,GE as searchResultsToText,of as searchTextFor,cI as sectionHash,lI as sectionValue,TR as selectionStats,Ou as settingLocked,Zn as settleRefinement,Pm as sha256,oE as shieldToolResult,ti as shortUrl,wR as shouldAutoTitle,rN as sidelinePath,iN as sidelineToolProvider,Xa as signalsFrom,Md as similarity,I_ as skillChoices,eA as skillFiles,eR as skillInvocationLabel,$A as skillInvocationOf,iA as skillIsStale,cA as skillVar,OA as skillVarGuidance,pA as skillVarPattern,ZA as slashCommandInsert,JA as slashCommandItems,ud as slotOf,Tc as slugAgentId,Ul as slugTeamName,nf as snippetOf,__ as soloTeam,wO as sortRecords,HO as sortStamp,NI as sourceCitationSystem,kS as sourceGate,yS as sourceGuardFor,ii as sourceId,$I as sourceOf,Ti as sourcePolicyFor,hS as sourcePolicySettings,mi as sourceUrlsOf,fa as sourcesFromToolText,Lt as spanningQuestions,FO as speakerBreakdown,vO as speakerLabeller,PO as speakerStats,hO as speakerTimeline,uT as spendOf,D_ as spendRows,_S as stableToolCallKey,Tf as stampOf,pc as starterAgents,r_ as starterTeam,hl as starterTeams,VS as stepResultText,Cf as streamCodec,ko as stripQualifiers,uo as subjectKey,Mo as subjectTokens,RA as substituteSkillVars,Bp as subtaskFromRequest,xR as suggestExistingTags,Uo as suggestMerges,AA as suggestSkillVar,Ds as suggestionsFormat,xs as suggestionsPrompt,hs as suggestionsStream,ym as summarize,Cc as summarizeEngine,jO as summarySections,le as supportsSubagents,Pt as surveyCorpus,ot as synthesisPrompt,XN as systemWithSummary,PR as tagFacets,DR as tagsSearchText,Kp as takeUp,Hp as takeUpLine,Wp as taskTree,mm as teamForRound,kl as teamFromForm,t_ as teamHealth,qA as teamInvocationText,Zp as teamLanes,qp as teamLine,a_ as teamShape,gp as teamToolProvider,Cp as teamToolSpec,Lp as teamToolTimeoutMs,d_ as teamsWithSolos,kI as testMcpServer,zf as themeStylesheet,JI as threadManifest,Jp as threadRows,Da as threadTitle,YI as threadToolProvider,ya as threadTree,xa as threadsOf,xt as thresholdSweep,AO as tierFor,Zm as tierOf,jt as timedTextUrl,wn as timerIntent,on as timerTrigger,KR as titleFromDate,BR as titleFromParticipants,vR as titleFromSummary,GR as titleFromTopics,Hi as toB64,zl as toBriefClaims,mN as toChatMessages,Yf as toCssVars,tf as toIndexEntry,Bs as toJsonSchema,j_ as toJsonl,dr as toModelSchema,Ar as toModelSchemas,cN as toMultimodalMessages,rf as toSearchRecord,sR as toggleLinePrefix,ER as toggleLink,OR as toggleTag,SR as toggleTask,nR as toggleWrap,bn as tokenize,dS as toolMadeProgress,jr as toolNeedFor,MI as toolStatus,eS as toolTraits,Ge as topicTerms,Sn as topicTrigger,ps as topicsFormat,cs as topicsPrompt,ms as topicsSchema,Rs as topicsStream,iS as traitsIndex,ra as transcriptFromTracks,z as triggerQueryAt,XE as trimDescription,Ce as trimGraph,$d as trustOf,ha as turnsOf,Hs as unfence,Fi as unlockVault,Ae as unwrapRedirect,lr as upcast,Tr as upcastAll,kd as upcastMemory,sA as upcastSkill,SA as upcastSkills,p_ as upsertAgents,ml as usageOf,ME as validateAction,ic as validateAgent,ll as validateBudget,cr as validateCapability,qc as validateConnection,zm as validateEngineSpec,Ui as validateEntry,T as validateEvent,rm as validateGate,pr as validateInvocation,wT as validateJobPost,xT as validateProject,zE as validateRecipe,ji as validateSchedule,nA as validateSkill,Al as validateTeam,to as validateView,ao as validateViewInvocation,so as validateWidget,So as validateWidgetMessage,CI as vaultWidgetSystem,hm as verifyAttested,Dm as verifyChain,fO as verifyEntitlement,gu as verifyPolicyToken,OO as verifySignedToken,Yt as videoMetaFromPlayerResponse,io as viewResult,gt as vocabularyDrift,ln as voiceCommandTrigger,Nt as wantedPages,Uf as wantsModel,LI as wantsVaultGuidance,Kl as waves,NN as weatherFollowupPlace,IN as weatherPlace,EN as weatherToolProvider,br as weatherUrl,Ke as webQuery,BE as webSearchToolProvider,n_ as whereItWorks,gI as widgetAuthoringSystem,lo as widgetIcon,ae as wikiQueryAt,ft as wikilinksIn,yN as windowOf,ET as withBoardTool,gN as withFetchedMemo,CE as withGuidance,qN as withPresence,aE as withResultShield,pT as withRunCache,dN as withSourceTool,HS as withToolSystem,RO as withinFreeLimit,bS as withinReach,sf as wordCount,De as wordDiff,kp as workLogEvidence,hp as workLogFor,yp as workLogText,op as worktreeDirFor,MA as writerAffordance,yA as writerRequest,DA as writerTail};
package/memory.js CHANGED
@@ -1,2 +1,2 @@
1
- const G=1,b=Object.freeze({identity:{label:"Identity",ambient:!0,hint:"Who the user is — name, role, pronouns, language, timezone."},preference:{label:"Preference",ambient:!0,hint:"How they want things done — tone, format, defaults, things never to do."},project:{label:"Project",ambient:!1,hint:"Ongoing work, goals and constraints not derivable from the material itself."},fact:{label:"Fact",ambient:!1,hint:"A durable fact about their world — systems, teams, environments, conventions."},reference:{label:"Reference",ambient:!1,hint:"A pointer to something external — a URL, a dashboard, a ticket, a doc."}}),M=Object.freeze(Object.keys(b)),X=Object.freeze(M.filter(e=>b[e].ambient)),y=280,S=3,B=200,$=1200;class v extends Error{constructor(o){super(o),this.name="MemoryError"}}function C(e={},{now:o=0,newId:s=null}={}){const r=u(e.text);if(r.length<S)throw new v("a memory needs text");if(r.length>y)throw new v(`a memory must be at most ${y} characters — save longer material as a note`);const n=b[e.kind]?e.kind:"fact",a=Number(e.createdAt)||Number(o)||0;return{id:String(e.id||(s?s():"")||""),v:1,text:r,kind:n,scope:String(e.scope||"global"),key:g(r),slot:u(e.slot).toLowerCase()||T(r),tags:[...new Set((e.tags||[]).map(t=>u(t).toLowerCase()).filter(Boolean))].slice(0,8),pinned:!!e.pinned,source:{via:String(e.source?.via||"user"),surface:String(e.source?.surface||""),ref:String(e.source?.ref||""),agent:String(e.source?.agent||"")},confidence:W(e.confidence==null?1:Number(e.confidence)),createdAt:a,updatedAt:Number(e.updatedAt)||a,usedAt:Number(e.usedAt)||0,useCount:Math.max(0,Math.floor(Number(e.useCount)||0)),expiresAt:e.expiresAt?Number(e.expiresAt):null,history:(e.history||[]).slice(-5).map(t=>({text:u(t.text),at:Number(t.at)||0}))}}function Z(e){try{return C(e,{now:e?.createdAt||1}),!!e?.id}catch{return!1}}function g(e){const o=u(e).toLowerCase().replace(/[^\p{L}\p{N}\s]/gu," ").split(/\s+/).filter(s=>s&&!R.has(s));return[...new Set(o)].sort().join(" ")}const R=new Set(["a","an","the","i","im","me","my","mine","we","our","us","you","your","is","am","are","was","were","be","been","being","do","does","did","to","of","in","on","at","for","with","and","or","that","this","it","please","always","usually","generally","really","just","very","so","remember","note","noting","user","prefer","prefers","preferred","like","likes"]);function T(e){const o=u(e).toLowerCase().replace(/^the\s+/,"");if(/^(?:goes by|name is|is called|called)\b/.test(o))return"name";if(/^pronouns\b/.test(o))return"pronouns";const s=/^(?:my\s+|their\s+)?([\p{L}\p{N}][\p{L}\p{N} '-]{0,28}?)\s+(?:is|are|was|were)\b/u.exec(o);if(!s)return"";const r=s[1].split(/\s+/).filter(n=>!R.has(n)).join(" ");return r.length>=3?r:""}function _(e,o){const s=new Set(g(e).split(" ").filter(Boolean)),r=new Set(g(o).split(" ").filter(Boolean));if(!s.size||!r.size)return 0;let n=0;for(const a of s)r.has(a)&&(n+=1);return n/(s.size+r.size-n)}function I(e,o){const s=new Set(g(e).split(" ").filter(Boolean)),r=new Set(g(o).split(" ").filter(Boolean));if(!s.size||!r.size)return 0;let n=0;for(const a of s)r.has(a)&&(n+=1);return n/Math.min(s.size,r.size)}const Y=.8,D=[{re:/^(?:please\s+)?(?:remember|memorize|memorise)(?:\s+that|\s+this)?[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:please\s+)?(?:keep in mind|bear in mind|don'?t forget|do not forget)(?:\s+that)?[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:please\s+)?(?:make a note|note)(?:\s+that|\s+of)[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:from now on|going forward|in future|in the future|henceforth)[:,]?\s+(.+)$/i,kind:"preference"},{re:/^(?:call me|i go by|refer to me as)\s+(.+)$/i,kind:"identity",rebuild:e=>`Goes by ${w(e[1])}`},{re:/^my name(?:'s| is)\s+(.+)$/i,kind:"identity",rebuild:e=>`Name is ${w(e[1])}`},{re:/^(?:always|never)\s+(.+)$/i,kind:"preference",rebuild:(e,o)=>O(o)}],F=[{re:/^i (?:prefer|like|want|need)\s+(.+)$/i,kind:"preference",confidence:.7},{re:/^i (?:hate|dislike|don'?t like|do not like|can'?t stand)\s+(.+)$/i,kind:"preference",confidence:.7},{re:/^i(?:'m| am)(?: a| an| the)?\s+(.+)$/i,kind:"identity",confidence:.6},{re:/^i (?:work|working) (?:on|at|with)\s+(.+)$/i,kind:"project",confidence:.6},{re:/^i(?:'m| am) (?:working|building|writing) (?:on\s+)?(.+)$/i,kind:"project",confidence:.6},{re:/^(?:we|our team|my team) (?:use|uses|are using|run|runs|deploy|deploys)\s+(.+)$/i,kind:"fact",confidence:.6},{re:/^my (?:\w+\s){0,2}?(?:is|are)\s+(.+)$/i,kind:"fact",confidence:.55}],U=[/^(?:please\s+)?forget(?:\s+that|\s+about)?[:,]?\s+(.+)$/i,/^(?:please\s+)?(?:stop remembering|no longer remember|un-?remember)[:,]?\s+(.+)$/i],P=/(?:^|\s)(?:do|does|did|can|could|would|will|what|when|where|who|why|how|are|is)\s+(?:you|i|we|it)\b/i,K=/\b(?:can'?t|cannot|don'?t|do not|couldn'?t|never|didn'?t)\s+(?:seem to\s+)?(?:remember|recall|forget)\b/i;function J(e,{maxCandidates:o=3,includeReveals:s=!0}={}){const r=[],a=String(e||"").replace(/```[\s\S]*?```/g," ").replace(/`[^`]*`/g," ");for(const t of q(a)){if(r.length>=o)break;if(t.length<S||K.test(t))continue;let i=!1;for(const f of U){const l=f.exec(t);if(!l)continue;const d=E(w(l[1]));d.length>=S&&(r.push({op:"forget",text:d,kind:"fact",confidence:1,explicit:!0,trigger:"forget"}),i=!0);break}if(!i&&!P.test(t)){for(const{re:f,kind:l,rebuild:d}of D){const p=f.exec(t);if(!p)continue;const m=E(d?d(p,t):O(w(p[1])));m.length>=S&&(r.push({op:"remember",text:m,kind:l,confidence:1,explicit:!0,trigger:"command"}),i=!0);break}if(!(i||!s))for(const{re:f,kind:l,confidence:d}of F){if(!f.test(t))continue;const p=E(O(t));p.split(/\s+/).length>=3&&r.push({op:"remember",text:p,kind:l,confidence:d,explicit:!1,trigger:"reveal"});break}}}return r.slice(0,o)}function Q(e,o,{now:s=0,newId:r=null}={}){const n=C(o,{now:s,newId:r}),a=(e||[]).filter(i=>i&&i.scope===n.scope),t=n.slot&&a.find(i=>i.slot===n.slot)||a.find(i=>i.key===n.key)||a.find(i=>i.kind===n.kind&&_(i.text,n.text)>=Y);return t?u(t.text).toLowerCase()===n.text.toLowerCase()?{action:"duplicate",record:{...t,updatedAt:Number(s)||t.updatedAt,useCount:t.useCount+1},replaces:t}:{action:"update",record:{...t,text:n.text,key:n.key,slot:n.slot,kind:n.kind,tags:n.tags.length?n.tags:t.tags,confidence:n.confidence,source:n.source,updatedAt:Number(s)||t.updatedAt,history:[...t.history,{text:t.text,at:t.updatedAt}].slice(-5)},replaces:t}:{action:"create",record:n,replaces:null}}function ee(e,o,{limit:s=5}={}){const r=u(o);if(!r)return[];const n=(e||[]).filter(t=>t.id===r);if(n.length)return n;const a=g(r);return(e||[]).map(t=>({m:t,s:t.key===a?1:Math.max(_(t.text,r),I(r,t.text))})).filter(t=>t.s>=.5).sort((t,i)=>i.s-t.s).slice(0,s).map(t=>t.m)}function te(e,{text:o="",scopes:s=["global"],kinds:r=null,now:n=0,limit:a=24,maxChars:t=$,includeAmbient:i=!0}={}){const f=new Set(s.length?s:["global"]),l=new Set(g(o).split(" ").filter(Boolean)),p=(e||[]).filter(c=>c&&c.text).filter(c=>f.has(c.scope)).filter(c=>!r||r.includes(c.kind)).filter(c=>!c.expiresAt||!n||c.expiresAt>n).map(c=>{const k=new Set(c.key.split(" ").filter(Boolean));let x=0;for(const L of k)l.has(L)&&(x+=1);const h=k.size?x/k.size:0,A=i&&b[c.kind]?.ambient,j=n&&c.updatedAt?Math.max(0,1-(n-c.updatedAt)/V):0,z=Math.min(1,c.useCount/10);return{m:c,keep:c.pinned||A||h>0,score:(c.pinned?100:0)+(A?10:0)+h*8+j+z}}),m=[];let N=0;for(const{m:c,keep:k,score:x}of p.filter(h=>h.keep).sort((h,A)=>A.score-h.score)){if(m.length>=a)break;const h=c.text.length+c.kind.length+6;if(N+h>t&&m.length)break;N+=h,m.push(c)}return m}const V=365*24*60*60*1e3;function ne(e,{heading:o="What you already know about this user",maxChars:s=$}={}){const r=(e||[]).filter(t=>t&&t.text);if(!r.length)return"";const n=[];let a=0;for(const t of r){const i=`- (${t.kind}) ${t.text}`;if(a+i.length>s&&n.length)break;a+=i.length+1,n.push(i)}return[`## ${o}`,"Saved by the user in ChatPanel and true across conversations, agents and devices.","Apply them without being asked and without announcing them.",...n,"If the user states something durable about themselves, their preferences or their work, save it with the `memory` tool. If they correct one of these, update it — do not just agree."].join(`
2
- `)}function re(e,o,{now:s=0}={}){const r=new Set(o||[]);return(e||[]).map(n=>r.has(n.id)?{...n,usedAt:Number(s)||n.usedAt,useCount:n.useCount+1}:n)}function oe(e,{now:o=0,max:s=B}={}){const r=(e||[]).filter(Boolean),n=o?r.filter(i=>i.expiresAt&&i.expiresAt<=o):[];let a=n.length?r.filter(i=>!n.includes(i)):r;const t=[...n];if(a.length>s){const i=l=>(l.pinned?3:0)+(b[l.kind]?.ambient?1:0),f=[...a].sort((l,d)=>i(d)-i(l)||d.useCount-l.useCount||(d.usedAt||d.updatedAt)-(l.usedAt||l.updatedAt));t.push(...f.slice(s)),a=f.slice(0,s)}return{kept:a,dropped:t}}const se=Object.freeze({name:"memory",description:'Save, update or remove a durable fact about the USER in ChatPanel — carried into every future conversation, on every model and agent. Use it the moment they state a standing preference ("always be terse"), an identity fact ("call me Alex"), or a constraint about their work that will still be true next week. Do NOT use it for one-off task details, anything already obvious from the conversation, or content that belongs in a note. Keep each memory one short self-contained sentence. Use `forget` when the user says something is no longer true, and `list` to see what is already stored before adding.',parameters:{type:"object",properties:{action:{type:"string",enum:["remember","forget","list"],description:"What to do."},text:{type:"string",description:`The fact, as one short sentence written in the third person ("Prefers terse answers"). Max ${y} characters. Required for remember; for forget, the memory to drop (its text or id).`},kind:{type:"string",enum:M,description:M.map(e=>`${e}: ${b[e].hint}`).join(" ")},tags:{type:"array",items:{type:"string"},description:"Optional short tags for grouping."}},required:["action"]}});function ie(){return["You can give the user a memory that survives this conversation, this model and this device — call the `memory` tool.","Save when they say something durable about themselves, how they want to be helped, or their ongoing work. Do not save task details, transient state, or anything they would not want repeated back to them in a month.","Saving is a change to the user's own data: say in one short clause what you saved."].join(" ")}const H=Object.freeze({});function ae(e){let o=e;for(let s=Number(o?.v)||1;s<1;s+=1){const r=H[s];if(!r)throw new v(`no upcaster from memory v${s}`);o=r(o)}return o}const u=e=>String(e??"").replace(/\s+/g," ").trim(),W=e=>Number.isFinite(e)?Math.min(1,Math.max(0,e)):1,w=e=>u(e).replace(/[.,;:!]+$/,""),E=e=>e.length>y?`${e.slice(0,y-1).trimEnd()}…`:e,O=e=>{const o=w(e);return o&&o[0].toUpperCase()+o.slice(1)};function q(e){return String(e||"").split(/\n+/).flatMap(o=>u(o).replace(/^[-*+•]\s*|^\d+[.)]\s*/,"").split(/(?<=[.!?])\s+(?=[A-Z"'])/)).map(u).filter(Boolean)}export{X as AMBIENT_KINDS,$ as DEFAULT_BLOCK_CHARS,B as DEFAULT_MAX_MEMORIES,y as MAX_MEMORY_CHARS,b as MEMORY_KINDS,M as MEMORY_KIND_NAMES,se as MEMORY_TOOL_SPEC,H as MEMORY_UPCASTERS,G as MEMORY_VERSION,S as MIN_MEMORY_CHARS,v as MemoryError,Y as SAME_FACT,J as candidatesFrom,I as containment,Z as isValidMemory,re as markUsed,ee as matchForForget,ne as memoryBlock,g as memoryKey,ie as memoryToolSystem,C as normalizeMemory,oe as pruneMemories,te as recall,Q as reconcile,_ as similarity,T as slotOf,ae as upcastMemory};
1
+ const Q=1,b=Object.freeze({identity:{label:"Identity",ambient:!0,hint:"Who the user is — name, role, pronouns, language, timezone."},preference:{label:"Preference",ambient:!0,hint:"How they want things done — tone, format, defaults, things never to do."},project:{label:"Project",ambient:!1,hint:"Ongoing work, goals and constraints not derivable from the material itself."},fact:{label:"Fact",ambient:!1,hint:"A durable fact about their world — systems, teams, environments, conventions."},reference:{label:"Reference",ambient:!1,hint:"A pointer to something external — a URL, a dashboard, a ticket, a doc."}}),v=Object.freeze(Object.keys(b)),T=Object.freeze(v.filter(e=>b[e].ambient)),k=280,M=3,I=200,C=1200;class E extends Error{constructor(o){super(o),this.name="MemoryError"}}function R(e={},{now:o=0,newId:s=null}={}){const r=u(e.text);if(r.length<M)throw new E("a memory needs text");if(r.length>k)throw new E(`a memory must be at most ${k} characters — save longer material as a note`);const n=b[e.kind]?e.kind:"fact",a=Number(e.createdAt)||Number(o)||0;return{id:String(e.id||(s?s():"")||""),v:1,text:r,kind:n,scope:String(e.scope||"global"),key:m(r),slot:u(e.slot).toLowerCase()||D(r),tags:[...new Set((e.tags||[]).map(t=>u(t).toLowerCase()).filter(Boolean))].slice(0,8),pinned:!!e.pinned,source:{via:String(e.source?.via||"user"),surface:String(e.source?.surface||""),ref:String(e.source?.ref||""),agent:String(e.source?.agent||"")},confidence:Z(e.confidence==null?1:Number(e.confidence)),createdAt:a,updatedAt:Number(e.updatedAt)||a,usedAt:Number(e.usedAt)||0,useCount:Math.max(0,Math.floor(Number(e.useCount)||0)),expiresAt:e.expiresAt?Number(e.expiresAt):null,history:(e.history||[]).slice(-5).map(t=>({text:u(t.text),at:Number(t.at)||0}))}}function ee(e){try{return R(e,{now:e?.createdAt||1}),!!e?.id}catch{return!1}}function m(e){const o=u(e).toLowerCase().replace(/[^\p{L}\p{N}\s]/gu," ").split(/\s+/).filter(s=>s&&!z.has(s));return[...new Set(o)].sort().join(" ")}const z=new Set(["a","an","the","i","im","me","my","mine","we","our","us","you","your","is","am","are","was","were","be","been","being","do","does","did","to","of","in","on","at","for","with","and","or","that","this","it","please","always","usually","generally","really","just","very","so","remember","note","noting","user","prefer","prefers","preferred","like","likes"]);function D(e){const o=u(e).toLowerCase().replace(/^the\s+/,"");if(/^(?:goes by|name is|is called|called)\b/.test(o))return"name";if(/^pronouns\b/.test(o))return"pronouns";const s=/^(?:my\s+|their\s+)?([\p{L}\p{N}][\p{L}\p{N} '-]{0,28}?)\s+(?:is|are|was|were)\b/u.exec(o);if(!s)return"";const r=s[1].split(/\s+/).filter(n=>!z.has(n)).join(" ");return r.length>=3?r:""}function _(e,o){const s=new Set(m(e).split(" ").filter(Boolean)),r=new Set(m(o).split(" ").filter(Boolean));if(!s.size||!r.size)return 0;let n=0;for(const a of s)r.has(a)&&(n+=1);return n/(s.size+r.size-n)}function Y(e,o){const s=new Set(m(e).split(" ").filter(Boolean)),r=new Set(m(o).split(" ").filter(Boolean));if(!s.size||!r.size)return 0;let n=0;for(const a of s)r.has(a)&&(n+=1);return n/Math.min(s.size,r.size)}const F=.8,U=[{re:/^(?:please\s+)?(?:remember|memorize|memorise)(?:\s+that|\s+this)?[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:please\s+)?(?:keep in mind|bear in mind|don'?t forget|do not forget)(?:\s+that)?[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:please\s+)?(?:make a note|note)(?:\s+that|\s+of)[:,]?\s+(.+)$/i,kind:"fact"},{re:/^(?:from now on|going forward|in future|in the future|henceforth)[:,]?\s+(.+)$/i,kind:"preference"},{re:/^(?:call me|i go by|refer to me as)\s+(.+)$/i,kind:"identity",rebuild:e=>`Goes by ${x(e[1])}`},{re:/^my name(?:'s| is)\s+(.+)$/i,kind:"identity",rebuild:e=>`Name is ${x(e[1])}`},{re:/^(?:always|never)\s+(.+)$/i,kind:"preference",rebuild:(e,o)=>N(o)}],P=[{re:/^i (?:prefer|like|want|need)\s+(.+)$/i,kind:"preference",confidence:.7},{re:/^i (?:hate|dislike|don'?t like|do not like|can'?t stand)\s+(.+)$/i,kind:"preference",confidence:.7},{re:/^i(?:'m| am)(?: a| an| the)?\s+(.+)$/i,kind:"identity",confidence:.6},{re:/^i (?:work|working) (?:on|at|with)\s+(.+)$/i,kind:"project",confidence:.6},{re:/^i(?:'m| am) (?:working|building|writing) (?:on\s+)?(.+)$/i,kind:"project",confidence:.6},{re:/^(?:we|our team|my team) (?:use|uses|are using|run|runs|deploy|deploys)\s+(.+)$/i,kind:"fact",confidence:.6},{re:/^my (?:\w+\s){0,2}?(?:is|are)\s+(.+)$/i,kind:"fact",confidence:.55}],K=[/^(?:please\s+)?forget(?:\s+that|\s+about)?[:,]?\s+(.+)$/i,/^(?:please\s+)?(?:stop remembering|no longer remember|un-?remember)[:,]?\s+(.+)$/i],V=/(?:^|\s)(?:do|does|did|can|could|would|will|what|when|where|who|why|how|are|is)\s+(?:you|i|we|it)\b/i,W=/\b(?:can'?t|cannot|don'?t|do not|couldn'?t|never|didn'?t)\s+(?:seem to\s+)?(?:remember|recall|forget)\b/i;function te(e,{maxCandidates:o=3,includeReveals:s=!0}={}){const r=[],a=String(e||"").replace(/```[\s\S]*?```/g," ").replace(/`[^`]*`/g," ");for(const t of J(a)){if(r.length>=o)break;if(t.length<M||W.test(t))continue;let i=!1;for(const f of K){const l=f.exec(t);if(!l)continue;const d=O(x(l[1]));d.length>=M&&(r.push({op:"forget",text:d,kind:"fact",confidence:1,explicit:!0,trigger:"forget"}),i=!0);break}if(!i&&!V.test(t)){for(const{re:f,kind:l,rebuild:d}of U){const h=f.exec(t);if(!h)continue;const A=O(d?d(h,t):N(x(h[1])));A.length>=M&&(r.push({op:"remember",text:A,kind:l,confidence:1,explicit:!0,trigger:"command"}),i=!0);break}if(!(i||!s))for(const{re:f,kind:l,confidence:d}of P){if(!f.test(t))continue;const h=O(N(t));h.split(/\s+/).length>=3&&r.push({op:"remember",text:h,kind:l,confidence:d,explicit:!1,trigger:"reveal"});break}}}return r.slice(0,o)}function ne(e,o,{now:s=0,newId:r=null}={}){const n=R(o,{now:s,newId:r}),a=(e||[]).filter(i=>i&&i.scope===n.scope),t=n.slot&&a.find(i=>i.slot===n.slot)||a.find(i=>i.key===n.key)||a.find(i=>i.kind===n.kind&&_(i.text,n.text)>=F);return t?u(t.text).toLowerCase()===n.text.toLowerCase()?{action:"duplicate",record:{...t,updatedAt:Number(s)||t.updatedAt,useCount:t.useCount+1},replaces:t}:{action:"update",record:{...t,text:n.text,key:n.key,slot:n.slot,kind:n.kind,tags:n.tags.length?n.tags:t.tags,confidence:n.confidence,source:n.source,updatedAt:Number(s)||t.updatedAt,history:[...t.history,{text:t.text,at:t.updatedAt}].slice(-5)},replaces:t}:{action:"create",record:n,replaces:null}}function re(e,o,{limit:s=5}={}){const r=u(o);if(!r)return[];const n=(e||[]).filter(t=>t.id===r);if(n.length)return n;const a=m(r);return(e||[]).map(t=>({m:t,s:t.key===a?1:Math.max(_(t.text,r),Y(r,t.text))})).filter(t=>t.s>=.5).sort((t,i)=>i.s-t.s).slice(0,s).map(t=>t.m)}function oe(e,{text:o="",scopes:s=["global"],kinds:r=null,now:n=0,limit:a=24,maxChars:t=C,includeAmbient:i=!0,ambientKinds:f=T}={}){const l=new Set(s.length?s:["global"]),d=new Set(m(o).split(" ").filter(Boolean)),A=(e||[]).filter(c=>c&&c.text).filter(c=>l.has(c.scope)).filter(c=>!r||r.includes(c.kind)).filter(c=>!c.expiresAt||!n||c.expiresAt>n).map(c=>{const w=new Set(c.key.split(" ").filter(Boolean));let S=0;for(const L of w)d.has(L)&&(S+=1);const p=w.size?S/w.size:0,g=i&&f.includes(c.kind)&&b[c.kind]?.ambient&&w.size<=H,j=n&&c.updatedAt?Math.max(0,1-(n-c.updatedAt)/G):0,B=Math.min(1,c.useCount/10);return{m:c,keep:c.pinned||g||p>0,score:(c.pinned?100:0)+(g?10:0)+p*8+j+B}}),y=[];let $=0;for(const{m:c,keep:w,score:S}of A.filter(p=>p.keep).sort((p,g)=>g.score-p.score)){if(y.length>=a)break;if(y.some(g=>q(g,c)))continue;const p=c.text.length+c.kind.length+6;if($+p>t&&y.length)break;$+=p,y.push(c)}return y}const H=14;function q(e,o){const s=new Set(String(e?.key||"").split(" ").filter(Boolean)),r=new Set(String(o?.key||"").split(" ").filter(Boolean));if(!s.size||!r.size)return!1;const[n,a]=s.size<=r.size?[s,r]:[r,s];let t=0;for(const i of n)a.has(i)&&(t+=1);return t/n.size>=.7}const G=365*24*60*60*1e3;function se(e,{heading:o="What you already know about this user",maxChars:s=C}={}){const r=(e||[]).filter(t=>t&&t.text);if(!r.length)return"";const n=[];let a=0;for(const t of r){const i=`- (${t.kind}) ${t.text}`;if(a+i.length>s&&n.length)break;a+=i.length+1,n.push(i)}return[`## ${o}`,"Saved by the user in ChatPanel and true across conversations, agents and devices.","Apply them without being asked and without announcing them.",...n,"If the user states something durable about themselves, their preferences or their work, save it with the `memory` tool. If they correct one of these, update it — do not just agree."].join(`
2
+ `)}function ie(e,o,{now:s=0}={}){const r=new Set(o||[]);return(e||[]).map(n=>r.has(n.id)?{...n,usedAt:Number(s)||n.usedAt,useCount:n.useCount+1}:n)}function ae(e,{now:o=0,max:s=I}={}){const r=(e||[]).filter(Boolean),n=o?r.filter(i=>i.expiresAt&&i.expiresAt<=o):[];let a=n.length?r.filter(i=>!n.includes(i)):r;const t=[...n];if(a.length>s){const i=l=>(l.pinned?3:0)+(b[l.kind]?.ambient?1:0),f=[...a].sort((l,d)=>i(d)-i(l)||d.useCount-l.useCount||(d.usedAt||d.updatedAt)-(l.usedAt||l.updatedAt));t.push(...f.slice(s)),a=f.slice(0,s)}return{kept:a,dropped:t}}const ce=Object.freeze({name:"memory",description:'Save, update or remove a durable fact about the USER in ChatPanel — carried into every future conversation, on every model and agent. Use it the moment they state a standing preference ("always be terse"), an identity fact ("call me Alex"), or a constraint about their work that will still be true next week. Do NOT use it for one-off task details, anything already obvious from the conversation, or content that belongs in a note. Keep each memory one short self-contained sentence. Use `forget` when the user says something is no longer true, and `list` to see what is already stored before adding.',parameters:{type:"object",properties:{action:{type:"string",enum:["remember","forget","list"],description:"What to do."},text:{type:"string",description:`The fact, as one short sentence written in the third person ("Prefers terse answers"). Max ${k} characters. Required for remember; for forget, the memory to drop (its text or id).`},kind:{type:"string",enum:v,description:v.map(e=>`${e}: ${b[e].hint}`).join(" ")},tags:{type:"array",items:{type:"string"},description:"Optional short tags for grouping."}},required:["action"]}});function le(){return"`memory` saves something durable the user says about themselves, how they want to be helped, or their ongoing work never task details or transient state and you say in a short clause what you saved."}const X=Object.freeze({});function de(e){let o=e;for(let s=Number(o?.v)||1;s<1;s+=1){const r=X[s];if(!r)throw new E(`no upcaster from memory v${s}`);o=r(o)}return o}const u=e=>String(e??"").replace(/\s+/g," ").trim(),Z=e=>Number.isFinite(e)?Math.min(1,Math.max(0,e)):1,x=e=>u(e).replace(/[.,;:!]+$/,""),O=e=>e.length>k?`${e.slice(0,k-1).trimEnd()}…`:e,N=e=>{const o=x(e);return o&&o[0].toUpperCase()+o.slice(1)};function J(e){return String(e||"").split(/\n+/).flatMap(o=>u(o).replace(/^[-*+•]\s*|^\d+[.)]\s*/,"").split(/(?<=[.!?])\s+(?=[A-Z"'])/)).map(u).filter(Boolean)}export{T as AMBIENT_KINDS,H as AMBIENT_MAX_WORDS,C as DEFAULT_BLOCK_CHARS,I as DEFAULT_MAX_MEMORIES,k as MAX_MEMORY_CHARS,b as MEMORY_KINDS,v as MEMORY_KIND_NAMES,ce as MEMORY_TOOL_SPEC,X as MEMORY_UPCASTERS,Q as MEMORY_VERSION,M as MIN_MEMORY_CHARS,E as MemoryError,F as SAME_FACT,te as candidatesFrom,Y as containment,ee as isValidMemory,ie as markUsed,re as matchForForget,se as memoryBlock,m as memoryKey,le as memoryToolSystem,R as normalizeMemory,ae as pruneMemories,oe as recall,ne as reconcile,q as sameMemory,_ as similarity,D as slotOf,de as upcastMemory};
@@ -1 +1 @@
1
- import{classifySource as y}from"./sources.js";import{defineModel as x}from"./router.js";function w(e){if(e.kind==="bridge")return"trusted";const n=String(e.baseUrl||e.url||"");if(/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\]|0\.0\.0\.0)(:|\/|$)/i.test(n))return"device";const i=y(n);return i.internal&&i.matched!=="unparseable"?"trusted":"any"}const L=Object.freeze([{id:"tools",label:"Tools",hint:"Can call functions — needed for page actions, search and MCP."},{id:"vision",label:"Vision",hint:"Can read images and screenshots."},{id:"reasoning",label:"Reasoning",hint:"Thinks before answering — worth the wait on hard tasks."},{id:"long-context",label:"Long context",hint:"Handles large documents and long meetings."},{id:"coding",label:"Coding",hint:"Strong at writing and refactoring code."},{id:"json",label:"Structured output",hint:"Reliably returns valid JSON."},{id:"speech-in",label:"Speech in",hint:"Takes audio as input — a meeting, a voice note."},{id:"speech-out",label:"Speech out",hint:"Speaks its answer."},{id:"audio",label:"Audio",hint:"Understands audio content beyond speech — music, sounds."},{id:"image-out",label:"Image out",hint:"Generates images."}]);function O(e){const n=String(e.model||"").toLowerCase(),i=new Set(["json"]);return(e.kind==="bridge"||e.model)&&i.add("tools"),/gpt-4|gpt-5|claude|gemini|vision|vl\b|llava|pixtral/.test(n)&&i.add("vision"),/o1|o3|r1|reason|think|opus|sonnet|deepseek-r/.test(n)&&i.add("reasoning"),/200k|1m\b|long|gemini|claude|gpt-4\.1|gpt-5/.test(n)&&i.add("long-context"),/code|coder|codex|deepseek|qwen|opus|sonnet/.test(n)&&i.add("coding"),e.kind==="bridge"&&(i.add("coding"),i.add("reasoning")),[...i]}const p=[/localhost|127\.0\.0\.1|ollama|lm.?studio/i,/anthropic|openai\.com|api\.deepseek|googleapis|x\.ai/i,/(^|\W)bridge(\W|$)/i,/openrouter|huggingface|together|groq|fireworks|nvidia|replicate/i],b=1e3;function R(e,n){const i=`${e.baseUrl||e.url||""} ${e.name||""} ${n||e.kind||""}`;for(let t=0;t<p.length;t++)if(p[t].test(i))return b+t*10;return b+50}function m(e){const n=`${e.model||""} ${e.name||""}`.toLowerCase(),i=Number(/(\d+(?:\.\d+)?)\s*b\b/.exec(n)?.[1]);return Number.isFinite(i)?i>=60?.85:i>=20?.6:.3:/instant|mini|nano|tiny|lite|-small\b|haiku/.test(n)?.3:/opus|gpt-5|o1|o3|\bpro\b|ultra|deepseek-r|thinking/.test(n)?.9:/sonnet|gpt-4|flash|gemini|deepseek|qwen|mistral|codestral/.test(n)?.6:e.kind==="bridge"?.8:.5}function g(e,n){const i=e==="device"?1500:700,t=Number.isFinite(n)?n:.5;return Math.round(i*(.6+t))}function S(e,n){if(n==="device")return 0;const i=String(e.model||"").toLowerCase();return/opus|gpt-4|pro\b/.test(i)?5:/sonnet|mini|flash|haiku/.test(i)?1:2}function c(e){if(e==null||e===""||typeof e=="boolean")return null;const n=Number(e);return Number.isFinite(n)?n:null}function u(e,n={}){if(!n||typeof n!="object")return e;const i={...e},t=c(n.providerRank);t!==null&&(i.providerRank=t,i.orderPinned=!0),Array.isArray(n.capabilities)&&(i.capabilities=[...n.capabilities]);for(const a of["costPer1k","latencyMs","quality"]){const l=c(n[a]);l!==null&&(i[a]=l)}return typeof n.available=="boolean"&&(i.available=n.available),n.reach&&k[n.reach]>k[e.reach]&&(i.reach=n.reach),i}import{DEFAULT_MIN_CALLS as h,cardOverride as v}from"./model-ledger.js";import{cardOverride as I}from"./model-ledger.js";function E(e,n,{minCalls:i=h,jobKind:t=null,userOverride:a=null}={}){const{override:l,observed:r}=v(n,{minCalls:i,jobKind:t});let o=u(e,l);const d=new Set(n?.capabilities?.withdrawn||[]);return d.size&&Array.isArray(o.capabilities)&&(o={...o,capabilities:o.capabilities.filter(s=>!d.has(s))},r.push("capabilities")),a&&(o=u(o,a)),{...o,observed:r}}const k={device:0,trusted:1,any:2},f=["device","trusted","any"];function M(e){const n=f.indexOf(e);return n<0?[...f]:f.slice(n)}function _(e,n,{override:i=null,health:t=null}={}){if(!e||!e.model&&n!=="bridge"&&e.kind!=="bridge")return null;const a=e.id||e.name||e.model;if(!a)return null;const l=[e.name,e.model&&e.model!==e.name?e.model:null].filter(Boolean).join(" · ")||[e.bridgeAgent,e.model].filter(Boolean).join(" · ")||n||e.kind||String(a),r=n||e.kind,o=w({...e,kind:r}),d={id:a,label:l,model:e.model||"",reach:o,classUsed:o==="device"?"L":r==="bridge"?"A":"C",capabilities:O({...e,kind:r}),costPer1k:S(e,o),latencyMs:g(o,m({...e,kind:r})),quality:m({...e,kind:r}),providerRank:R(e,r),available:e.enabled!==!1},s=u(d,i||{});return e.enabled===!1&&(s.available=!1),c(i?.latencyMs)===null&&(s.latencyMs=g(o,s.quality)),x({...s,available:s.available&&(t?t.available!==!1:!0),rateLimited:!!t?.rateLimited})}export{h as DEFAULT_MIN_CALLS,L as KNOWN_CAPABILITIES,k as REACH_RANK,E as applyCard,u as applyOverride,O as capabilitiesOf,I as cardOverride,S as costOf,_ as inferCandidate,g as latencyOf,c as numericOverride,R as providerRankOf,m as qualityOf,M as reachChoicesFor,w as reachOf};
1
+ import{classifySource as y}from"./sources.js";import{defineModel as w}from"./router.js";import{windowOf as x}from"./context-window.js";function O(e){if(e.kind==="bridge")return"trusted";const n=String(e.baseUrl||e.url||"");if(/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\]|0\.0\.0\.0)(:|\/|$)/i.test(n))return"device";const i=y(n);return i.internal&&i.matched!=="unparseable"?"trusted":"any"}const E=Object.freeze([{id:"tools",label:"Tools",hint:"Can call functions — needed for page actions, search and MCP."},{id:"vision",label:"Vision",hint:"Can read images and screenshots."},{id:"reasoning",label:"Reasoning",hint:"Thinks before answering — worth the wait on hard tasks."},{id:"long-context",label:"Long context",hint:"Handles large documents and long meetings."},{id:"coding",label:"Coding",hint:"Strong at writing and refactoring code."},{id:"json",label:"Structured output",hint:"Reliably returns valid JSON."},{id:"speech-in",label:"Speech in",hint:"Takes audio as input — a meeting, a voice note."},{id:"speech-out",label:"Speech out",hint:"Speaks its answer."},{id:"audio",label:"Audio",hint:"Understands audio content beyond speech — music, sounds."},{id:"image-out",label:"Image out",hint:"Generates images."}]);function R(e){const n=String(e.model||"").toLowerCase(),i=new Set(["json"]);return(e.kind==="bridge"||e.model)&&i.add("tools"),/gpt-4|gpt-5|claude|gemini|vision|vl\b|llava|pixtral/.test(n)&&i.add("vision"),/o1|o3|r1|reason|think|opus|sonnet|deepseek-r/.test(n)&&i.add("reasoning"),/200k|1m\b|long|gemini|claude|gpt-4\.1|gpt-5/.test(n)&&i.add("long-context"),/code|coder|codex|deepseek|qwen|opus|sonnet/.test(n)&&i.add("coding"),e.kind==="bridge"&&(i.add("coding"),i.add("reasoning")),[...i]}const p=[/localhost|127\.0\.0\.1|ollama|lm.?studio/i,/anthropic|openai\.com|api\.deepseek|googleapis|x\.ai/i,/(^|\W)bridge(\W|$)/i,/openrouter|huggingface|together|groq|fireworks|nvidia|replicate/i],b=1e3;function S(e,n){const i=`${e.baseUrl||e.url||""} ${e.name||""} ${n||e.kind||""}`;for(let t=0;t<p.length;t++)if(p[t].test(i))return b+t*10;return b+50}function m(e){const n=`${e.model||""} ${e.name||""}`.toLowerCase(),i=Number(/(\d+(?:\.\d+)?)\s*b\b/.exec(n)?.[1]);return Number.isFinite(i)?i>=60?.85:i>=20?.6:.3:/instant|mini|nano|tiny|lite|-small\b|haiku/.test(n)?.3:/opus|gpt-5|o1|o3|\bpro\b|ultra|deepseek-r|thinking/.test(n)?.9:/sonnet|gpt-4|flash|gemini|deepseek|qwen|mistral|codestral/.test(n)?.6:e.kind==="bridge"?.8:.5}function g(e,n){const i=e==="device"?1500:700,t=Number.isFinite(n)?n:.5;return Math.round(i*(.6+t))}function v(e,n){if(n==="device")return 0;const i=String(e.model||"").toLowerCase();return/opus|gpt-4|pro\b/.test(i)?5:/sonnet|mini|flash|haiku/.test(i)?1:2}function c(e){if(e==null||e===""||typeof e=="boolean")return null;const n=Number(e);return Number.isFinite(n)?n:null}function u(e,n={}){if(!n||typeof n!="object")return e;const i={...e},t=c(n.providerRank);t!==null&&(i.providerRank=t,i.orderPinned=!0),Array.isArray(n.capabilities)&&(i.capabilities=[...n.capabilities]);for(const r of["costPer1k","latencyMs","quality","window"]){const l=c(n[r]);l!==null&&(i[r]=l)}return typeof n.available=="boolean"&&(i.available=n.available),n.reach&&k[n.reach]>k[e.reach]&&(i.reach=n.reach),i}import{DEFAULT_MIN_CALLS as h,cardOverride as A}from"./model-ledger.js";import{cardOverride as $}from"./model-ledger.js";function _(e,n,{minCalls:i=h,jobKind:t=null,userOverride:r=null}={}){const{override:l,observed:a}=A(n,{minCalls:i,jobKind:t});let o=u(e,l);const d=new Set(n?.capabilities?.withdrawn||[]);return d.size&&Array.isArray(o.capabilities)&&(o={...o,capabilities:o.capabilities.filter(s=>!d.has(s))},a.push("capabilities")),r&&(o=u(o,r)),{...o,observed:a}}const k={device:0,trusted:1,any:2},f=["device","trusted","any"];function q(e){const n=f.indexOf(e);return n<0?[...f]:f.slice(n)}function F(e,n,{override:i=null,health:t=null}={}){if(!e||!e.model&&n!=="bridge"&&e.kind!=="bridge")return null;const r=e.id||e.name||e.model;if(!r)return null;const l=[e.name,e.model&&e.model!==e.name?e.model:null].filter(Boolean).join(" · ")||[e.bridgeAgent,e.model].filter(Boolean).join(" · ")||n||e.kind||String(r),a=n||e.kind,o=O({...e,kind:a}),d={id:r,label:l,model:e.model||"",reach:o,classUsed:o==="device"?"L":a==="bridge"?"A":"C",capabilities:R({...e,kind:a}),window:x({...e,kind:a,reach:o}),costPer1k:v(e,o),latencyMs:g(o,m({...e,kind:a})),quality:m({...e,kind:a}),providerRank:S(e,a),available:e.enabled!==!1},s=u(d,i||{});return e.enabled===!1&&(s.available=!1),c(i?.latencyMs)===null&&(s.latencyMs=g(o,s.quality)),w({...s,available:s.available&&(t?t.available!==!1:!0),rateLimited:!!t?.rateLimited})}export{h as DEFAULT_MIN_CALLS,E as KNOWN_CAPABILITIES,k as REACH_RANK,_ as applyCard,u as applyOverride,R as capabilitiesOf,$ as cardOverride,v as costOf,F as inferCandidate,g as latencyOf,c as numericOverride,S as providerRankOf,m as qualityOf,q as reachChoicesFor,O as reachOf};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chatpanel/events",
3
- "version": "0.112.1",
3
+ "version": "0.114.0",
4
4
  "description": "The canonical ChatPanel event-log and capability contracts — typed durable facts, clock-free deterministic linearization, schema upcasting, and the invariants the replay harness asserts. Pure, dependency-free ESM shared by the ChatPanel extension, gateway and bridge.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -146,7 +146,9 @@
146
146
  "./policy.js": "./policy.js",
147
147
  "./presence.js": "./presence.js",
148
148
  "./prefetch.js": "./prefetch.js",
149
- "./fetched.js": "./fetched.js"
149
+ "./fetched.js": "./fetched.js",
150
+ "./context-window.js": "./context-window.js",
151
+ "./compaction.js": "./compaction.js"
150
152
  },
151
153
  "files": [
152
154
  "LICENSE",
@@ -214,6 +216,8 @@
214
216
  "presence.js",
215
217
  "prefetch.js",
216
218
  "fetched.js",
219
+ "context-window.js",
220
+ "compaction.js",
217
221
  "promotion.js",
218
222
  "queue.js",
219
223
  "reach.js",
@@ -1,2 +1,2 @@
1
- import{defineMiddleware as m,defineRouteStrategy as f,signalsFrom as y,requirementsFor as h,preferenceFor as p,failoverOrder as x,pinnedOrderOf as u}from"./router.js";const g=m({id:"redaction",label:"Redaction",stage:"request",priority:10,requiredFor:i=>i.reach==="any",run:async i=>i}),w=f({id:"escalate-on-complexity",label:"Escalate hard tasks",classUsed:"R",decide:async(i,r)=>{const t=r.signals;if(t?.smalltalk||r.background||!(t?.complexity==="high"||t?.modality==="vision"||r.structured))return null;const n=new Set;t?.complexity==="high"&&n.add("reasoning"),r.structured&&n.add("tools"),t?.modality==="vision"&&n.add("vision"),t?.approxTokens>2e4&&n.add("long-context");const a=e=>[...n].filter(c=>e.capabilities.includes(c)).length,s=Math.max(...i.map(a));let l=s>0?i.filter(e=>a(e)===s):i;if(r.structured){const e=l.filter(c=>c.classUsed!=="A");e.length&&(l=e)}const o=e=>Number.isFinite(e.quality)?e.quality:.5;return[...l].sort((e,c)=>o(c)-o(e)||u(e)-u(c)||e.costPer1k-c.costPer1k)}}),S=f({id:"failover-to-similar",label:"Replace like with like",classUsed:"R",decide:async(i,r)=>{const t=r.like;return t?x(i,t):null}}),R=f({id:"named-by-user",label:"Use the model you asked for",classUsed:"R",decide:async(i,r)=>{const t=String(r.requestText||"").toLowerCase();if(!t)return null;const d=/\b(?:use|using|with|via|ask|switch to|route to|try)\s+([a-z0-9][a-z0-9.\- ]{1,28})/g,n=[];for(const s of t.matchAll(d))n.push(s[1].trim());if(!n.length)return null;const a=i.filter(s=>{const l=[s.label,s.model,s.id].filter(Boolean).map(o=>String(o).toLowerCase());return n.some(o=>l.some(e=>e.includes(o)||o.includes(e.split(" · ")[0])))});return a.length?[...a].sort((s,l)=>u(s)-u(l)):null}}),T=[R,S,w],v=[g];function q({capabilities:i=[],request:r=null,structured:t=!1,pageTools:d=!1,force:n=!1,background:a=!1,guard:s=null}={}){const l=r?y(r):{},o=h(l,{structured:t,pageTools:d,hasTools:i.includes("tools"),background:a}),e=p(l,{structured:t,minQuality:o.minQuality,hasTools:i.includes("tools"),background:a});return{prefer:e.prefer,reach:s?s.reach:"any",capabilities:[...new Set([...i,...o.required])],minQuality:o.minQuality,negotiable:o.negotiable,requirementReasons:[...s?[...o.why,s.why]:o.why,e.why],sourceGuard:s,signals:l,requestText:r?String(r.text||(r.messages||[]).map(c=>c?.content||"").join(`
2
- `)).slice(-2e3):"",structured:t,force:n,background:a}}export{v as ROUTE_MIDDLEWARE,T as ROUTE_STRATEGIES,w as complexityStrategy,R as explicitModelStrategy,S as failoverStrategy,q as needForTurn,g as redactionStep};
1
+ import{defineMiddleware as y,defineRouteStrategy as f,signalsFrom as h,requirementsFor as p,preferenceFor as x,failoverOrder as g,pinnedOrderOf as u}from"./router.js";const w=y({id:"redaction",label:"Redaction",stage:"request",priority:10,requiredFor:i=>i.reach==="any",run:async i=>i}),S=f({id:"escalate-on-complexity",label:"Escalate hard tasks",classUsed:"R",decide:async(i,n)=>{const t=n.signals;if(t?.smalltalk||n.background||!(t?.complexity==="high"||t?.modality==="vision"||n.structured))return null;const o=new Set;t?.complexity==="high"&&o.add("reasoning"),n.structured&&o.add("tools"),t?.modality==="vision"&&o.add("vision"),t?.approxTokens>2e4&&o.add("long-context");const a=e=>[...o].filter(l=>e.capabilities.includes(l)).length,s=Math.max(...i.map(a));let c=s>0?i.filter(e=>a(e)===s):i;if(n.structured){const e=c.filter(l=>l.classUsed!=="A");e.length&&(c=e)}const r=e=>Number.isFinite(e.quality)?e.quality:.5;return[...c].sort((e,l)=>r(l)-r(e)||u(e)-u(l)||e.costPer1k-l.costPer1k)}}),R=f({id:"failover-to-similar",label:"Replace like with like",classUsed:"R",decide:async(i,n)=>{const t=n.like;return t?g(i,t):null}}),k=f({id:"named-by-user",label:"Use the model you asked for",classUsed:"R",decide:async(i,n)=>{const t=String(n.requestText||"").toLowerCase();if(!t)return null;const d=/\b(?:use|using|with|via|ask|switch to|route to|try)\s+([a-z0-9][a-z0-9.\- ]{1,28})/g,o=[];for(const s of t.matchAll(d))o.push(s[1].trim());if(!o.length)return null;const a=i.filter(s=>{const c=[s.label,s.model,s.id].filter(Boolean).map(r=>String(r).toLowerCase());return o.some(r=>c.some(e=>e.includes(r)||r.includes(e.split(" · ")[0])))});return a.length?[...a].sort((s,c)=>u(s)-u(c)):null}}),v=[k,R,S],q=[w];function E({capabilities:i=[],request:n=null,structured:t=!1,pageTools:d=!1,force:o=!1,background:a=!1,guard:s=null,minWindow:c=0}={}){const r=n?h(n):{},e=p(r,{structured:t,pageTools:d,hasTools:i.includes("tools"),background:a,minWindow:c}),l=x(r,{structured:t,minQuality:e.minQuality,hasTools:i.includes("tools"),background:a});return{prefer:l.prefer,reach:s?s.reach:"any",capabilities:[...new Set([...i,...e.required])],minQuality:e.minQuality,minWindow:e.minWindow,negotiable:e.negotiable,requirementReasons:[...s?[...e.why,s.why]:e.why,l.why],sourceGuard:s,signals:r,requestText:n?String(n.text||(n.messages||[]).map(m=>m?.content||"").join(`
2
+ `)).slice(-2e3):"",structured:t,force:o,background:a}}export{q as ROUTE_MIDDLEWARE,v as ROUTE_STRATEGIES,S as complexityStrategy,k as explicitModelStrategy,R as failoverStrategy,E as needForTurn,w as redactionStep};
package/router.js CHANGED
@@ -1,2 +1,2 @@
1
- class k extends Error{constructor(o,a){super(a),this.name="RouterError",this.code=o}}import{REACH as ee,reachRank as te}from"./reach.js";import{REACH as C,reachRank as D}from"./reach.js";function U({id:r,label:o,reach:a="any",classUsed:d="C",capabilities:u=[],costPer1k:l=1,latencyMs:p=1e3,load:m=0,available:i=!0,rateLimited:t=!1,observedLatencyMs:s=null,quality:f=null,model:c="",providerRank:g=50,orderPinned:b=!1}){if(!r)throw new k("BAD_MODEL","model.id required");if(!C.includes(a))throw new k("BAD_MODEL",`model '${r}': unknown reach '${a}'`);return Object.freeze({id:r,label:o||r,reach:a,classUsed:d,model:c,capabilities:[...u],costPer1k:l,latencyMs:Number.isFinite(s)?s:p,declaredLatencyMs:p,observedLatencyMs:s,load:m,available:i,rateLimited:t,providerRank:g,orderPinned:!!b,quality:f})}function z({id:r,label:o,stage:a,priority:d=100,run:u,requiredFor:l=null}){if(!r)throw new k("BAD_MIDDLEWARE","middleware.id required");if(!["request","response"].includes(a))throw new k("BAD_MIDDLEWARE",`middleware '${r}': stage must be request or response`);if(typeof u!="function")throw new k("BAD_MIDDLEWARE",`middleware '${r}': run required`);return Object.freeze({id:r,label:o||r,stage:a,priority:d,run:u,requiredFor:l})}function G({id:r,label:o,classUsed:a="R",timeoutMs:d=0,decide:u}){if(!r)throw new k("BAD_STRATEGY","strategy.id required");if(typeof u!="function")throw new k("BAD_STRATEGY",`strategy '${r}': decide required`);return Object.freeze({id:r,label:o||r,classUsed:a,timeoutMs:d,decide:u})}const T=.1,L=5,N=Object.freeze({device:.7,trusted:.85,any:1});function P(r){return String(r?.model||r?.label||"").toLowerCase().replace(/^[^/]+\//,"").replace(/[:@].*$/,"").replace(/[^a-z0-9.]+/g,"")}function W(r={}){const o=String(r.text||(r.messages||[]).map(l=>l?.content||"").join(`
2
- `)||""),a=o.length,d=!!(r.images?.length||r.attachments?.some?.(l=>/^image\//.test(l?.type||""))),u=!!r.audio||!!r.attachments?.some?.(l=>/^audio\//.test(l?.type||""));return{approxTokens:Math.round(a/4),modality:u?"audio":d?"vision":"text",code:/```/.test(o)||a>80&&/\bfunction\b|\bclass\b|=>|;\s*$|\bdef\b|\bimport\b|\bconst\b/m.test(o)||/\b(write|fix|debug|refactor|implement|optimi[sz]e|review|explain|generate|add|update|port|migrate)\b[^.?!]{0,60}\b(code|function|method|class|script|bug|regex|query|unit ?test|module|component|endpoint|snippet|compiler?|stack ?trace|typescript|javascript|python|rust|golang|sql|css|html)\b/i.test(o),complexity:a>4e3||/```/.test(o)||a>=200&&/\bstep by step\b|\bplan\b|\brefactor\b|\bmigrate\b|\banalyse|\banalyze/i.test(o)?"high":a<200?"low":"medium",nonLatin:/[^\u0000-\u024F\u2000-\u206F]/.test(o),smalltalk:a<100&&!/```/.test(o)&&!/\b(draw|click|open|fill|read|find|search|edit|write|create|update|delete|run|fix|change|add|remove|select|scroll|extract|summar\w*|analy\w*|check|review|list|show|go to|navigate|my|mine|this page|here|it|that)\b/i.test(o)&&!/\b(explain|describe|define|compare|translate|why|debug|refactor|implement|improve|optimi[sz]e|convert|calculate|generate|draft|rename|build|test|install|deploy|design|plan)\b/i.test(o)&&!/\bhow\s+(do|does|did|can|could|should|would|to|much|many|long)\b/i.test(o),chars:a}}function H(r={},{structured:o=!1,hasTools:a=!1,pageTools:d=!1,background:u=!1}={}){const l=new Set;let p=0;const m=[];a&&(l.add("tools"),m.push("the turn carries tools")),r.modality==="vision"&&(l.add("vision"),m.push("the request includes an image")),d&&!r.smalltalk&&(l.add("tools"),p=Math.max(p,.55),m.push("driving a page needs exact actions")),r.approxTokens>2e4&&(l.add("long-context"),m.push("the request is large")),r.code&&(l.add("coding"),m.push("the request contains code")),o&&!r.smalltalk&&(l.add("tools"),p=Math.max(p,.55),m.push("it must produce an exact structured payload")),r.complexity==="high"&&!u&&(p=Math.max(p,.55),m.push("the task is complex"));const i=r.smalltalk?[...l]:[...l].filter(t=>t!=="tools");return{required:[...l],negotiable:i,minQuality:p,why:m}}function Y(r={},{structured:o=!1,minQuality:a=0,hasTools:d=!1,background:u=!1}={}){return u?{prefer:"cost",why:"background work — spend as little as possible"}:o||r.complexity==="high"||r.code||r.modality==="vision"?{prefer:"quality",why:"the task is exact or hard — get it right rather than quick"}:r.smalltalk&&!d&&!a?{prefer:"latency",why:"nothing to look up — answer fast"}:{prefer:"balanced",why:"no reason to favour speed or quality"}}function E(r){return r?.orderPinned&&Number.isFinite(r.providerRank)?r.providerRank:1/0}const j=.25,B=.25;function V(r=[],o={}){const a=t=>!!o.model&&P(t)===P(o);let d=[...r];if(o.reason==="gone"){const t=d.filter(s=>!a(s));t.length&&(d=t)}const u=t=>Number.isFinite(t.quality)?t.quality:.5,l=t=>(o.capabilities||[]).every(s=>(t.capabilities||[]).includes(s)),p=t=>!o.classUsed||t.classUsed===o.classUsed,m=Number.isFinite(o.quality)?o.quality:null;if(m!==null){const t=s=>a(s)?-1:Math.abs(u(s)-m)+(p(s)?0:j)+(l(s)?0:B);return d.map(s=>({m:s,d:t(s)})).sort((s,f)=>s.d-f.d||E(s.m)-E(f.m)||s.m.costPer1k-f.m.costPer1k||String(s.m.id).localeCompare(String(f.m.id))).map(s=>s.m)}const i=t=>a(t)?0:p(t)&&l(t)?1:p(t)?2:l(t)?3:4;return d.sort((t,s)=>i(t)-i(s)||u(s)-u(t)||E(t)-E(s)||t.costPer1k-s.costPer1k)}function K(r,o={}){const a=String(r||""),d=String(o?.action||""),u=`${a}.${d}`;return/screenshot|marked_screenshot|read_canvas|sense_canvas/.test(u)?{required:["vision"],why:"this step reads an image"}:/structured_insert|sheet_write|fill_form|input_sequence|draw_path/.test(u)?{required:["tools"],minQuality:.55,why:"this step writes an exact payload"}:{required:a?["tools"]:[],why:""}}function J({models:r=[],middleware:o=[],strategies:a=[],admit:d=null}={}){const u=[...r],l=[...o],p=[...a],m=i=>l.filter(t=>t.stage===i&&(!d||d(t))).sort((t,s)=>i==="request"?t.priority-s.priority:s.priority-t.priority);return{addModel(i){return u.push(i),()=>{const t=u.indexOf(i);t>=0&&u.splice(t,1)}},use(i){return l.push(i),()=>{const t=l.indexOf(i);t>=0&&l.splice(t,1)}},addStrategy(i){return p.push(i),()=>{const t=p.indexOf(i);t>=0&&p.splice(t,1)}},models:()=>[...u],middleware:()=>[...l],strategies:()=>[...p],route(i={}){const t=C.includes(i.reach)?i.reach:"any",s=i.capabilities||[],f=i.requirementReasons||[],c=[],g=u.filter(e=>{if(!e.available)return c.push({id:e.id,why:"unavailable"}),!1;if(d&&!d(e))return c.push({id:e.id,why:"disabled"}),!1;if(D(e.reach)>D(t))return c.push({id:e.id,why:`reach '${e.reach}' exceeds '${t}'`}),!1;const n=s.filter(x=>!e.capabilities.includes(x));if(n.length)return c.push({id:e.id,why:`missing ${n.join(", ")}`}),!1;if(i.maxLatencyMs>0&&e.latencyMs>i.maxLatencyMs)return c.push({id:e.id,why:`${e.latencyMs}ms exceeds the ${i.maxLatencyMs}ms deadline`}),!1;if(i.maxCostPer1k>=0&&i.maxCostPer1k!==void 0&&e.costPer1k>i.maxCostPer1k)return c.push({id:e.id,why:`costs ${e.costPer1k} over the ${i.maxCostPer1k} budget`}),!1;if(e.rateLimited)return c.push({id:e.id,why:"rate limited"}),!1;if(i.exclude?.includes?.(e.id))return c.push({id:e.id,why:"already failed this request"}),!1;if(i.minQuality>0){const x=Number.isFinite(e.quality)?e.quality:.5;if(x<i.minQuality)return c.push({id:e.id,why:`below the quality this task needs (${x} < ${i.minQuality})`}),!1}return!0});if(!g.length){if(i.minQuality>0){const e=this.route({...i,minQuality:0});if(e.model)return{...e,relaxed:!0,reasons:[...e.reasons,`no model met the quality this task needs (${i.minQuality}) — used the best available instead`]}}if(i.negotiable?.length){const e=(i.capabilities||[]).filter(x=>!i.negotiable.includes(x)),n=this.route({...i,minQuality:0,capabilities:e,negotiable:[]});if(n.model)return{...n,relaxed:!0,reasons:[...n.reasons,`no model offers ${i.negotiable.join(", ")} — used one without it, which may do this task poorly`]}}return{model:null,reasons:["no candidate satisfies the constraints"],constraints:f,rejected:c}}const b=i.prefer||"balanced",$=e=>{const n=1+Math.max(0,Math.min(1,e.load)),x=Number.isFinite(e.quality)?Math.max(.1,e.quality):.5,O=N[e.reach]??1;return b==="latency"?e.latencyMs*n*O:b==="cost"?e.costPer1k*n*O:b==="quality"?n/x:(e.latencyMs/1e3+e.costPer1k*L)*n*O/x},q=new Map,w=e=>(q.has(e)||q.set(e,$(e)),q.get(e)),y=(e,n)=>e.providerRank-n.providerRank||w(e)-w(n)||e.id.localeCompare(n.id),h=(e,n)=>w(e)-w(n)||e.providerRank-n.providerRank||e.id.localeCompare(n.id),A=new Map;for(const e of g){const n=P(e)||`#${e.id}`;A.has(n)||A.set(n,[]),A.get(n).push(e)}const S=[...A.values()].map(e=>[...e].sort(e.some(n=>n.orderPinned)?y:h));S.sort((e,n)=>w(e[0])-w(n[0])||y(e[0],n[0]));const R=[];for(const e of S){const n=R[R.length-1],x=n?w(n[0][0]):0;n&&w(e[0])<=x*(1+T)?n.push(e):R.push([e])}for(const e of R)e.sort((n,x)=>y(n[0],x[0]));let v=R.flat(2);const M=b==="balanced"?v.filter(e=>e.orderPinned).sort((e,n)=>e.providerRank-n.providerRank)[0]:null;M&&(v=[M,...v.filter(e=>e!==M)]);const F=R[0]?.length>1,I=(R[0]||[]).flat().length,_=v[0];return{model:_,eligible:v,constraints:f,strategy:M?"declared-default":"default-score",reasons:[`reach '${_.reach}' within '${t}'`,s.length?`has ${s.join(", ")}`:"no special capability needed",M?`your default (Order ${_.providerRank}) — nothing about this turn asked for anything else`:F?`order ${_.providerRank} broke a ${I}-way tie by ${b}, of ${v.length} eligible`:`best by ${b} (${v.length} eligible)`],rejected:c,runnersUp:v.slice(1).map(e=>e.id)}},async routeWith(i={},t={}){const s=this.route(i);if(!s.model||!p.length)return s;const f=new Map(s.eligible.map(c=>[c.id,c]));for(const c of p){if(d&&!d(c))continue;let g=null;try{const y=c.decide([...s.eligible],i,t);g=c.timeoutMs>0?await Promise.race([y,new Promise(h=>setTimeout(()=>h(null),c.timeoutMs))]):await y}catch{g=null}if(!g)continue;const b=(Array.isArray(g)?g:[g]).map(y=>typeof y=="string"?f.get(y):f.get(y?.id)).filter(Boolean),$=(Array.isArray(g)?g:[g]).length-b.length;if(!b.length)continue;const q=s.eligible.filter(y=>!b.includes(y)),w=[...b,...q];return{...s,model:b[0],eligible:w,strategy:c.id,runnersUp:w.slice(1).map(y=>y.id),reasons:[...s.reasons.slice(0,-1),`chosen by '${c.id}' (class ${c.classUsed}) from ${s.eligible.length} eligible`,...$>0?[`${$} suggestion(s) ignored — not eligible under the constraints`]:[]]}}return s},async run(i,{dispatch:t,need:s={}}={}){if(typeof t!="function")throw new k("NO_DISPATCH","run needs a dispatch function");const f=await this.routeWith(s,{request:i});if(!f.model)throw new k("NO_ROUTE",f.reasons[0]);const c=h=>!h.requiredFor||h.requiredFor(f.model,s),g=l.filter(h=>h.requiredFor&&h.requiredFor(f.model,s)),b=new Set(m("request").concat(m("response")).map(h=>h.id)),$=g.filter(h=>!b.has(h.id));if($.length)throw new k("MISSING_REQUIRED",`route to '${f.model.id}' requires ${$.map(h=>h.id).join(", ")}, which is not active`);const q={model:f.model,need:s,decision:f};let w=i;for(const h of m("request"))c(h)&&(w=await h.run(w,q)??w);let y=await t(w,q);for(const h of m("response"))c(h)&&(y=await h.run(y,q)??y);return{answer:y,decision:f}}}}export{B as FAILOVER_CAPABILITY_GAP,j as FAILOVER_CLASS_GAP,ee as REACH,k as RouterError,J as createModelRouter,z as defineMiddleware,U as defineModel,G as defineRouteStrategy,V as failoverOrder,E as pinnedOrderOf,Y as preferenceFor,te as reachRank,H as requirementsFor,K as requirementsForStep,P as sameModelKey,W as signalsFrom};
1
+ class k extends Error{constructor(o,a){super(a),this.name="RouterError",this.code=o}}import{REACH as ee,reachRank as te}from"./reach.js";import{REACH as C,reachRank as D}from"./reach.js";function U({id:n,label:o,reach:a="any",classUsed:u="C",capabilities:c=[],costPer1k:d=1,latencyMs:h=1e3,load:m=0,available:t=!0,rateLimited:r=!1,observedLatencyMs:i=null,quality:p=null,model:l="",providerRank:w=50,orderPinned:g=!1}){if(!n)throw new k("BAD_MODEL","model.id required");if(!C.includes(a))throw new k("BAD_MODEL",`model '${n}': unknown reach '${a}'`);return Object.freeze({id:n,label:o||n,reach:a,classUsed:u,model:l,capabilities:[...c],costPer1k:d,latencyMs:Number.isFinite(i)?i:h,declaredLatencyMs:h,observedLatencyMs:i,load:m,available:t,rateLimited:r,providerRank:w,orderPinned:!!g,quality:p})}function z({id:n,label:o,stage:a,priority:u=100,run:c,requiredFor:d=null}){if(!n)throw new k("BAD_MIDDLEWARE","middleware.id required");if(!["request","response"].includes(a))throw new k("BAD_MIDDLEWARE",`middleware '${n}': stage must be request or response`);if(typeof c!="function")throw new k("BAD_MIDDLEWARE",`middleware '${n}': run required`);return Object.freeze({id:n,label:o||n,stage:a,priority:u,run:c,requiredFor:d})}function W({id:n,label:o,classUsed:a="R",timeoutMs:u=0,decide:c}){if(!n)throw new k("BAD_STRATEGY","strategy.id required");if(typeof c!="function")throw new k("BAD_STRATEGY",`strategy '${n}': decide required`);return Object.freeze({id:n,label:o||n,classUsed:a,timeoutMs:u,decide:c})}const T=.1,L=5,N=Object.freeze({device:.7,trusted:.85,any:1});function P(n){return String(n?.model||n?.label||"").toLowerCase().replace(/^[^/]+\//,"").replace(/[:@].*$/,"").replace(/[^a-z0-9.]+/g,"")}function G(n={}){const o=String(n.text||(n.messages||[]).map(d=>d?.content||"").join(`
2
+ `)||""),a=o.length,u=!!(n.images?.length||n.attachments?.some?.(d=>/^image\//.test(d?.type||""))),c=!!n.audio||!!n.attachments?.some?.(d=>/^audio\//.test(d?.type||""));return{approxTokens:Math.round(a/4),modality:c?"audio":u?"vision":"text",code:/```/.test(o)||a>80&&/\bfunction\b|\bclass\b|=>|;\s*$|\bdef\b|\bimport\b|\bconst\b/m.test(o)||/\b(write|fix|debug|refactor|implement|optimi[sz]e|review|explain|generate|add|update|port|migrate)\b[^.?!]{0,60}\b(code|function|method|class|script|bug|regex|query|unit ?test|module|component|endpoint|snippet|compiler?|stack ?trace|typescript|javascript|python|rust|golang|sql|css|html)\b/i.test(o),complexity:a>4e3||/```/.test(o)||a>=200&&/\bstep by step\b|\bplan\b|\brefactor\b|\bmigrate\b|\banalyse|\banalyze/i.test(o)?"high":a<200?"low":"medium",nonLatin:/[^\u0000-\u024F\u2000-\u206F]/.test(o),smalltalk:a<100&&!/```/.test(o)&&!/\b(draw|click|open|fill|read|find|search|edit|write|create|update|delete|run|fix|change|add|remove|select|scroll|extract|summar\w*|analy\w*|check|review|list|show|go to|navigate|my|mine|this page|here|it|that)\b/i.test(o)&&!/\b(explain|describe|define|compare|translate|why|debug|refactor|implement|improve|optimi[sz]e|convert|calculate|generate|draft|rename|build|test|install|deploy|design|plan)\b/i.test(o)&&!/\bhow\s+(do|does|did|can|could|should|would|to|much|many|long)\b/i.test(o),chars:a}}function H(n={},{structured:o=!1,hasTools:a=!1,pageTools:u=!1,background:c=!1,minWindow:d=0}={}){const h=new Set;let m=0;const t=[];d>0&&t.push(`the turn needs a ${Math.round(d/1e3)}k window`),a&&(h.add("tools"),t.push("the turn carries tools")),n.modality==="vision"&&(h.add("vision"),t.push("the request includes an image")),u&&!n.smalltalk&&(h.add("tools"),m=Math.max(m,.55),t.push("driving a page needs exact actions")),n.approxTokens>2e4&&(h.add("long-context"),t.push("the request is large")),n.code&&(h.add("coding"),t.push("the request contains code")),o&&!n.smalltalk&&(h.add("tools"),m=Math.max(m,.55),t.push("it must produce an exact structured payload")),n.complexity==="high"&&!c&&(m=Math.max(m,.55),t.push("the task is complex"));const r=n.smalltalk?[...h]:[...h].filter(i=>i!=="tools");return{required:[...h],negotiable:r,minQuality:m,why:t,minWindow:Math.max(0,Number(d)||0)}}function Y(n={},{structured:o=!1,minQuality:a=0,hasTools:u=!1,background:c=!1}={}){return c?{prefer:"cost",why:"background work — spend as little as possible"}:o||n.complexity==="high"||n.code||n.modality==="vision"?{prefer:"quality",why:"the task is exact or hard — get it right rather than quick"}:n.smalltalk&&!u&&!a?{prefer:"latency",why:"nothing to look up — answer fast"}:{prefer:"balanced",why:"no reason to favour speed or quality"}}function E(n){return n?.orderPinned&&Number.isFinite(n.providerRank)?n.providerRank:1/0}const j=.25,B=.25;function V(n=[],o={}){const a=r=>!!o.model&&P(r)===P(o);let u=[...n];if(o.reason==="gone"){const r=u.filter(i=>!a(i));r.length&&(u=r)}const c=r=>Number.isFinite(r.quality)?r.quality:.5,d=r=>(o.capabilities||[]).every(i=>(r.capabilities||[]).includes(i)),h=r=>!o.classUsed||r.classUsed===o.classUsed,m=Number.isFinite(o.quality)?o.quality:null;if(m!==null){const r=i=>a(i)?-1:Math.abs(c(i)-m)+(h(i)?0:j)+(d(i)?0:B);return u.map(i=>({m:i,d:r(i)})).sort((i,p)=>i.d-p.d||E(i.m)-E(p.m)||i.m.costPer1k-p.m.costPer1k||String(i.m.id).localeCompare(String(p.m.id))).map(i=>i.m)}const t=r=>a(r)?0:h(r)&&d(r)?1:h(r)?2:d(r)?3:4;return u.sort((r,i)=>t(r)-t(i)||c(i)-c(r)||E(r)-E(i)||r.costPer1k-i.costPer1k)}function K(n,o={}){const a=String(n||""),u=String(o?.action||""),c=`${a}.${u}`;return/screenshot|marked_screenshot|read_canvas|sense_canvas/.test(c)?{required:["vision"],why:"this step reads an image"}:/structured_insert|sheet_write|fill_form|input_sequence|draw_path/.test(c)?{required:["tools"],minQuality:.55,why:"this step writes an exact payload"}:{required:a?["tools"]:[],why:""}}function J({models:n=[],middleware:o=[],strategies:a=[],admit:u=null}={}){const c=[...n],d=[...o],h=[...a],m=t=>d.filter(r=>r.stage===t&&(!u||u(r))).sort((r,i)=>t==="request"?r.priority-i.priority:i.priority-r.priority);return{addModel(t){return c.push(t),()=>{const r=c.indexOf(t);r>=0&&c.splice(r,1)}},use(t){return d.push(t),()=>{const r=d.indexOf(t);r>=0&&d.splice(r,1)}},addStrategy(t){return h.push(t),()=>{const r=h.indexOf(t);r>=0&&h.splice(r,1)}},models:()=>[...c],middleware:()=>[...d],strategies:()=>[...h],route(t={}){const r=C.includes(t.reach)?t.reach:"any",i=t.capabilities||[],p=t.requirementReasons||[],l=[],w=c.filter(e=>{if(!e.available)return l.push({id:e.id,why:"unavailable"}),!1;if(u&&!u(e))return l.push({id:e.id,why:"disabled"}),!1;if(D(e.reach)>D(r))return l.push({id:e.id,why:`reach '${e.reach}' exceeds '${r}'`}),!1;const s=i.filter(x=>!e.capabilities.includes(x));if(s.length)return l.push({id:e.id,why:`missing ${s.join(", ")}`}),!1;if(t.minWindow>0&&Number(e.window)>0&&Number(e.window)<t.minWindow)return l.push({id:e.id,why:`a ${Math.round(e.window/1e3)}k window under the ${Math.round(t.minWindow/1e3)}k this turn needs`}),!1;if(t.maxLatencyMs>0&&e.latencyMs>t.maxLatencyMs)return l.push({id:e.id,why:`${e.latencyMs}ms exceeds the ${t.maxLatencyMs}ms deadline`}),!1;if(t.maxCostPer1k>=0&&t.maxCostPer1k!==void 0&&e.costPer1k>t.maxCostPer1k)return l.push({id:e.id,why:`costs ${e.costPer1k} over the ${t.maxCostPer1k} budget`}),!1;if(e.rateLimited)return l.push({id:e.id,why:"rate limited"}),!1;if(t.exclude?.includes?.(e.id))return l.push({id:e.id,why:"already failed this request"}),!1;if(t.minQuality>0){const x=Number.isFinite(e.quality)?e.quality:.5;if(x<t.minQuality)return l.push({id:e.id,why:`below the quality this task needs (${x} < ${t.minQuality})`}),!1}return!0});if(!w.length){if(t.minQuality>0){const e=this.route({...t,minQuality:0});if(e.model)return{...e,relaxed:!0,reasons:[...e.reasons,`no model met the quality this task needs (${t.minQuality}) — used the best available instead`]}}if(t.negotiable?.length){const e=(t.capabilities||[]).filter(x=>!t.negotiable.includes(x)),s=this.route({...t,minQuality:0,capabilities:e,negotiable:[]});if(s.model)return{...s,relaxed:!0,reasons:[...s.reasons,`no model offers ${t.negotiable.join(", ")} — used one without it, which may do this task poorly`]}}return{model:null,reasons:["no candidate satisfies the constraints"],constraints:p,rejected:l}}const g=t.prefer||"balanced",v=e=>{const s=1+Math.max(0,Math.min(1,e.load)),x=Number.isFinite(e.quality)?Math.max(.1,e.quality):.5,O=N[e.reach]??1;return g==="latency"?e.latencyMs*s*O:g==="cost"?e.costPer1k*s*O:g==="quality"?s/x:(e.latencyMs/1e3+e.costPer1k*L)*s*O/x},q=new Map,b=e=>(q.has(e)||q.set(e,v(e)),q.get(e)),y=(e,s)=>e.providerRank-s.providerRank||b(e)-b(s)||e.id.localeCompare(s.id),f=(e,s)=>b(e)-b(s)||e.providerRank-s.providerRank||e.id.localeCompare(s.id),A=new Map;for(const e of w){const s=P(e)||`#${e.id}`;A.has(s)||A.set(s,[]),A.get(s).push(e)}const S=[...A.values()].map(e=>[...e].sort(e.some(s=>s.orderPinned)?y:f));S.sort((e,s)=>b(e[0])-b(s[0])||y(e[0],s[0]));const M=[];for(const e of S){const s=M[M.length-1],x=s?b(s[0][0]):0;s&&b(e[0])<=x*(1+T)?s.push(e):M.push([e])}for(const e of M)e.sort((s,x)=>y(s[0],x[0]));let $=M.flat(2);const R=g==="balanced"?$.filter(e=>e.orderPinned).sort((e,s)=>e.providerRank-s.providerRank)[0]:null;R&&($=[R,...$.filter(e=>e!==R)]);const F=M[0]?.length>1,I=(M[0]||[]).flat().length,_=$[0];return{model:_,eligible:$,constraints:p,strategy:R?"declared-default":"default-score",reasons:[`reach '${_.reach}' within '${r}'`,i.length?`has ${i.join(", ")}`:"no special capability needed",R?`your default (Order ${_.providerRank}) — nothing about this turn asked for anything else`:F?`order ${_.providerRank} broke a ${I}-way tie by ${g}, of ${$.length} eligible`:`best by ${g} (${$.length} eligible)`],rejected:l,runnersUp:$.slice(1).map(e=>e.id)}},async routeWith(t={},r={}){const i=this.route(t);if(!i.model||!h.length)return i;const p=new Map(i.eligible.map(l=>[l.id,l]));for(const l of h){if(u&&!u(l))continue;let w=null;try{const y=l.decide([...i.eligible],t,r);w=l.timeoutMs>0?await Promise.race([y,new Promise(f=>setTimeout(()=>f(null),l.timeoutMs))]):await y}catch{w=null}if(!w)continue;const g=(Array.isArray(w)?w:[w]).map(y=>typeof y=="string"?p.get(y):p.get(y?.id)).filter(Boolean),v=(Array.isArray(w)?w:[w]).length-g.length;if(!g.length)continue;const q=i.eligible.filter(y=>!g.includes(y)),b=[...g,...q];return{...i,model:g[0],eligible:b,strategy:l.id,runnersUp:b.slice(1).map(y=>y.id),reasons:[...i.reasons.slice(0,-1),`chosen by '${l.id}' (class ${l.classUsed}) from ${i.eligible.length} eligible`,...v>0?[`${v} suggestion(s) ignored — not eligible under the constraints`]:[]]}}return i},async run(t,{dispatch:r,need:i={}}={}){if(typeof r!="function")throw new k("NO_DISPATCH","run needs a dispatch function");const p=await this.routeWith(i,{request:t});if(!p.model)throw new k("NO_ROUTE",p.reasons[0]);const l=f=>!f.requiredFor||f.requiredFor(p.model,i),w=d.filter(f=>f.requiredFor&&f.requiredFor(p.model,i)),g=new Set(m("request").concat(m("response")).map(f=>f.id)),v=w.filter(f=>!g.has(f.id));if(v.length)throw new k("MISSING_REQUIRED",`route to '${p.model.id}' requires ${v.map(f=>f.id).join(", ")}, which is not active`);const q={model:p.model,need:i,decision:p};let b=t;for(const f of m("request"))l(f)&&(b=await f.run(b,q)??b);let y=await r(b,q);for(const f of m("response"))l(f)&&(y=await f.run(y,q)??y);return{answer:y,decision:p}}}}export{B as FAILOVER_CAPABILITY_GAP,j as FAILOVER_CLASS_GAP,ee as REACH,k as RouterError,J as createModelRouter,z as defineMiddleware,U as defineModel,W as defineRouteStrategy,V as failoverOrder,E as pinnedOrderOf,Y as preferenceFor,te as reachRank,H as requirementsFor,K as requirementsForStep,P as sameModelKey,G as signalsFrom};
package/tool-need.js CHANGED
@@ -1,3 +1,3 @@
1
- import{signalsFrom as l}from"./router.js";const h=new Set(["hi","hii","hiya","hey","heya","hello","helo","yo","sup","howdy","greetings","good","morning","afternoon","evening","night","day","thanks","thank","thankyou","thx","tnx","ty","cheers","appreciated","ok","okay","k","kk","got","sounds","perfect","great","cool","nice","awesome","lol","haha","hah","hehe","nvm","yep","yeah","yes","no","nope","sure","bye","goodbye","later","ya","cya","ciao","welcome","worries","problem","np","please","there","again","all","everyone","team","friend","mate","buddy","you","u","so","much","very","well","and","a","the"]),u=6;function d(t){const o=String(t||"").toLowerCase().replace(/[^\p{L}\s']/gu," ").split(/\s+/).filter(Boolean);return!o.length||o.length>u?!1:o.every(r=>h.has(r))}function p({request:t=null,signals:o=null,attachments:r=[],explicit:a=!1}={}){if(a)return{tools:!0,why:"the turn asked for tools"};if((r||[]).some(n=>n&&!n.auto))return{tools:!0,why:"the turn carries an attachment"};const i=String(t?.text??(t?.messages||[]).map(n=>n?.content||"").join(`
2
- `));return d(i)?(o||l(t||{})).smalltalk?{tools:!1,why:"a greeting — nothing to look up"}:{tools:!0,why:"the request may need something fetched"}:{tools:!0,why:"the request may need something fetched"}}const m=Object.freeze([["web",/\b(search|google|look ?up|latest|current|recent|today|this (week|month|year)|news|price|prices|pricing|cost of|quote|stock|market|website|url|online|web|docs?umentation|release notes|changelog|versions?)\b/i],["history",/\b(our (meeting|call|notes?|chats?|conversation)|what (did|was) (we|i)|we (decided|agreed|discussed|said)|in (my|our) (notes?|meetings?|history|chats?)|past (chats?|meetings?|notes?)|earlier (meeting|conversation|chat|note)|transcript|standup|retro)\b/i],["data",/\b(attached|attachment|this (page|document|file|pdf|spreadsheet|sheet)|the (document|file|pdf|spreadsheet) (above|provided|attached))\b/i]]);function A(t,{held:o=null}={}){const r=String(t||"");if(!r.trim())return[];const a=m.filter(([,e])=>e.test(r)).map(([e])=>e);if(!o)return a;const i=new Set((Array.isArray(o)?o:[]).map(e=>String(e).toLowerCase()));return a.filter(e=>i.has(e)||e==="history"&&i.has("data"))}const g=Object.freeze(["page","data","mcp","memory","note","team","sideline","skills","widgets","recipes"]),f=Object.freeze(["data","mcp","memory"]),b=/\b(this|the|current|open|active|that|my) (page|tab|site|website|article|post|thread|document|doc|file|pdf|sheet|spreadsheet|form|canvas|board|diagram|screen|window|video|table|cell|button|field|link|image)\b|\bon (the|this) (page|screen|tab)\b|\bhere\b|\bthis\b(?!\s+(morning|afternoon|evening|week|weekend|month|year|time|is (a|the|my))\b)|\bthese\b|\bthose\b/i,w=/\b(click|tap|press|type|fill|enter|select|scroll|drag|draw|paint|sketch|navigate|go to|open|close|submit|upload|download|play|pause|screenshot|inspect|read (the|this)|zoom|highlight|copy|paste|log ?in|sign ?in|sign ?up|checkout|add to cart|search (on|in) (the|this)|watch|browse)\b/i,y=/\b(build|make|create|write|generate|draft|code|design|implement|prototype)\b[^.?!]{0,40}\b(app|widget|tool|timer|calculator|tracker|checklist|game|dashboard|form|page|site|script|component|converter|counter|scoreboard|clock|note|dice)\b|\b(widget|app)\b/i,k=/\b(team|teams|agent|agents|project|executive|role|roles|sideline|breakout|skill|skills|recipe|recipes|workflow|remember this|save (this|that) as)\b|^\s*\//i,v=/\b(summar\w*|analy\w*|review|edit|rewrite|fix|refactor|debug|translate|convert|extract|compare|explain (this|that|the)|proofread|format|organi[sz]e|plan)\b/i,S=300;function L({request:t=null,signals:o=null,attachments:r=[],explicit:a=!1,stable:i=!1}={}){const e=c=>({tools:!0,tier:"full",groups:new Set(g),why:c});if(i)return e("a warm process keeps one tool set");const n=p({request:t,signals:o,attachments:r,explicit:a});if(!n.tools)return{tools:!1,tier:"none",groups:new Set,why:n.why};if(a)return e(n.why);if((r||[]).some(c=>c&&!c.auto))return e("the turn carries an attachment");const s=String(t?.text??(t?.messages||[]).map(c=>c?.content||"").join(`
3
- `));return s.trim()?s.length>S||/```/.test(s)?e("a long or code-bearing request"):b.test(s)?e("the request refers to the page or to something in view"):w.test(s)?e("the request asks to act"):y.test(s)?e("the request asks to make something"):k.test(s)?e("the request names a team, skill, recipe or command"):v.test(s)?e("the request is work, not a lookup"):{tools:!0,tier:"light",groups:new Set(f),why:"a lookup — the user's data and the web are enough"}:e("no text to read")}export{L as equipmentFor,A as grantsNeededFor,p as toolNeedFor};
1
+ import{signalsFrom as k}from"./router.js";const v=new Set(["hi","hii","hiya","hey","heya","hello","helo","yo","sup","howdy","greetings","good","morning","afternoon","evening","night","day","thanks","thank","thankyou","thx","tnx","ty","cheers","appreciated","ok","okay","k","kk","got","sounds","perfect","great","cool","nice","awesome","lol","haha","hah","hehe","nvm","yep","yeah","yes","no","nope","sure","bye","goodbye","later","ya","cya","ciao","welcome","worries","problem","np","please","there","again","all","everyone","team","friend","mate","buddy","you","u","so","much","very","well","and","a","the"]),S=6;function x(t){const o=String(t||"").toLowerCase().replace(/[^\p{L}\s']/gu," ").split(/\s+/).filter(Boolean);return!o.length||o.length>S?!1:o.every(a=>v.has(a))}function A({request:t=null,signals:o=null,attachments:a=[],explicit:c=!1}={}){if(c)return{tools:!0,why:"the turn asked for tools"};if((a||[]).some(n=>n&&!n.auto))return{tools:!0,why:"the turn carries an attachment"};const h=String(t?.text??(t?.messages||[]).map(n=>n?.content||"").join(`
2
+ `));return x(h)?(o||k(t||{})).smalltalk?{tools:!1,why:"a greeting — nothing to look up"}:{tools:!0,why:"the request may need something fetched"}:{tools:!0,why:"the request may need something fetched"}}const j=Object.freeze([["web",/\b(search|google|look ?up|latest|current|recent|today|this (week|month|year)|news|price|prices|pricing|cost of|quote|stock|market|website|url|online|web|docs?umentation|release notes|changelog|versions?)\b/i],["history",/\b(our (meeting|call|notes?|chats?|conversation)|what (did|was) (we|i)|we (decided|agreed|discussed|said)|in (my|our) (notes?|meetings?|history|chats?)|past (chats?|meetings?|notes?)|earlier (meeting|conversation|chat|note)|transcript|standup|retro)\b/i],["data",/\b(attached|attachment|this (page|document|file|pdf|spreadsheet|sheet)|the (document|file|pdf|spreadsheet) (above|provided|attached))\b/i]]);function _(t,{held:o=null}={}){const a=String(t||"");if(!a.trim())return[];const c=j.filter(([,e])=>e.test(a)).map(([e])=>e);if(!o)return c;const h=new Set((Array.isArray(o)?o:[]).map(e=>String(e).toLowerCase()));return c.filter(e=>h.has(e)||e==="history"&&h.has("data"))}const m=Object.freeze(["page","data","mcp","memory","note","team","sideline","skills","widgets","recipes"]),g=Object.freeze(["data","mcp","memory"]),b=/\b(this|the|current|open|active|that|my) (page|tab|site|website|article|post|thread|document|doc|file|pdf|sheet|spreadsheet|form|canvas|board|diagram|screen|window|video|table|cell|button|field|link|image)\b|\bon (the|this) (page|screen|tab)\b|\bhere\b|\bthis\b(?!\s+(morning|afternoon|evening|week|weekend|month|year|time|is (a|the|my))\b)|\bthese\b|\bthose\b/i,f=/\b(click|tap|press|type|fill|enter|select|scroll|drag|draw|paint|sketch|navigate|go to|open|close|submit|upload|download|play|pause|screenshot|inspect|read (the|this)|zoom|highlight|copy|paste|log ?in|sign ?in|sign ?up|checkout|add to cart|search (on|in) (the|this)|watch|browse)\b/i,L=/\b(build|make|create|write|generate|draft|code|design|implement|prototype)\b[^.?!]{0,40}\b(app|widget|tool|timer|calculator|tracker|checklist|game|dashboard|form|page|site|script|component|converter|counter|scoreboard|clock|note|dice)\b|\b(widget|app)\b/i,R=/\b(run|use|ask|start|save|create|make|set ?up|open|launch|kick ?off|assign|delegate)\b[^.?!]{0,30}\b(team|teams|agent|agents|skill|skills|recipe|recipes|sideline|project)\b|\b(the|my|our|this|that)\s+(\w+[\s-]+)?(team|agent|skill|recipe|sideline|project)\b|\bask (the|our|my) \w+ (to|for)\b|\b(executive|breakout|workflow)\b|remember this|save (this|that) as|^\s*\//i,w=/\b(summar\w*|analy\w*|review|edit|rewrite|fix|refactor|debug|translate|convert|extract|compare|explain (this|that|the)|proofread|format|organi[sz]e|plan)\b/i,E=300;function G({request:t=null,signals:o=null,attachments:a=[],explicit:c=!1,stable:h=!1}={}){const e=i=>({tools:!0,tier:"full",groups:new Set(m),why:i});if(h)return e("a warm process keeps one tool set");const n=A({request:t,signals:o,attachments:a,explicit:c});if(!n.tools)return{tools:!1,tier:"none",groups:new Set,why:n.why};if(c)return e(n.why);if((a||[]).some(i=>i&&!i.auto))return e("the turn carries an attachment");const s=String(t?.text??(t?.messages||[]).map(i=>i?.content||"").join(`
3
+ `));if(!s.trim())return e("no text to read");if(s.length>E||/```/.test(s))return e("a long or code-bearing request");const u=b.test(s)||f.test(s)||w.test(s),d=R.test(s),p=L.test(s),y=w.test(s);if(!u&&!d&&!p)return{tools:!0,tier:"light",groups:new Set(g),why:"a lookup — the user's data and the web are enough"};const r=new Set(g),l=[];return u&&(r.add("page"),r.add("note"),l.push(f.test(s)?"the request asks to act":b.test(s)?"the request refers to the page or to something in view":"the request is work, not a lookup")),(y||d)&&r.add("skills"),d&&(r.add("team"),r.add("sideline"),r.add("recipes"),r.add("note"),l.push("the request names a team, skill, recipe or command")),p&&(r.add("widgets"),r.add("note"),l.push("the request asks to make something")),m.every(i=>r.has(i))?e(l.join("; ")):{tools:!0,tier:"task",groups:r,why:l.join("; ")}}export{G as equipmentFor,_ as grantsNeededFor,A as toolNeedFor};
package/turn-loop.js CHANGED
@@ -1,6 +1,6 @@
1
- import{runToolRound as st}from"./tool-round.js";import{toolTraits as at,effectiveToolName as H,parallelEligible as it}from"./tool-traits.js";import{createToolLoopGuard as C,roundSignature as ut,toolMadeProgress as ct,blockedToolResult as lt}from"./tool-loop-guard.js";import{createAdaptiveToolPolicy as Y,resultText as J}from"./adaptive-tool-policy.js";import{toolStatus as pt}from"./tool-hints.js";const F=60,dt=6,K=4e3,X=`
1
+ import{runToolRound as st}from"./tool-round.js";import{toolTraits as at,effectiveToolName as G,parallelEligible as it}from"./tool-traits.js";import{createToolLoopGuard as C,roundSignature as ut,toolMadeProgress as ct,blockedToolResult as lt}from"./tool-loop-guard.js";import{createAdaptiveToolPolicy as Y,resultText as J}from"./adaptive-tool-policy.js";import{toolStatus as pt}from"./tool-hints.js";const F=60,dt=6,K=4e3,H=`
2
2
 
3
- `,z=Object.freeze(["The tool budget for this turn is spent. Do not call tools again; write your answer now with what you have, including your findings.","No more tool calls will be answered. Reply with your answer as plain text, now — a partial answer beats none.","FINAL: any further tool call ends this turn with no answer. Write what you have found, as text, in this message."]),mt="You have repeated the same tool call several times. Do not call tools again; answer now with what you have.",Rt='_(Reached the action limit for one turn — say "continue" to keep going.)_';function At({tools:t,agent:o,settings:e,fallback:n=F}={}){if(!t)return 1;const s=Math.max(1,Number(n)||F),i=Number(o?.maxRequestsPerTurn)||0;if(i>0)return Math.min(s,i);const m=Number(e?.ui?.maxToolRoundsPerTurn??e?.maxToolRoundsPerTurn)||0;return m>0?Math.min(s,m):s}function G(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}const Q=t=>typeof t.arguments=="string"?t.arguments:JSON.stringify(t.arguments??t.input??{});function ft(t){const o=String(J(t)||"");return o.length>K?`${o.slice(0,K)}…`:o}function ht(t,o){const e=H(t,o),n=o&&typeof o=="object"&&o.args&&typeof o.args=="object"?o.args:o||{},s=["query","id","tool","location","ref"].find(i=>typeof n[i]=="string"&&n[i]);return s?`${e} "${String(n[s]).slice(0,80)}"`:e}function Nt(t,o){const e=Array.isArray(t)?[...t]:[],n=String(o||"").trim();if(!n)return e;const s=e.findIndex(i=>i?.role==="system"&&typeof i.content=="string");return s>=0?(e[s]={...e[s],content:`${e[s].content}
3
+ `,q=Object.freeze(["The tool budget for this turn is spent. Do not call tools again; write your answer now with what you have, including your findings.","No more tool calls will be answered. Reply with your answer as plain text, now — a partial answer beats none.","FINAL: any further tool call ends this turn with no answer. Write what you have found, as text, in this message."]),mt="You have repeated the same tool call several times. Do not call tools again; answer now with what you have.",Rt='_(Reached the action limit for one turn — say "continue" to keep going.)_';function At({tools:t,agent:o,settings:e,fallback:n=F}={}){if(!t)return 1;const s=Math.max(1,Number(n)||F),i=Number(o?.maxRequestsPerTurn)||0;if(i>0)return Math.min(s,i);const m=Number(e?.ui?.maxToolRoundsPerTurn??e?.maxToolRoundsPerTurn)||0;return m>0?Math.min(s,m):s}function z(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}const Q=t=>typeof t.arguments=="string"?t.arguments:JSON.stringify(t.arguments??t.input??{});function ft(t){const o=String(J(t)||"");return o.length>K?`${o.slice(0,K)}…`:o}function ht(t,o){const e=G(t,o),n=o&&typeof o=="object"&&o.args&&typeof o.args=="object"?o.args:o||{},s=["query","id","tool","location","ref"].find(i=>typeof n[i]=="string"&&n[i]);return s?`${e} "${String(n[s]).slice(0,80)}"`:e}function Nt(t,o){const e=Array.isArray(t)?[...t]:[],n=String(o||"").trim();if(!n)return e;const s=e.findIndex(i=>i?.role==="system"&&typeof i.content=="string");return s>=0?(e[s]={...e[s],content:`${e[s].content}
4
4
 
5
5
  ${n}`},e):[{role:"system",content:n},...e]}const _=t=>Number(t)||0;function Z(t){if(!t||typeof t!="object")return null;const o=_(t.inputTokens??t.input_tokens??t.prompt_tokens),e=_(t.outputTokens??t.output_tokens??t.completion_tokens),n=_(t.cacheReadTokens??t.cache_read_input_tokens??t.prompt_tokens_details?.cached_tokens),s=_(t.cacheWriteTokens??t.cache_creation_input_tokens),i={inputTokens:o,outputTokens:e,cacheReadTokens:n,cacheWriteTokens:s,prompt_tokens:o,completion_tokens:e,total_tokens:_(t.total_tokens)||o+e,calls:_(t.calls)||1,reported:t.reported!==!1&&(o>0||e>0)},m=_(t.usd??t.cost);return m&&(i.usd=m),i}function yt(t,o){const e=Z(t),n=Z(o);if(!n)return e;if(!e)return n;const s={inputTokens:e.inputTokens+n.inputTokens,outputTokens:e.outputTokens+n.outputTokens,cacheReadTokens:e.cacheReadTokens+n.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens+n.cacheWriteTokens,calls:e.calls+n.calls,reported:e.reported||n.reported};s.prompt_tokens=s.inputTokens,s.completion_tokens=s.outputTokens,s.total_tokens=e.total_tokens+n.total_tokens;const i=_(e.usd)+_(n.usd);return i&&(s.usd=i),s}function tt(t){return Math.max(0,Math.round(String(t||"").length/4))}function kt(t,o){const e=(t||[]).map(n=>typeof n?.content=="string"?n.content:JSON.stringify(n?.content||"")).join(`
6
- `);return{inputTokens:tt(e),outputTokens:tt(o),cacheReadTokens:0,cacheWriteTokens:0,estimated:!0}}const gt=Object.freeze({asked(t,o){return{role:"assistant",content:String(t?.text||"")||null,tool_calls:o.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:Q(e)}}))}},answered(t,{noVision:o=!1}={}){const e=t.map(({call:n,result:s})=>({role:"tool",tool_call_id:n.id,content:J(s)}));for(const{call:n,result:s}of t){const i=s&&typeof s=="object"?s.image:null;i&&e.push(o?{role:"user",content:`(Screenshot from ${n.name} omitted — this model has no vision. Rely on read_canvas / inspect_page / tool results.)`}:{role:"user",content:[{type:"text",text:`(Screenshot from ${n.name})`},{type:"image_url",image_url:{url:i}}]})}return e},nudge(t,o){return[{role:"assistant",content:null,tool_calls:t.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:Q(e)}}))},...t.map(e=>({role:"tool",tool_call_id:e.id,content:o}))]},system:t=>({role:"system",content:t}),said:t=>({role:"assistant",content:t})}),Ot=Object.freeze({asked(t,o){return{role:"assistant",content:Array.isArray(t?.blocks)&&t.blocks.length?t.blocks.filter(n=>n&&(n.type==="tool_use"||n.type==="text"&&n.text)).map(n=>n.type==="tool_use"?{type:"tool_use",id:n.id,name:n.name,input:n.input??G(n.json)}:{type:"text",text:n.text}):[...t?.text?[{type:"text",text:String(t.text)}]:[],...o.map(n=>({type:"tool_use",id:n.id,name:n.name,input:n.input}))]}},answered(t){return[{role:"user",content:t.map(({call:o,result:e})=>{const n=J(e),s=e&&typeof e=="object"?e.image:null;if(!s)return{type:"tool_result",tool_use_id:o.id,content:n};const i=/^data:([^;]+);base64,(.+)$/s.exec(s),m=[];return i&&m.push({type:"image",source:{type:"base64",media_type:i[1],data:i[2]}}),m.push({type:"text",text:n}),{type:"tool_result",tool_use_id:o.id,content:m}})}]},nudge(t,o){return[{role:"assistant",content:t.map(e=>({type:"tool_use",id:e.id,name:e.name,input:e.input}))},{role:"user",content:t.map(e=>({type:"tool_result",tool_use_id:e.id,content:o}))}]},system:t=>({role:"user",content:t}),said:t=>({role:"assistant",content:t})});function Tt({tools:t,guard:o=C(),policy:e=Y(),modelLabel:n=()=>null,maxCalls:s=0,onStep:i=null,steps:m=[]}={}){let y=0;const R=r=>{const a=H(r.name,r.input);return t?.traits?.get(a)||t?.traits?.get(r.name)||at({name:a})},E=(r,a,u)=>{const T={phase:a,callId:r.id,name:r.name,action:H(r.name,r.input),input:r.input,text:ht(r.name,r.input),model:n()};if(a==="done"){const f=u&&typeof u=="object"?u.image:void 0;Object.assign(T,{status:pt(u),result:ft(u),...f?{image:f}:{}})}return T},x=r=>{try{i?.(E(r,"start"))}catch{}},A=(r,a)=>{const u=E(r,"done",a);m.push(u);try{i?.(u)}catch{}},U=(r,a,u)=>{e.recordResult(r.name,u),!a.blocked&&!a.replayed&&ct(r.name,u,r.input)&&o.reset(a.key),a.replayed||o.remember(a.key,r.name,r.input,u,{readOnly:!!R(r)?.readOnly})},v=r=>lt(r.name,z[Math.min(Math.max(0,y-s-1),z.length-1)],{budget:"spent",calls:y,maxCalls:s}),N=async(r,a,u)=>(y+=1,s>0&&y>s?v(r):a.blocked||a.replayed?a.result:typeof t?.execute!="function"?JSON.stringify({error:"no tools armed"}):t.execute(r.name,r.input,{callId:r.id,...u||{}}));return{guard:o,policy:e,steps:m,traitsOf:R,get calls(){return y},get exhausted(){return s>0&&y>=s},async one(r,a=null){const u={id:r.id,name:r.name,input:r.input??G(r.arguments)};x(u);const T=o.check(u.name,u.input);let f;try{f=await N(u,T,a)}catch(c){f=JSON.stringify({error:String(c?.message||c)})}return U(u,T,f),A(u,f),f},async round(r){const a=r.map(c=>({id:c.id,name:c.name,input:c.input??G(c.arguments)})),u=a.map(c=>o.check(c.name,c.input)),{results:T}=await st(a,{execute:(c,g)=>N(c,u[g]),traitsOf:R,concurrent:(c,g)=>it(t,c,g),onStart:c=>x(c),onDone:(c,g,D)=>A(c,D)});T.forEach((c,g)=>U(a[g],u[g],c));const f=u.filter(c=>c.blocked).length;return o.noteRound(f,a.length,ut(a)),{calls:a,results:T,blocked:f}}}}async function jt({model:t,messages:o,tools:e,signal:n,redaction:s,run:i,stream:m,transcript:y=gt,maxRounds:R=F,maxFinishTries:E=dt,guard:x=C(),policy:A=Y(),modelLabel:U=()=>t||null,usageLabel:v=null,onDelta:N=null,onEvent:r=null,onStep:a=null,onMessage:u=null,onActivity:T=null}={}){if(typeof m!="function")throw new Error("runTurnLoop: stream required");const f=!!(e&&Array.isArray(e.specs)&&e.specs.length),c=f?e.specs:null,g=f?Math.max(1,Number(R)||F):1,D=[],et=Tt({tools:e,guard:x,policy:A,modelLabel:U,steps:D,onStep:k=>{try{a?.(k)}catch{}try{r?.({type:"tool",...k})}catch{}}});let b=[...o||[]],p="",S=null,O=0,q=!1,I=0,W=!1;const j=k=>{for(const d of k){b=[...b,d];try{u?.(d)}catch{}}},M=k=>{try{r?.({type:"finish",reason:k})}catch{}},V=k=>{if(!r)return;const d=S&&S.reported?{...S,estimated:!1}:kt(b,k);try{r({type:"usage",provider:v?.provider||"unknown",model:v?.model||t||null,inputTokens:d.inputTokens,outputTokens:d.outputTokens,cacheReadTokens:d.cacheReadTokens,cacheWriteTokens:d.cacheWriteTokens,estimated:!!d.estimated})}catch{}},B=k=>({ok:!0,text:p,usage:S,rounds:O,steps:D,transcript:b,exhausted:W,aborted:!1,...k}),P=(k,d={})=>{const w=String(k||"");return w.trim()&&j([y.said(w)]),B(d)};for(;;){O+=1;const d=!f||O>=g||x.stalled||x.looping||I>0?null:c.filter(l=>!A.isSuppressed(l?.name));let w="";const h=await m({model:t,messages:b,tools:d&&d.length?d:null,signal:n,onActivity:T,...s!==void 0?{redaction:s}:{},...i?{run:i}:{},onDelta:l=>{if(l){if(!w&&p){p+=X;try{N?.(X,p)}catch{}}w+=l,p+=l;try{N?.(l,p)}catch{}}}});h?.usage&&(S=yt(S,h.usage)),h?.noVision&&(q=!0);const $=String(h?.text||"");if($&&!w&&(p&&(p+=X),p+=$,w=$),!h?.ok)return M("error"),B({ok:!1,error:h?.error||"the model did not answer",...h?.status?{status:h.status}:{},aborted:!!h?.aborted,transcript:$.trim()?[...b,y.said(p)]:b});if(h.aborted||n?.aborted)return M("aborted"),P(p,{aborted:!0});const L=(Array.isArray(h.toolCalls)?h.toolCalls:[]).filter(l=>l&&l.name).map(l=>({id:l.id,name:l.name,input:l.input??G(l.arguments),arguments:l.arguments}));if(!L.length)return M(h.finish||"stop"),V(p),P(p);if(!d||!d.length){if(I+=1,I>E)return M("tool-step-limit"),V(p),P(p,{exhausted:!0});W=W||O>=g,j(y.nudge(L,z[Math.min(I-1,z.length-1)]));continue}j([y.asked(h,L)]);const{calls:nt,results:ot}=await et.round(L);if(j(y.answered(nt.map((l,rt)=>({call:l,result:ot[rt]})),{noVision:q})),n?.aborted)return M("aborted"),P(p,{aborted:!0});x.looping&&j([y.system(mt)]),O+1>=g&&(W=!0)}}export{dt as DEFAULT_MAX_FINISH_TRIES,F as DEFAULT_MAX_ROUNDS,Rt as EXHAUSTED_NOTE,z as FINISH_NUDGES,mt as LOOPING_NUDGE,X as ROUND_SEPARATOR,K as STEP_RESULT_MAX_CHARS,yt as addUsage,Ot as anthropicTranscript,Tt as createCallRunner,ht as describeCall,tt as estimateTokens,Z as normalizeUsage,gt as openAiTranscript,J as resultText,At as roundCap,jt as runTurnLoop,ft as stepResultText,Nt as withToolSystem};
6
+ `);return{inputTokens:tt(e),outputTokens:tt(o),cacheReadTokens:0,cacheWriteTokens:0,estimated:!0}}const gt=Object.freeze({asked(t,o){return{role:"assistant",content:String(t?.text||"")||null,tool_calls:o.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:Q(e)}}))}},answered(t,{noVision:o=!1}={}){const e=t.map(({call:n,result:s})=>({role:"tool",tool_call_id:n.id,content:J(s)}));for(const{call:n,result:s}of t){const i=s&&typeof s=="object"?s.image:null;i&&e.push(o?{role:"user",content:`(Screenshot from ${n.name} omitted — this model has no vision. Rely on read_canvas / inspect_page / tool results.)`}:{role:"user",content:[{type:"text",text:`(Screenshot from ${n.name})`},{type:"image_url",image_url:{url:i}}]})}return e},nudge(t,o){return[{role:"assistant",content:null,tool_calls:t.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:Q(e)}}))},...t.map(e=>({role:"tool",tool_call_id:e.id,content:o}))]},system:t=>({role:"system",content:t}),said:t=>({role:"assistant",content:t})}),Ot=Object.freeze({asked(t,o){return{role:"assistant",content:Array.isArray(t?.blocks)&&t.blocks.length?t.blocks.filter(n=>n&&(n.type==="tool_use"||n.type==="text"&&n.text)).map(n=>n.type==="tool_use"?{type:"tool_use",id:n.id,name:n.name,input:n.input??z(n.json)}:{type:"text",text:n.text}):[...t?.text?[{type:"text",text:String(t.text)}]:[],...o.map(n=>({type:"tool_use",id:n.id,name:n.name,input:n.input}))]}},answered(t){return[{role:"user",content:t.map(({call:o,result:e})=>{const n=J(e),s=e&&typeof e=="object"?e.image:null;if(!s)return{type:"tool_result",tool_use_id:o.id,content:n};const i=/^data:([^;]+);base64,(.+)$/s.exec(s),m=[];return i&&m.push({type:"image",source:{type:"base64",media_type:i[1],data:i[2]}}),m.push({type:"text",text:n}),{type:"tool_result",tool_use_id:o.id,content:m}})}]},nudge(t,o){return[{role:"assistant",content:t.map(e=>({type:"tool_use",id:e.id,name:e.name,input:e.input}))},{role:"user",content:t.map(e=>({type:"tool_result",tool_use_id:e.id,content:o}))}]},system:t=>({role:"user",content:t}),said:t=>({role:"assistant",content:t})});function Tt({tools:t,guard:o=C(),policy:e=Y(),modelLabel:n=()=>null,maxCalls:s=0,onStep:i=null,steps:m=[]}={}){let y=0;const A=r=>{const a=G(r.name,r.input);return t?.traits?.get(a)||t?.traits?.get(r.name)||at({name:a})},E=(r,a,u)=>{const T={phase:a,callId:r.id,name:r.name,action:G(r.name,r.input),input:r.input,text:ht(r.name,r.input),model:n()};if(a==="done"){const f=u&&typeof u=="object"?u.image:void 0;Object.assign(T,{status:pt(u),result:ft(u),...f?{image:f}:{}})}return T},x=r=>{try{i?.(E(r,"start"))}catch{}},N=(r,a)=>{const u=E(r,"done",a);m.push(u);try{i?.(u)}catch{}},U=(r,a,u)=>{e.recordResult(r.name,u),!a.blocked&&!a.replayed&&ct(r.name,u,r.input)&&o.reset(a.key),a.replayed||o.remember(a.key,r.name,r.input,u,{readOnly:!!A(r)?.readOnly})},v=r=>lt(r.name,q[Math.min(Math.max(0,y-s-1),q.length-1)],{budget:"spent",calls:y,maxCalls:s}),O=async(r,a,u)=>(y+=1,s>0&&y>s?v(r):a.blocked||a.replayed?a.result:typeof t?.execute!="function"?JSON.stringify({error:"no tools armed"}):t.execute(r.name,r.input,{callId:r.id,...u||{}}));return{guard:o,policy:e,steps:m,traitsOf:A,get calls(){return y},get exhausted(){return s>0&&y>=s},async one(r,a=null){const u={id:r.id,name:r.name,input:r.input??z(r.arguments)};x(u);const T=o.check(u.name,u.input);let f;try{f=await O(u,T,a)}catch(c){f=JSON.stringify({error:String(c?.message||c)})}return U(u,T,f),N(u,f),f},async round(r){const a=r.map(c=>({id:c.id,name:c.name,input:c.input??z(c.arguments)})),u=a.map(c=>o.check(c.name,c.input)),{results:T}=await st(a,{execute:(c,g)=>O(c,u[g]),traitsOf:A,concurrent:(c,g)=>it(t,c,g),onStart:c=>x(c),onDone:(c,g,D)=>N(c,D)});T.forEach((c,g)=>U(a[g],u[g],c));const f=u.filter(c=>c.blocked).length;return o.noteRound(f,a.length,ut(a)),{calls:a,results:T,blocked:f}}}}async function jt({model:t,messages:o,tools:e,signal:n,redaction:s,run:i,stream:m,transcript:y=gt,maxRounds:A=F,maxFinishTries:E=dt,guard:x=C(),policy:N=Y(),modelLabel:U=()=>t||null,usageLabel:v=null,onDelta:O=null,onEvent:r=null,onStep:a=null,onMessage:u=null,onActivity:T=null}={}){if(typeof m!="function")throw new Error("runTurnLoop: stream required");const f=!!(e&&Array.isArray(e.specs)&&e.specs.length),c=f?e.specs:null,g=f?Math.max(1,Number(A)||F):1,D=[],et=Tt({tools:e,guard:x,policy:N,modelLabel:U,steps:D,onStep:k=>{try{a?.(k)}catch{}try{r?.({type:"tool",...k})}catch{}}});let b=[...o||[]],p="",S=null,R=0,X=!1,I=0,W=!1;const j=k=>{for(const d of k){b=[...b,d];try{u?.(d)}catch{}}},M=k=>{try{r?.({type:"finish",reason:k})}catch{}},V=k=>{if(!r)return;const d=S&&S.reported?{...S,estimated:!1}:kt(b,k);try{r({type:"usage",provider:v?.provider||"unknown",model:v?.model||t||null,inputTokens:d.inputTokens,outputTokens:d.outputTokens,cacheReadTokens:d.cacheReadTokens,cacheWriteTokens:d.cacheWriteTokens,estimated:!!d.estimated,requests:R+1})}catch{}},B=k=>({ok:!0,text:p,usage:S,rounds:R,steps:D,transcript:b,exhausted:W,aborted:!1,...k}),P=(k,d={})=>{const w=String(k||"");return w.trim()&&j([y.said(w)]),B(d)};for(;;){R+=1;const d=!f||R>=g||x.stalled||x.looping||I>0?null:c.filter(l=>!N.isSuppressed(l?.name));let w="";const h=await m({model:t,messages:b,tools:d&&d.length?d:null,signal:n,onActivity:T,...s!==void 0?{redaction:s}:{},...i?{run:i}:{},onDelta:l=>{if(l){if(!w&&p){p+=H;try{O?.(H,p)}catch{}}w+=l,p+=l;try{O?.(l,p)}catch{}}}});h?.usage&&(S=yt(S,h.usage)),h?.noVision&&(X=!0);const $=String(h?.text||"");if($&&!w&&(p&&(p+=H),p+=$,w=$),!h?.ok)return M("error"),B({ok:!1,error:h?.error||"the model did not answer",...h?.status?{status:h.status}:{},aborted:!!h?.aborted,transcript:$.trim()?[...b,y.said(p)]:b});if(h.aborted||n?.aborted)return M("aborted"),P(p,{aborted:!0});const L=(Array.isArray(h.toolCalls)?h.toolCalls:[]).filter(l=>l&&l.name).map(l=>({id:l.id,name:l.name,input:l.input??z(l.arguments),arguments:l.arguments}));if(!L.length)return M(h.finish||"stop"),V(p),P(p);if(!d||!d.length){if(I+=1,I>E)return M("tool-step-limit"),V(p),P(p,{exhausted:!0});W=W||R>=g,j(y.nudge(L,q[Math.min(I-1,q.length-1)]));continue}j([y.asked(h,L)]);const{calls:nt,results:ot}=await et.round(L);if(j(y.answered(nt.map((l,rt)=>({call:l,result:ot[rt]})),{noVision:X})),n?.aborted)return M("aborted"),P(p,{aborted:!0});x.looping&&j([y.system(mt)]),R+1>=g&&(W=!0)}}export{dt as DEFAULT_MAX_FINISH_TRIES,F as DEFAULT_MAX_ROUNDS,Rt as EXHAUSTED_NOTE,q as FINISH_NUDGES,mt as LOOPING_NUDGE,H as ROUND_SEPARATOR,K as STEP_RESULT_MAX_CHARS,yt as addUsage,Ot as anthropicTranscript,Tt as createCallRunner,ht as describeCall,tt as estimateTokens,Z as normalizeUsage,gt as openAiTranscript,J as resultText,At as roundCap,jt as runTurnLoop,ft as stepResultText,Nt as withToolSystem};