@graphrefly/graphrefly 0.33.0 → 0.34.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/dist/chunk-3Y4BXFFR.js +1 -0
- package/dist/chunk-65WWQ5CB.js +43 -0
- package/dist/chunk-A3GDELMY.js +61 -0
- package/dist/chunk-KN2UMFT6.js +5 -0
- package/dist/{index--BTb6HUO.d.ts → index-3L3RC3VJ.d.ts} +250 -4
- package/dist/{index-C_cXlbu0.d.cts → index-CQtnGFrZ.d.cts} +250 -4
- package/dist/{index-DDf8PoPO.d.ts → index-CbCNoogR.d.ts} +71 -16
- package/dist/{index-Dgcd59CJ.d.cts → index-IxinNgAH.d.cts} +71 -16
- package/dist/index.cjs +57 -57
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/patterns/ai/browser.cjs +5 -5
- package/dist/patterns/ai/browser.js +1 -1
- package/dist/patterns/ai/index.cjs +19 -19
- package/dist/patterns/ai/index.d.cts +1 -1
- package/dist/patterns/ai/index.d.ts +1 -1
- package/dist/patterns/ai/index.js +1 -1
- package/dist/patterns/harness/index.cjs +10 -10
- package/dist/patterns/harness/index.d.cts +3 -3
- package/dist/patterns/harness/index.d.ts +3 -3
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/orchestration/index.cjs +7 -7
- package/dist/patterns/orchestration/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-DUK7LTJO.js +0 -43
- package/dist/chunk-HIJ2RKVP.js +0 -1
- package/dist/chunk-O2WY22L7.js +0 -5
- package/dist/chunk-Z4GXBOWO.js +0 -61
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as I}from"./chunk-L3KUKDZC.js";import{g as q,j as P}from"./chunk-2JO6LXFT.js";import{D as R,E as j,G as E,m as C}from"./chunk-LYCLF26R.js";import{b as _,d as D,i as A,j as M}from"./chunk-CK2E7BTU.js";import{b as W}from"./chunk-QYADASLV.js";var ne={};W(ne,{approval:()=>z,branch:()=>V,gate:()=>J,join:()=>Q,loop:()=>X,onFailure:()=>ee,pipeline:()=>$,sensor:()=>Z,subPipeline:()=>Y,task:()=>U});function v(e,n){if(typeof n=="string")return{node:e.resolve(n),path:n};let o=L(e,n);if(!o)throw new Error("orchestration dep node must already be registered in the graph so explicit edges can be recorded; pass a string path or register the node first");return{node:n,path:o}}function L(e,n){let o=e.describe(),r=`::${q}::`;for(let t of Object.keys(o.nodes).sort())if(!t.includes(r))try{if(e.resolve(t)===n)return t}catch{}}function N(e,n,o,r){e.add(o,{name:n})}function y(e,n){return I("orchestration",e,n)}function H(e){let n=r=>{let t=r.trim();return t.length===0?0:Number(t)},o;return typeof e=="string"?o=n(e):e===null?o=0:o=Number(e),Number.isFinite(o)?Math.max(0,Math.trunc(o)):1}function $(e,n){return new P(e,n)}function U(e,n,o,r){let i=(r?.deps??[]).map(a=>v(e,a)),{deps:s,...p}=r??{},h=(a,u,c)=>{let m=a.map((T,b)=>T!=null&&T.length>0?T.at(-1):c.prevData[b]);u.emit(o(m,c))},d=R(i.map(a=>a.node),h,{...p,name:n,describeKind:"derived",meta:y("task",r?.meta)});return N(e,n,d,i.flatMap(a=>a.path?[a.path]:[])),d}function V(e,n,o,r,t){let i=v(e,o),s=E([i.node],([p])=>({branch:r(p)?"then":"else",value:p}),{...t,name:n,meta:y("branch",t?.meta)});return N(e,n,s,i.path?[i.path]:[]),s}function z(e,n,o,r,t){let i=v(e,o),s=v(e,r),p=t?.isApproved??(d=>!!d),h=R([i.node,s.node],(d,a,u)=>{let c=d[0],m=d[1],T=m!=null&&m.length>0?m.at(-1):u.prevData[1];if(T===void 0||!p(T)){a.down([[D]]);return}if(c==null||c.length===0){m!=null&&m.length>0&&u.prevData[0]!==void 0?a.emit(u.prevData[0]):a.down([[D]]);return}for(let b of c)a.emit(b)},{...t,name:n,describeKind:"derived",meta:y("approval",t?.meta)});return N(e,n,h,[i.path,s.path].filter(d=>typeof d=="string")),h}function J(e,n,o,r){let t=r?.maxPending??1/0;if(t<1&&t!==1/0)throw new RangeError("gate: maxPending must be >= 1");let i=r?.startOpen??!1;typeof o!="string"&&!L(e,o)&&e.add(o,{name:`${n}/source`});let s=v(e,o),p=j([],{name:"pending",equals:()=>!1}),h=j(i,{name:"isOpen"}),d=E([p],([f])=>f.length,{name:"count"}),a=j(null,{name:"lastRejected",equals:()=>!1}),u=[],c=!1,m=i,T=h.subscribe(f=>{for(let l of f)l[0]===_&&(m=l[1])});function b(){p.emit([...u])}function K(f){u.push(f),u.length>t&&u.shift(),b()}function G(f){let l=u.splice(0,f);return b(),l}function O(f){if(c)throw new Error(`gate: ${f}() called after gate was torn down`)}let S=R([s.node],(f,l,k)=>{let g=k.terminalDeps[0];if(g!==void 0){c=!0,u=[],b(),l.down(g===!0?[[A]]:[[M,g]]);return}let w=f[0];if(w==null||w.length===0){l.down([[D]]);return}for(let F of w)m?l.emit(F):(K(F),l.down([[D]]))},{name:n,describeKind:"derived",meta:y("gate",r?.meta)}),B={node:S,pending:p,count:d,isOpen:h,lastRejected:a,approve(f=1){O("approve");let l=G(f);for(let k of l){if(c)break;S.emit(k)}},reject(f=1){O("reject"),C(()=>{let l=[...u],k=Math.min(f,l.length);for(let g=0;g<k;g++)a.emit(l[g]);G(f)})},modify(f,l=1){O("modify");let k=[...u],g=G(l);for(let w=0;w<g.length&&!c;w++)S.emit(f(g[w],w,k))},open(){O("open"),C(()=>{h.emit(!0);let f=G(u.length);for(let l of f){if(c)break;S.emit(l)}})},close(){O("close"),h.emit(!1)}};e.addDisposer(d.subscribe(()=>{})),e.addDisposer(T),N(e,n,S,s.path?[s.path]:[]);let x=new P(`${n}_state`);return x.add(p,{name:"pending"}),x.add(h,{name:"isOpen"}),x.add(d,{name:"count"}),x.add(a,{name:"lastRejected"}),e.mount(`${n}_state`,x),e.addDisposer(a.subscribe(()=>{})),B}function Q(e,n,o,r){let t=o.map(s=>v(e,s)),i=E(t.map(s=>s.node),s=>s,{...r,name:n,meta:y("join",r?.meta)});return N(e,n,i,t.flatMap(s=>s.path?[s.path]:[])),i}function X(e,n,o,r,t){let i=v(e,o),s=t?.iterations,p=typeof s=="number"||s===void 0?void 0:v(e,s),h=typeof s=="number"?s:void 0,d=R(p?[i.node,p.node]:[i.node],(a,u,c)=>{let m=a[0],T=m!=null&&m.length>0?m.at(-1):c.prevData[0],b=p?a[1]:void 0,K=h??(p?b!=null&&b.length>0?b.at(-1):c.prevData[1]:1),G=H(K);for(let O=0;O<G;O+=1)T=r(T,O,u);u.emit(T)},{...t,name:n,describeKind:"derived",meta:y("loop",t?.meta)});return N(e,n,d,[i.path,p?.path].filter(a=>typeof a=="string")),d}function Y(e,n,o,r){let t=o instanceof P?o:$(n,r);return typeof o=="function"&&o(t),e.mount(n,t),t}function Z(e,n,o,r){let t=R([],()=>{},{...r,name:n,initial:o,describeKind:"producer",meta:y("sensor",r?.meta)});return N(e,n,t,[]),{node:t,push(i){t.emit(i)},error(i){t.down([[M,i]])},complete(){t.down([[A]])}}}function ee(e,n,o,r,t){let i=v(e,o),s=!1,p=R([],(h,d)=>{let a=i.node.subscribe(u=>{for(let c of u){if(s)return;if(c[0]===M)try{d.emit(r(c[1],d))}catch(m){s=!0,d.down([[M,m]])}else d.down([c]),c[0]===A&&(s=!0)}});return()=>a()},{...t,name:n,describeKind:"derived",completeWhenDepsComplete:!1,errorWhenDepsError:!1,meta:y("onFailure",t?.meta)});return N(e,n,p,i.path?[i.path]:[]),p}export{$ as a,U as b,V as c,z as d,J as e,Q as f,X as g,Y as h,Z as i,ee as j,ne as k};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import{a as $e}from"./chunk-SFIM774L.js";import{c as _e}from"./chunk-6HQ6HVTF.js";import{u as X}from"./chunk-A3GDELMY.js";import{a as Me}from"./chunk-GCUYSIM4.js";import{e as Ce}from"./chunk-3Y4BXFFR.js";import{f as we,h as le}from"./chunk-T2TB37TW.js";import{b as ue,d as U}from"./chunk-L3KUKDZC.js";import{b as Oe}from"./chunk-TZQPPQEQ.js";import{f as Se,j as ie}from"./chunk-2JO6LXFT.js";import{b as A,s as q,t as Ae,x as _}from"./chunk-4F564IPP.js";import{m as z}from"./chunk-T7EQPKOP.js";import{D as ke,E as S,F as Q,G as N,H as $,o as V}from"./chunk-LYCLF26R.js";import{b as P,i as F,j as W}from"./chunk-CK2E7BTU.js";import{b as Xe}from"./chunk-QYADASLV.js";var kt={};Xe(kt,{DEFAULT_DECAY_RATE:()=>D,DEFAULT_EXECUTE_PROMPT:()=>de,DEFAULT_QUEUE_CONFIGS:()=>Z,DEFAULT_SEVERITY_WEIGHTS:()=>L,DEFAULT_TRIAGE_PROMPT:()=>ce,DEFAULT_VERIFY_PROMPT:()=>pe,HarnessGraph:()=>te,QUEUE_NAMES:()=>b,actuatorExecutor:()=>nt,affectedTaskFilter:()=>lt,autoSolidify:()=>ot,beforeAfterCompare:()=>ut,codeChangeBridge:()=>ct,createIntakeBridge:()=>st,defaultErrorClassifier:()=>ee,defaultLlmExecutor:()=>je,defaultLlmVerifier:()=>Ge,evalIntakeBridge:()=>at,evalSource:()=>it,evalVerifier:()=>Pe,harnessEvalPair:()=>Tt,harnessLoop:()=>vt,harnessProfile:()=>ht,harnessTrace:()=>bt,notifyEffect:()=>dt,priorityScore:()=>Et,refineExecutor:()=>fe,resolvePromptFn:()=>B,strategyKey:()=>j,strategyModel:()=>me});function Ze(e,t){return{outcome:"success",detail:`actuator applied ${t.intervention} for ${rt(t.summary)}`,artifact:e}}function et(e,t){let n=e instanceof Error?e.message:String(e);return{outcome:"failure",detail:`actuator threw on ${t.intervention}: ${n}`}}function tt(e){return`actuator skipped ${e.intervention} (shouldApply returned false)`}function rt(e,t=80){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}function nt(e){let t=e.name??"actuator-executor",n=e.toOutput??Ze,r=e.onError??et,o=e.skipDetail??tt;return d=>{let s=A(d,i=>i!=null,{name:`${t}/gate-in`}),a=_(s,i=>e.shouldApply&&!e.shouldApply(i)?Q(c=>(c.down([[P,{outcome:"failure",detail:o(i)}],[F]]),()=>{}),{name:`${t}/skip`}):Q(c=>{let m=new AbortController,f=!1,l=null,g=R=>{f||(f=!0,c.down([[P,R],[F]]),l?.(),l=null)},y;try{let R=e.apply(i,{signal:m.signal});y=z(R,{signal:m.signal})}catch(R){return g(r(R,i)),()=>{m.abort()}}return l=y.subscribe(R=>{for(let E of R){if(f)return;if(E[0]===P){g(n(E[1],i));return}if(E[0]===W){g(r(E[1],i));return}if(E[0]===F){g(r(new Error("actuator inner completed without emitting DATA"),i));return}}}),f&&l&&(l(),l=null),()=>{m.abort(),l?.(),l=null}},{name:`${t}/inner`}),{name:t});return A(a,i=>i!=null,{name:`${t}/gate-out`})}}function ot(e){let t=e.name??"auto-solidify",n=e.extract??(o=>o.execution.artifact??null),r=e.predicate??(()=>!0);return Q(o=>{let d=null,s=!1,a=()=>{s||(s=!0,d?.(),d=null)},i=c=>{s||(o.down([[W,c]]),a())};return d=e.verifyResults.subscribe(c=>{if(!s)for(let m of c){if(s)return;if(m[0]!==P){if(m[0]===F){o.down([[F]]),a();return}continue}let f=m[1];if(f==null||!f.verified)continue;let l;try{l=r(f)}catch(y){i(y);return}if(!l)continue;let g;try{g=n(f)}catch(y){i(y);return}if(g!=null){try{e.write(g,f)}catch(y){i(y);return}o.down([[P,g]])}}}),s&&d&&(d(),d=null),()=>{a()}},{name:t})}function st(e,t,n,r){return $([e],([o])=>{if(o==null)return;let d=n(o);for(let s of d)t.publish(s)},{name:r?.name??"intake-bridge"})}function at(e,t,n){let r=n?.defaultSeverity??"medium";return $([e],([o])=>{if(o==null)return;let d=Array.isArray(o)?o:[o];for(let s of d)for(let a of s.tasks)if(!(a.valid&&a.judge_scores?.every(i=>i.pass))){if(!a.valid&&(!a.judge_scores||a.judge_scores.length===0)){t.publish({source:"eval",summary:`Task ${a.task_id} invalid (model: ${s.model})`,evidence:`Run ${s.run_id}: task produced invalid output`,affectsAreas:["graphspec"],affectsEvalTasks:[a.task_id],severity:r});continue}if(a.judge_scores)for(let i of a.judge_scores)i.pass||t.publish({source:"eval",summary:`${a.task_id}: ${i.claim} (model: ${s.model})`,evidence:i.reasoning,affectsAreas:["graphspec"],affectsEvalTasks:[a.task_id],severity:r})}},{name:n?.name??"eval-intake-bridge"})}function it(e,t){return _(e,()=>z(t()))}function ut(e,t){return N([e,t],([n,r])=>{let o=n,d=r,s=new Map(o.tasks.map(l=>[l.task_id,l])),a=new Map(d.tasks.map(l=>[l.task_id,l])),i=new Set([...s.keys(),...a.keys()]),c=[],m=[],f=[];for(let l of i){let g=s.get(l),y=a.get(l),R=g?.valid??!1,E=y?.valid??!1,I=g?.judge_scores?g.judge_scores.filter(w=>w.pass).length:void 0,k=y?.judge_scores?y.judge_scores.filter(w=>w.pass).length:void 0,O=I!==void 0&&k!==void 0?k-I:void 0;c.push({taskId:l,before:R,after:E,scoreDiff:O}),R&&!E&&m.push(l),!R&&E&&f.push(l)}return{newFailures:m,resolved:f,taskDeltas:c,overallImproved:f.length>m.length}},{name:"eval-delta"})}function lt(e,t){let n=t==null?null:Array.isArray(t)?S(t):t,r=[e];return n&&r.push(n),N(r,o=>{let d=o[0],s=n?new Set(o[1]):null,a=new Set;for(let i of d)for(let c of i.affectsEvalTasks??[])(s==null||s.has(c))&&a.add(c);return[...a].sort()},{name:"affected-task-filter"})}function ct(e,t,n,r){let o=r?.defaultSeverity??"high";function d(a){let i=[];for(let c of a.lintErrors??[])i.push({source:"code-change",summary:`Lint: ${c.rule} in ${c.file}:${c.line}`,evidence:c.message,affectsAreas:[c.file],severity:o});for(let c of a.testFailures??[])i.push({source:"test",summary:`Test failure: ${c.testId}`,evidence:c.message,affectsAreas:[c.file],affectsEvalTasks:[c.testId],severity:o});return i}let s=n??d;return $([e],([a])=>{if(a!=null)for(let i of s(a))t.publish(i)},{name:r?.name??"code-change-bridge"})}function dt(e,t,n){return $([e.latest],([r])=>{r!=null&&t(r)},{name:n?.name??"notify-effect"})}var b=["auto-fix","needs-decision","investigation","backlog"],Z={"auto-fix":{gated:!1},"needs-decision":{gated:!0},investigation:{gated:!0},backlog:{gated:!1}},L={critical:100,high:70,medium:40,low:10},D=Math.LN2/(168*3600);function j(e,t){return`${e}\u2192${t}`}var pt=/\b(parse|json|config|validation|syntax)\b/i,ee=e=>pt.test(e.detail)?"self-correctable":"structural",ce=`You are a triage classifier for a reactive collaboration harness.
|
|
2
|
+
|
|
3
|
+
Given an intake item, classify it and output JSON:
|
|
4
|
+
{
|
|
5
|
+
"rootCause": "composition" | "missing-fn" | "bad-docs" | "schema-gap" | "regression" | "unknown",
|
|
6
|
+
"intervention": "template" | "catalog-fn" | "docs" | "wrapper" | "schema-change" | "investigate",
|
|
7
|
+
"route": "auto-fix" | "needs-decision" | "investigation" | "backlog",
|
|
8
|
+
"priority": <number 0-100>,
|
|
9
|
+
"triageReasoning": "<one sentence>"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
Strategy model (past effectiveness):
|
|
13
|
+
{{strategy}}
|
|
14
|
+
|
|
15
|
+
Intake item:
|
|
16
|
+
{{item}}`,de=`You are an implementation agent.
|
|
17
|
+
|
|
18
|
+
Given a triaged issue with root cause and intervention type, produce a fix.
|
|
19
|
+
|
|
20
|
+
Issue:
|
|
21
|
+
{{item}}
|
|
22
|
+
|
|
23
|
+
Output JSON:
|
|
24
|
+
{
|
|
25
|
+
"outcome": "success" | "failure" | "partial",
|
|
26
|
+
"detail": "<description of what was done or what failed>"
|
|
27
|
+
}`,pe=`You are a QA reviewer.
|
|
28
|
+
|
|
29
|
+
Given an execution result, verify whether the fix is correct.
|
|
30
|
+
|
|
31
|
+
Execution:
|
|
32
|
+
{{execution}}
|
|
33
|
+
|
|
34
|
+
Original issue:
|
|
35
|
+
{{item}}
|
|
36
|
+
|
|
37
|
+
Output JSON:
|
|
38
|
+
{
|
|
39
|
+
"verified": true/false,
|
|
40
|
+
"findings": ["<finding1>", ...],
|
|
41
|
+
"errorClass": "self-correctable" | "structural" // only if verified=false
|
|
42
|
+
}`;function B(e,t,n){if(typeof e=="function")return e;let r=e??t;return o=>n(r,o)}function ft(e){let{best:t,score:n,status:r}=e,o=Number.isFinite(n)?n.toFixed(3):String(n),d=t??void 0;return r==="converged"?{outcome:"success",detail:`refineLoop converged at score ${o}`,artifact:d}:r==="budget"?{outcome:"partial",detail:`refineLoop hit budget at score ${o}`,artifact:d}:{outcome:"failure",detail:`refineLoop errored (status=${r})`,artifact:d}}function fe(e){let t=e.name??"refine-executor",n=e.toOutput??ft;return r=>{let o=A(r,s=>s!=null,{name:`${t}/gate-in`}),d=_(o,s=>{let a=$e(e.seedFrom(s),e.evaluator,e.strategy,{...e.refine,dataset:e.datasetFor(s),name:`${t}/inner`});return N([a.status,a.best,a.score],([i,c,m])=>{let f=i;return f!=="converged"&&f!=="budget"&&f!=="errored"?null:n({best:c,score:m,status:f})},{name:`${t}/output`})},{name:t});return A(d,s=>s!=null,{name:`${t}/gate-out`})}}function mt(e){if(e.length===0)return Number.NEGATIVE_INFINITY;let t=0;for(let n of e)t+=n.score;return t/e.length}function gt(e){let{passCount:t,total:n,meanScore:r,threshold:o,missingArtifact:d}=e,s=Number.isFinite(r)?r.toFixed(3):String(r),a=!d&&n>0&&r>=o,i=d?["EXECUTE stage did not emit an artifact; cannot verify reactively"]:a?[`${t}/${n} eval tasks passed; mean score ${s} \u2265 ${o}`]:n===0?["No eval tasks were selected for this item \u2014 cannot verify"]:[`${t}/${n} eval tasks passed; mean score ${s} < threshold ${o}`];return a?{verified:!0,findings:i}:{verified:!1,findings:i,errorClass:"structural"}}function yt(e){return e.artifact??null}function Pe(e){let t=e.name??"eval-verifier",n=e.threshold??.5,r=e.toOutput??gt,o=e.extractArtifact??yt;return d=>{let s=A(d,i=>i!=null&&i[0]!=null&&i[1]!=null,{name:`${t}/gate-in`}),a=_(s,i=>{let[c,m]=i,f=o(c,m);if(f==null)return S(r({scores:[],meanScore:Number.NEGATIVE_INFINITY,passCount:0,total:0,threshold:n,missingArtifact:!0}));let l=S([f],{name:`${t}/candidates`}),g=S(e.datasetFor(m),{name:`${t}/dataset`}),y=e.evaluator(l,g);return N([y],([R])=>{let E=R;if(E==null)return null;let I=mt(E),k=E.filter(O=>O.score>=n).length;return r({scores:E,meanScore:I,passCount:k,total:E.length,threshold:n})},{name:`${t}/output`})},{name:t});return A(a,i=>i!=null,{name:`${t}/gate-out`})}}function Tt(e){let t=e.name??"harness-pair",n=fe({name:`${t}-exec`,seedFrom:e.seedFrom,evaluator:e.evaluator,strategy:e.strategy,datasetFor:e.datasetFor,refine:e.refine}),r=Pe({name:`${t}-verify`,evaluator:e.evaluator,datasetFor:e.datasetFor,threshold:e.threshold});return{executor:n,verifier:r}}function me(){let e=Oe({name:"strategy-entries"}),t=N([e.entries],([s])=>{let a=s;return new Map(a)},{name:"strategy-model",equals:(s,a)=>{let i=s,c=a;if(i.size!==c.size)return!1;for(let[m,f]of i){let l=c.get(m);if(!l||f.attempts!==l.attempts||f.successes!==l.successes)return!1}return!0}});function n(s,a,i){let c=j(s,a),m=e.get(c),f=(m?.attempts??0)+1,l=(m?.successes??0)+(i?1:0);e.set(c,{rootCause:s,intervention:a,attempts:f,successes:l,successRate:l/f})}function r(s,a){return e.get(j(s,a))}let o=t.subscribe(()=>{});function d(){o()}return{node:t,record:n,lookup:r,dispose:d}}function Et(e,t,n,r,o){let d={...L,...o?.severityWeights},s=o?.decayRate??D,a=o?.effectivenessThreshold??.7,i=o?.effectivenessBoost??15,c=[e,t,n];return r&&c.push(r),N(c,m=>{let f=m[0],l=m[1],g=m[2],y=r?m[3]:0,R=d[f.severity??"medium"],E=(V()-g)/1e9,I=Me(R,E,s,0),k=j(f.rootCause,f.intervention),O=l.get(k);return O&&O.successRate>=a&&(I+=i),I+=y*20,I},{name:"priority-score"})}var Fe="intake",Rt="triage-output",Ve="retry",Le="verify-results",De="__unrouted";function je(e,t){let n=B(t,de,(r,o)=>r.replace("{{item}}",JSON.stringify(o)));return r=>X(e,[r],n,{name:"execute",format:"json"})}function Ge(e,t){let n=B(t,pe,(r,o)=>{let[d,s]=o;return r.replace("{{execution}}",JSON.stringify(d)).replace("{{item}}",JSON.stringify(s))});return r=>X(e,[r],o=>o==null?"":n(o),{name:"verify",format:"json"})}var te=class extends ie{queues;jobs;gates;queueTopics;strategy;totalRetries;totalReingestions;priorityScores;constructor(t,n,r,o,d,s,a,i,c){super(t),this.queues=n,this.queueTopics=r,this.jobs=o,this.gates=d,this.strategy=s,this.totalRetries=a,this.totalReingestions=i,this.priorityScores=c}get intake(){return this.queues.topic(Fe)}get verifyResults(){return this.queues.topic(Le)}get retry(){return this.queues.topic(Ve)}get unrouted(){return this.queues.topic(De)}stageNodes(){let t=this.queues,n=s=>t.has(s)?`queues::${s}::latest`:null,r=s=>s==null?[]:[s],o=b.flatMap(s=>r(n(s))),d=[];for(let[s]of this.gates)d.push(`gates::${s}/gate`);return[{label:"INTAKE",paths:r(n("intake"))},{label:"TRIAGE",paths:["triage"]},{label:"QUEUE",paths:o},{label:"GATE",paths:d},{label:"EXECUTE",paths:["execute"]},{label:"VERIFY",paths:r(n("verify-results"))},{label:"REFLECT",paths:["reflect"]},{label:"STRATEGY",paths:["strategy"]}]}};function vt(e,t){let n=t.adapter,r=t.maxRetries??2,o=t.retainedLimit??1e3,d=t.errorClassifier??ee,s=new Map;for(let u of b)s.set(u,{...Z[u],...t.queues?.[u]});let a=we(`${e}/queues`,{defaultTopicOptions:{retainedLimit:o}}),i=a.topic(Fe),c=a.topic(Rt),m=a.topic(Ve),f=a.topic(Le),l=new Map;for(let u of b)l.set(u,a.topic(u));let g=a.topic(De),y=me(),R=q(i.latest,y.node),E=B(t.triagePrompt,ce,(u,p)=>{let[T,x]=p;return u.replace("{{strategy}}",JSON.stringify(Array.from(x.entries()))).replace("{{item}}",JSON.stringify(T))}),I=X(n,[R],u=>{let p=u;return!p||!p[0]?"":E(p)},{name:"triage",format:"json"}),k=q(I,R),w=$([k],([u])=>{if(u==null)return;let[p,T]=u;if(!p?.route)return;let x=T?.[0],C={...p,...x};c.publish(C)}).subscribe(()=>{}),Qe=new Set(b);for(let u of b)le(`bridge/${u}`,c,l.get(u),{map:p=>p.route===u?p:void 0});le("bridge/__unrouted",c,g,{map:u=>Qe.has(u.route)?void 0:u});let G=new Map,re=new Map;for(let u of b)G.set(u,_e(`jobs/${u}`));let ge=[];for(let u of b){let p=l.get(u),T=G.get(u),x=new WeakSet,C=$([p.events],([ae])=>{let H=ae??[];for(let h of H){if(x.has(h))continue;x.add(h);let M=T.enqueue(h);re.set(U(h),{route:u,id:M})}},{name:`jobs/${u}-mirror`});ge.push(C.subscribe(()=>{}))}function ye(u){let p=U(u),T=re.get(p);T&&(G.get(T.route)?.removeById(T.id),re.delete(p))}let Te=new ie("gates"),Y=new Map;for(let u of b){let p=s.get(u);if(!p.gated)continue;let T=l.get(u),x=Ce(Te,`${u}/gate`,T.latest,{maxPending:p.maxPending,startOpen:p.startOpen});Y.set(u,x)}let J=[];for(let u of b)s.get(u).gated&&Y.has(u)?J.push(Y.get(u).node):J.push(l.get(u).latest);J.push(m.latest);let ne=Ae(...J),Ee=(t.executor??je(n,t.executePrompt))(ne),oe=q(Ee,ne),Re=(t.verifier??Ge(n,t.verifyPrompt))(oe),ve=q(Re,oe),xe=t.maxReingestions??1,Ue=Math.min(t.maxTotalRetries??r*10,100),qe=Math.min(t.maxTotalReingestions??xe*10,100),he=S(0),Ie=S(0);function Be(u,p,T){let x={item:T,outcome:p?.outcome??"failure",detail:p?.detail??"unknown",artifact:p?.artifact};return{item:T,execution:x,verified:u.verified,findings:u.findings??[],errorClass:u.errorClass}}function Ye(u,p){y.record(p.rootCause,p.intervention,!0),f.publish(u),ye(p)}function Je(u,p){let T=U(p),x=p.$retries??0,C={...p,$retries:x+1,summary:`[RETRY ${x+1}/${r}] ${T} \u2014 Previous attempt failed: ${u.findings.join("; ")}`,relatedTo:[T]};m.publish(C)}function be(u,p){y.record(p.rootCause,p.intervention,!1),f.publish(u),ye(p);let T=U(p),x=p.$reingestions??0;x<xe&&ue(Ie,qe)&&i.publish({source:p.source,summary:`Verification failed for: ${T}`,evidence:u.findings.join(`
|
|
43
|
+
`),affectsAreas:p.affectsAreas,affectsEvalTasks:p.affectsEvalTasks,severity:p.severity??"high",relatedTo:[T],$reingestions:x+1})}let se=ke([ve],(u,p)=>{let T=u[0];if(T==null||T.length===0)return;let x=T[T.length-1];if(x==null)return;let[C,ae]=x,[H,h]=ae??[null,null];if(!C||!h)return;if(H==null){be({item:h,execution:{item:h,outcome:"failure",detail:"executor returned null"},verified:!1,findings:["executor returned null"],errorClass:"structural"},h);return}let M=Be(C,H,h);if(M.verified){Ye(M,h);return}let We=M.errorClass??d({item:h,outcome:H.outcome,detail:M.findings.join("; ")}),ze=h.$retries??0;We==="self-correctable"&&ze<r&&ue(he,Ue)?Je(M,h):be(M,h)}),Ke=se.subscribe(()=>{}),Ne=N([se],()=>null,{name:"reflect",equals:()=>!1}),K;t.priority&&(K=xt(l,y,t));let v=new te(e,a,l,G,Y,y,he,Ie,K);v.addDisposer(w),v.addDisposer(Ke),v.addDisposer(y.dispose);for(let u of ge)v.addDisposer(u);if(v.add(I,{name:"triage"}),v.add(ne,{name:"execute-input"}),v.add(Ee,{name:"execute"}),v.add(oe,{name:"execute-context"}),v.add(Re,{name:"verify"}),v.add(ve,{name:"verify-context"}),v.add(se,{name:"verify-dispatch"}),v.add(Ne,{name:"reflect"}),v.add(y.node,{name:"strategy"}),v.addDisposer(Ne.subscribe(()=>{})),K)for(let[u,p]of K)v.add(p,{name:`priority/${u}`}),v.addDisposer(p.subscribe(()=>{}));v.mount("queues",a),v.mount("gates",Te);for(let[u,p]of G)v.mount(`jobs/${u}`,p);return v}function xt(e,t,n){if(!n.lastInteractionNs)throw new Error("harnessLoop: `opts.priority` requires `opts.lastInteractionNs` \u2014 pass a Node<number> (e.g. `fromTimer(60_000)` or a `state(monotonicNs())` you bump on human interaction). Priority scores only decay when this node settles; an internal default would freeze age at construction time.");let r=n.lastInteractionNs,o=n.priority??{},d={...L,...o.severityWeights},s=o.decayRate??D,a=o.effectivenessThreshold??.7,i=o.effectivenessBoost??15,c=new Map;for(let[m,f]of e){let l=N([f.latest,t.node,r],g=>{let y=g[0];if(y==null)return 0;let R=d[y.severity??"medium"]??40,E=(V()-g[2])/1e9,I=R*Math.exp(-s*Math.max(0,E)),k=`${y.rootCause}\u2192${y.intervention}`,w=g[1]?.get(k);return w&&w.successRate>=a&&(I+=i),I},{name:`priority/${m}`});c.set(m,l)}return c}function ht(e,t){let n=Se(e,t),r={};for(let o of b){let d=e.queues.has(o)?e.queues.topic(o):null;r[o]=d?.retained().length??0}return{...n,queueDepths:r,strategyEntries:e.strategy.node.cache?.size??0,totalRetries:e.totalRetries.cache??0,totalReingestions:e.totalReingestions.cache??0}}function It(e){let t={};for(let{label:n,paths:r}of e.stageNodes())for(let o of r)t[o]=n;return t}function bt(e,t){let n=t?.logger===null?null:t?.logger??console.log,r=t?.detail??"summary",o=V(),d=[],s=[],a=It(e);function i(){return(V()-o)/1e9}function c(m,f,l){let g={elapsed:i(),stage:m,type:f};r!=="summary"&&(g.summary=Nt(l)),r==="full"&&(g.data=l),s.push(g)}for(let[m,f]of Object.entries(a))try{let l=e.observe(m,{format:"stage-log",stageLabels:a,logger:n?g=>n(g):()=>{},includeTypes:["data","error","complete"]});l.onEvent(g=>{g.type==="data"?c(f,"data",g.data):g.type==="error"?c(f,"error",g.data):g.type==="complete"&&c(f,"complete",void 0)}),d.push(l)}catch(l){let g=l instanceof Error?l.message:String(l);c(f,"error",`observe-unavailable: ${m} \u2014 ${g}`),n&&n(`[${i().toFixed(3)}s] ${f.padEnd(9)} \u2717 observe-unavailable: ${g}`)}return{get events(){return s},dispose(){for(let m of d)m.dispose();d.length=0}}}function Nt(e){if(e==null)return"null";if(typeof e=="string")return He(e,80);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return String(e);try{let t=JSON.stringify(e);return He(t,120)}catch{return String(e)}}function He(e,t){return e.length>t?`${e.slice(0,t-1)}\u2026`:e}export{nt as a,ot as b,st as c,at as d,it as e,ut as f,lt as g,ct as h,dt as i,b as j,Z as k,L as l,D as m,j as n,ee as o,ce as p,de as q,pe as r,B as s,fe as t,Pe as u,Tt as v,me as w,Et as x,je as y,Ge as z,te as A,vt as B,ht as C,bt as D,kt as E};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import{a as Tt,b as Mt,d as vt,e as kt}from"./chunk-GCUYSIM4.js";import{e as bt}from"./chunk-3Y4BXFFR.js";import{h as xt}from"./chunk-U2T2XWDA.js";import{e as Fe}from"./chunk-T2TB37TW.js";import{a as Vt,b as Jt,c as Qt,d as Xt,e as Zt,f as je,g as er}from"./chunk-KN2UMFT6.js";import{a as Pe,b as W,c as xe,d as de,e as X,f as K,g as qt,h as _e,i as Ht,j as zt,k as Yt}from"./chunk-2LZ6DL45.js";import{c as pt}from"./chunk-L3KUKDZC.js";import{b as ht}from"./chunk-WBWBY6LI.js";import{b as it,c as ve,d as lt,f as Oe}from"./chunk-FKRPIRE6.js";import{b as ke}from"./chunk-TZQPPQEQ.js";import{b as me}from"./chunk-HTBOCKVD.js";import{j as se}from"./chunk-2JO6LXFT.js";import{a as Q}from"./chunk-ESMPEKEV.js";import{R as yt,b as ft,s as gt,x as G}from"./chunk-4F564IPP.js";import{B as _,f as dt,k as De,l as ut,m as k,w as ae,y as mt,z as ct}from"./chunk-T7EQPKOP.js";import{D as le,E as v,F as oe,G as T,H as ee,m as J,o as H,p as he}from"./chunk-LYCLF26R.js";import{b as B,d as ue,i as Z,j as $}from"./chunk-CK2E7BTU.js";import{b as Ut}from"./chunk-QYADASLV.js";var Xr={};Ut(Xr,{AgentLoopGraph:()=>Ie,AllTiersExhaustedError:()=>Zt,BudgetExhaustedError:()=>Le,ChatStreamGraph:()=>Se,CircuitOpenError:()=>ve,DEFAULT_DECAY_RATE:()=>tt,FallbackMissError:()=>zt,LLMTimeoutError:()=>pe,ReplayCacheMissError:()=>qt,ToolRegistryGraph:()=>Ee,admissionFilter3D:()=>Wr,admissionScored:()=>_t,agentLoop:()=>Gr,agentMemory:()=>Ur,anthropicAdapter:()=>Vt,canonicalJson:()=>Ht,cascadingLlmAdapter:()=>je,chatStream:()=>Je,composePricing:()=>sr,computePrice:()=>Ge,contentGate:()=>Pr,costMeterExtractor:()=>Cr,createAdapter:()=>Xt,createCapabilitiesRegistry:()=>tr,createPricingRegistry:()=>or,dryRunAdapter:()=>Pe,fallbackAdapter:()=>Yt,fromLLM:()=>Tr,frozenContext:()=>xr,gatedStream:()=>Lr,gaugesAsContext:()=>Vr,googleAdapter:()=>Jt,graphFromSpec:()=>Gt,graphFromSpecReactive:()=>qr,handoff:()=>Br,keywordFlagExtractor:()=>Er,knobsAsTools:()=>zr,llmConsolidator:()=>et,llmExtractor:()=>Ze,memoryRetrieval:()=>at,memoryWithKG:()=>nt,memoryWithTiers:()=>ot,memoryWithVectors:()=>rt,observableAdapter:()=>rr,openAICompatAdapter:()=>Qt,parseRateLimitFromError:()=>Ke,pricingFor:()=>ir,promptNode:()=>Ye,redactor:()=>_r,registryPricing:()=>ar,resilientAdapter:()=>br,streamExtractor:()=>Ir,streamingPromptNode:()=>wr,suggestStrategy:()=>Bt,suggestStrategyReactive:()=>Jr,systemPromptBuilder:()=>Nr,tier:()=>er,toolCallExtractor:()=>Dr,toolExecution:()=>Qe,toolRegistry:()=>Xe,toolSelector:()=>$r,validateGraphDef:()=>Qr,withBreaker:()=>Be,withBudgetGate:()=>We,withDryRun:()=>dr,withRateLimiter:()=>Ve,withReplayCache:()=>_e,withRetry:()=>qe,withTimeout:()=>He,zeroPrice:()=>we});function be(t,e){return`${t}::${e}`}function tr(t){let e=ke({name:"capabilitiesRegistry"}),r=i=>{e.set(be(i.provider,i.id),i)};if(t)for(let i of t)r(i);let n=(i,d)=>{let m=e.get(be(i,d));if(m)return m;let p=e.entries.cache;if(!p)return;let c;for(let[,g]of p){if(g.provider!==i)continue;let y=g.id;d.startsWith(y)&&(!c||y.length>c.id.length)&&(c=g)}return c},o=128,a=new Map,s=new Map,l=(i,d,m,p)=>{for(i.has(d)&&i.delete(d),i.set(d,m);i.size>p;){let c=i.keys().next().value;if(c===void 0)break;i.delete(c)}},u=T([e.entries],([i])=>Array.from(i.values()),{name:"capabilitiesRegistry/entries",initial:[]});return{register:r,lookup:n,remove(i,d){let m=e.has(be(i,d));return m&&e.delete(be(i,d)),m},entries(){let i=e.entries.cache;return(function*(){if(i)for(let d of i.values())yield d})()},lookupNode(i,d){let m=be(i,d),p=a.get(m);if(p)return a.delete(m),a.set(m,p),p;let c=T([e.entries],()=>n(i,d),{name:`capabilitiesRegistry/lookup/${i}::${d}`,initial:void 0});return l(a,m,c,o),c},entriesNode:u,byProvider(i){let d=s.get(i);if(d)return s.delete(i),s.set(i,d),d;let m=T([u],([p])=>p.filter(c=>c.provider===i),{name:`capabilitiesRegistry/byProvider/${i}`,initial:[]});return l(s,i,m,o),m}}}function z(t){let e=t.input,r=e.regular+(e.cacheRead??0)+(e.cacheWrite5m??0)+(e.cacheWrite1h??0)+(e.cacheWriteOther??0)+(e.audio??0)+(e.image??0)+(e.video??0)+(e.toolUse??0);if(!e.extensions)return r;let n=0;for(let o of Object.values(e.extensions))n+=o;return r+n}function te(t){let e=t.output,r=e.regular+(e.reasoning??0)+(e.audio??0)+(e.predictionAccepted??0)+(e.predictionRejected??0);if(!e.extensions)return r;let n=0;for(let o of Object.values(e.extensions))n+=o;return r+n}function Rt(){return{input:{regular:0},output:{regular:0}}}function rr(t,e){let r=e?.logMax??1e3,n=me(void 0,{name:e?.name?`${e.name}/stats`:"adapterStats",maxSize:r}),o=v(null,{name:"adapterStats/lastCall"}),a=T([n.entries],([y])=>y.length,{name:"adapterStats/totalCalls",initial:0}),s=T([n.entries],([y])=>y.reduce((f,h)=>f+z(h.usage),0),{name:"adapterStats/totalInputTokens",initial:0}),l=T([n.entries],([y])=>y.reduce((f,h)=>f+te(h.usage),0),{name:"adapterStats/totalOutputTokens",initial:0}),u=[_(a),_(s),_(l)],i=y=>{n.append(y),o.emit(y)},d=()=>{n.clear(),o.emit(null)},m=W(t,{invoke(y,f){let h=H(),b=he(),w=t.model??f?.model??"",L=N=>(i(de({provider:t.provider,model:t.model??f?.model??N.model??"",tier:f?.tier??N.tier,usage:N.usage??X(),startNs:h,startWallClockNs:b,method:"invoke"})),N),C=N=>{let P=N;i(de({provider:t.provider,model:w,tier:f?.tier,usage:X(),startNs:h,startWallClockNs:b,method:"invoke",error:{type:P?.name??"Error",message:P?.message??String(N)}}))};return xe(t.invoke(y,f),{onResp:L,onError:C,name:"adapterStats/invokeTap"})},async*stream(y,f){let h=H(),b=he(),w=t.model??f?.model??"",L;try{for await(let C of t.stream(y,f))C.type==="usage"&&(L=C.usage),yield C;i(de({provider:t.provider,model:w,tier:f?.tier,usage:L??X(),startNs:h,startWallClockNs:b,method:"stream"}))}catch(C){let N=C;throw i(de({provider:t.provider,model:w,tier:f?.tier,usage:L??X(),startNs:h,startWallClockNs:b,method:"stream",error:{type:N?.name??"Error",message:N?.message??String(C)}})),C}}});K(m,"observableAdapter",t);let p=!1;return{adapter:m,stats:{lastCall:o,allCalls:n,totalCalls:a,totalInputTokens:s,totalOutputTokens:l,reset:d,dispose:()=>{if(!p){p=!0;for(let y of u)y();u.length=0}}}}}function nr(t,e){return t==null?0:typeof t=="number"?t:t.thresholdTokens!=null&&t.pricePerMillionAbove!=null&&e>t.thresholdTokens?t.pricePerMillionAbove:t.pricePerMillion}function we(t="USD"){return{total:0,currency:t}}function Ge(t,e,r){let n=z(t),o=e.currency??"USD",a=r?.withBreakdown===!0,s=a?{}:null,l=0,u=(f,h,b)=>{if(!h||b==null)return;let w=nr(b,n),L=h*w/1e6;l+=L,a&&(s[f]=(s[f]??0)+L)},i=t.input,d=e.input;if(d&&(u("input.regular",i.regular,d.regular),u("input.cacheRead",i.cacheRead??0,d.cacheRead),u("input.cacheWrite5m",i.cacheWrite5m??0,d.cacheWrite5m),u("input.cacheWrite1h",i.cacheWrite1h??0,d.cacheWrite1h),u("input.cacheWriteOther",i.cacheWriteOther??0,d.cacheWriteOther),u("input.audio",i.audio??0,d.audio),u("input.image",i.image??0,d.image),u("input.video",i.video??0,d.video),u("input.toolUse",i.toolUse??0,d.toolUse),i.extensions&&d.extensions))for(let[f,h]of Object.entries(i.extensions))u(`input.ext.${f}`,h,d.extensions[f]);let m=t.output,p=e.output;if(p&&(u("output.regular",m.regular,p.regular),u("output.reasoning",m.reasoning??0,p.reasoning),u("output.audio",m.audio??0,p.audio),u("output.predictionAccepted",m.predictionAccepted??0,p.predictionAccepted),u("output.predictionRejected",m.predictionRejected??0,p.predictionRejected),m.extensions&&p.extensions))for(let[f,h]of Object.entries(m.extensions))u(`output.ext.${f}`,h,p.extensions[f]);let c=r?.tier;if(c&&e.tierMultipliers){let f=e.tierMultipliers[c];if(f!=null&&(l*=f,a))for(let h of Object.keys(s))s[h]*=f}let g=t.auxiliary,y=e.auxiliary;if(g&&y)for(let[f,h]of Object.entries(g)){let b=y[f];if(b==null||!h)continue;let w=h*b;l+=w,a&&(s[`auxiliary.${f}`]=w)}return a?{total:l,currency:o,breakdown:s}:{total:l,currency:o}}function Re(t,e){return`${t}::${e}`}function or(t){let e=new Map,r=new Map,n=(o,a,s)=>{e.set(Re(o,a),{provider:o,model:a,pricing:s});let l=r.get(o);l||(l=new Set,r.set(o,l)),l.add(a)};if(t)for(let[o,a,s]of t)n(o,a,s);return{register:n,lookup(o,a){let s=e.get(Re(o,a));if(s)return s.pricing;let l=r.get(o);if(!l)return;let u;for(let i of l)if(a.startsWith(i)&&(!u||i.length>u.key.length)){let d=e.get(Re(o,i));d&&(u={key:i,pricing:d.pricing})}return u?.pricing},remove(o,a){let s=e.delete(Re(o,a));if(s){let l=r.get(o);l?.delete(a),l&&l.size===0&&r.delete(o)}return s},entries(){let o=e.values();return(function*(){for(let{provider:a,model:s,pricing:l}of o)yield[a,s,l]})()}}}function ar(t,e="USD"){return(r,n)=>{let o=t.lookup(n.provider,n.model);return o?Ge(r,o,{tier:n.tier,withBreakdown:n.withBreakdown}):we(e)}}function sr(...t){return(e,r)=>{for(let n of t){let o=n(e,r);if(o.total!==0)return o}return t.length>0?t[0](e,r):we()}}function ir(t,e,r){return t?.pricing?Ge(e,t.pricing,r):we()}function Be(t,e={}){let r=e.breaker??lt(e),n=W(t,{async invoke(o,a){if(!r.canExecute())throw new ve;try{let s=await ae(k(t.invoke(o,a)));return r.recordSuccess(),s}catch(s){throw r.recordFailure(s),s}},async*stream(o,a){if(!r.canExecute())throw new ve;try{for await(let s of t.stream(o,a))yield s;r.recordSuccess()}catch(s){throw r.recordFailure(s),s}}});return K(n,"withBreaker",t),{adapter:n,breaker:r}}var Le=class extends Error{constructor(r,n,o){super(`Budget exhausted: ${r} (limit=${n}, observed=${o})`);this.which=r;this.limit=n;this.observed=o}name="BudgetExhaustedError"},$e=Object.freeze({calls:0,inputTokens:0,outputTokens:0,usd:0}),wt=()=>({calls:0,inputTokens:0,outputTokens:0,usd:0});function We(t,e){let r=me(void 0,{name:e.name?`${e.name}/log`:"budgetGate/log",maxSize:e.logMax??1e3}),n=v(wt(),{name:e.name?`${e.name}/totals`:"budgetGate/totals"}),o=T([n],([i])=>{let d=i;return!(e.caps.calls!=null&&d.calls>=e.caps.calls||e.caps.inputTokens!=null&&d.inputTokens>=e.caps.inputTokens||e.caps.outputTokens!=null&&d.outputTokens>=e.caps.outputTokens||e.caps.usd!=null&&d.usd>=e.caps.usd)},{name:e.name?`${e.name}/isOpen`:"budgetGate/isOpen",initial:!0});if(_(o),e.onExhausted!=null){let i=e.onExhausted,d=!1,m=!0;o.subscribe(p=>{for(let c of p)if(c[0]===B){let g=c[1];if(d&&m&&g===!1){let y=Lt(n.cache??$e,e.caps);y&&i(y)}m=g,d=!0}})}let a=()=>{if(o.cache===!1){let i=n.cache??$e,d=Lt(i,e.caps);return new Le(d??"budget",e.caps[d??"calls"]??0,lr(i,d??"calls"))}},s=(i,d)=>{let m=t.provider,p=de({provider:m,model:d.model,tier:d.tier,usage:i,startNs:d.startNs,method:d.method,...d.error?{error:d.error}:{}});r.append(p);let c=n.cache??$e,g=e.pricingFn?c.usd+e.pricingFn(i,{model:d.model,provider:m,tier:d.tier}).total:c.usd;n.emit({calls:c.calls+1,inputTokens:c.inputTokens+z(i),outputTokens:c.outputTokens+te(i),usd:g})},l=()=>{r.clear(),n.emit(wt())},u=W(t,{invoke(i,d){let m=a();if(m)return Promise.reject(m);let p=H(),c=t.model??d?.model??"",g=f=>(s(f.usage??X(),{model:t.model??d?.model??f.model??"",tier:d?.tier??f.tier,startNs:p,method:"invoke"}),f),y=f=>{let h=f;s(X(),{model:c,tier:d?.tier,startNs:p,method:"invoke",error:{type:h?.name??"Error",message:h?.message??String(f)}})};return xe(t.invoke(i,d),{onResp:g,onError:y,name:"budgetGate/invokeTap"})},async*stream(i,d){let m=a();if(m)throw m;let p=H(),c;try{for await(let g of t.stream(i,d))g.type==="usage"&&(c=g.usage),yield g;s(c??X(),{model:t.model??d?.model??"",tier:d?.tier,startNs:p,method:"stream"})}catch(g){let y=g;throw s(c??X(),{model:t.model??d?.model??"",tier:d?.tier,startNs:p,method:"stream",error:{type:y?.name??"Error",message:y?.message??String(g)}}),g}}});return K(u,"withBudgetGate",t),{adapter:u,budget:{totals:n,isOpen:o,log:r,reset:l}}}function Lt(t,e){if(e.calls!=null&&t.calls>=e.calls)return"calls";if(e.inputTokens!=null&&t.inputTokens>=e.inputTokens)return"inputTokens";if(e.outputTokens!=null&&t.outputTokens>=e.outputTokens)return"outputTokens";if(e.usd!=null&&t.usd>=e.usd)return"usd"}function lr(t,e){switch(e){case"calls":return t.calls;case"inputTokens":return t.inputTokens;case"outputTokens":return t.outputTokens;case"usd":return t.usd}}function dr(t,e){let r=e.mock??Pe({provider:t.provider,model:t.model}),n=typeof e.enabled=="boolean"?e.enabled:void 0,o=n===void 0?k(e.enabled):void 0,a;o&&(a=_(o));let s=()=>n!==void 0?n:!!o?.cache,l=W(t,{invoke(i,d){return s()?r.invoke(i,d):t.invoke(i,d)},stream(i,d){return s()?r.stream(i,d):t.stream(i,d)}});return K(l,"withDryRun",t),{adapter:l,dispose:()=>{a&&(a(),a=void 0)}}}function Ke(t){if(t==null||typeof t!="object")return;let e=t,r=e.status,n=ur(e.headers);if(r!==429&&r!==503&&!yr(e.message))return;let o={},a=n("retry-after"),s=cr(a);s!=null&&(o.retryAfterMs=s);let l=n("anthropic-ratelimit-requests-reset");if(l){let c=Nt(l);c!=null&&(o.retryAfterMs=Math.max(o.retryAfterMs??0,c))}let u=n("anthropic-ratelimit-tokens-reset");if(u){let c=Nt(u);c!=null&&(o.retryAfterMs=Math.max(o.retryAfterMs??0,c))}let i=Ne(n,"x-ratelimit-limit-requests");i!=null&&(o.rpmCap=i);let d=Ne(n,"x-ratelimit-limit-tokens");d!=null&&(o.tpmCap=d);let m=Ne(n,"x-ratelimit-remaining-requests"),p=Ne(n,"x-ratelimit-remaining-tokens");if(m!=null&&i!=null&&i>0&&(o.usageHint??={},o.usageHint.rpm=1-m/i),p!=null&&d!=null&&d>0&&(o.usageHint??={},o.usageHint.tpm=1-p/d),o.retryAfterMs==null&&e.message){let c=fr(e.message);c!=null&&(o.retryAfterMs=c)}return e.headers&&(o.metadata={headers:mr(e.headers)}),o.retryAfterMs==null&&o.rpmCap==null&&o.tpmCap==null&&o.usageHint==null?o.metadata?o:void 0:o}function ur(t){if(!t)return()=>{};if(typeof t.get=="function"){let n=t;return o=>n.get(o)??n.get(o.toLowerCase())??void 0}let e=t,r={};for(let[n,o]of Object.entries(e)){let a=Array.isArray(o)?o.join(", "):o;a!=null&&(r[n.toLowerCase()]=a)}return n=>r[n.toLowerCase()]}function mr(t){let e={};if(typeof t.forEach=="function")return t.forEach((r,n)=>{e[n]=r}),e;for(let[r,n]of Object.entries(t))n!=null&&(e[r]=Array.isArray(n)?n.join(", "):n);return e}function Ne(t,e){let r=t(e);if(r==null)return;let n=Number(r);return Number.isFinite(n)?n:void 0}function cr(t){if(!t)return;let e=t.trim(),r=Number(e);if(Number.isFinite(r)&&r>=0)return r*1e3;let n=Date.parse(e);if(Number.isFinite(n)){let o=n-Date.now();if(o>0)return o}}function Nt(t){if(!t)return;let e=Date.parse(t);if(Number.isFinite(e))return Math.max(0,e-Date.now())}var pr=/retry\s+(?:in|after)\s+(\d+(?:\.\d+)?)\s*(ms|s|sec|seconds?|m|min|minutes?)/i;function fr(t){let e=pr.exec(t);if(!e)return;let r=Number(e[1]);if(!Number.isFinite(r))return;let n=(e[2]??"s").toLowerCase();if(n==="ms")return r;if(n.startsWith("s"))return r*1e3;if(n.startsWith("m"))return r*6e4}var gr=/rate\s*limit|too\s*many\s*requests|quota|429/i;function yr(t){return!!t&&gr.test(t)}function Ue(t){let e=new Error(t);return e.name="AbortError",e}function Ct(t={}){let e=Math.max(1,t.burstMultiplier??1),r=t.clampCooldownMs??6e4,n=t.rpm!=null?k(t.rpm):v(Number.POSITIVE_INFINITY),o=t.tpm!=null?k(t.tpm):v(Number.POSITIVE_INFINITY),a=v(Number.POSITIVE_INFINITY,{name:"adaptiveRateLimiter/signalRpmCap"}),s=v(Number.POSITIVE_INFINITY,{name:"adaptiveRateLimiter/signalTpmCap"}),l=v({},{name:"adaptiveRateLimiter/lastSignal"}),u=T([n,a],([x,I])=>Math.min(Number(x??1/0),Number(I??1/0)),{name:"adaptiveRateLimiter/effectiveRpm"}),i=T([o,s],([x,I])=>Math.min(Number(x??1/0),Number(I??1/0)),{name:"adaptiveRateLimiter/effectiveTpm"}),d=ce(Number(n.cache??Number.POSITIVE_INFINITY),e),m=ce(Number(o.cache??Number.POSITIVE_INFINITY),e),p=!1,c=!1,g=u.subscribe(x=>{for(let I of x)if(I[0]===B){let D=Number(I[1]);Number.isFinite(D)&&D>0?(d=ce(D,e),p=!1):D===1/0?(d=ce(1/0,e),p=!1):D<=0&&(p=!0)}}),y=i.subscribe(x=>{for(let I of x)if(I[0]===B){let D=Number(I[1]);Number.isFinite(D)&&D>0?(m=ce(D,e),c=!1):D===1/0?(m=ce(1/0,e),c=!1):D<=0&&(c=!0)}}),f=0,h=new Q,b=new Q,w;t.adaptation!=null&&(w=k(t.adaptation).subscribe(I=>{for(let D of I)D[0]===B&&L(D[1])}));function L(x){if(l.emit(x),x.rpmCap!=null&&Number.isFinite(x.rpmCap)&&x.rpmCap>=0&&(a.emit(x.rpmCap),Number.isFinite(r)&&r>0&&h.start(r,()=>a.emit(Number.POSITIVE_INFINITY))),x.tpmCap!=null&&Number.isFinite(x.tpmCap)&&x.tpmCap>=0&&(s.emit(x.tpmCap),Number.isFinite(r)&&r>0&&b.start(r,()=>s.emit(Number.POSITIVE_INFINITY))),x.retryAfterMs!=null&&x.retryAfterMs>0){let I=H()+x.retryAfterMs*1e6;I>f&&(f=I)}}let C=v(0,{name:"adaptiveRateLimiter/pending"}),N=v(Number.POSITIVE_INFINITY,{name:"adaptiveRateLimiter/rpmAvailable"}),P=v(Number.POSITIVE_INFINITY,{name:"adaptiveRateLimiter/tpmAvailable"}),j=x=>{C.emit((C.cache??0)+x)},S=()=>{N.emit(d.available()),P.emit(m.available())};async function E(x={}){let I=x.requestCost??1,D=x.tokenCost??0,U=x.signal;j(1);try{for(;;){if(U?.aborted)throw Ue("AdaptiveRateLimiter.acquire aborted");let q=H();if(f>q){let M=Math.ceil((f-q)/1e6);await Ae(M,U);continue}if(I>0&&p||D>0&&c){await Ae(250,U);continue}let re=d,ie=m;if(!re.tryConsume(I)){await Ae(At(re,I),U);continue}if(!(D>0?ie.tryConsume(D):!0)){re.putBack(I),await Ae(At(ie,D),U);continue}S();return}}finally{j(-1)}}function A(x){x>0?m.tryConsume(x):x<0&&m.putBack(-x),S()}function F(){g(),y(),w?.(),h.cancel(),b.cancel()}return{effectiveRpm:u,effectiveTpm:i,lastSignal:l,pending:C,rpmAvailable:N,tpmAvailable:P,acquire:E,recordUsage:A,recordSignal:L,dispose:F}}function ce(t,e){if(!Number.isFinite(t)||t===1/0)return Oe(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);let r=Math.max(1,t*e),n=t/60;return Oe(r,n)}function At(t,e){let r=t.available(),n=Math.max(0,e-r);return n<=0?25:Math.min(5e3,Math.max(50,n*100))}function Ae(t,e){return t<=0?Promise.resolve():e?.aborted?Promise.reject(Ue("AdaptiveRateLimiter.acquire aborted")):new Promise((r,n)=>{let o=new Q,a,s=()=>{o.cancel(),e&&a&&e.removeEventListener("abort",a)};o.start(t,()=>{s(),r()}),e&&(a=()=>{s(),n(Ue("AdaptiveRateLimiter.acquire aborted"))},e.addEventListener("abort",a,{once:!0}))})}function Ve(t,e={}){let r=e.limiter??Ct({name:e.name??"rateLimiter",rpm:e.rpm,tpm:e.tpm,adaptation:e.adaptation,burstMultiplier:e.burstMultiplier}),n=(s,l)=>e.costFn?e.costFn(s,l):0,o=s=>{let l=Ke(s);l&&r.recordSignal(l)},a=W(t,{async invoke(s,l){let u=n(s,l);await r.acquire({requestCost:1,tokenCost:u,signal:l?.signal});try{let i=await ae(k(t.invoke(s,l))),d=i.usage??Rt(),p=z(d)+te(d)-u;return p>0&&r.recordUsage(p),i}catch(i){throw o(i),i}},async*stream(s,l){let u=n(s,l);await r.acquire({requestCost:1,tokenCost:u,signal:l?.signal});try{let i=0;for await(let m of t.stream(s,l))m.type==="usage"&&(i=z(m.usage)+te(m.usage)),yield m;let d=i-u;d>0&&r.recordUsage(d)}catch(i){throw o(i),i}}});return K(a,"withRateLimiter",t),{adapter:a,limiter:r}}function Ce(t="aborted"){let e=new Error(t);return e.name="AbortError",e}function St(t,e){return t<=0?Promise.resolve():e?.aborted?Promise.reject(Ce()):new Promise((r,n)=>{let o=new Q,a,s=()=>{o.cancel(),e&&a&&e.removeEventListener("abort",a)};o.start(t,()=>{s(),r()}),e&&(a=()=>{s(),n(Ce())},e.addEventListener("abort",a,{once:!0}))})}function qe(t,e={}){let r=e.attempts??3,n=e.baseDelayMs??500,o=e.maxDelayMs??1e4,a=e.strategy??"decorrelated",s=e.jitter??!0,l=e.shouldRetry??hr,u=e.retryStreaming??!0,i=(m,p)=>{if(a==="decorrelated"){let f=Math.min(o,Math.max(n,p*3));return n+Math.random()*(f-n)}let c=a==="exp"?n*2**(m-1):n*m,g=Math.min(o,c);if(!s)return g;let y=g*(.5+Math.random());return Math.min(o,y)},d=W(t,{async invoke(m,p){if(p?.signal?.aborted)throw Ce();let c,g=n;for(let y=1;y<=r;y++)try{return await ae(k(t.invoke(m,p)))}catch(f){if(c=f,y>=r||!l(f,y))throw f;let h=i(y,g);g=h,await St(h,p?.signal)}throw c},async*stream(m,p){if(p?.signal?.aborted)throw Ce();if(!u){for await(let y of t.stream(m,p))yield y;return}let c,g=n;for(let y=1;y<=r;y++){let f=!1;try{for await(let h of t.stream(m,p))f=!0,yield h;return}catch(h){if(c=h,f||y>=r||!l(h,y))throw h;let b=i(y,g);g=b,await St(b,p?.signal)}}throw c}});return K(d,"withRetry",t),d}function hr(t,e){if(t==null)return!1;let r=t;return r.name==="LLMTimeoutError"?!0:r.name==="AbortError"||r.message==="aborted"||r.name==="DOMException"&&r.code!=null&&Number(r.code)===20||r.name==="BudgetExhaustedError"||r.name==="CircuitOpenError"?!1:r.status!=null?r.status===429||r.status>=500&&r.status<600:r.code&&typeof r.code=="string"&&/^E[A-Z]+$/.test(r.code)?!0:r.message?/network|timeout|socket|fetch|econn|eai_/i.test(r.message):!1}var pe=class extends Error{constructor(r){super(`LLM call timed out after ${r}ms`);this.ms=r}name="LLMTimeoutError"};function He(t,e){if(e<=0)throw new RangeError("withTimeout: ms must be > 0");let r=a=>{let s=new AbortController,l=!1,u,i=new Q;return a&&(a.aborted?s.abort(a.reason):(u=()=>{i.cancel(),s.abort(a.reason)},a.addEventListener("abort",u,{once:!0}))),i.start(e,()=>{l=!0,s.abort(new pe(e))}),{signal:s.signal,cancel:()=>{i.cancel(),a&&u&&a.removeEventListener("abort",u)},timedOut:()=>l}},n=(a,s)=>{if(!s||a instanceof pe)throw a;let l=a;if(l?.name==="AbortError"||l?.name==="DOMException"&&Number(l.code)===20||a?.message==="aborted"){let i=new pe(e);throw i.cause=a,i}throw a},o=W(t,{async invoke(a,s){let{signal:l,cancel:u,timedOut:i}=r(s?.signal);try{return await ae(k(t.invoke(a,{...s,signal:l})))}catch(d){return n(d,i())}finally{u()}},async*stream(a,s){let{signal:l,cancel:u,timedOut:i}=r(s?.signal);try{for await(let d of t.stream(a,{...s,signal:l}))yield d}catch(d){n(d,i())}finally{u()}}});return K(o,"withTimeout",t),o}function br(t,e={}){let r={adapter:t},n=t;if(e.rateLimit){let o=Ve(n,e.rateLimit);n=o.adapter,r.rateLimiter=o.limiter}if(e.budget){let o=We(n,e.budget);n=o.adapter,r.budget=o.budget}if(e.breaker){let o=Be(n,e.breaker);n=o.adapter,r.breaker=o.breaker}if(e.timeoutMs!=null&&(n=He(n,e.timeoutMs)),e.retry&&(n=qe(n,e.retry)),e.fallback){if(e.name==="fallback")throw new RangeError('resilientAdapter: `name` cannot be "fallback" \u2014 collides with the secondary tier label.');let o={};e.onFallback&&(o.onFallback=e.onFallback),e.onExhausted&&(o.onExhausted=e.onExhausted),n=je([{name:e.name??"primary",adapter:n},{name:"fallback",adapter:e.fallback}],o)}return e.cache&&(n=_e(n,e.cache)),r.adapter=n,r}function Tr(t,e,r){let n=k(e);return G(n,a=>{if(!a||a.length===0)return v(null);let s=r?.tools;return t.invoke(a,{model:r?.model,temperature:r?.temperature,maxTokens:r?.maxTokens,tools:s,systemPrompt:r?.systemPrompt})})}function R(t,e){return pt("ai",t,e)}function Mr(t){return t!=null&&typeof t.then=="function"}function ze(t){return typeof t=="object"&&t!==null&&"subscribe"in t&&typeof t.subscribe=="function"&&"cache"in t}function vr(t){return t!=null&&typeof t=="object"&&Symbol.asyncIterator in t&&typeof t[Symbol.asyncIterator]=="function"}var kr=3e4;function Et(t,e){if(t.status==="settled"){let n=t.cache;if(n!==void 0)return Promise.resolve(n)}let r=e?.timeoutMs??kr;return new Promise((n,o)=>{let a=new Q,s=t.subscribe(l=>{for(let u of l){if(u[0]===B){a.cancel(),s(),n(u[1]);return}if(u[0]===$){a.cancel(),s(),o(u[1]);return}if(u[0]===Z){a.cancel(),s(),o(new Error("firstDataFromNode: completed without producing a value"));return}}});a.start(r,()=>{s(),o(new Error(`firstDataFromNode: timed out after ${r}ms`))})})}async function Te(t){return Mr(t)?Te(await t):ze(t)?Et(t):vr(t)?Et(k(t)):t}function fe(t){let e=t.match(/^```(?:json)?\s*([\s\S]*?)\s*```[\s\S]*$/);return e?e[1]:t}function xr(t,e){let r=k(t),n=e?.refreshTrigger!=null?k(e.refreshTrigger):null;return n==null?le([r],(o,a,s)=>{if(s.store.emitted===!0)return;let u=o[0],i=u!=null&&u.length>0?u.at(-1):s.prevData[0];if(i!==void 0)return s.store.emitted=!0,a.emit(i),{invalidate:()=>{s.store.emitted=!1}}},{name:e?.name??"frozenContext",describeKind:"derived",initial:null,meta:R("frozen_context")}):le([r,n],(o,a,s)=>{let l=o[1];if(!(l!=null&&l.length>0))return;let i=o[0],d=i!=null&&i.length>0?i.at(-1):s.prevData[0];a.emit(d)},{name:e?.name??"frozenContext",describeKind:"derived",initial:null,meta:R("frozen_context")})}function It(t){return t!=null&&typeof t=="object"&&"content"in t?String(t.content):typeof t=="string"?t:String(t)}function Rr(t,e=200){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Ye(t,e,r,n){let o=n?.format??"text",a=n?.name??"prompt_node",s=T(e,u=>{if(u.some(d=>d==null))return[];let i=typeof r=="string"?r:r(...u);return i?[{role:"user",content:i}]:[]},{name:`${a}::messages`,meta:R("prompt_node")});return G(s,u=>!u||u.length===0?v(null):oe(i=>{let d=!1,m=!1,p,c={model:n?.model,temperature:n?.temperature,maxTokens:n?.maxTokens,systemPrompt:n?.systemPrompt};if(n?.abort){let h=ct(n.abort);c.signal=h.signal,p=h.dispose}let g;try{g=t.invoke(u,c)}catch(h){return d=!0,i.down([[$,h]]),()=>{p?.()}}let f=k(g).subscribe(h=>{if(!(m||d))for(let b of h){if(d)return;if(b[0]===B){let w=b[1];try{let L=It(w),C=o==="json"?JSON.parse(fe(L)):L;i.emit(C)}catch(L){let C=It(w),N=new Error(`promptNode: failed to parse LLM response as JSON: ${L.message}
|
|
2
|
+
Raw content (first 200 chars): ${Rr(C)}`);d=!0,i.down([[$,N]]);return}}else if(b[0]===$){d=!0,i.down([[$,b[1]]]);return}else if(b[0]===Z){d=!0,i.down([[Z]]);return}else i.down([b])}});return()=>{m=!0,f(),p?.()}},{name:`${a}::call`,meta:R("prompt_node::call")}),{name:`${a}::output`,meta:n?.meta?{...R("prompt_node::output"),...n.meta}:R("prompt_node::output")})}async function Ot(t,e,r,n){let o="",a=0;for await(let s of t.stream(e,r))n.publish({...s,seq:a++,ts:he()}),s.type==="token"&&(o+=s.delta);return o}function Dt(t,e){if(e==="json")try{return JSON.parse(fe(t))}catch(r){let n=t.slice(0,160);throw new Error(`streamingPromptNode: format:"json" \u2014 failed to parse accumulated text as JSON: ${r.message}; content preview: ${n}`)}return t}function Pt(t,e){return T([t.latest],([r],n)=>{let o=n.store;if(r==null)return o.acc??"";let a=r;return a.seq===0&&(o.acc=""),a.type==="token"&&(o.acc=(o.acc??"")+a.delta),o.acc??""},{name:e,meta:R("accumulated_text"),initial:""})}function wr(t,e,r,n){let o=n?.name??"llm",a=n?.format??"text",s=Fe(`${o}/stream`,{...n?.retainedLimit!=null?{retainedLimit:n.retainedLimit}:{}}),l=T(e,m=>{if(m.some(c=>c==null))return[];let p=typeof r=="string"?r:r(...m);return p?[{role:"user",content:p}]:[]},{name:`${o}::messages`,meta:R("prompt_node::messages"),initial:[]}),u=G(l,m=>{let p=m;if(!p||p.length===0)return v(null);let c=new AbortController;async function*g(){try{let y=await Ot(t,p,{model:n?.model,temperature:n?.temperature,maxTokens:n?.maxTokens,systemPrompt:n?.systemPrompt,signal:c.signal},s);yield Dt(y,a)}finally{c.abort()}}return k(g())}),i=Pt(s,`${o}::accumulatedText`),d=_(u);return{output:u,deltaTopic:s,accumulatedText:i,dispose:()=>{d(),s.destroy()}}}function Lr(t,e,r,n,o,a){let s=v(0,{name:`${e}/cancel`}),l=0,u=[...n,s],i=a?.name??e,d=a?.format??"text",m=Fe(`${i}/stream`,{...a?.retainedLimit!=null?{retainedLimit:a.retainedLimit}:{}}),p=T(u,N=>{let P=N.slice(0,-1);if(P.some(S=>S==null))return[];let j=typeof o=="string"?o:o(...P);return j?[{role:"user",content:j}]:[]},{name:`${i}::messages`,meta:R("prompt_node::messages"),initial:[]}),c=G(p,N=>{let P=N;if(!P||P.length===0)return v(null);let j=new AbortController;async function*S(){try{let E=await Ot(r,P,{model:a?.model,temperature:a?.temperature,maxTokens:a?.maxTokens,systemPrompt:a?.systemPrompt,signal:j.signal},m);yield Dt(E,d)}finally{j.abort()}}return k(S())}),g=Pt(m,`${i}::accumulatedText`),y=ft(c,N=>N!=null);t.add(y,{name:`${e}/raw`});let f=bt(t,`${e}/gate`,`${e}/raw`,a?.gate),h=_(c),b=_(f.node),w=_(g);t.addDisposer(h),t.addDisposer(b),t.addDisposer(w);let L=f.reject.bind(f),C={...f,reject(N=1){J(()=>{L(N),s.emit(++l)})}};return{output:f.node,deltaTopic:m,accumulatedText:g,gate:C,dispose:()=>{h(),b(),w(),m.destroy()}}}function Nr(t,e){let r=e?.separator??`
|
|
3
|
+
|
|
4
|
+
`,n=t.map(s=>typeof s=="string"?v(s):k(s)),o=T(n,s=>s.filter(l=>l!=null&&l!=="").join(r),{name:e?.name??"systemPrompt",describeKind:"derived",meta:R("system_prompt"),initial:""}),a=_(o);return Object.assign(o,{dispose:a})}var Ar=(t,e)=>t===e?!0:t.chunkCount===e.chunkCount&&t.charCount===e.charCount&&t.estimatedTokens===e.estimatedTokens&&t.estimated===e.estimated;function Cr(t,e){let r=e?.charsPerToken??4,n={chunkCount:0,charCount:0,estimatedTokens:0,estimated:!0};return T([t.latest],([o],a)=>{if(o==null)return n;let s=o;"chunkCount"in a.store||(a.store.chunkCount=0,a.store.charCount=0,a.store.usageTokens=0,a.store.sawUsage=!1);let l=a.store;s.type==="token"?(l.chunkCount+=1,l.charCount+=s.delta.length):s.type==="usage"&&(l.sawUsage=!0,l.usageTokens=z(s.usage)+te(s.usage));let u=l.sawUsage?l.usageTokens:Math.ceil(l.charCount/r);return{chunkCount:l.chunkCount,charCount:l.charCount,estimatedTokens:u,estimated:!l.sawUsage}},{name:e?.name??"cost-meter",describeKind:"derived",initial:n,meta:R("cost_meter_extractor"),equals:Ar})}var Sr=(t,e)=>{if(t===e)return!0;if(t==null||e==null)return t===e;if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++){let n=t[r],o=e[r];if(n.label!==o.label||n.pattern!==o.pattern||n.match!==o.match||n.position!==o.position)return!1}return!0};function Er(t,e){let r=e.maxPatternLength??128;for(let o of e.patterns)if(o.pattern.source.length>r)throw new Error(`keywordFlagExtractor: pattern "${o.label}" literal exceeds maxPatternLength (${o.pattern.source.length} > ${r}); raise the option or shorten the pattern.`);let n=e.patterns.map(o=>({label:o.label,pattern:o.pattern,compiled:new RegExp(o.pattern.source,`${o.pattern.flags.replace("g","")}g`)}));return T([t],([o],a)=>{if(o==null)return[];let s=o;"flags"in a.store||(a.store.flags=[],a.store.scannedTo=0);let l=a.store.flags,u=a.store.scannedTo,i=Math.max(0,u-r),d=s.slice(i),m=!1;for(let{pattern:p,label:c,compiled:g}of n){g.lastIndex=0;for(let y of d.matchAll(g)){let f=i+(y.index??0);f+y[0].length<=u||(l.push({label:c,pattern:p,match:y[0],position:f}),m=!0)}}return a.store.scannedTo=s.length,m?[...l]:l.slice()},{name:e.name??"keyword-flag-extractor",describeKind:"derived",initial:[],meta:R("keyword_flag_extractor"),equals:Sr})}function Ir(t,e,r){return T([t],([n])=>n==null?null:e(n),{name:r?.name??"extractor",describeKind:"derived",initial:null,meta:R("stream_extractor"),...r?.equals?{equals:r.equals}:{}})}var Or=(t,e)=>{if(t===e)return!0;if(t==null||e==null)return t===e;if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++){let n=t[r],o=e[r];if(n.startIndex!==o.startIndex||n.name!==o.name||n.raw!==o.raw)return!1}return!0};function Dr(t,e){return T([t],([r],n)=>{if(r==null)return[];let o=r;"calls"in n.store||(n.store.calls=[],n.store.scanFrom=0);let a=n.store.calls,s=n.store.scanFrom,l=!1;for(;s<o.length;){let u=o.indexOf("{",s);if(u===-1){n.store.scanFrom=o.length;break}let i=0,d=-1,m=!1;for(let c=u;c<o.length;c++){let g=o[c];if(m)g==="\\"&&c+1<o.length?c++:g==='"'&&(m=!1);else if(g==='"')m=!0;else if(g==="{")i++;else if(g==="}"&&(i--,i===0)){d=c;break}}if(d===-1){n.store.scanFrom=u;break}let p=o.slice(u,d+1);try{let c=JSON.parse(p);typeof c.name=="string"&&c.arguments!=null&&typeof c.arguments=="object"&&(a.push({name:c.name,arguments:c.arguments,raw:p,startIndex:u}),l=!0)}catch{}s=d+1,n.store.scanFrom=s}return l?[...a]:a.slice()},{name:e?.name??"tool-call-extractor",describeKind:"derived",initial:[],meta:R("tool_call_extractor"),equals:Or})}function Pr(t,e,r,n){let o=r*(n?.hardMultiplier??1.5),a=typeof e!="function",s=[t];return a&&s.push(e),T(s,l=>{let u=l[0]??"";if(u.length===0)return"allow";let i=a?l[1]??0:e(u);return i>=o?"block":i>=r?"review":"allow"},{name:n?.name??"content-gate",initial:"allow"})}function _r(t,e,r,n){let o=r??(()=>"[REDACTED]");function a(s){let l=s;for(let u of e){let i=u.global?u:new RegExp(u.source,`${u.flags}g`);l=l.replace(i,d=>o(d,u))}return l}return T([t],([s])=>a(s??""),{name:n?.name??"redactor",initial:""})}var Se=class extends se{_log;messages;latest;messageCount;constructor(e,r={}){super(e,r.graph),this._log=me([],{name:"messages",maxSize:r.maxMessages}),this.messages=this._log.entries,this.add(this.messages,{name:"messages"}),this.latest=T([this.messages],([n])=>{let o=n;return o.length===0?null:o[o.length-1]},{name:"latest",describeKind:"derived",meta:R("chat_latest")}),this.add(this.latest,{name:"latest"}),this.addDisposer(_(this.latest)),this.messageCount=T([this.messages],([n])=>n.length,{name:"messageCount",describeKind:"derived",meta:R("chat_message_count"),initial:0}),this.add(this.messageCount,{name:"messageCount"}),this.addDisposer(_(this.messageCount))}append(e,r,n){this._log.append({role:e,content:r,...n})}appendToolResult(e,r){this._log.append({role:"tool",content:r,toolCallId:e})}clear(){this._log.clear()}allMessages(){return this.messages.cache}};function Je(t,e){return new Se(t,e)}function Qe(t){let{toolCalls:e,tools:r}=t,n=t.retryCount??1,o=t.onError??"rescue",a=(s,l)=>{if(s===l)return!0;if(s.length!==l.length)return!1;for(let u=0;u<s.length;u++){let i=s[u],d=l[u];if(i?.id!==d?.id||i?.content!==d?.content)return!1}return!0};return G(e,s=>{if(s==null||s.length===0)throw new Error("toolExecution: received an empty tool-call batch as DATA \u2014 callers must upstream-filter empty batches (emit RESOLVED) so switchMap is only dispatched for non-empty batches.");let l=s.map(u=>jr(u,r,n,o));return T(l,u=>u,{name:"toolExecution::batch",equals:a})})}function jr(t,e,r,n){let o=it(()=>e.executeReactive(t.name,t.arguments),{count:r}),a=T([o],([s])=>({id:t.id,content:typeof s=="string"?s:JSON.stringify(s)}));return n==="propagate"?a:yt(a,s=>({id:t.id,content:JSON.stringify({error:String(s)})}))}var Ee=class extends se{definitions;schemas;_bundle;constructor(e,r={}){super(e,r.graph),this._bundle=ke({name:"definitions"}),this.definitions=this._bundle.entries,this.add(this.definitions,{name:"definitions"}),this.schemas=T([this.definitions],([n])=>[...(n??new Map).values()],{name:"schemas",describeKind:"derived",meta:R("tool_schemas"),initial:[]}),this.add(this.schemas,{name:"schemas"}),this.addDisposer(_(this.schemas))}register(e){this._bundle.set(e.name,e)}unregister(e){this._bundle.delete(e)}executeReactive(e,r){let n=this._bundle.get(e);if(!n)throw new Error(`toolRegistry: unknown tool "${e}"`);return oe(o=>{let a=new AbortController,s;try{let u=n.handler(r,{signal:a.signal});s=Fr(u,a.signal)}catch(u){return o.down([[$,u]]),()=>{a.abort()}}let l=s.subscribe(u=>{o.down(u)});return()=>{a.abort(),l()}},{name:`executeReactive::${e}`,meta:R("tool_execute_reactive")})}getDefinition(e){return this._bundle.entries.cache?.get(e)}};function Xe(t,e){return new Ee(t,e)}function Fr(t,e){return ze(t)?t:t!=null&&typeof t.then=="function"?De(t,{signal:e}):t!=null&&typeof t=="object"&&Symbol.asyncIterator in t?ut(t,{signal:e}):De(Promise.resolve(t),{signal:e})}var Ie=class extends se{chat;tools;status;turn;aborted;lastResponse;toolCalls;toolResults;_terminalResult;_disposeRunWiring;_running=!1;_currentAbortController=null;constructor(e,r){if(super(e,r.graph),this.chat=Je(`${e}-chat`,{maxMessages:r.maxMessages}),this.mount("chat",this.chat),this.tools=Xe(`${e}-tools`),this.mount("tools",this.tools),r.tools)for(let O of r.tools)this.tools.register(O);this.status=v("idle",{name:"status",describeKind:"state",meta:R("agent_status")}),this.add(this.status,{name:"status"}),this.turn=v(0,{name:"turn",describeKind:"state",meta:R("agent_turn_count")}),this.add(this.turn,{name:"turn"}),this.aborted=v(!1,{name:"aborted",describeKind:"state",meta:R("agent_aborted")}),this.add(this.aborted,{name:"aborted"});let n=0,o=this.turn.subscribe(O=>{for(let M of O)M[0]===B&&(n=M[1])}),a=!1,s=this.aborted.subscribe(O=>{for(let M of O)M[0]===B&&(a=M[1])}),l=this.chat.messages.cache??[],u=this.chat.messages.subscribe(O=>{for(let M of O)M[0]===B&&(l=M[1])}),i=this.tools.schemas.cache??[],d=this.tools.schemas.subscribe(O=>{for(let M of O)M[0]===B&&(i=M[1])}),m=r.adapter,p=r.systemPrompt,c=r.model,g=r.temperature,y=r.maxTokens,f=r.maxTurns??10,h=r.stopWhen,b=this.chat,w=this.tools,L=this.status,C=this.turn,N=this.aborted,P=le([L],(O,M,V)=>{if(Me(O,V.prevData,0,"idle")!=="thinking"||a||n>=f){M.down([[ue]]);return}if(l.length===0){M.down([[ue]]);return}M.emit({messages:l,tools:i})},{name:"promptInput",describeKind:"derived",meta:R("agent_prompt_input")}),j=G(P,O=>{let M=new AbortController;return this._currentAbortController=M,a&&M.abort(new Error("agentLoop: aborted")),k(m.invoke(O.messages,{tools:O.tools.length>0?O.tools:void 0,systemPrompt:p,model:c,temperature:g,maxTokens:y,signal:M.signal}),{signal:M.signal})},{equals:()=>!1}),S=v(null,{name:"lastResponse",describeKind:"state",meta:R("agent_last_response")});this.lastResponse=S;let E=le([S,L],(O,M,V)=>{let Y=Me(O,V.prevData,0,null);if(Me(O,V.prevData,1,"idle")!=="acting"){M.down([[ue]]);return}let ne=Y?.toolCalls;if(ne==null||ne.length===0){M.down([[ue]]);return}M.emit(ne)},{name:"toolCallsRaw",describeKind:"derived",meta:R("agent_tool_calls_raw")}),A=r.interceptToolCalls?r.interceptToolCalls(E):E;this.toolCalls=A;let F=Qe({toolCalls:A,tools:w,retryCount:1});this.toolResults=F;let x=ee([j],([O])=>{if(a)return;let M=O,V=n+1,Y=M.toolCalls!=null&&M.toolCalls.length>0,ye=M.finishReason==="end_turn"&&(!M.toolCalls||M.toolCalls.length===0),ne=h?.(M)===!0,Wt=V>=f,Kt=ne||ye||!Y||Wt?"done":"acting";J(()=>{S.emit(M),L.emit(Kt),C.emit(V),b.append("assistant",M.content,{toolCalls:M.toolCalls})})}),I=ee([F],([O])=>{if(a)return;let M=O;if(M.length===0)return;let V=n>=f?"done":"thinking";J(()=>{L.emit(V);for(let Y of M)b.appendToolResult(Y.id,Y.content)})}),D=L.cache??"idle",U=L.subscribe(O=>{for(let M of O)M[0]===B&&(D=M[1])}),q=ee([N],([O])=>{O===!0&&(this._currentAbortController?.abort(new Error("agentLoop: aborted")),D!=="done"&&L.emit("done"))}),re=_(x),ie=_(I),st=_(q);this._terminalResult=le([L,S],(O,M,V)=>{let Y=Me(O,V.prevData,0,"idle"),ye=Me(O,V.prevData,1,null);if(Y==="done"){if(ye!=null){M.emit(ye);return}let ne=new Error("agentLoop: aborted");ne.name="AbortError",M.down([[$,ne]]);return}if(Y==="error"){M.down([[$,new Error("agentLoop: errored")]]);return}M.down([[ue]])},{name:"terminalResult",describeKind:"derived",meta:R("agent_terminal_result")}),this.add(P,{name:"promptInput"}),this.add(j,{name:"llmResponse"}),this.add(this.lastResponse,{name:"lastResponse"}),this.toolCalls===E?this.add(this.toolCalls,{name:"toolCalls"}):(this.add(E,{name:"toolCallsRaw"}),this.add(this.toolCalls,{name:"toolCalls"})),this.add(F,{name:"toolResults"}),this.add(this._terminalResult,{name:"terminalResult"}),this.addDisposer(o),this.addDisposer(s),this.addDisposer(U),this.addDisposer(u),this.addDisposer(d),this.addDisposer(re),this.addDisposer(ie),this.addDisposer(st),this._disposeRunWiring=()=>{}}async run(e,r){if(this._running)throw new RangeError(`agentLoop "${this.name}": run() called while a previous run() is still pending \u2014 await the previous run before starting another, or call abort() first`);this._running=!0;let n;try{J(()=>{this.turn.emit(0),this.aborted.emit(!1),this.status.emit("idle"),this.lastResponse.emit(null)}),e!=null&&this.chat.append("user",e);let o=mt(this._terminalResult,{skipCurrent:!0});if(r!=null)if(r.aborted)this.aborted.emit(!0);else{let a=()=>this.aborted.emit(!0);r.addEventListener("abort",a,{once:!0}),n=()=>r.removeEventListener("abort",a)}return r?.aborted!==!0&&this.status.emit("thinking"),await o}finally{n?.(),this._running=!1,this._currentAbortController=null}}abort(){this.aborted.emit(!0)}destroy(){try{this._disposeRunWiring()}catch{}super.destroy()}};function Me(t,e,r,n){let o=t[r];if(o!=null&&o.length>0)return o[o.length-1];let a=e[r];return a!==void 0?a:n}function Gr(t,e){return new Ie(t,e)}function Br(t,e,r){let n=k(t),o=r?.condition!=null?k(r.condition):null,a=v(null,{name:r?.name?`${r.name}::null`:"handoff::null"});if(o==null)return G(n,l=>{if(l==null)return a;let u=v(l);return e(u)});let s=T([n,o],([l,u])=>({v:l,open:u===!0}),{name:r?.name?`${r.name}::router`:"handoff::router",describeKind:"derived"});return G(s,({v:l,open:u})=>{if(l==null)return a;if(!u)return v(l);let i=v(l);return e(i)})}function $r(t,e,r){let n=k(t),o=e.map(s=>k(s)),a=[n,...o];return T(a,s=>{let l=s[0]??[],u=s.slice(1);return l.filter(i=>{for(let d of u)if(d!=null&&!d(i))return!1;return!0})},{name:r?.name??"tool-selector",describeKind:"derived",meta:R("tool_selector"),equals:(s,l)=>{let u=s,i=l;if(u.length!==i.length)return!1;for(let d=0;d<u.length;d++)if(u[d]!==i[d])return!1;return!0}})}function _t(t){let e=t.thresholds??{};return r=>{let n=t.scoreFn(r);for(let o of Object.keys(e)){let a=e[o];if(a===void 0)continue;let s=n[o];if((Number.isFinite(s)?s:Number.NEGATIVE_INFINITY)<a)return!1}return!0}}function Wr(t){let e={persistence:t.persistenceThreshold??.3,personalValue:t.personalValueThreshold??.3},r=_t({scoreFn:t.scoreFn,thresholds:e});return t.requireStructured?n=>{if(!r(n))return!1;let o=t.scoreFn(n).structure;return Number.isFinite(o)&&o>0}:r}function jt(t,e,r,n){let o=r.name??n;return a=>{let s=v(a);return Ye(r.adapter,[s],l=>e(l),{name:o,format:"json",systemPrompt:t,model:r.model,temperature:r.temperature??0,maxTokens:r.maxTokens})}}function Ze(t,e){let r=e.maxExistingKeys??100,n=jt(t,o=>JSON.stringify({input:o.raw,existingKeys:o.existingKeys}),e,"llmExtractor");return(o,a)=>{let s=r===Number.POSITIVE_INFINITY?[...a.keys()]:[...a.keys()].slice(0,r);return n({raw:o,existingKeys:s})}}function et(t,e){let r=jt(t,n=>JSON.stringify({memories:n}),e,"llmConsolidator");return n=>{let o=[...n.entries()].map(([a,s])=>({key:a,value:s}));return r(o)}}var tt=Math.LN2/604800;function ge(t){return t instanceof Map?t:new Map}function rt(t,e,r){let n=vt({dimension:r.dimension});t.add(n.entries,{name:"vectorIndex"});let a=ee([e.store.entries],([s])=>{let l=ge(s);for(let[u,i]of l){let d=r.embedFn(i);d&&n.upsert(u,d,i)}}).subscribe(()=>{});return t.addDisposer(a),{vectors:n,dispose:()=>a()}}function nt(t,e,r,n){let o=n.mountPath??r,a=kt(`${r}-kg`);if(t.mount(o,a),!n.entityFn)return{kg:a,dispose:()=>{}};let s=n.entityFn,u=ee([e.store.entries],([i])=>{let d=ge(i);for(let[m,p]of d){let c=s(m,p);if(c){for(let g of c.entities??[])a.upsertEntity(g.id,g.value);for(let g of c.relations??[])a.link(g.from,g.to,g.relation,g.weight)}}}).subscribe(()=>{});return t.addDisposer(u),{kg:a,dispose:()=>u()}}function ot(t,e,r){let n=r.decayRate??tt,o=r.maxActive??1e3,a=r.archiveThreshold??.1,s=r.permanentFilter??(()=>!1),l=Mt({name:"permanent"});t.add(l.entries,{name:"permanent"});let u=new Set,i=b=>u.has(b)?"permanent":ge(e.store.entries.cache).has(b)?"active":"archived",d=(b,w)=>{u.add(b),l.upsert(b,w)},m=new Map,p=e.store.entries,c=r.context?k(r.context):v(null),y=ee([p,c],([b,w])=>{let L=ge(b),C=H(),N=[],P=[];for(let[S,E]of L){if(m.has(S)||m.set(S,C),s(S,E)){P.push({key:S,value:E});continue}let A=r.score(E,w),F=m.get(S)??C,x=Number(C-F)/1e9;Tt(A,x,n)<a&&N.push(S)}for(let S of m.keys())L.has(S)||m.delete(S);for(let{key:S,value:E}of P)u.has(S)||d(S,E);let j=L.size-u.size;if(j>o){let S=[...L.entries()].filter(([A])=>!u.has(A)).map(([A,F])=>({key:A,score:r.score(F,w)})).sort((A,F)=>A.score-F.score),E=j-o;for(let A=0;A<E&&A<S.length;A++){let F=S[A].key;N.includes(F)||N.push(F)}}N.length>0&&J(()=>{for(let S of N)e.store.delete(S)})}).subscribe(()=>{}),f=null;r.archiveTier&&(f=t.attachStorage([r.archiveTier],r.archiveStorageOptions??{}));let h=()=>{y(),f?.dispose()};return t.addDisposer(h),{tiers:{permanent:l,activeEntries:p,archiveHandle:f,tierOf:i,markPermanent:d},dispose:h}}function Kr(t,e){if(!t||!e)return 0;let r=Math.min(t.length,e.length),n=0;for(;n<r&&t[n]===e[n];)n++;return n}function at(t,e,r,n,o){let a=o.topK??20,s=o.graphDepth??1,l=o.budget??2e3,u=o.contextWeight??0,i=o.context?k(o.context):v(null),d=(f,h,b)=>{let w=new Map,L=[];if(r&&b.vector){L=r.search(b.vector,a);for(let E of L){let A=f.get(E.id);A&&w.set(E.id,{value:A,sources:new Set(["vector"])})}}let C=[];if(n){let E=[...b.entityIds??[],...w.keys()],A=new Set,F=E;for(let x=0;x<s;x++){let I=[];for(let D of F)if(!A.has(D)){A.add(D);for(let U of n.related(D)){let q=U.to;if(!A.has(q)){I.push(q);let re=f.get(q);if(re){let ie=w.get(q);ie?ie.sources.add("graph"):w.set(q,{value:re,sources:new Set(["graph"])}),C.push(q)}}}}F=I}}for(let[E,A]of f)w.has(E)||w.set(E,{value:A,sources:new Set(["store"])});let N=b.context?.length??0,P=[];for(let[E,{value:A,sources:F}]of w){let x=o.contextOf?o.contextOf(A):void 0,I=o.score(A,h);if(u>0&&N>0){let U=Kr(b.context,x);U>0&&(I=I*(1+u*U/N))}let D=x?{key:E,value:A,score:I,sources:[...F],context:x}:{key:E,value:A,score:I,sources:[...F]};P.push(D)}P.sort((E,A)=>A.score-E.score);let j=[],S=0;for(let E of P){let A=o.cost(E.value);if(S+A>l&&j.length>0)break;j.push(E),S+=A}return{packed:j,trace:{vectorCandidates:L,graphExpanded:C,ranked:P,packed:j}}},m=(f,h)=>{if(f===h)return!0;if(f.length!==h.length)return!1;for(let b=0;b<f.length;b++)if(f[b]!==h[b])return!1;return!0},p=v([],{name:"retrieval",describeKind:"state",meta:R("retrieval_pipeline"),equals:m});t.add(p,{name:"retrieval"});let c=v(null,{name:"retrievalTrace",describeKind:"state",meta:R("retrieval_trace")});return t.add(c,{name:"retrievalTrace"}),{retrieval:p,retrievalTrace:c,retrieve:f=>{let h=ge(e.store.entries.cache),{packed:b,trace:w}=d(h,i.cache,f);return J(()=>{p.emit(b),c.emit(w)}),b},retrieveReactive:f=>{let h=k(f),b=T([e.store.entries,i,h],([C,N,P])=>{if(P==null)return{packed:[],trace:null};let j=ge(C),{packed:S,trace:E}=d(j,N,P);return{packed:S,trace:E}},{name:"retrievalReactive::result",describeKind:"derived",meta:R("retrieval_reactive_result"),initial:{packed:[],trace:null}}),L=ee([b],([C])=>{let N=C;J(()=>{p.emit(N.packed),N.trace&&c.emit(N.trace)})}).subscribe(()=>{});return t.addDisposer(L),T([b],([C])=>C.packed,{name:"retrievalReactive",describeKind:"derived",meta:R("retrieval_reactive"),initial:[],equals:m})}}}function Ur(t,e,r){let n=new se(t,r.graph),o;if(r.extractFn)o=r.extractFn;else if(r.adapter&&r.extractPrompt)o=Ze(r.extractPrompt,{adapter:r.adapter});else throw new Error("agentMemory: provide either extractFn or adapter + extractPrompt");let a=(b,w)=>b==null?{upsert:[]}:o(b,w),s=e;if(r.admissionFilter){let b=k(e),w=r.admissionFilter;s=T([b],([L])=>{if(w(L))return L},{name:"admissionFilter",describeKind:"derived"})}let l;r.consolidateFn?l=r.consolidateFn:r.adapter&&r.consolidatePrompt&&(l=et(r.consolidatePrompt,{adapter:r.adapter}));let u=r.consolidateTrigger;if(!u&&l&&r.reflection?.enabled!==!1){let b=r.reflection?.interval??3e5;u=dt(b,{period:b})}let i={score:r.score,cost:r.cost,budget:r.budget??2e3,context:r.context,consolidate:l,consolidateTrigger:u},d=ht(s,a,i);n.add(d.store.entries,{name:"store"}),n.add(d.compact,{name:"compact"}),n.add(d.size,{name:"size"});let m=null;r.vectorDimensions&&r.vectorDimensions>0&&r.embedFn&&(m=rt(n,d,{dimension:r.vectorDimensions,embedFn:r.embedFn}).vectors);let p=null;r.enableKnowledgeGraph&&(p=nt(n,d,t,{mountPath:"kg",entityFn:r.entityFn}).kg);let c=null;r.tiers&&(c=ot(n,d,{...r.tiers,score:r.score,context:r.context}).tiers);let g=null,y=null,f=null,h=null;if(m||p){let b=at(n,d,m,p,{score:r.score,cost:r.cost,budget:r.budget,topK:r.retrieval?.topK,graphDepth:r.retrieval?.graphDepth,contextOf:r.contextOf,contextWeight:r.contextWeight,context:r.context});g=b.retrieval,y=b.retrievalTrace,f=b.retrieve,h=b.retrieveReactive}return Object.assign(n,{distillBundle:d,compact:d.compact,size:d.size,vectors:m,kg:p,memoryTiers:c,retrieval:g,retrievalTrace:y,retrieve:f,retrieveReactive:h})}function Vr(t,e,r){let n=t.describe({actor:e,detail:"full"}),o=r?.groupByTags??!0,a=r?.separator??`
|
|
5
|
+
`,s=[],l=r?.sinceVersion;for(let[u,i]of Object.entries(n.nodes)){let d=i.meta??{},m=d.description,p=d.format;if(!m&&!p)continue;if(l!=null&&i.v!=null){let h=l.get(u);if(h!=null&&h.id===i.v.id&&i.v.version<=h.version)continue}let c=m??u,g=i.value,y=d.unit,f;p==="currency"&&typeof g=="number"?f=`$${g.toFixed(2)}`:p==="percentage"&&typeof g=="number"?f=`${(g*100).toFixed(1)}%`:g==null?f="(no value)":f=String(g),y&&p!=="currency"&&p!=="percentage"&&(f=`${f} ${y}`),s.push({path:u,description:c,formatted:f})}if(s.length===0)return"";if(o){let u=new Map,i=[];for(let m of s){let c=n.nodes[m.path].meta?.tags;if(c&&c.length>0){let g=c[0],y=u.get(g);y||(y=[],u.set(g,y)),y.push(m)}else i.push(m)}if(u.size===0)return s.map(m=>`- ${m.description}: ${m.formatted}`).join(a);let d=[];for(let[m,p]of[...u.entries()].sort((c,g)=>c[0].localeCompare(g[0])))d.push(`[${m}]${a}${p.map(c=>`- ${c.description}: ${c.formatted}`).join(a)}`);return i.length>0&&d.push(i.map(m=>`- ${m.description}: ${m.formatted}`).join(a)),d.join(a+a)}return s.map(u=>`- ${u.description}: ${u.formatted}`).join(a)}var Ft=`You are a graph architect for GraphReFly, a reactive graph protocol.
|
|
6
|
+
|
|
7
|
+
Given a natural-language description, produce a JSON graph specification with this structure:
|
|
8
|
+
|
|
9
|
+
{
|
|
10
|
+
"name": "<graph_name>",
|
|
11
|
+
"nodes": {
|
|
12
|
+
"<node_name>": {
|
|
13
|
+
"type": "state" | "derived" | "producer" | "effect" | "operator",
|
|
14
|
+
"initial": <initial_value_for_state_nodes>,
|
|
15
|
+
"deps": ["<dep_node_name>", ...],
|
|
16
|
+
"meta": {
|
|
17
|
+
"description": "<human-readable purpose>",
|
|
18
|
+
"type": "string" | "number" | "boolean" | "integer" | "enum",
|
|
19
|
+
"range": [min, max],
|
|
20
|
+
"values": ["a", "b"],
|
|
21
|
+
"format": "currency" | "percentage" | "status",
|
|
22
|
+
"access": "human" | "llm" | "both" | "system",
|
|
23
|
+
"unit": "<unit>",
|
|
24
|
+
"tags": ["<tag>"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
Rules:
|
|
31
|
+
- "state" nodes have no deps and hold user/LLM-writable values (knobs). Use "initial" for the starting value.
|
|
32
|
+
- "derived" nodes have deps and compute from them (pure, no side effects).
|
|
33
|
+
- "effect" nodes have deps but produce side effects (no return value).
|
|
34
|
+
- "producer" nodes have no deps but generate values asynchronously.
|
|
35
|
+
- "operator" nodes are parameterized transformations with deps.
|
|
36
|
+
- Use "deps" inside each node to declare dependencies \u2014 no separate "edges" array.
|
|
37
|
+
- meta.description is required for every node.
|
|
38
|
+
- Return ONLY valid JSON, no markdown fences or commentary.`;async function Gt(t,e,r){let o=[{role:"system",content:r?.systemPromptExtra?`${Ft}
|
|
39
|
+
|
|
40
|
+
${r.systemPromptExtra}`:Ft},{role:"user",content:t}],a=e.invoke(o,{model:r?.model,temperature:r?.temperature??0,maxTokens:r?.maxTokens,signal:r?.signal}),l=(await Te(a)).content.trim();l.startsWith("```")&&(l=fe(l));let u;try{u=JSON.parse(l)}catch{throw new Error(`graphFromSpec: LLM response is not valid JSON: ${l.slice(0,200)}`)}return xt(u,{catalog:r?.catalog})}function qr(t,e,r){let n=k(t);return G(n,o=>!o||typeof o!="string"||o.trim().length===0?v(null):oe(a=>{let s=new AbortController,l=!1;return Gt(o,e,{...r,signal:s.signal}).then(u=>{if(l){u.destroy();return}a.emit(u),a.down([[Z]])}).catch(u=>{l||a.down([[$,u]])}),()=>{l=!0,s.abort()}},{name:"graphFromSpec::call"}))}function Hr(t){let e={},r=t.type;return r==="enum"&&Array.isArray(t.values)?(e.type="string",e.enum=t.values):r==="integer"?e.type="integer":r==="number"?e.type="number":r==="boolean"?e.type="boolean":r==="string"?e.type="string":e.type=["string","number","boolean"],Array.isArray(t.range)&&t.range.length===2&&(e.minimum=t.range[0],e.maximum=t.range[1]),typeof t.format=="string"&&(e.description=`Format: ${t.format}`),typeof t.unit=="string"&&(e.description?e.description+=` (${t.unit})`:e.description=`Unit: ${t.unit}`),e}function zr(t,e){let r=t.describe({actor:e,detail:"full"}),n=[],o=[],a=[];for(let[s,l]of Object.entries(r.nodes)){if(l.type!=="state"||s.includes("::__meta__::")||l.status==="completed"||l.status==="errored")continue;let u=l.meta??{},i=u.access;if(i==="human"||i==="system")continue;let d=u.description??`Set the value of ${s}`,m=Hr(u),p={type:"object",required:["value"],properties:{value:m},additionalProperties:!1},c=s.replace(/::/g,"__");n.push({type:"function",function:{name:c,description:d,parameters:p}}),o.push({name:s,description:d,inputSchema:p});let g=t,y=e,f=l.v;a.push({name:s,description:d,parameters:p,handler(h){return g.set(s,h.value,y?{actor:y}:void 0),h.value},...f!=null?{version:{id:f.id,version:f.version}}:{}})}return{openai:n,mcp:o,definitions:a}}var Yr=`You are a reactive graph optimizer for GraphReFly.
|
|
41
|
+
|
|
42
|
+
Given a graph's current structure (from describe()) and a problem statement, suggest topology and parameter changes to solve the problem.
|
|
43
|
+
|
|
44
|
+
Return ONLY valid JSON with this structure:
|
|
45
|
+
{
|
|
46
|
+
"summary": "<one-line summary of the strategy>",
|
|
47
|
+
"reasoning": "<explanation of why these changes help>",
|
|
48
|
+
"operations": [
|
|
49
|
+
{ "type": "add_node", "name": "<name>", "nodeType": "state|derived|effect|producer|operator", "meta": {...}, "initial": <value> },
|
|
50
|
+
{ "type": "remove_node", "name": "<name>" },
|
|
51
|
+
{ "type": "connect", "from": "<source>", "to": "<target>" },
|
|
52
|
+
{ "type": "disconnect", "from": "<source>", "to": "<target>" },
|
|
53
|
+
{ "type": "set_value", "name": "<name>", "value": <new_value> },
|
|
54
|
+
{ "type": "update_meta", "name": "<name>", "key": "<meta_key>", "value": <new_value> }
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Rules:
|
|
59
|
+
- Only suggest operations that reference existing nodes (for remove/disconnect/set_value/update_meta) or new nodes you define (for add_node).
|
|
60
|
+
- Keep changes minimal \u2014 prefer the smallest set of operations that solves the problem.
|
|
61
|
+
- Return ONLY valid JSON, no markdown fences or commentary.`;async function Bt(t,e,r,n){let{expand:o,...a}=t.describe({actor:n?.actor,detail:"standard"}),s=[{role:"system",content:Yr},{role:"user",content:JSON.stringify({graph:a,problem:e})}],l=r.invoke(s,{model:n?.model,temperature:n?.temperature??0,maxTokens:n?.maxTokens,signal:n?.signal}),i=(await Te(l)).content.trim();i.startsWith("```")&&(i=i.replace(/^```(?:json)?\s*/,"").replace(/\s*```$/,""));let d;try{d=JSON.parse(i)}catch{throw new Error(`suggestStrategy: LLM response is not valid JSON: ${i.slice(0,200)}`)}let m=d;if(typeof m.summary!="string")throw new Error("suggestStrategy: missing 'summary' in response");if(typeof m.reasoning!="string")throw new Error("suggestStrategy: missing 'reasoning' in response");if(!Array.isArray(m.operations))throw new Error("suggestStrategy: missing 'operations' array in response");return{summary:m.summary,reasoning:m.reasoning,operations:m.operations}}function Jr(t,e,r,n){let o=k(e),a=gt(o,t);return G(a,s=>{if(s==null)return v(null);let[l,u]=s;return!u||!l||typeof l!="string"||l.trim().length===0?v(null):u.destroyed?v(null):oe(i=>{let d=new AbortController,m=!1;return Bt(u,l,r,{...n,signal:d.signal}).then(p=>{m||(i.emit(p),i.down([[Z]]))}).catch(p=>{m||i.down([[$,p]])}),()=>{m=!0,d.abort()}},{name:"suggestStrategy::call"})})}var $t=new Set(["state","derived","producer","operator","effect"]);function Qr(t){let e=[];if(t==null||typeof t!="object")return{valid:!1,errors:["Definition must be a non-null object"]};let r=t;if((typeof r.name!="string"||r.name.length===0)&&e.push("Missing or empty 'name' field"),r.nodes==null||typeof r.nodes!="object"||Array.isArray(r.nodes))return e.push("Missing or invalid 'nodes' field (must be an object)"),{valid:!1,errors:e};let n=new Set(Object.keys(r.nodes));for(let[o,a]of Object.entries(r.nodes)){if(a==null||typeof a!="object"){e.push(`Node "${o}": must be an object`);continue}let s=a;if((typeof s.type!="string"||!$t.has(s.type))&&e.push(`Node "${o}": invalid type "${String(s.type)}" (expected: ${[...$t].join(", ")})`),Array.isArray(s.deps))for(let l of s.deps)typeof l=="string"&&!n.has(l)&&e.push(`Node "${o}": dep "${l}" does not reference an existing node`)}if(!Array.isArray(r.edges))r.edges!==void 0&&e.push("'edges' must be an array");else{let o=new Set;for(let a=0;a<r.edges.length;a++){let s=r.edges[a];if(s==null||typeof s!="object"){e.push(`Edge [${a}]: must be an object`);continue}let l=s;(typeof l.from!="string"||!n.has(l.from))&&e.push(`Edge [${a}]: 'from' "${String(l.from)}" does not reference an existing node`),(typeof l.to!="string"||!n.has(l.to))&&e.push(`Edge [${a}]: 'to' "${String(l.to)}" does not reference an existing node`);let u=`${l.from}->${l.to}`;o.has(u)&&e.push(`Edge [${a}]: duplicate edge ${u}`),o.add(u)}}return{valid:e.length===0,errors:e}}export{tr as a,rr as b,we as c,Ge as d,or as e,ar as f,sr as g,ir as h,Be as i,Le as j,We as k,dr as l,Ke as m,Ve as n,qe as o,pe as p,He as q,br as r,Tr as s,xr as t,Ye as u,wr as v,Lr as w,Nr as x,Cr as y,Er as z,Ir as A,Dr as B,Pr as C,_r as D,Se as E,Je as F,Qe as G,Ee as H,Xe as I,Ie as J,Gr as K,Br as L,$r as M,_t as N,Wr as O,Ze as P,et as Q,tt as R,rt as S,nt as T,ot as U,at as V,Ur as W,Vr as X,Gt as Y,qr as Z,zr as _,Bt as $,Jr as aa,Qr as ba,Xr as ca};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as O,f as v,k as P}from"./chunk-2LZ6DL45.js";import{ba as _,k as A}from"./chunk-LOF5HSD3.js";import{d as E}from"./chunk-FKRPIRE6.js";import{m as U,w as T}from"./chunk-T7EQPKOP.js";import{o as y}from"./chunk-LYCLF26R.js";function G(e={}){return e.sdk?V(e):H(e)}function b(e,t,o,r){let s=t?.model??o;if(!s)throw new Error("anthropicAdapter: model must be set via options.model or invokeOpts.model");let{system:n,chat:i}=J(e,t?.systemPrompt),a={model:s,messages:i.map(F),max_tokens:t?.maxTokens??4096};return n&&(a.system=n),t?.temperature!=null&&(a.temperature=t.temperature),t?.tools&&t.tools.length>0&&(a.tools=t.tools.map(Y)),t?.maxReasoningTokens!=null&&(a.thinking={type:"enabled",budget_tokens:t.maxReasoningTokens}),t?.cacheHint,r&&(a.stream=!0),t?.providerExtras&&Object.assign(a,t.providerExtras),a}function J(e,t){let o=[];t&&o.push(t);let r=[];for(let s of e)s.role==="system"?o.push(s.content):r.push(s);return{system:o.length>0?o.join(`
|
|
2
|
+
|
|
3
|
+
`):void 0,chat:r}}function F(e){if(e.role==="tool")return{role:"user",content:[{type:"tool_result",tool_use_id:e.toolCallId,content:e.content}]};if(e.role==="assistant"&&e.toolCalls&&e.toolCalls.length>0){let t=[];e.content&&t.push({type:"text",text:e.content});for(let o of e.toolCalls)t.push({type:"tool_use",id:o.id,name:o.name,input:o.arguments});return{role:"assistant",content:t}}return{role:e.role,content:e.content}}function Y(e){return{name:e.name,description:e.description,input_schema:e.parameters}}function R(e,t){if(!e)return{...t};let o={...e};return t.input_tokens!=null&&(o.input_tokens=t.input_tokens),t.output_tokens!=null&&(o.output_tokens=t.output_tokens),t.cache_read_input_tokens!=null&&(o.cache_read_input_tokens=t.cache_read_input_tokens),t.cache_creation_input_tokens!=null&&(o.cache_creation_input_tokens=t.cache_creation_input_tokens),t.cache_creation&&(o.cache_creation={...e.cache_creation??{},...t.cache_creation}),t.server_tool_use&&(o.server_tool_use={...e.server_tool_use??{},...t.server_tool_use}),o}function x(e){let t={input:{regular:e?.input_tokens??0},output:{regular:e?.output_tokens??0},raw:e};return e?.cache_read_input_tokens&&(t.input.cacheRead=e.cache_read_input_tokens),e?.cache_creation?(e.cache_creation.ephemeral_5m_input_tokens&&(t.input.cacheWrite5m=e.cache_creation.ephemeral_5m_input_tokens),e.cache_creation.ephemeral_1h_input_tokens&&(t.input.cacheWrite1h=e.cache_creation.ephemeral_1h_input_tokens)):e?.cache_creation_input_tokens&&(t.input.cacheWrite5m=e.cache_creation_input_tokens),e?.server_tool_use?.web_search_requests&&(t.auxiliary={webSearchRequests:e.server_tool_use.web_search_requests}),t}function K(e,t){let o=[],r=[];for(let s of e.content)if(s.type==="text"&&typeof s.text=="string")o.push(s.text);else if(s.type==="tool_use"){let n=s;r.push({id:n.id,name:n.name,arguments:n.input??{}})}return{content:o.join(""),toolCalls:r.length>0?r:void 0,usage:x(e.usage),finishReason:e.stop_reason,latencyMs:t,model:e.model,provider:"anthropic"}}function H(e){let t=e.apiKey??globalThis.process?.env?.ANTHROPIC_API_KEY,o=e.baseURL??"https://api.anthropic.com",r=e.anthropicVersion??"2023-06-01",s=e.fetchImpl??fetch,n=()=>{if(!t)throw new Error("anthropicAdapter: apiKey required for invoke/stream (or provide opts.sdk)");return{"x-api-key":t,"anthropic-version":r,"content-type":"application/json",...e.headers??{}}};return{provider:"anthropic",model:e.model,async invoke(i,a){let d=b(i,a,e.model,!1),g=y(),l=await s(`${o}/v1/messages`,{method:"POST",headers:n(),body:JSON.stringify(d),signal:a?.signal});if(!l.ok)throw await _(l,"Anthropic");let c=await l.json(),p=Math.max(0,(y()-g)/1e6);return K(c,p)},async*stream(i,a){let d=b(i,a,e.model,!0),g=await s(`${o}/v1/messages`,{method:"POST",headers:{...n(),accept:"text/event-stream"},body:JSON.stringify(d),signal:a?.signal});if(!g.ok)throw await _(g,"Anthropic");if(!g.body)throw new Error("anthropicAdapter: streaming response has no body");let l,c,p=new Map;for await(let m of A(g.body,{signal:a?.signal})){let h=m.data;if(!h)continue;let k;try{k=JSON.parse(h)}catch{continue}switch(k.type){case"message_start":{l=R(l,k.message.usage);break}case"content_block_start":{let u=k,f=u.content_block;f.type==="tool_use"&&(p.set(u.index,{id:String(f.id??""),name:String(f.name??""),argBuf:""}),yield{type:"tool-call-delta",delta:{id:String(f.id??""),name:String(f.name??"")}});break}case"content_block_delta":{let u=k,f=u.delta;if(f.type==="text_delta"&&typeof f.text=="string")yield{type:"token",delta:f.text};else if(f.type==="input_json_delta"&&typeof f.partial_json=="string"){let S=p.get(u.index);S&&(S.argBuf+=f.partial_json),yield{type:"tool-call-delta",delta:{argumentsDelta:f.partial_json}}}else f.type==="thinking_delta"&&typeof f.thinking=="string"&&(yield{type:"thinking",delta:f.thinking});break}case"message_delta":{let u=k;u.delta.stop_reason&&(c=u.delta.stop_reason),u.delta.usage&&(l=R(l,u.delta.usage));break}case"message_stop":break}}l&&(yield{type:"usage",usage:x(l)}),yield{type:"finish",reason:c??"stop"}}}}function V(e){let t=e.sdk;if(!t)throw new Error("sdkBackedAnthropic: sdk instance required");return{provider:"anthropic",model:e.model,async invoke(o,r){let s=b(o,r,e.model,!1),n=y(),i=await t.messages.create(s,{signal:r?.signal}),a=Math.max(0,(y()-n)/1e6);return K(i,a)},async*stream(o,r){if(!t.messages.stream)throw new Error("sdkBackedAnthropic: SDK instance does not expose .messages.stream");let s=b(o,r,e.model,!0),n,i;for await(let a of t.messages.stream(s,{signal:r?.signal}))switch(a.type){case"message_start":n=R(n,a.message.usage);break;case"content_block_delta":{let d=a.delta;d?.type==="text_delta"&&typeof d.text=="string"?yield{type:"token",delta:d.text}:d?.type==="input_json_delta"&&typeof d.partial_json=="string"?yield{type:"tool-call-delta",delta:{argumentsDelta:d.partial_json}}:d?.type==="thinking_delta"&&typeof d.thinking=="string"&&(yield{type:"thinking",delta:d.thinking});break}case"message_delta":{let d=a;d.delta.stop_reason&&(i=d.delta.stop_reason),d.delta.usage&&(n=R(n,d.delta.usage));break}}n&&(yield{type:"usage",usage:x(n)}),yield{type:"finish",reason:i??"stop"}}}}function D(e={}){return e.sdk?X(e):Q(e)}function w(e,t){let o=[],r=[];t?.systemPrompt&&o.push(t.systemPrompt);for(let i of e){if(i.role==="system"){o.push(i.content);continue}if(i.role==="tool"){r.push({role:"user",parts:[{functionResponse:{name:i.name??i.toolCallId??"tool",response:{result:i.content}}}]});continue}if(i.role==="assistant"&&i.toolCalls&&i.toolCalls.length>0){let a=[];i.content&&a.push({text:i.content});for(let d of i.toolCalls)a.push({functionCall:{name:d.name,args:d.arguments}});r.push({role:"model",parts:a});continue}r.push({role:i.role==="assistant"?"model":"user",parts:[{text:i.content}]})}let s={contents:r};o.length>0&&(s.systemInstruction={role:"system",parts:[{text:o.join(`
|
|
4
|
+
|
|
5
|
+
`)}]});let n={};return t?.maxTokens!=null&&(n.maxOutputTokens=t.maxTokens),t?.temperature!=null&&(n.temperature=t.temperature),t?.maxReasoningTokens!=null&&(n.thinkingConfig={thinkingBudget:t.maxReasoningTokens}),Object.keys(n).length>0&&(s.generationConfig=n),t?.tools&&t.tools.length>0&&(s.tools=[{functionDeclarations:t.tools.map(W)}]),t?.providerExtras&&Object.assign(s,t.providerExtras),s}function W(e){return{name:e.name,description:e.description,parameters:e.parameters}}function j(e,t,o){let r={},s=e.generationConfig;s&&(typeof s.maxOutputTokens=="number"&&(r.maxOutputTokens=s.maxOutputTokens),typeof s.temperature=="number"&&(r.temperature=s.temperature),s.thinkingConfig&&(r.thinkingConfig=s.thinkingConfig)),e.systemInstruction&&(r.systemInstruction=e.systemInstruction),e.tools&&(r.tools=e.tools);for(let[n,i]of Object.entries(e))n==="contents"||n==="generationConfig"||n==="systemInstruction"||n==="tools"||n==="abortSignal"||n==="model"||(r[n]=i);return o&&(r.abortSignal=o),{model:t,contents:e.contents,config:Object.keys(r).length>0?r:void 0}}function M(e){let t={input:{regular:0},output:{regular:0},raw:e};if(!e)return t;let o=e.promptTokenCount??0,r=e.cachedContentTokenCount??0;if(t.input.regular=Math.max(0,o-r),r>0&&(t.input.cacheRead=r),e.toolUsePromptTokenCount&&(t.input.toolUse=e.toolUsePromptTokenCount),e.promptTokensDetails)for(let s of e.promptTokensDetails){let n=s.modality?.toLowerCase();n==="image"?t.input.image=(t.input.image??0)+s.tokenCount:n==="audio"?t.input.audio=(t.input.audio??0)+s.tokenCount:n==="video"&&(t.input.video=(t.input.video??0)+s.tokenCount)}return t.output.regular=e.candidatesTokenCount??0,e.thoughtsTokenCount&&(t.output.reasoning=e.thoughtsTokenCount),t}function B(e,t){let o=e.candidates?.[0],r=o?.content?.parts??[],s=[],n=[],i=0;for(let a of r)typeof a.text=="string"&&s.push(a.text),a.functionCall&&n.push({id:`${a.functionCall.name}-${i++}`,name:a.functionCall.name,arguments:a.functionCall.args??{}});return{content:s.join(""),toolCalls:n.length>0?n:void 0,usage:M(e.usageMetadata),finishReason:o?.finishReason,latencyMs:t,model:e.modelVersion,provider:"google"}}function z(e){if(e.apiKey)return e.apiKey;let t=globalThis.process?.env;return t?.GOOGLE_API_KEY??t?.GEMINI_API_KEY}function Q(e){let t=e.baseURL??"https://generativelanguage.googleapis.com/v1beta",o=e.fetchImpl??fetch,r=n=>{let i=n?.model??e.model;if(!i)throw new Error("googleAdapter: model must be set via options.model or invokeOpts.model");return i},s=()=>{let n=z(e);if(!n)throw new Error("googleAdapter: apiKey required for invoke/stream");return`key=${encodeURIComponent(n)}`};return{provider:"google",model:e.model,async invoke(n,i){let a=r(i),d=w(n,i),g=y(),l=`${t}/models/${encodeURIComponent(a)}:generateContent?${s()}`,c=await o(l,{method:"POST",headers:{"content-type":"application/json",...e.headers??{}},body:JSON.stringify(d),signal:i?.signal});if(!c.ok)throw await _(c,"Google");let p=await c.json(),m=Math.max(0,(y()-g)/1e6);return B(p,m)},async*stream(n,i){let a=r(i),d=w(n,i),g=`${t}/models/${encodeURIComponent(a)}:streamGenerateContent?alt=sse&${s()}`,l=await o(g,{method:"POST",headers:{"content-type":"application/json",accept:"text/event-stream",...e.headers??{}},body:JSON.stringify(d),signal:i?.signal});if(!l.ok)throw await _(l,"Google");if(!l.body)throw new Error("googleAdapter: streaming response has no body");let c,p;for await(let m of A(l.body,{signal:i?.signal})){if(!m.data)continue;let h;try{h=JSON.parse(m.data)}catch{continue}let k=h.candidates?.[0];for(let u of k?.content?.parts??[])typeof u.text=="string"&&(u.thought?yield{type:"thinking",delta:u.text}:yield{type:"token",delta:u.text}),u.functionCall&&(yield{type:"tool-call-delta",delta:{name:u.functionCall.name,argumentsDelta:JSON.stringify(u.functionCall.args??{})}});k?.finishReason&&(p=k.finishReason),h.usageMetadata&&(c=h.usageMetadata)}c&&(yield{type:"usage",usage:M(c)}),yield{type:"finish",reason:p??"stop"}}}}function X(e){let t=e.sdk;if(!t)throw new Error("sdkBackedGoogle: sdk instance required");return{provider:"google",model:e.model,async invoke(o,r){let s=w(o,r),n=r?.model??e.model;if(!n)throw new Error("googleAdapter: model required");let i=j(s,n,r?.signal),a=y(),d=await t.models.generateContent(i),g=Math.max(0,(y()-a)/1e6);return B(d,g)},async*stream(o,r){if(!t.models.generateContentStream)throw new Error("sdkBackedGoogle: SDK instance does not expose generateContentStream");let s=w(o,r),n=r?.model??e.model;if(!n)throw new Error("googleAdapter: model required");let i=j(s,n,r?.signal),a,d,g=await t.models.generateContentStream(i);for await(let l of g){let c=l.candidates?.[0];for(let p of c?.content?.parts??[])typeof p.text=="string"&&(p.thought?yield{type:"thinking",delta:p.text}:yield{type:"token",delta:p.text}),p.functionCall&&(yield{type:"tool-call-delta",delta:{name:p.functionCall.name,argumentsDelta:JSON.stringify(p.functionCall.args??{})}});c?.finishReason&&(d=c.finishReason),l.usageMetadata&&(a=l.usageMetadata)}a&&(yield{type:"usage",usage:M(a)}),yield{type:"finish",reason:d??"stop"}}}}var Z={openai:{baseURL:"https://api.openai.com/v1",apiKeyEnv:"OPENAI_API_KEY",provider:"openai"},openrouter:{baseURL:"https://openrouter.ai/api/v1",apiKeyEnv:"OPENROUTER_API_KEY",provider:"openrouter"},groq:{baseURL:"https://api.groq.com/openai/v1",apiKeyEnv:"GROQ_API_KEY",provider:"groq"},ollama:{baseURL:"http://localhost:11434/v1",provider:"ollama"},deepseek:{baseURL:"https://api.deepseek.com/v1",apiKeyEnv:"DEEPSEEK_API_KEY",provider:"deepseek"},xai:{baseURL:"https://api.x.ai/v1",apiKeyEnv:"XAI_API_KEY",provider:"xai"}};function q(e={}){return e.sdk?re(e):oe(e)}function C(e,t,o,r,s){let n=t?.model??o;if(!n)throw new Error("openAICompatAdapter: model must be set via options.model or invokeOpts.model");let i=e.map(ee);t?.systemPrompt&&!e.some(d=>d.role==="system")&&i.unshift({role:"system",content:t.systemPrompt});let a={model:n,messages:i};return t?.maxTokens!=null&&(a.max_tokens=t.maxTokens),t?.temperature!=null&&(a.temperature=t.temperature),t?.tools&&t.tools.length>0&&(a.tools=t.tools.map(te)),t?.maxReasoningTokens!=null&&(a.reasoning={max_tokens:t.maxReasoningTokens}),r&&(a.stream=!0,a.stream_options={include_usage:!0}),s&&Object.assign(a,s),t?.providerExtras&&Object.assign(a,t.providerExtras),a}function ee(e){return e.role==="tool"?{role:"tool",tool_call_id:e.toolCallId,content:e.content}:e.role==="assistant"&&e.toolCalls&&e.toolCalls.length>0?{role:"assistant",content:e.content||null,tool_calls:e.toolCalls.map(t=>({id:t.id,type:"function",function:{name:t.name,arguments:JSON.stringify(t.arguments)}}))}:{role:e.role,content:e.content}}function te(e){return{type:"function",function:{name:e.name,description:e.description,parameters:e.parameters}}}function I(e){let t={input:{regular:0},output:{regular:0},raw:e};if(!e)return t;let o=e.prompt_tokens??0,r=e.prompt_tokens_details?.cached_tokens??0;e.prompt_cache_hit_tokens!=null?(r=e.prompt_cache_hit_tokens,t.input.regular=e.prompt_cache_miss_tokens??Math.max(0,o-r)):t.input.regular=Math.max(0,o-r),r>0&&(t.input.cacheRead=r),e.prompt_tokens_details?.audio_tokens&&(t.input.audio=e.prompt_tokens_details.audio_tokens);let s=e.completion_tokens??0,n=e.completion_tokens_details?.reasoning_tokens??0;return t.output.regular=Math.max(0,s-n),n>0&&(t.output.reasoning=n),e.completion_tokens_details?.audio_tokens&&(t.output.audio=e.completion_tokens_details.audio_tokens),e.completion_tokens_details?.accepted_prediction_tokens&&(t.output.predictionAccepted=e.completion_tokens_details.accepted_prediction_tokens),e.completion_tokens_details?.rejected_prediction_tokens&&(t.output.predictionRejected=e.completion_tokens_details.rejected_prediction_tokens),t}function $(e,t,o){let r=e.choices[0],s=r?.message,n=s?.content??"",i=(s?.tool_calls??[]).map(a=>({id:a.id,name:a.function.name,arguments:ne(a.function.arguments)}));return{content:n,toolCalls:i.length>0?i:void 0,usage:I(e.usage),finishReason:r?.finish_reason,latencyMs:t,model:e.model,provider:o}}function ne(e){try{let t=JSON.parse(e);return typeof t=="object"&&t!=null?t:{_raw:e}}catch{return{_raw:e}}}function N(e){let t=e.preset??"openai",o=Z[t],r=e.baseURL??o.baseURL,s=e.provider??o.provider,n=o.apiKeyEnv,i=e.apiKey??(n?globalThis.process?.env?.[n]:void 0);return{provider:s,baseURL:r,apiKey:i}}function oe(e){let{provider:t,baseURL:o,apiKey:r}=N(e),s=e.fetchImpl??fetch,n=t!=="ollama",i=()=>{let a={"content-type":"application/json",...e.headers??{}};if(n){if(!r)throw new Error(`openAICompatAdapter[${t}]: apiKey required for invoke/stream`);a.authorization=`Bearer ${r}`}return a};return{provider:t,model:e.model,async invoke(a,d){let g=C(a,d,e.model,!1,e.bodyExtras),l=y(),c=await s(`${o}/chat/completions`,{method:"POST",headers:i(),body:JSON.stringify(g),signal:d?.signal});if(!c.ok)throw await _(c,t);let p=await c.json(),m=Math.max(0,(y()-l)/1e6);return $(p,m,t)},async*stream(a,d){let g=C(a,d,e.model,!0,e.bodyExtras),l=await s(`${o}/chat/completions`,{method:"POST",headers:{...i(),accept:"text/event-stream"},body:JSON.stringify(g),signal:d?.signal});if(!l.ok)throw await _(l,t);if(!l.body)throw new Error(`openAICompatAdapter[${t}]: streaming response has no body`);let c,p;for await(let m of A(l.body,{signal:d?.signal})){if(!m.data||m.data==="[DONE]")continue;let h;try{h=JSON.parse(m.data)}catch{continue}let k=h.choices;if(k){let u=k[0];if(u?.delta?.content&&(yield{type:"token",delta:u.delta.content}),u?.delta?.reasoning_content&&(yield{type:"thinking",delta:u.delta.reasoning_content}),u?.delta?.tool_calls)for(let f of u.delta.tool_calls)yield{type:"tool-call-delta",delta:{id:f.id,name:f.function?.name,argumentsDelta:f.function?.arguments}};u?.finish_reason&&(p=u.finish_reason)}h.usage&&(c=h.usage,yield{type:"usage",usage:I(c)})}yield{type:"finish",reason:p??"stop"}}}}function re(e){let t=e.sdk;if(!t)throw new Error("sdkBackedOpenAI: sdk instance required");let{provider:o}=N(e);return{provider:o,model:e.model,async invoke(r,s){let n=C(r,s,e.model,!1,e.bodyExtras),i=y(),a=await t.chat.completions.create(n,{signal:s?.signal}),d=Math.max(0,(y()-i)/1e6);return $(a,d,o)},async*stream(r,s){let n=C(r,s,e.model,!0,e.bodyExtras),i=await t.chat.completions.create(n,{signal:s?.signal}),a,d;for await(let g of i){let l=g.choices;if(l){let p=l[0];if(p?.delta?.content&&(yield{type:"token",delta:p.delta.content}),p?.delta?.reasoning_content&&(yield{type:"thinking",delta:p.delta.reasoning_content}),p?.delta?.tool_calls)for(let m of p.delta.tool_calls)yield{type:"tool-call-delta",delta:{id:m.id,name:m.function?.name,argumentsDelta:m.function?.arguments}};p?.finish_reason&&(d=p.finish_reason)}let c=g.usage;c&&(a=c,yield{type:"usage",usage:I(c)})}yield{type:"finish",reason:d??"stop"}}}}function Re(e){switch(e.provider){case"anthropic":{let t={apiKey:e.apiKey,model:e.model,baseURL:e.baseURL,headers:e.headers,sdk:e.sdk,fetchImpl:e.fetchImpl,...e.extras};return G(t)}case"google":{let t={apiKey:e.apiKey,model:e.model,baseURL:e.baseURL,headers:e.headers,sdk:e.sdk,fetchImpl:e.fetchImpl,...e.extras};return D(t)}case"dry-run":{let t={model:e.model,...e.extras};return O(t)}case"fallback":{let t={provider:e.provider,model:e.model,...e.extras};return P(t)}case"openai":case"openrouter":case"groq":case"ollama":case"deepseek":case"xai":{let t={preset:e.provider,apiKey:e.apiKey,model:e.model,baseURL:e.baseURL,headers:e.headers,bodyExtras:e.bodyExtras,sdk:e.sdk,fetchImpl:e.fetchImpl,...e.extras};return q(t)}default:{let t=e.provider;throw new Error(`createAdapter: unknown provider: ${String(t)}`)}}}var L=class extends Error{name="AllTiersExhaustedError";skipped;failed;constructor(t){let o=[];t.failed.size>0&&o.push(`failed=[${[...t.failed.keys()].join(",")}]`),t.skipped.length>0&&o.push(`skipped=[${t.skipped.map(r=>`${r.name}(${r.reason})`).join(",")}]`),super(`All LLM adapter tiers exhausted: ${o.join(" ")}`),this.skipped=t.skipped,this.failed=t.failed}};function Me(e,t={}){if(e.length===0)throw new RangeError("cascadingLlmAdapter: tiers must be non-empty");let o=e.map(n=>({name:n.name,adapter:n.adapter,filter:n.filter,breaker:n.breaker?"canExecute"in n.breaker?n.breaker:E(n.breaker):void 0})),r=t.streamRetryBeforeFirstChunk??!0,s={provider:"cascading",model:void 0,async invoke(n,i){let a=[],d=new Map;for(let l=0;l<o.length;l++){let c=o[l];if(c.filter&&!c.filter(n,i)){a.push({name:c.name,reason:"filter"});continue}if(c.breaker&&!c.breaker.canExecute()){a.push({name:c.name,reason:"breaker"});continue}try{let p=await T(U(c.adapter.invoke(n,i)));return c.breaker?.recordSuccess(),{...p,metadata:{...p.metadata??{},tier:c.name}}}catch(p){d.set(c.name,p),c.breaker?.recordFailure(p);let m=o[l+1];m&&t.onFallback?.(c.name,m.name,p)}}let g={skipped:a,failed:d};throw t.onExhausted?.(g),new L(g)},async*stream(n,i){let a=[],d=new Map;for(let l=0;l<o.length;l++){let c=o[l];if(c.filter&&!c.filter(n,i)){a.push({name:c.name,reason:"filter"});continue}if(c.breaker&&!c.breaker.canExecute()){a.push({name:c.name,reason:"breaker"});continue}let p=!1;try{for await(let m of c.adapter.stream(n,i))p=!0,yield m;c.breaker?.recordSuccess();return}catch(m){if(d.set(c.name,m),c.breaker?.recordFailure(m),p||!r)throw m;let h=o[l+1];h&&t.onFallback?.(c.name,h.name,m)}}let g={skipped:a,failed:d};throw t.onExhausted?.(g),new L(g)}};return v(s,`cascade[${o.map(n=>n.name).join(",")}]`),s}function Ie(e,t,o){let r={name:e,adapter:t};return o?.breaker&&(r.breaker=o.breaker),o?.filter&&(r.filter=o.filter),r}export{G as a,D as b,q as c,Re as d,L as e,Me as f,Ie as g};
|