@paean-ai/adk-devtools 0.2.2
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/LICENSE +202 -0
- package/README.md +3 -0
- package/dist/browser/adk_favicon.svg +17 -0
- package/dist/browser/assets/ADK-512-color.svg +9 -0
- package/dist/browser/assets/audio-processor.js +52 -0
- package/dist/browser/assets/config/runtime-config.json +3 -0
- package/dist/browser/browser/adk_favicon.svg +17 -0
- package/dist/browser/browser/assets/ADK-512-color.svg +9 -0
- package/dist/browser/browser/assets/audio-processor.js +52 -0
- package/dist/browser/browser/assets/config/runtime-config.json +3 -0
- package/dist/browser/browser/chunk-EQDQRRRY.js +17 -0
- package/dist/browser/browser/chunk-TXJFAAIW.js +18 -0
- package/dist/browser/browser/index.html +34 -0
- package/dist/browser/browser/main-W7QZBYAR.js +3915 -0
- package/dist/browser/browser/polyfills-B6TNHZQ6.js +18 -0
- package/dist/browser/browser/styles-4VDSPQ37.css +17 -0
- package/dist/browser/chunk-EQDQRRRY.js +17 -0
- package/dist/browser/chunk-TXJFAAIW.js +18 -0
- package/dist/browser/index.html +34 -0
- package/dist/browser/main-W7QZBYAR.js +3915 -0
- package/dist/browser/polyfills-B6TNHZQ6.js +18 -0
- package/dist/browser/styles-4VDSPQ37.css +17 -0
- package/dist/cli/cli.cjs +121 -0
- package/dist/cli/cli.d.ts +7 -0
- package/dist/cli/cli_create.d.ts +16 -0
- package/dist/cli/cli_deploy.d.ts +23 -0
- package/dist/cli/cli_run.d.ts +20 -0
- package/dist/server/adk_web_server.d.ts +38 -0
- package/dist/server/agent_graph.d.ts +24 -0
- package/dist/utils/agent_loader.d.ts +56 -0
- package/dist/utils/file_utils.d.ts +35 -0
- package/package.json +61 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var ce=globalThis;function te(t){return(ce.__Zone_symbol_prefix||"__zone_symbol__")+t}function ht(){let t=ce.performance;function n(I){t&&t.mark&&t.mark(I)}function a(I,s){t&&t.measure&&t.measure(I,s)}n("Zone");class e{static __symbol__=te;static assertZonePatched(){if(ce.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let s=e.current;for(;s.parent;)s=s.parent;return s}static get current(){return b.zone}static get currentTask(){return D}static __load_patch(s,i,r=!1){if(S.hasOwnProperty(s)){let E=ce[te("forceDuplicateZoneCheck")]===!0;if(!r&&E)throw Error("Already loaded patch: "+s)}else if(!ce["__Zone_disable_"+s]){let E="Zone:"+s;n(E),S[s]=i(ce,e,R),a(E,E)}}get parent(){return this._parent}get name(){return this._name}_parent;_name;_properties;_zoneDelegate;constructor(s,i){this._parent=s,this._name=i?i.name||"unnamed":"<root>",this._properties=i&&i.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,i)}get(s){let i=this.getZoneWith(s);if(i)return i._properties[s]}getZoneWith(s){let i=this;for(;i;){if(i._properties.hasOwnProperty(s))return i;i=i._parent}return null}fork(s){if(!s)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,s)}wrap(s,i){if(typeof s!="function")throw new Error("Expecting function got: "+s);let r=this._zoneDelegate.intercept(this,s,i),E=this;return function(){return E.runGuarded(r,this,arguments,i)}}run(s,i,r,E){b={parent:b,zone:this};try{return this._zoneDelegate.invoke(this,s,i,r,E)}finally{b=b.parent}}runGuarded(s,i=null,r,E){b={parent:b,zone:this};try{try{return this._zoneDelegate.invoke(this,s,i,r,E)}catch(x){if(this._zoneDelegate.handleError(this,x))throw x}}finally{b=b.parent}}runTask(s,i,r){if(s.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");let E=s,{type:x,data:{isPeriodic:ee=!1,isRefreshable:M=!1}={}}=s;if(s.state===q&&(x===U||x===k))return;let he=s.state!=A;he&&E._transitionTo(A,d);let _e=D;D=E,b={parent:b,zone:this};try{x==k&&s.data&&!ee&&!M&&(s.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,E,i,r)}catch(Q){if(this._zoneDelegate.handleError(this,Q))throw Q}}finally{let Q=s.state;if(Q!==q&&Q!==X)if(x==U||ee||M&&Q===p)he&&E._transitionTo(d,A,p);else{let Te=E._zoneDelegates;this._updateTaskCount(E,-1),he&&E._transitionTo(q,A,q),M&&(E._zoneDelegates=Te)}b=b.parent,D=_e}}scheduleTask(s){if(s.zone&&s.zone!==this){let r=this;for(;r;){if(r===s.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${s.zone.name}`);r=r.parent}}s._transitionTo(p,q);let i=[];s._zoneDelegates=i,s._zone=this;try{s=this._zoneDelegate.scheduleTask(this,s)}catch(r){throw s._transitionTo(X,p,q),this._zoneDelegate.handleError(this,r),r}return s._zoneDelegates===i&&this._updateTaskCount(s,1),s.state==p&&s._transitionTo(d,p),s}scheduleMicroTask(s,i,r,E){return this.scheduleTask(new g(F,s,i,r,E,void 0))}scheduleMacroTask(s,i,r,E,x){return this.scheduleTask(new g(k,s,i,r,E,x))}scheduleEventTask(s,i,r,E,x){return this.scheduleTask(new g(U,s,i,r,E,x))}cancelTask(s){if(s.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");if(!(s.state!==d&&s.state!==A)){s._transitionTo(V,d,A);try{this._zoneDelegate.cancelTask(this,s)}catch(i){throw s._transitionTo(X,V),this._zoneDelegate.handleError(this,i),i}return this._updateTaskCount(s,-1),s._transitionTo(q,V),s.runCount=-1,s}}_updateTaskCount(s,i){let r=s._zoneDelegates;i==-1&&(s._zoneDelegates=null);for(let E=0;E<r.length;E++)r[E]._updateTaskCount(s.type,i)}}let c={name:"",onHasTask:(I,s,i,r)=>I.hasTask(i,r),onScheduleTask:(I,s,i,r)=>I.scheduleTask(i,r),onInvokeTask:(I,s,i,r,E,x)=>I.invokeTask(i,r,E,x),onCancelTask:(I,s,i,r)=>I.cancelTask(i,r)};class f{get zone(){return this._zone}_zone;_taskCounts={microTask:0,macroTask:0,eventTask:0};_parentDelegate;_forkDlgt;_forkZS;_forkCurrZone;_interceptDlgt;_interceptZS;_interceptCurrZone;_invokeDlgt;_invokeZS;_invokeCurrZone;_handleErrorDlgt;_handleErrorZS;_handleErrorCurrZone;_scheduleTaskDlgt;_scheduleTaskZS;_scheduleTaskCurrZone;_invokeTaskDlgt;_invokeTaskZS;_invokeTaskCurrZone;_cancelTaskDlgt;_cancelTaskZS;_cancelTaskCurrZone;_hasTaskDlgt;_hasTaskDlgtOwner;_hasTaskZS;_hasTaskCurrZone;constructor(s,i,r){this._zone=s,this._parentDelegate=i,this._forkZS=r&&(r&&r.onFork?r:i._forkZS),this._forkDlgt=r&&(r.onFork?i:i._forkDlgt),this._forkCurrZone=r&&(r.onFork?this._zone:i._forkCurrZone),this._interceptZS=r&&(r.onIntercept?r:i._interceptZS),this._interceptDlgt=r&&(r.onIntercept?i:i._interceptDlgt),this._interceptCurrZone=r&&(r.onIntercept?this._zone:i._interceptCurrZone),this._invokeZS=r&&(r.onInvoke?r:i._invokeZS),this._invokeDlgt=r&&(r.onInvoke?i:i._invokeDlgt),this._invokeCurrZone=r&&(r.onInvoke?this._zone:i._invokeCurrZone),this._handleErrorZS=r&&(r.onHandleError?r:i._handleErrorZS),this._handleErrorDlgt=r&&(r.onHandleError?i:i._handleErrorDlgt),this._handleErrorCurrZone=r&&(r.onHandleError?this._zone:i._handleErrorCurrZone),this._scheduleTaskZS=r&&(r.onScheduleTask?r:i._scheduleTaskZS),this._scheduleTaskDlgt=r&&(r.onScheduleTask?i:i._scheduleTaskDlgt),this._scheduleTaskCurrZone=r&&(r.onScheduleTask?this._zone:i._scheduleTaskCurrZone),this._invokeTaskZS=r&&(r.onInvokeTask?r:i._invokeTaskZS),this._invokeTaskDlgt=r&&(r.onInvokeTask?i:i._invokeTaskDlgt),this._invokeTaskCurrZone=r&&(r.onInvokeTask?this._zone:i._invokeTaskCurrZone),this._cancelTaskZS=r&&(r.onCancelTask?r:i._cancelTaskZS),this._cancelTaskDlgt=r&&(r.onCancelTask?i:i._cancelTaskDlgt),this._cancelTaskCurrZone=r&&(r.onCancelTask?this._zone:i._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let E=r&&r.onHasTask,x=i&&i._hasTaskZS;(E||x)&&(this._hasTaskZS=E?r:c,this._hasTaskDlgt=i,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,r.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=i,this._scheduleTaskCurrZone=this._zone),r.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=i,this._invokeTaskCurrZone=this._zone),r.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=i,this._cancelTaskCurrZone=this._zone))}fork(s,i){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,s,i):new e(s,i)}intercept(s,i,r){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,s,i,r):i}invoke(s,i,r,E,x){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,s,i,r,E,x):i.apply(r,E)}handleError(s,i){return this._handleErrorZS?this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,s,i):!0}scheduleTask(s,i){let r=i;if(this._scheduleTaskZS)this._hasTaskZS&&r._zoneDelegates.push(this._hasTaskDlgtOwner),r=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,s,i),r||(r=i);else if(i.scheduleFn)i.scheduleFn(i);else if(i.type==F)z(i);else throw new Error("Task is missing scheduleFn.");return r}invokeTask(s,i,r,E){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,s,i,r,E):i.callback.apply(r,E)}cancelTask(s,i){let r;if(this._cancelTaskZS)r=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,s,i);else{if(!i.cancelFn)throw Error("Task is not cancelable");r=i.cancelFn(i)}return r}hasTask(s,i){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,s,i)}catch(r){this.handleError(s,r)}}_updateTaskCount(s,i){let r=this._taskCounts,E=r[s],x=r[s]=E+i;if(x<0)throw new Error("More tasks executed then were scheduled.");if(E==0||x==0){let ee={microTask:r.microTask>0,macroTask:r.macroTask>0,eventTask:r.eventTask>0,change:s};this.hasTask(this._zone,ee)}}}class g{type;source;invoke;callback;data;scheduleFn;cancelFn;_zone=null;runCount=0;_zoneDelegates=null;_state="notScheduled";constructor(s,i,r,E,x,ee){if(this.type=s,this.source=i,this.data=E,this.scheduleFn=x,this.cancelFn=ee,!r)throw new Error("callback is not defined");this.callback=r;let M=this;s===U&&E&&E.useG?this.invoke=g.invokeTask:this.invoke=function(){return g.invokeTask.call(ce,M,this,arguments)}}static invokeTask(s,i,r){s||(s=this),K++;try{return s.runCount++,s.zone.runTask(s,i,r)}finally{K==1&&$(),K--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(q,p)}_transitionTo(s,i,r){if(this._state===i||this._state===r)this._state=s,s==q&&(this._zoneDelegates=null);else throw new Error(`${this.type} '${this.source}': can not transition to '${s}', expecting state '${i}'${r?" or '"+r+"'":""}, was '${this._state}'.`)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let T=te("setTimeout"),y=te("Promise"),w=te("then"),_=[],P=!1,L;function H(I){if(L||ce[y]&&(L=ce[y].resolve(0)),L){let s=L[w];s||(s=L.then),s.call(L,I)}else ce[T](I,0)}function z(I){K===0&&_.length===0&&H($),I&&_.push(I)}function $(){if(!P){for(P=!0;_.length;){let I=_;_=[];for(let s=0;s<I.length;s++){let i=I[s];try{i.zone.runTask(i,null,null)}catch(r){R.onUnhandledError(r)}}}R.microtaskDrainDone(),P=!1}}let J={name:"NO ZONE"},q="notScheduled",p="scheduling",d="scheduled",A="running",V="canceling",X="unknown",F="microTask",k="macroTask",U="eventTask",S={},R={symbol:te,currentZoneFrame:()=>b,onUnhandledError:W,microtaskDrainDone:W,scheduleMicroTask:z,showUncaughtError:()=>!e[te("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:W,patchMethod:()=>W,bindArguments:()=>[],patchThen:()=>W,patchMacroTask:()=>W,patchEventPrototype:()=>W,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>W,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>W,wrapWithCurrentZone:()=>W,filterProperties:()=>[],attachOriginToPatched:()=>W,_redefineProperty:()=>W,patchCallbacks:()=>W,nativeScheduleMicroTask:H},b={parent:null,zone:new e(null,null)},D=null,K=0;function W(){}return a("Zone","Zone"),e}function dt(){let t=globalThis,n=t[te("forceDuplicateZoneCheck")]===!0;if(t.Zone&&(n||typeof t.Zone.__symbol__!="function"))throw new Error("Zone already loaded.");return t.Zone??=ht(),t.Zone}var pe=Object.getOwnPropertyDescriptor,Me=Object.defineProperty,Ae=Object.getPrototypeOf,_t=Object.create,Tt=Array.prototype.slice,je="addEventListener",He="removeEventListener",Ne=te(je),Ze=te(He),ae="true",le="false",ve=te("");function Ve(t,n){return Zone.current.wrap(t,n)}function xe(t,n,a,e,c){return Zone.current.scheduleMacroTask(t,n,a,e,c)}var j=te,we=typeof window<"u",be=we?window:void 0,Y=we&&be||globalThis,Et="removeAttribute";function Fe(t,n){for(let a=t.length-1;a>=0;a--)typeof t[a]=="function"&&(t[a]=Ve(t[a],n+"_"+a));return t}function gt(t,n){let a=t.constructor.name;for(let e=0;e<n.length;e++){let c=n[e],f=t[c];if(f){let g=pe(t,c);if(!et(g))continue;t[c]=(T=>{let y=function(){return T.apply(this,Fe(arguments,a+"."+c))};return fe(y,T),y})(f)}}}function et(t){return t?t.writable===!1?!1:!(typeof t.get=="function"&&typeof t.set>"u"):!0}var tt=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,De=!("nw"in Y)&&typeof Y.process<"u"&&Y.process.toString()==="[object process]",Ge=!De&&!tt&&!!(we&&be.HTMLElement),nt=typeof Y.process<"u"&&Y.process.toString()==="[object process]"&&!tt&&!!(we&&be.HTMLElement),Ce={},kt=j("enable_beforeunload"),Xe=function(t){if(t=t||Y.event,!t)return;let n=Ce[t.type];n||(n=Ce[t.type]=j("ON_PROPERTY"+t.type));let a=this||t.target||Y,e=a[n],c;if(Ge&&a===be&&t.type==="error"){let f=t;c=e&&e.call(this,f.message,f.filename,f.lineno,f.colno,f.error),c===!0&&t.preventDefault()}else c=e&&e.apply(this,arguments),t.type==="beforeunload"&&Y[kt]&&typeof c=="string"?t.returnValue=c:c!=null&&!c&&t.preventDefault();return c};function Ye(t,n,a){let e=pe(t,n);if(!e&&a&&pe(a,n)&&(e={enumerable:!0,configurable:!0}),!e||!e.configurable)return;let c=j("on"+n+"patched");if(t.hasOwnProperty(c)&&t[c])return;delete e.writable,delete e.value;let f=e.get,g=e.set,T=n.slice(2),y=Ce[T];y||(y=Ce[T]=j("ON_PROPERTY"+T)),e.set=function(w){let _=this;if(!_&&t===Y&&(_=Y),!_)return;typeof _[y]=="function"&&_.removeEventListener(T,Xe),g?.call(_,null),_[y]=w,typeof w=="function"&&_.addEventListener(T,Xe,!1)},e.get=function(){let w=this;if(!w&&t===Y&&(w=Y),!w)return null;let _=w[y];if(_)return _;if(f){let P=f.call(this);if(P)return e.set.call(this,P),typeof w[Et]=="function"&&w.removeAttribute(n),P}return null},Me(t,n,e),t[c]=!0}function rt(t,n,a){if(n)for(let e=0;e<n.length;e++)Ye(t,"on"+n[e],a);else{let e=[];for(let c in t)c.slice(0,2)=="on"&&e.push(c);for(let c=0;c<e.length;c++)Ye(t,e[c],a)}}var oe=j("originalInstance");function ye(t){let n=Y[t];if(!n)return;Y[j(t)]=n,Y[t]=function(){let c=Fe(arguments,t);switch(c.length){case 0:this[oe]=new n;break;case 1:this[oe]=new n(c[0]);break;case 2:this[oe]=new n(c[0],c[1]);break;case 3:this[oe]=new n(c[0],c[1],c[2]);break;case 4:this[oe]=new n(c[0],c[1],c[2],c[3]);break;default:throw new Error("Arg list too long.")}},fe(Y[t],n);let a=new n(function(){}),e;for(e in a)t==="XMLHttpRequest"&&e==="responseBlob"||function(c){typeof a[c]=="function"?Y[t].prototype[c]=function(){return this[oe][c].apply(this[oe],arguments)}:Me(Y[t].prototype,c,{set:function(f){typeof f=="function"?(this[oe][c]=Ve(f,t+"."+c),fe(this[oe][c],f)):this[oe][c]=f},get:function(){return this[oe][c]}})}(e);for(e in n)e!=="prototype"&&n.hasOwnProperty(e)&&(Y[t][e]=n[e])}function ue(t,n,a){let e=t;for(;e&&!e.hasOwnProperty(n);)e=Ae(e);!e&&t[n]&&(e=t);let c=j(n),f=null;if(e&&(!(f=e[c])||!e.hasOwnProperty(c))){f=e[c]=e[n];let g=e&&pe(e,n);if(et(g)){let T=a(f,c,n);e[n]=function(){return T(this,arguments)},fe(e[n],f)}}return f}function mt(t,n,a){let e=null;function c(f){let g=f.data;return g.args[g.cbIdx]=function(){f.invoke.apply(this,arguments)},e.apply(g.target,g.args),f}e=ue(t,n,f=>function(g,T){let y=a(g,T);return y.cbIdx>=0&&typeof T[y.cbIdx]=="function"?xe(y.name,T[y.cbIdx],y,c):f.apply(g,T)})}function fe(t,n){t[j("OriginalDelegate")]=n}var $e=!1,Le=!1;function yt(){if($e)return Le;$e=!0;try{let t=be.navigator.userAgent;(t.indexOf("MSIE ")!==-1||t.indexOf("Trident/")!==-1||t.indexOf("Edge/")!==-1)&&(Le=!0)}catch{}return Le}function Je(t){return typeof t=="function"}function Ke(t){return typeof t=="number"}var pt={useG:!0},ne={},ot={},st=new RegExp("^"+ve+"(\\w+)(true|false)$"),it=j("propagationStopped");function ct(t,n){let a=(n?n(t):t)+le,e=(n?n(t):t)+ae,c=ve+a,f=ve+e;ne[t]={},ne[t][le]=c,ne[t][ae]=f}function vt(t,n,a,e){let c=e&&e.add||je,f=e&&e.rm||He,g=e&&e.listeners||"eventListeners",T=e&&e.rmAll||"removeAllListeners",y=j(c),w="."+c+":",_="prependListener",P="."+_+":",L=function(p,d,A){if(p.isRemoved)return;let V=p.callback;typeof V=="object"&&V.handleEvent&&(p.callback=k=>V.handleEvent(k),p.originalDelegate=V);let X;try{p.invoke(p,d,[A])}catch(k){X=k}let F=p.options;if(F&&typeof F=="object"&&F.once){let k=p.originalDelegate?p.originalDelegate:p.callback;d[f].call(d,A.type,k,F)}return X};function H(p,d,A){if(d=d||t.event,!d)return;let V=p||d.target||t,X=V[ne[d.type][A?ae:le]];if(X){let F=[];if(X.length===1){let k=L(X[0],V,d);k&&F.push(k)}else{let k=X.slice();for(let U=0;U<k.length&&!(d&&d[it]===!0);U++){let S=L(k[U],V,d);S&&F.push(S)}}if(F.length===1)throw F[0];for(let k=0;k<F.length;k++){let U=F[k];n.nativeScheduleMicroTask(()=>{throw U})}}}let z=function(p){return H(this,p,!1)},$=function(p){return H(this,p,!0)};function J(p,d){if(!p)return!1;let A=!0;d&&d.useG!==void 0&&(A=d.useG);let V=d&&d.vh,X=!0;d&&d.chkDup!==void 0&&(X=d.chkDup);let F=!1;d&&d.rt!==void 0&&(F=d.rt);let k=p;for(;k&&!k.hasOwnProperty(c);)k=Ae(k);if(!k&&p[c]&&(k=p),!k||k[y])return!1;let U=d&&d.eventNameToString,S={},R=k[y]=k[c],b=k[j(f)]=k[f],D=k[j(g)]=k[g],K=k[j(T)]=k[T],W;d&&d.prepend&&(W=k[j(d.prepend)]=k[d.prepend]);function I(o,u){return u?typeof o=="boolean"?{capture:o,passive:!0}:o?typeof o=="object"&&o.passive!==!1?{...o,passive:!0}:o:{passive:!0}:o}let s=function(o){if(!S.isExisting)return R.call(S.target,S.eventName,S.capture?$:z,S.options)},i=function(o){if(!o.isRemoved){let u=ne[o.eventName],v;u&&(v=u[o.capture?ae:le]);let C=v&&o.target[v];if(C){for(let m=0;m<C.length;m++)if(C[m]===o){C.splice(m,1),o.isRemoved=!0,o.removeAbortListener&&(o.removeAbortListener(),o.removeAbortListener=null),C.length===0&&(o.allRemoved=!0,o.target[v]=null);break}}}if(o.allRemoved)return b.call(o.target,o.eventName,o.capture?$:z,o.options)},r=function(o){return R.call(S.target,S.eventName,o.invoke,S.options)},E=function(o){return W.call(S.target,S.eventName,o.invoke,S.options)},x=function(o){return b.call(o.target,o.eventName,o.invoke,o.options)},ee=A?s:r,M=A?i:x,he=function(o,u){let v=typeof u;return v==="function"&&o.callback===u||v==="object"&&o.originalDelegate===u},_e=d?.diff||he,Q=Zone[j("UNPATCHED_EVENTS")],Te=t[j("PASSIVE_EVENTS")];function h(o){if(typeof o=="object"&&o!==null){let u={...o};return o.signal&&(u.signal=o.signal),u}return o}let l=function(o,u,v,C,m=!1,O=!1){return function(){let N=this||t,Z=arguments[0];d&&d.transferEventName&&(Z=d.transferEventName(Z));let G=arguments[1];if(!G)return o.apply(this,arguments);if(De&&Z==="uncaughtException")return o.apply(this,arguments);let B=!1;if(typeof G!="function"){if(!G.handleEvent)return o.apply(this,arguments);B=!0}if(V&&!V(o,G,N,arguments))return;let de=!!Te&&Te.indexOf(Z)!==-1,se=h(I(arguments[2],de)),Ee=se?.signal;if(Ee?.aborted)return;if(Q){for(let ie=0;ie<Q.length;ie++)if(Z===Q[ie])return de?o.call(N,Z,G,se):o.apply(this,arguments)}let Se=se?typeof se=="boolean"?!0:se.capture:!1,Be=se&&typeof se=="object"?se.once:!1,ft=Zone.current,Oe=ne[Z];Oe||(ct(Z,U),Oe=ne[Z]);let ze=Oe[Se?ae:le],ge=N[ze],Ue=!1;if(ge){if(Ue=!0,X){for(let ie=0;ie<ge.length;ie++)if(_e(ge[ie],G))return}}else ge=N[ze]=[];let Pe,We=N.constructor.name,qe=ot[We];qe&&(Pe=qe[Z]),Pe||(Pe=We+u+(U?U(Z):Z)),S.options=se,Be&&(S.options.once=!1),S.target=N,S.capture=Se,S.eventName=Z,S.isExisting=Ue;let me=A?pt:void 0;me&&(me.taskData=S),Ee&&(S.options.signal=void 0);let re=ft.scheduleEventTask(Pe,G,me,v,C);if(Ee){S.options.signal=Ee;let ie=()=>re.zone.cancelTask(re);o.call(Ee,"abort",ie,{once:!0}),re.removeAbortListener=()=>Ee.removeEventListener("abort",ie)}if(S.target=null,me&&(me.taskData=null),Be&&(S.options.once=!0),typeof re.options!="boolean"&&(re.options=se),re.target=N,re.capture=Se,re.eventName=Z,B&&(re.originalDelegate=G),O?ge.unshift(re):ge.push(re),m)return N}};return k[c]=l(R,w,ee,M,F),W&&(k[_]=l(W,P,E,M,F,!0)),k[f]=function(){let o=this||t,u=arguments[0];d&&d.transferEventName&&(u=d.transferEventName(u));let v=arguments[2],C=v?typeof v=="boolean"?!0:v.capture:!1,m=arguments[1];if(!m)return b.apply(this,arguments);if(V&&!V(b,m,o,arguments))return;let O=ne[u],N;O&&(N=O[C?ae:le]);let Z=N&&o[N];if(Z)for(let G=0;G<Z.length;G++){let B=Z[G];if(_e(B,m)){if(Z.splice(G,1),B.isRemoved=!0,Z.length===0&&(B.allRemoved=!0,o[N]=null,!C&&typeof u=="string")){let de=ve+"ON_PROPERTY"+u;o[de]=null}return B.zone.cancelTask(B),F?o:void 0}}return b.apply(this,arguments)},k[g]=function(){let o=this||t,u=arguments[0];d&&d.transferEventName&&(u=d.transferEventName(u));let v=[],C=at(o,U?U(u):u);for(let m=0;m<C.length;m++){let O=C[m],N=O.originalDelegate?O.originalDelegate:O.callback;v.push(N)}return v},k[T]=function(){let o=this||t,u=arguments[0];if(u){d&&d.transferEventName&&(u=d.transferEventName(u));let v=ne[u];if(v){let C=v[le],m=v[ae],O=o[C],N=o[m];if(O){let Z=O.slice();for(let G=0;G<Z.length;G++){let B=Z[G],de=B.originalDelegate?B.originalDelegate:B.callback;this[f].call(this,u,de,B.options)}}if(N){let Z=N.slice();for(let G=0;G<Z.length;G++){let B=Z[G],de=B.originalDelegate?B.originalDelegate:B.callback;this[f].call(this,u,de,B.options)}}}}else{let v=Object.keys(o);for(let C=0;C<v.length;C++){let m=v[C],O=st.exec(m),N=O&&O[1];N&&N!=="removeListener"&&this[T].call(this,N)}this[T].call(this,"removeListener")}if(F)return this},fe(k[c],R),fe(k[f],b),K&&fe(k[T],K),D&&fe(k[g],D),!0}let q=[];for(let p=0;p<a.length;p++)q[p]=J(a[p],e);return q}function at(t,n){if(!n){let f=[];for(let g in t){let T=st.exec(g),y=T&&T[1];if(y&&(!n||y===n)){let w=t[g];if(w)for(let _=0;_<w.length;_++)f.push(w[_])}}return f}let a=ne[n];a||(ct(n),a=ne[n]);let e=t[a[le]],c=t[a[ae]];return e?c?e.concat(c):e.slice():c?c.slice():[]}function bt(t,n){let a=t.Event;a&&a.prototype&&n.patchMethod(a.prototype,"stopImmediatePropagation",e=>function(c,f){c[it]=!0,e&&e.apply(c,f)})}function Pt(t,n){n.patchMethod(t,"queueMicrotask",a=>function(e,c){Zone.current.scheduleMicroTask("queueMicrotask",c[0])})}var Re=j("zoneTask");function ke(t,n,a,e){let c=null,f=null;n+=e,a+=e;let g={};function T(w){let _=w.data;_.args[0]=function(){return w.invoke.apply(this,arguments)};let P=c.apply(t,_.args);return Ke(P)?_.handleId=P:(_.handle=P,_.isRefreshable=Je(P.refresh)),w}function y(w){let{handle:_,handleId:P}=w.data;return f.call(t,_??P)}c=ue(t,n,w=>function(_,P){if(Je(P[0])){let L={isRefreshable:!1,isPeriodic:e==="Interval",delay:e==="Timeout"||e==="Interval"?P[1]||0:void 0,args:P},H=P[0];P[0]=function(){try{return H.apply(this,arguments)}finally{let{handle:A,handleId:V,isPeriodic:X,isRefreshable:F}=L;!X&&!F&&(V?delete g[V]:A&&(A[Re]=null))}};let z=xe(n,P[0],L,T,y);if(!z)return z;let{handleId:$,handle:J,isRefreshable:q,isPeriodic:p}=z.data;if($)g[$]=z;else if(J&&(J[Re]=z,q&&!p)){let d=J.refresh;J.refresh=function(){let{zone:A,state:V}=z;return V==="notScheduled"?(z._state="scheduled",A._updateTaskCount(z,1)):V==="running"&&(z._state="scheduling"),d.call(this)}}return J??$??z}else return w.apply(t,P)}),f=ue(t,a,w=>function(_,P){let L=P[0],H;Ke(L)?(H=g[L],delete g[L]):(H=L?.[Re],H?L[Re]=null:H=L),H?.type?H.cancelFn&&H.zone.cancelTask(H):w.apply(t,P)})}function Rt(t,n){let{isBrowser:a,isMix:e}=n.getGlobalObjects();if(!a&&!e||!t.customElements||!("customElements"in t))return;let c=["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","formAssociatedCallback","formDisabledCallback","formResetCallback","formStateRestoreCallback"];n.patchCallbacks(n,t.customElements,"customElements","define",c)}function Ct(t,n){if(Zone[n.symbol("patchEventTarget")])return;let{eventNames:a,zoneSymbolEventNames:e,TRUE_STR:c,FALSE_STR:f,ZONE_SYMBOL_PREFIX:g}=n.getGlobalObjects();for(let y=0;y<a.length;y++){let w=a[y],_=w+f,P=w+c,L=g+_,H=g+P;e[w]={},e[w][f]=L,e[w][c]=H}let T=t.EventTarget;if(!(!T||!T.prototype))return n.patchEventTarget(t,n,[T&&T.prototype]),!0}function wt(t,n){n.patchEventPrototype(t,n)}function lt(t,n,a){if(!a||a.length===0)return n;let e=a.filter(f=>f.target===t);if(e.length===0)return n;let c=e[0].ignoreProperties;return n.filter(f=>c.indexOf(f)===-1)}function Qe(t,n,a,e){if(!t)return;let c=lt(t,n,a);rt(t,c,e)}function Ie(t){return Object.getOwnPropertyNames(t).filter(n=>n.startsWith("on")&&n.length>2).map(n=>n.substring(2))}function Dt(t,n){if(De&&!nt||Zone[t.symbol("patchEvents")])return;let a=n.__Zone_ignore_on_properties,e=[];if(Ge){let c=window;e=e.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);let f=[];Qe(c,Ie(c),a&&a.concat(f),Ae(c))}e=e.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let c=0;c<e.length;c++){let f=n[e[c]];f?.prototype&&Qe(f.prototype,Ie(f.prototype),a)}}function St(t){t.__load_patch("legacy",n=>{let a=n[t.__symbol__("legacyPatch")];a&&a()}),t.__load_patch("timers",n=>{let a="set",e="clear";ke(n,a,e,"Timeout"),ke(n,a,e,"Interval"),ke(n,a,e,"Immediate")}),t.__load_patch("requestAnimationFrame",n=>{ke(n,"request","cancel","AnimationFrame"),ke(n,"mozRequest","mozCancel","AnimationFrame"),ke(n,"webkitRequest","webkitCancel","AnimationFrame")}),t.__load_patch("blocking",(n,a)=>{let e=["alert","prompt","confirm"];for(let c=0;c<e.length;c++){let f=e[c];ue(n,f,(g,T,y)=>function(w,_){return a.current.run(g,n,_,y)})}}),t.__load_patch("EventTarget",(n,a,e)=>{wt(n,e),Ct(n,e);let c=n.XMLHttpRequestEventTarget;c&&c.prototype&&e.patchEventTarget(n,e,[c.prototype])}),t.__load_patch("MutationObserver",(n,a,e)=>{ye("MutationObserver"),ye("WebKitMutationObserver")}),t.__load_patch("IntersectionObserver",(n,a,e)=>{ye("IntersectionObserver")}),t.__load_patch("FileReader",(n,a,e)=>{ye("FileReader")}),t.__load_patch("on_property",(n,a,e)=>{Dt(e,n)}),t.__load_patch("customElements",(n,a,e)=>{Rt(n,e)}),t.__load_patch("XHR",(n,a)=>{w(n);let e=j("xhrTask"),c=j("xhrSync"),f=j("xhrListener"),g=j("xhrScheduled"),T=j("xhrURL"),y=j("xhrErrorBeforeScheduled");function w(_){let P=_.XMLHttpRequest;if(!P)return;let L=P.prototype;function H(R){return R[e]}let z=L[Ne],$=L[Ze];if(!z){let R=_.XMLHttpRequestEventTarget;if(R){let b=R.prototype;z=b[Ne],$=b[Ze]}}let J="readystatechange",q="scheduled";function p(R){let b=R.data,D=b.target;D[g]=!1,D[y]=!1;let K=D[f];z||(z=D[Ne],$=D[Ze]),K&&$.call(D,J,K);let W=D[f]=()=>{if(D.readyState===D.DONE)if(!b.aborted&&D[g]&&R.state===q){let s=D[a.__symbol__("loadfalse")];if(D.status!==0&&s&&s.length>0){let i=R.invoke;R.invoke=function(){let r=D[a.__symbol__("loadfalse")];for(let E=0;E<r.length;E++)r[E]===R&&r.splice(E,1);!b.aborted&&R.state===q&&i.call(R)},s.push(R)}else R.invoke()}else!b.aborted&&D[g]===!1&&(D[y]=!0)};return z.call(D,J,W),D[e]||(D[e]=R),U.apply(D,b.args),D[g]=!0,R}function d(){}function A(R){let b=R.data;return b.aborted=!0,S.apply(b.target,b.args)}let V=ue(L,"open",()=>function(R,b){return R[c]=b[2]==!1,R[T]=b[1],V.apply(R,b)}),X="XMLHttpRequest.send",F=j("fetchTaskAborting"),k=j("fetchTaskScheduling"),U=ue(L,"send",()=>function(R,b){if(a.current[k]===!0||R[c])return U.apply(R,b);{let D={target:R,url:R[T],isPeriodic:!1,args:b,aborted:!1},K=xe(X,d,D,p,A);R&&R[y]===!0&&!D.aborted&&K.state===q&&K.invoke()}}),S=ue(L,"abort",()=>function(R,b){let D=H(R);if(D&&typeof D.type=="string"){if(D.cancelFn==null||D.data&&D.data.aborted)return;D.zone.cancelTask(D)}else if(a.current[F]===!0)return S.apply(R,b)})}}),t.__load_patch("geolocation",n=>{n.navigator&&n.navigator.geolocation&>(n.navigator.geolocation,["getCurrentPosition","watchPosition"])}),t.__load_patch("PromiseRejectionEvent",(n,a)=>{function e(c){return function(f){at(n,c).forEach(T=>{let y=n.PromiseRejectionEvent;if(y){let w=new y(c,{promise:f.promise,reason:f.rejection});T.invoke(w)}})}}n.PromiseRejectionEvent&&(a[j("unhandledPromiseRejectionHandler")]=e("unhandledrejection"),a[j("rejectionHandledHandler")]=e("rejectionhandled"))}),t.__load_patch("queueMicrotask",(n,a,e)=>{Pt(n,e)})}function Ot(t){t.__load_patch("ZoneAwarePromise",(n,a,e)=>{let c=Object.getOwnPropertyDescriptor,f=Object.defineProperty;function g(h){if(h&&h.toString===Object.prototype.toString){let l=h.constructor&&h.constructor.name;return(l||"")+": "+JSON.stringify(h)}return h?h.toString():Object.prototype.toString.call(h)}let T=e.symbol,y=[],w=n[T("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")]!==!1,_=T("Promise"),P=T("then"),L="__creationTrace__";e.onUnhandledError=h=>{if(e.showUncaughtError()){let l=h&&h.rejection;l?console.error("Unhandled Promise rejection:",l instanceof Error?l.message:l,"; Zone:",h.zone.name,"; Task:",h.task&&h.task.source,"; Value:",l,l instanceof Error?l.stack:void 0):console.error(h)}},e.microtaskDrainDone=()=>{for(;y.length;){let h=y.shift();try{h.zone.runGuarded(()=>{throw h.throwOriginal?h.rejection:h})}catch(l){z(l)}}};let H=T("unhandledPromiseRejectionHandler");function z(h){e.onUnhandledError(h);try{let l=a[H];typeof l=="function"&&l.call(this,h)}catch{}}function $(h){return h&&typeof h.then=="function"}function J(h){return h}function q(h){return M.reject(h)}let p=T("state"),d=T("value"),A=T("finally"),V=T("parentPromiseValue"),X=T("parentPromiseState"),F="Promise.then",k=null,U=!0,S=!1,R=0;function b(h,l){return o=>{try{I(h,l,o)}catch(u){I(h,!1,u)}}}let D=function(){let h=!1;return function(o){return function(){h||(h=!0,o.apply(null,arguments))}}},K="Promise resolved with itself",W=T("currentTaskTrace");function I(h,l,o){let u=D();if(h===o)throw new TypeError(K);if(h[p]===k){let v=null;try{(typeof o=="object"||typeof o=="function")&&(v=o&&o.then)}catch(C){return u(()=>{I(h,!1,C)})(),h}if(l!==S&&o instanceof M&&o.hasOwnProperty(p)&&o.hasOwnProperty(d)&&o[p]!==k)i(o),I(h,o[p],o[d]);else if(l!==S&&typeof v=="function")try{v.call(o,u(b(h,l)),u(b(h,!1)))}catch(C){u(()=>{I(h,!1,C)})()}else{h[p]=l;let C=h[d];if(h[d]=o,h[A]===A&&l===U&&(h[p]=h[X],h[d]=h[V]),l===S&&o instanceof Error){let m=a.currentTask&&a.currentTask.data&&a.currentTask.data[L];m&&f(o,W,{configurable:!0,enumerable:!1,writable:!0,value:m})}for(let m=0;m<C.length;)r(h,C[m++],C[m++],C[m++],C[m++]);if(C.length==0&&l==S){h[p]=R;let m=o;try{throw new Error("Uncaught (in promise): "+g(o)+(o&&o.stack?`
|
|
18
|
+
`+o.stack:""))}catch(O){m=O}w&&(m.throwOriginal=!0),m.rejection=o,m.promise=h,m.zone=a.current,m.task=a.currentTask,y.push(m),e.scheduleMicroTask()}}}return h}let s=T("rejectionHandledHandler");function i(h){if(h[p]===R){try{let l=a[s];l&&typeof l=="function"&&l.call(this,{rejection:h[d],promise:h})}catch{}h[p]=S;for(let l=0;l<y.length;l++)h===y[l].promise&&y.splice(l,1)}}function r(h,l,o,u,v){i(h);let C=h[p],m=C?typeof u=="function"?u:J:typeof v=="function"?v:q;l.scheduleMicroTask(F,()=>{try{let O=h[d],N=!!o&&A===o[A];N&&(o[V]=O,o[X]=C);let Z=l.run(m,void 0,N&&m!==q&&m!==J?[]:[O]);I(o,!0,Z)}catch(O){I(o,!1,O)}},o)}let E="function ZoneAwarePromise() { [native code] }",x=function(){},ee=n.AggregateError;class M{static toString(){return E}static resolve(l){return l instanceof M?l:I(new this(null),U,l)}static reject(l){return I(new this(null),S,l)}static withResolvers(){let l={};return l.promise=new M((o,u)=>{l.resolve=o,l.reject=u}),l}static any(l){if(!l||typeof l[Symbol.iterator]!="function")return Promise.reject(new ee([],"All promises were rejected"));let o=[],u=0;try{for(let m of l)u++,o.push(M.resolve(m))}catch{return Promise.reject(new ee([],"All promises were rejected"))}if(u===0)return Promise.reject(new ee([],"All promises were rejected"));let v=!1,C=[];return new M((m,O)=>{for(let N=0;N<o.length;N++)o[N].then(Z=>{v||(v=!0,m(Z))},Z=>{C.push(Z),u--,u===0&&(v=!0,O(new ee(C,"All promises were rejected")))})})}static race(l){let o,u,v=new this((O,N)=>{o=O,u=N});function C(O){o(O)}function m(O){u(O)}for(let O of l)$(O)||(O=this.resolve(O)),O.then(C,m);return v}static all(l){return M.allWithCallback(l)}static allSettled(l){return(this&&this.prototype instanceof M?this:M).allWithCallback(l,{thenCallback:u=>({status:"fulfilled",value:u}),errorCallback:u=>({status:"rejected",reason:u})})}static allWithCallback(l,o){let u,v,C=new this((Z,G)=>{u=Z,v=G}),m=2,O=0,N=[];for(let Z of l){$(Z)||(Z=this.resolve(Z));let G=O;try{Z.then(B=>{N[G]=o?o.thenCallback(B):B,m--,m===0&&u(N)},B=>{o?(N[G]=o.errorCallback(B),m--,m===0&&u(N)):v(B)})}catch(B){v(B)}m++,O++}return m-=2,m===0&&u(N),C}constructor(l){let o=this;if(!(o instanceof M))throw new Error("Must be an instanceof Promise.");o[p]=k,o[d]=[];try{let u=D();l&&l(u(b(o,U)),u(b(o,S)))}catch(u){I(o,!1,u)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return M}then(l,o){let u=this.constructor?.[Symbol.species];(!u||typeof u!="function")&&(u=this.constructor||M);let v=new u(x),C=a.current;return this[p]==k?this[d].push(C,v,l,o):r(this,C,v,l,o),v}catch(l){return this.then(null,l)}finally(l){let o=this.constructor?.[Symbol.species];(!o||typeof o!="function")&&(o=M);let u=new o(x);u[A]=A;let v=a.current;return this[p]==k?this[d].push(v,u,l,l):r(this,v,u,l,l),u}}M.resolve=M.resolve,M.reject=M.reject,M.race=M.race,M.all=M.all;let he=n[_]=n.Promise;n.Promise=M;let _e=T("thenPatched");function Q(h){let l=h.prototype,o=c(l,"then");if(o&&(o.writable===!1||!o.configurable))return;let u=l.then;l[P]=u,h.prototype.then=function(v,C){return new M((O,N)=>{u.call(this,O,N)}).then(v,C)},h[_e]=!0}e.patchThen=Q;function Te(h){return function(l,o){let u=h.apply(l,o);if(u instanceof M)return u;let v=u.constructor;return v[_e]||Q(v),u}}return he&&(Q(he),ue(n,"fetch",h=>Te(h))),Promise[a.__symbol__("uncaughtPromiseErrors")]=y,M})}function Nt(t){t.__load_patch("toString",n=>{let a=Function.prototype.toString,e=j("OriginalDelegate"),c=j("Promise"),f=j("Error"),g=function(){if(typeof this=="function"){let _=this[e];if(_)return typeof _=="function"?a.call(_):Object.prototype.toString.call(_);if(this===Promise){let P=n[c];if(P)return a.call(P)}if(this===Error){let P=n[f];if(P)return a.call(P)}}return a.call(this)};g[e]=a,Function.prototype.toString=g;let T=Object.prototype.toString,y="[object Promise]";Object.prototype.toString=function(){return typeof Promise=="function"&&this instanceof Promise?y:T.call(this)}})}function Zt(t,n,a,e,c){let f=Zone.__symbol__(e);if(n[f])return;let g=n[f]=n[e];n[e]=function(T,y,w){return y&&y.prototype&&c.forEach(function(_){let P=`${a}.${e}::`+_,L=y.prototype;try{if(L.hasOwnProperty(_)){let H=t.ObjectGetOwnPropertyDescriptor(L,_);H&&H.value?(H.value=t.wrapWithCurrentZone(H.value,P),t._redefineProperty(y.prototype,_,H)):L[_]&&(L[_]=t.wrapWithCurrentZone(L[_],P))}else L[_]&&(L[_]=t.wrapWithCurrentZone(L[_],P))}catch{}}),g.call(n,T,y,w)},t.attachOriginToPatched(n[e],g)}function Lt(t){t.__load_patch("util",(n,a,e)=>{let c=Ie(n);e.patchOnProperties=rt,e.patchMethod=ue,e.bindArguments=Fe,e.patchMacroTask=mt;let f=a.__symbol__("BLACK_LISTED_EVENTS"),g=a.__symbol__("UNPATCHED_EVENTS");n[g]&&(n[f]=n[g]),n[f]&&(a[f]=a[g]=n[f]),e.patchEventPrototype=bt,e.patchEventTarget=vt,e.isIEOrEdge=yt,e.ObjectDefineProperty=Me,e.ObjectGetOwnPropertyDescriptor=pe,e.ObjectCreate=_t,e.ArraySlice=Tt,e.patchClass=ye,e.wrapWithCurrentZone=Ve,e.filterProperties=lt,e.attachOriginToPatched=fe,e._redefineProperty=Object.defineProperty,e.patchCallbacks=Zt,e.getGlobalObjects=()=>({globalSources:ot,zoneSymbolEventNames:ne,eventNames:c,isBrowser:Ge,isMix:nt,isNode:De,TRUE_STR:ae,FALSE_STR:le,ZONE_SYMBOL_PREFIX:ve,ADD_EVENT_LISTENER_STR:je,REMOVE_EVENT_LISTENER_STR:He})})}function It(t){Ot(t),Nt(t),Lt(t)}var ut=dt();It(ut);St(ut);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
html{color-scheme:dark}html{--mat-sys-background: light-dark(#fcf9f8, #131314);--mat-sys-error: light-dark(#ba1a1a, #ffb4ab);--mat-sys-error-container: light-dark(#ffdad6, #93000a);--mat-sys-inverse-on-surface: light-dark(#f3f0f0, #313030);--mat-sys-inverse-primary: light-dark(#c1c7cd, #595f65);--mat-sys-inverse-surface: light-dark(#313030, #e5e2e2);--mat-sys-on-background: light-dark(#1c1b1c, #e5e2e2);--mat-sys-on-error: light-dark(#ffffff, #690005);--mat-sys-on-error-container: light-dark(#410002, #ffdad6);--mat-sys-on-primary: light-dark(#ffffff, #2b3136);--mat-sys-on-primary-container: light-dark(#161c21, #dde3e9);--mat-sys-on-primary-fixed: light-dark(#161c21, #161c21);--mat-sys-on-primary-fixed-variant: light-dark(#41474d, #41474d);--mat-sys-on-secondary: light-dark(#ffffff, #003061);--mat-sys-on-secondary-container: light-dark(#001b3c, #d5e3ff);--mat-sys-on-secondary-fixed: light-dark(#001b3c, #001b3c);--mat-sys-on-secondary-fixed-variant: light-dark(#0f4784, #0f4784);--mat-sys-on-surface: light-dark(#1c1b1c, #e5e2e2);--mat-sys-on-surface-variant: light-dark(#44474a, #e1e2e6);--mat-sys-on-tertiary: light-dark(#ffffff, #2b3136);--mat-sys-on-tertiary-container: light-dark(#161c21, #dde3e9);--mat-sys-on-tertiary-fixed: light-dark(#161c21, #161c21);--mat-sys-on-tertiary-fixed-variant: light-dark(#41474d, #41474d);--mat-sys-outline: light-dark(#74777b, #8e9194);--mat-sys-outline-variant: light-dark(#c4c7ca, #44474a);--mat-sys-primary: light-dark(#595f65, #c1c7cd);--mat-sys-primary-container: light-dark(#dde3e9, #41474d);--mat-sys-primary-fixed: light-dark(#dde3e9, #dde3e9);--mat-sys-primary-fixed-dim: light-dark(#c1c7cd, #c1c7cd);--mat-sys-scrim: light-dark(#000000, #000000);--mat-sys-secondary: light-dark(#305f9d, #a7c8ff);--mat-sys-secondary-container: light-dark(#d5e3ff, #0f4784);--mat-sys-secondary-fixed: light-dark(#d5e3ff, #d5e3ff);--mat-sys-secondary-fixed-dim: light-dark(#a7c8ff, #a7c8ff);--mat-sys-shadow: light-dark(#000000, #000000);--mat-sys-surface: light-dark(#fcf9f8, #131314);--mat-sys-surface-bright: light-dark(#fcf9f8, #393939);--mat-sys-surface-container: light-dark(#f0eded, #201f20);--mat-sys-surface-container-high: light-dark(#eae7e7, #2a2a2a);--mat-sys-surface-container-highest: light-dark(#e5e2e2, #393939);--mat-sys-surface-container-low: light-dark(#f6f3f3, #1c1b1c);--mat-sys-surface-container-lowest: light-dark(#ffffff, #0e0e0e);--mat-sys-surface-dim: light-dark(#dcd9d9, #131314);--mat-sys-surface-tint: light-dark(#595f65, #c1c7cd);--mat-sys-surface-variant: light-dark(#e1e2e6, #44474a);--mat-sys-tertiary: light-dark(#595f65, #c1c7cd);--mat-sys-tertiary-container: light-dark(#dde3e9, #41474d);--mat-sys-tertiary-fixed: light-dark(#dde3e9, #dde3e9);--mat-sys-tertiary-fixed-dim: light-dark(#c1c7cd, #c1c7cd);--mat-sys-neutral-variant20: #2d3134;--mat-sys-neutral10: #1c1b1c}html{--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12)}html{--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px}html{--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}html{font-family:Google Sans,Helvetica Neue,sans-serif!important}body{height:100vh;margin:0}markdown p{margin-block-start:.5em;margin-block-end:.5em}:root{--mat-sys-primary: black;--mdc-checkbox-selected-icon-color: white;--mat-sys-background: #131314;--mat-tab-header-active-label-text-color: #8AB4F8;--mat-tab-header-active-hover-label-text-color: #8AB4F8;--mat-tab-header-active-focus-label-text-color: #8AB4F8;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #89b4f8}:root{--mdc-dialog-container-color: #2b2b2f}:root{--mdc-dialog-subhead-color: white}:root{--mdc-circular-progress-active-indicator-color: #a8c7fa}:root{--mdc-circular-progress-size: 80}
|
package/dist/cli/cli.cjs
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
"use strict";var Je=Object.create;var Se=Object.defineProperty;var He=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var we=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),ye=e=>{throw TypeError(e)};var Qe=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of We(t))!ze.call(e,r)&&r!==s&&Se(e,r,{get:()=>t[r],enumerable:!(n=He(t,r))||n.enumerable});return e};var g=(e,t,s)=>(s=e!=null?Je(Xe(e)):{},Qe(t||!e||!e.__esModule?Se(s,"default",{value:e,enumerable:!0}):s,e));var k=(e,t,s)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&ye("Object expected");var n,r;s&&(n=t[we("asyncDispose")]),n===void 0&&(n=t[we("dispose")],s&&(r=n)),typeof n!="function"&&ye("Object not disposable"),r&&(n=function(){try{r.call(this)}catch(o){return Promise.reject(o)}}),e.push([s,n,t])}else s&&e.push([s]);return t},D=(e,t,s)=>{var n=typeof SuppressedError=="function"?SuppressedError:function(a,i,c,l){return l=Error(c),l.name="SuppressedError",l.error=a,l.suppressed=i,l},r=a=>t=s?new n(a,t,"An error was suppressed during disposal"):(s=!0,a),o=a=>{for(;a=e.pop();)try{var i=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(i).then(o,c=>(r(c),o()))}catch(c){r(c)}if(s)throw t};return o()};var Ke=g(require("os")),te=g(require("path")),Ye=g(require("dotenv")),O=require("commander"),b=require("@paean-ai/adk");var S=require("@paean-ai/adk"),Ce=g(require("cors")),Y=g(require("express")),xe=g(require("path"));var Oe=g(require("esbuild")),C=g(require("fs/promises")),j=g(require("path"));var I=g(require("fs/promises")),Ie=g(require("os")),W=g(require("path"));async function q(e){try{return await I.access(e),!0}catch{return!1}}async function oe(e){try{await I.mkdir(e)}catch(t){console.error(`Failed to create folder ${e}`,t)}}async function Ae(e){try{await I.rm(e,{recursive:!0})}catch(t){console.error(`Failed to remove folder ${e}`,t)}}async function be(e){try{return await I.readdir(e)}catch(t){return console.error(`Failed to list files in folder ${e}`,t),[]}}async function X(e){try{return(await I.stat(e)).isFile()}catch{return!1}}async function K(e){try{return JSON.parse(await I.readFile(e,{encoding:"utf-8"}))}catch(t){throw console.error(`Failed to read or parse file ${e}:`,t),t}}async function N(e,t){try{await I.writeFile(e,typeof t=="string"?t:JSON.stringify(t,null,2),{encoding:"utf-8"})}catch(s){throw console.error(`Failed to write file ${e}:`,s),s}}function z(e){let t=[Ie.tmpdir()];return e&&t.push(e),t.push(Date.now().toString()),W.join(...t)}async function Re(e,t,s){let n=e;for(let r=0;r<s;r++){let o=W.join(n,t);if(await q(o))return o;n=W.join(n,"../")}throw new Error(`No ${t} found in ${e} or its parent folders up to ${s} levels.`)}var Ze=[".ts",".mts"],et=[".js",".cjs",".mjs",".ts",".mts"],L=class extends Error{};var _e={bundle:"ts"},$=class{constructor(t,s=_e){this.filePath=t;this.options=s;this.disposed=!1}async load(){if(this.agent)return this.agent;try{await C.stat(this.filePath)}catch(r){if(r.code==="ENOENT")throw new L(`Agent file ${this.filePath} does not exists`)}let t=this.filePath,s=j.extname(t);if(this.options.bundle==="any"||Ze.includes(s)){let r=j.parse(t),o=j.join(z("adk_agent_loader"),r.name+".cjs");await Oe.default.build({entryPoints:[t],outfile:o,target:"node10.4",platform:"node",format:"cjs",packages:"bundle",bundle:!0,minify:!0,allowOverwrite:!0}),this.cleanupFilePath=o,t=o}let n=await Promise.resolve().then(()=>g(require(t)));if(n&&n.rootAgent)return this.agent=n.rootAgent;throw this.dispose(),new L(`Failed to load agent ${t}: No rootAgent found`)}getFilePath(){if(!this.agent)throw new Error("Agent is not loaded yet");if(this.disposed)throw new Error("Agent is disposed and can not be used");return this.cleanupFilePath||this.filePath}async[Symbol.asyncDispose](){return this.dispose()}async dispose(){if(!this.disposed&&this.cleanupFilePath)return this.disposed=!0,C.unlink(this.cleanupFilePath)}},G=class{constructor(t=process.cwd(),s=_e){this.agentsDirPath=t;this.options=s;this.agentsAlreadyPreloaded=!1;this.preloadedAgents={};let n=async({exit:r,cleanup:o})=>{o&&await this.disposeAll(),r&&process.exit()};process.on("exit",()=>n({cleanup:!0})),process.on("SIGINT",()=>n({exit:!0})),process.on("SIGUSR1",()=>n({exit:!0})),process.on("SIGUSR2",()=>n({exit:!0})),process.on("uncaughtException",()=>n({exit:!0}))}async listAgents(){return await this.preloadAgents(),Object.keys(this.preloadedAgents).sort()}async getAgentFile(t){return await this.preloadAgents(),this.preloadedAgents[t]}async disposeAll(){await Promise.all(Object.values(this.preloadedAgents).map(t=>t.dispose()))}async preloadAgents(){if(this.agentsAlreadyPreloaded)return;let t=await X(this.agentsDirPath)?[await Fe(this.agentsDirPath)]:await je(this.agentsDirPath);await Promise.all(t.map(async s=>{if(s.isFile&&Ne(s.ext))return this.loadAgentFromFile(s);if(s.isDirectory)return this.loadAgentFromDirectory(s)})),this.agentsAlreadyPreloaded=!0}async loadAgentFromFile(t){try{let s=new $(t.path,this.options);await s.load(),this.preloadedAgents[t.name]=s}catch(s){if(s instanceof L)return;throw s}}async loadAgentFromDirectory(t){let n=(await je(t.path)).find(r=>r.isFile&&r.name==="agent"&&Ne(r.ext));if(n)try{let r=new $(n.path,this.options);await r.load(),this.preloadedAgents[t.name]=r}catch(r){if(r instanceof L)return;throw r}}};function Ne(e){return!!e&&et.includes(e)}async function je(e){let t=await C.readdir(e);return await Promise.all(t.map(s=>Fe(j.join(e,s))))}async function Fe(e){let t=await C.stat(e),s=t.isFile(),n=j.basename(e),r=j.extname(e);return{path:e,name:s?n.slice(0,n.length-r.length):n,ext:s?j.extname(e):void 0,isFile:s,isDirectory:t.isDirectory()}}var p=require("@paean-ai/adk"),m=require("ts-graphviz");var Ee="#0F5223",ie="#69CB87",U="#cccccc",ce="#ffffff";async function B(e,t,s,n){async function r(i,c){if(c instanceof p.LoopAgent){n&&a(n.name,c.subAgents[0].name);let l=c.subAgents.length,u=0;for(let w of c.subAgents){await B(i,w,s,c);let d=u===l-1?c.subAgents[0]:c.subAgents[u+1];a(c.subAgents[u].name,d.name),u++}}else if(c instanceof p.SequentialAgent){n&&a(n.name,c.subAgents[0].name);let l=c.subAgents.length,u=0;for(let w of c.subAgents)await B(i,w,s,c),u!==l-1&&a(c.subAgents[u].name,c.subAgents[u+1].name),u++}else if(c instanceof p.ParallelAgent)for(let l of c.subAgents)await B(i,l,s,c),n&&a(n.name,l.name);else for(let l of c.subAgents)await B(i,l,s,c),a(c.name,l.name);return i}async function o(i){let c=Pe(i),l=st(i),u=tt(i),w=Q(i);if(s){for(let d of s)if(d.includes(c)){if(w){let f=new m.Subgraph(`cluster_${c}`,{label:`cluster_${c}`,style:"rounded",bgcolor:ce,fontcolor:U});e.addSubgraph(f),await r(f,t)}else e.addNode(new m.Node(c,{label:u,style:"filled,rounded",fillcolor:Ee,color:Ee,shape:l,fontcolor:U}));return}}if(w){let d=new m.Subgraph(`cluster_${c}`,{label:`cluster_${c}`,style:"rounded",bgcolor:ce,fontcolor:U});e.addSubgraph(d),await r(d,t);return}e.addNode(new m.Node(c,{label:u,style:"rounded",fillcolor:ce,color:U,shape:l,fontcolor:U}))}function a(i,c){if(s)for(let[l,u]of s){if(i===l&&c===u){e.addEdge(new m.Edge([e.node(i),e.node(c)],{color:ie}));return}if(i===u&&c===l){e.addEdge(new m.Edge([e.node(i),e.node(c)],{color:ie,dir:"back"}));return}}if(Q(t)){e.addEdge(new m.Edge([new m.Node(i),new m.Node(c)],{color:ie}));return}e.addEdge(new m.Edge([new m.Node(i),new m.Node(c)],{arrowhead:"none",color:U}))}await o(t);for(let i of t.subAgents)await B(e,i,s,t),!Q(i)&&!Q(t)&&a(t.name,i.name);if(t instanceof p.LlmAgent)for(let i of await t.canonicalTools())await o(i),a(t.name,Pe(i))}function Pe(e){if(e instanceof p.BaseAgent)return e instanceof p.SequentialAgent?`${e.name} (Sequential Agent)`:e instanceof p.LoopAgent?`${e.name} (Loop Agent)`:e instanceof p.ParallelAgent?`${e.name} (Parallel Agent)`:e.name;if(e instanceof p.BaseTool)return e.name;throw new Error(`Unsupported tool type: ${e}`)}function tt(e){return e instanceof p.BaseAgent?`\u{1F916} ${e.name}`:e instanceof p.FunctionTool?`\u{1F527} ${e.name}`:e instanceof p.AgentTool?`\u{1F916} ${e.name}`:e instanceof p.BaseTool?`\u{1F527} ${e.name}`:(console.warn(`Unsupported tool type: ${typeof e}`),`\u2753 Unsupported tool type: ${typeof e}`)}function st(e){return e instanceof p.BaseAgent?"ellipse":e instanceof p.FunctionTool||e instanceof p.BaseTool?"box":(console.warn(`Unsupported tool type: ${typeof e}`),"cylinder")}function Q(e){return e instanceof p.SequentialAgent||e instanceof p.LoopAgent||e instanceof p.ParallelAgent}async function nt(e,t){let s=new m.Digraph(e.name,!0,{rankdir:"LR",bgcolor:"#333537"});return await B(s,e,t),s}async function Z(e,t){let s=await nt(e,t);return(0,m.toDot)(s)}var V=class{constructor(t){this.runnerCache={};var s,n,r,o,a,i,c;this.host=(s=t.host)!=null?s:"localhost",this.port=(n=t.port)!=null?n:8e3,this.sessionService=(r=t.sessionService)!=null?r:new S.InMemorySessionService,this.memoryService=(o=t.memoryService)!=null?o:new S.InMemoryMemoryService,this.artifactService=(a=t.artifactService)!=null?a:new S.InMemoryArtifactService,this.agentLoader=(i=t.agentLoader)!=null?i:new G(t.agentsDir),this.serveDebugUI=(c=t.serveDebugUI)!=null?c:!1,this.allowOrigins=t.allowOrigins,this.app=(0,Y.default)(),this.init()}init(){let t=this.app;this.serveDebugUI&&(t.get("/",(s,n)=>{n.redirect("/dev-ui")}),t.use("/dev-ui",Y.default.static(xe.join(__dirname,"../browser"),{setHeaders:(s,n)=>{n.endsWith(".js")&&s.setHeader("Content-Type","text/javascript")}}))),this.allowOrigins&&t.use((0,Ce.default)({origin:this.allowOrigins})),t.use(Y.default.urlencoded({limit:"50mb",extended:!0})),t.use(Y.default.json({limit:"50mb"})),t.get("/list-apps",async(s,n)=>{try{let r=await this.agentLoader.listAgents();n.json(r)}catch(r){n.status(500).json({error:r.message})}}),t.get("/debug/trace/:eventId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/debug/trace/session/:sessionId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/users/:userId/sessions/:sessionId/events/:eventId/graph",async(s,n)=>{var v=[];try{let r=s.params.appName;let o=s.params.userId;let a=s.params.sessionId;let i=s.params.eventId;let c=await this.sessionService.getSession({appName:r,userId:o,sessionId:a});if(!c){n.status(404).json({error:`Session not found: ${a}`});return}let l=c.events||[];let u=l.find(P=>P.id===i);if(!u){n.status(404).json({error:`Event not found: ${i}`});return}let w=(0,S.getFunctionCalls)(u);let d=(0,S.getFunctionResponses)(u);let f=k(v,await this.agentLoader.getAgentFile(r),!0);let y=await f.load();if(w.length>0){let P=[];for(let ae of w)P.push([u.author,ae.name]);return n.send({dotSrc:await Z(y,P)})}if(d.length>0){let P=[];for(let ae of d)P.push([ae.name,u.author]);return n.send({dotSrc:await Z(y,P)})}return n.send({dotSrc:await Z(y,[[u.author,""]])})}catch(R){var _=R,E=!0}finally{var ve=D(v,_,E);ve&&await ve}}),t.get("/apps/:appName/users/:userId/sessions/:sessionId",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=await this.sessionService.getSession({appName:r,userId:o,sessionId:a});if(!i){n.status(404).json({error:`Session not found: ${a}`});return}n.json(i)}catch(r){n.status(500).json({error:r.message})}}),t.get("/apps/:appName/users/:userId/sessions",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=await this.sessionService.listSessions({appName:r,userId:o});n.json(a)}catch(r){n.status(500).json({error:r.message})}}),t.post("/apps/:appName/users/:userId/sessions/:sessionId",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId;if(await this.sessionService.getSession({appName:r,userId:o,sessionId:a})){n.status(400).json({error:`Session already exists: ${a}`});return}let c=await this.sessionService.createSession({appName:r,userId:o,state:{},sessionId:a});n.json(c)}catch(r){n.status(500).json({error:r.message})}}),t.post("/apps/:appName/users/:userId/sessions",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=await this.sessionService.createSession({appName:r,userId:o});n.json(a)}catch(r){n.status(500).json({error:r.message})}}),t.delete("/apps/:appName/users/:userId/sessions/:sessionId",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId;if(!await this.sessionService.getSession({appName:r,userId:o,sessionId:a})){n.status(404).json({error:`Session not found: ${a}`});return}await this.sessionService.deleteSession({appName:r,userId:o,sessionId:a}),n.status(204).json({})}catch(r){n.status(500).json({error:r.message})}}),t.get("/apps/:appName/users/:userId/sessions/:sessionId/artifacts/:artifactName",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=s.params.artifactName,c=await this.artifactService.loadArtifact({appName:r,userId:o,sessionId:a,filename:i});if(!c){n.status(404).json({error:`Artifact not found: ${i}`});return}n.json(c)}catch(r){n.status(500).json({error:r.message})}}),t.get("/apps/:appName/users/:userId/sessions/:sessionId/artifacts/:artifactName/versions/:versionId",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=s.params.artifactName,c=s.params.versionId,l=await this.artifactService.loadArtifact({appName:r,userId:o,sessionId:a,filename:i,version:parseInt(c,10)});if(!l){n.status(404).json({error:`Artifact not found: ${i}`});return}n.json(l)}catch(r){n.status(500).json({error:r.message})}}),t.get("/apps/:appName/users/:userId/sessions/:sessionId/artifacts",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=await this.artifactService.listArtifactKeys({appName:r,userId:o,sessionId:a});n.json(i)}catch(r){n.status(500).json({error:r.message})}}),t.get("/apps/:appName/users/:userId/sessions/:sessionId/artifacts/:artifactName/versions",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=s.params.artifactName,c=await this.artifactService.listVersions({appName:r,userId:o,sessionId:a,filename:i});n.json(c)}catch(r){n.status(500).json({error:r.message})}}),t.delete("/apps/:appName/users/:userId/sessions/:sessionId/artifacts/:artifactName",async(s,n)=>{try{let r=s.params.appName,o=s.params.userId,a=s.params.sessionId,i=s.params.artifactName;await this.artifactService.deleteArtifact({appName:r,userId:o,sessionId:a,filename:i}),n.status(204).json({})}catch(r){n.status(500).json({error:r.message})}}),t.post("/apps/:appName/eval_sets/:evalSetId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_sets",(s,n)=>n.status(501).json({error:"Not implemented"})),t.post("/apps/:appName/eval_sets/:evalSetId/add_session",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_sets/:evalSetId/evals",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_sets/:evalSetId/evals/:evalCaseId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.put("/apps/:appName/eval_sets/:evalSetId/evals/:evalCaseId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.delete("/apps/:appName/eval_sets/:evalSetId/evals/:evalCaseId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.post("/apps/:appName/eval_sets/:evalSetId/run_eval",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_results/:evalResultId",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_results",(s,n)=>n.status(501).json({error:"Not implemented"})),t.get("/apps/:appName/eval_metrics",(s,n)=>n.status(501).json({error:"Not implemented"})),t.post("/run",async(s,n)=>{let{appName:r,userId:o,sessionId:a,newMessage:i}=s.body;if(!await this.sessionService.getSession({appName:r,userId:o,sessionId:a})){n.status(404).json({error:`Session not found: ${a}`});return}try{var l=[];try{let y=k(l,await this.agentLoader.getAgentFile(r),!0);let v=await y.load();let R=await this.getRunner(v,r);let _=[];for await(let E of R.runAsync({userId:o,sessionId:a,newMessage:i}))_.push(E);n.json(_)}catch(u){var w=u,d=!0}finally{var f=D(l,w,d);f&&await f}}catch(y){n.status(500).json({error:y.message})}}),t.post("/run_sse",async(s,n)=>{let{appName:r,userId:o,sessionId:a,newMessage:i,streaming:c}=s.body;if(!await this.sessionService.getSession({appName:r,userId:o,sessionId:a})){n.status(404).json({error:`Session not found: ${a}`});return}try{var u=[];try{let v=k(u,await this.agentLoader.getAgentFile(r),!0);let R=await v.load();let _=await this.getRunner(R,r);n.setHeader("Cache-Control","no-cache");n.setHeader("Content-Type","text/event-stream");n.setHeader("Access-Control-Allow-Origin","*");n.setHeader("Connection","keep-alive");n.flushHeaders();for await(let E of _.runAsync({userId:o,sessionId:a,newMessage:i,runConfig:{streamingMode:c?S.StreamingMode.SSE:S.StreamingMode.NONE}}))n.write(`data: ${JSON.stringify(E)}
|
|
9
|
+
|
|
10
|
+
`);n.end()}catch(w){var d=w,f=!0}finally{var y=D(u,d,f);y&&await y}}catch(v){n.headersSent?n.end(`data: ${JSON.stringify({error:v.message})}
|
|
11
|
+
|
|
12
|
+
`):n.status(500).json({error:v.message})}})}start(){return new Promise(t=>{this.server=this.app.listen(this.port,()=>{let s=`${this.host}:${this.port}`;console.log(`
|
|
13
|
+
+-----------------------------------------------------------------------------+
|
|
14
|
+
| ADK Web Server started |
|
|
15
|
+
| |
|
|
16
|
+
| For local testing, access at http://${s}.${"".padStart(39-s.length)}|
|
|
17
|
+
+-----------------------------------------------------------------------------+`),t()})})}stop(){return this.server?new Promise((t,s)=>{this.server.close(n=>{if(n){s(n);return}console.log(`
|
|
18
|
+
+-----------------------------------------------------------------------------+
|
|
19
|
+
| ADK Web Server stopped |
|
|
20
|
+
+-----------------------------------------------------------------------------+`),t()})}):Promise.resolve()}async getRunner(t,s){return s in this.runnerCache||(this.runnerCache[s]=new S.Runner({appName:s,agent:t,memoryService:this.memoryService,sessionService:this.sessionService,artifactService:this.artifactService})),this.runnerCache[s]}};var F=require("@paean-ai/adk"),J=g(require("path")),ke=g(require("readline"));var le=process.cwd();async function De(e){let t=ke.createInterface({input:process.stdin,output:process.stdout});return new Promise(s=>{t.question(e,n=>{t.close(),s(n)})})}async function rt(e){let t=await K(J.join(le,e.filePath));if(!t)return;t.state._time=new Date().toISOString();let s=await e.sessionService.createSession({appName:e.appName,userId:e.userId,state:t.state}),n=new F.Runner(e);for(let r of t.queries){console.log(`[user]: ${r}`);let o={userId:s.userId,sessionId:s.id,newMessage:{role:"user",parts:[{text:r}]}};for await(let a of n.runAsync(o))if(a.content&&a.content.parts){let i=a.content.parts.map(c=>c.text||"").join("");i&&console.log(`[${a.author}]: ${i}`)}}return s}async function Te(e){let t=new F.Runner({appName:e.rootAgent.name,agent:e.rootAgent,artifactService:e.artifactService,sessionService:e.sessionService,memoryService:e.memoryService});for(;;){let s=await De("[user]: ");if(!(!s||!s.trim())){if(s==="exit")break;for await(let n of t.runAsync({userId:e.session.userId,sessionId:e.session.id,newMessage:{role:"user",parts:[{text:s}]}}))if(n.content&&n.content.parts){let r=n.content.parts.map(o=>o.text||"").join("");r&&console.log(`[${n.author}]: ${r}`)}}}}async function Le(e){var t;try{var s=[];try{let i="test_user";let c=e.artifactService||new F.InMemoryArtifactService;let l=e.sessionService||new F.InMemorySessionService;let u=e.memoryService||new F.InMemoryMemoryService;let w=k(s,new $(J.join(le,e.agentPath)),!0);let d=await w.load();let f=await l.createSession({appName:d.name,userId:i});if(e.inputFile)f=await rt({appName:d.name,userId:i,agent:d,artifactService:c,sessionService:l,memoryService:u,filePath:e.inputFile})||f;else if(e.savedSessionFile){let y=await K(e.savedSessionFile);if(y)for(let v of y.events){await l.appendEvent({session:f,event:v});let R=v.content;if(R&&((t=R.parts)!=null&&t.length)){let _=R.parts.map(E=>E.text||"").join("");_&&console.log(`[${v.author}]: ${_}`)}}await Te({rootAgent:d,artifactService:c,sessionService:l,memoryService:u,session:f})}else console.log(`Running agent ${d.name}, type exit to exit.`),await Te({rootAgent:d,artifactService:c,sessionService:l,memoryService:u,session:f});if(e.saveSession){let y=e.sessionId||await De("Session ID to save: "),v=J.join(e.agentPath,`${y}.session.json`),R=await l.getSession({appName:f.appName,userId:f.userId,sessionId:f.id});await N(J.join(le,v),R),console.log("Session saved to",v)}}catch(n){var r=n,o=!0}finally{var a=D(s,r,o);a&&await a}}catch(i){console.log(i)}}var ee=require("child_process"),x=g(require("fs/promises")),A=g(require("path")),ue=require("util");var at=(0,ue.promisify)(ee.exec),ot=(0,ue.promisify)(ee.spawn),it=["@paean-ai/adk"];function ct(e,t){let s=new Set;for(let r of e)if(r.startsWith("--")){let o=r.split("=")[0];s.add(o)}let n=t.filter(r=>s.has(r)).sort();if(n.length)throw new Error(`The argument(s) ${n.join(", ")} conflict with ADK's automatic configuration. ADK will set these arguments automatically, so please remove them from your command.`)}async function lt(e,t){let s=await e.listAgents();for(let n of s){let r=await e.getAgentFile(n),o=A.parse(r.getFilePath()).base;await x.cp(r.getFilePath(),A.join(t,o))}}function ut(e){var i;let t=e.region?["--region",e.region]:[],s=["--source","--project","--port","--verbosity"];e.region&&s.push("--region"),e.extraGcloudArgs&&ct(e.extraGcloudArgs,s);let n=["run","deploy",e.serviceName,"--source",e.tempFolder,"--project",e.project,...t,"--port",e.port.toString(),"--verbosity",e.logLevel.toLowerCase()],r=[],o=[];if((i=e.extraGcloudArgs)!=null&&i.length)for(let c of e.extraGcloudArgs)c==="--labels"?r.push(c.slice(9)):o.push(c);let a=["created-by=adk",...r];return n.push("--labels",a.join(",")),n.push(...o),n}async function pt(e,t){let s=await Re(e,"package.json",3),n=await K(s);if(!n||!n.dependencies)throw new Error(`No dependencies found in package.json: ${s}`);for(let o of it)if(!(o in n.dependencies))throw new Error(`Package "${o}" is required but not found in package.json: ${s}`);let r=A.join(t,"package.json");await Promise.all([x.mkdir(A.join(t,"node_modules")),N(A.join(t,"package-lock.json"),""),N(r,{dependencies:n.dependencies})]),console.info("Creating package.json complete",r)}function dt(e){let t=e.withUi?"web":"api_server",s=[`--port=${e.port}`,"--host=0.0.0.0"];return e.logLevel&&s.push(`--log_level=${e.logLevel}`),e.allowOrigins&&s.push(`--allow_origins=${e.allowOrigins}`),e.artifactServiceUri&&s.push(`--artifact_service_uri=${e.artifactServiceUri}`),`
|
|
21
|
+
FROM node:lts-alpine
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
|
|
24
|
+
# Create a non-root user
|
|
25
|
+
RUN adduser --disabled-password --gecos "" myuser
|
|
26
|
+
|
|
27
|
+
# Switch to the non-root user
|
|
28
|
+
USER myuser
|
|
29
|
+
|
|
30
|
+
# Set up environment variables - Start
|
|
31
|
+
ENV PATH="/home/myuser/.local/bin:$PATH"
|
|
32
|
+
ENV GOOGLE_GENAI_USE_VERTEXAI=1
|
|
33
|
+
ENV GOOGLE_CLOUD_PROJECT=${e.project}
|
|
34
|
+
ENV GOOGLE_CLOUD_LOCATION=${e.region}
|
|
35
|
+
# Set up environment variables - End
|
|
36
|
+
|
|
37
|
+
# Copy application files
|
|
38
|
+
COPY --chown=myuser:myuser "agents/${e.appName}/" "/app/agents/${e.appName}/"
|
|
39
|
+
COPY --chown=myuser:myuser "package.json" "/app/package.json"
|
|
40
|
+
COPY --chown=myuser:myuser "package-lock.json" "/app/package-lock.json"
|
|
41
|
+
COPY --chown=myuser:myuser "node_modules" "/app/node_modules"
|
|
42
|
+
# Copy application files
|
|
43
|
+
|
|
44
|
+
# Install Agent Deps - Start
|
|
45
|
+
RUN npm install @paean-ai/adk-devtools@latest
|
|
46
|
+
RUN npm install --production
|
|
47
|
+
# Install Agent Deps - End
|
|
48
|
+
|
|
49
|
+
EXPOSE ${e.port}
|
|
50
|
+
|
|
51
|
+
CMD npx adk ${t} /app/agents/${e.appName} ${s.join(" ")}`}async function $e(e){let{stdout:t}=await at("gcloud config get-value "+e);return t.trim()}async function gt(e,t){let s=A.join(e,"Dockerfile");await N(s,dt(t)),console.info("Creating Dockerfile complete:",s)}async function Ge(e){let t=e.project||await $e("project");if(!t||t==="(unset)")throw new Error('Project is not specified and default value for "project" is not set in gcloud config. Please specify region with --project option or set default value running "gcloud config set project YOUR_PROJECT".');e.project||(e.project=t,console.info("--project option is not provided, using default project from gcloud config:",t));let s=e.region||await $e("run/region");if(!s)throw new Error('Region is not specified and default value for "run/region" is not set in gcloud config. Please specify region with --region option or set default value running "gcloud config set run/region YOUR_REGION".');e.region||(e.region=s,console.info("--region option is not provided, using default region from gcloud config:",s));let n=ut(e),r=new G(e.agentPath,{bundle:"any"}),o=await X(e.agentPath),a=o?A.dirname(e.agentPath):e.agentPath,i=e.appName||o?A.parse(e.agentPath).name:A.basename(e.agentPath);console.info("Starting deployment to Cloud Run..."),await q(e.tempFolder)&&(console.info("Cleaning up existing temporary files..."),await x.rm(e.tempFolder,{recursive:!0,force:!0}));try{console.info("Copying agent source files..."),await lt(r,A.join(e.tempFolder,"agents",i)),console.info("Creating package.json..."),await pt(a,e.tempFolder),console.info("Creating Dockerfile..."),await gt(e.tempFolder,{appName:i,project:e.project,region:e.region,port:e.port,withUi:e.withUi,logLevel:e.logLevel,allowOrigins:e.allowOrigins}),console.info("Deploying to Cloud Run..."),await ot("gcloud",n,{stdio:"inherit"})}catch(c){console.error("\x1B[31mFailed to deploy to Cloud Run:",c.message,"\x1B[0m")}finally{console.info("Cleaning up temporary files..."),await x.rm(e.tempFolder,{recursive:!0,force:!0}),await r.disposeAll(),console.info("Temporary files cleaned up.")}}var T=g(require("path")),H=require("child_process"),Be=require("util");var h=require("@clack/prompts");var Ue=(0,Be.promisify)(H.exec),Me=process.cwd(),mt=`{
|
|
52
|
+
"compilerOptions": {
|
|
53
|
+
"target": "esnext",
|
|
54
|
+
"module": "nodenext",
|
|
55
|
+
"rootDir": "./",
|
|
56
|
+
"outDir": "dist",
|
|
57
|
+
"allowUnreachableCode": false,
|
|
58
|
+
"allowUnusedLabels": false,
|
|
59
|
+
"declaration": true,
|
|
60
|
+
"declarationMap": true,
|
|
61
|
+
"esModuleInterop": true,
|
|
62
|
+
"exactOptionalPropertyTypes": true,
|
|
63
|
+
"noEmitOnError": true,
|
|
64
|
+
"noFallthroughCasesInSwitch": true,
|
|
65
|
+
"noImplicitReturns": true,
|
|
66
|
+
"noUncheckedIndexedAccess": true,
|
|
67
|
+
"pretty": true,
|
|
68
|
+
"skipLibCheck": true,
|
|
69
|
+
"sourceMap": true,
|
|
70
|
+
"strict": true
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`.trim(),ft=(e,t)=>`
|
|
74
|
+
{
|
|
75
|
+
"name": "${e}",
|
|
76
|
+
"version": "1.0.0",
|
|
77
|
+
"description": "",
|
|
78
|
+
"main": "agent.${t}",
|
|
79
|
+
"scripts": {
|
|
80
|
+
"web": "npx @paean-ai/adk-devtools web",
|
|
81
|
+
"cli": "npx @paean-ai/adk-devtools run agent.${t}"
|
|
82
|
+
},
|
|
83
|
+
"keywords": [],
|
|
84
|
+
"author": "",
|
|
85
|
+
"license": "ISC"
|
|
86
|
+
}
|
|
87
|
+
`.trim(),ht=e=>`
|
|
88
|
+
import {FunctionTool, LlmAgent} from '@paean-ai/adk';
|
|
89
|
+
import {z} from 'zod';
|
|
90
|
+
import dotenv from 'dotenv';
|
|
91
|
+
|
|
92
|
+
dotenv.config();
|
|
93
|
+
|
|
94
|
+
/* Mock tool implementation */
|
|
95
|
+
const getCurrentTime = new FunctionTool({
|
|
96
|
+
name: 'get_current_time',
|
|
97
|
+
description: 'Returns the current time in a specified city.',
|
|
98
|
+
parameters: z.object({
|
|
99
|
+
city: z.string().describe("The name of the city for which to retrieve the current time."),
|
|
100
|
+
}),
|
|
101
|
+
execute: ({city}) => {
|
|
102
|
+
return {status: 'success', report: \`The current time in \${ city } is 10: 30 AM\`};
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
export const rootAgent = new LlmAgent({
|
|
107
|
+
name: 'hello_time_agent',
|
|
108
|
+
model: '${e}',
|
|
109
|
+
description: 'Tells the current time in a specified city.',
|
|
110
|
+
instruction: \`You are a helpful assistant that tells the current time in a city.
|
|
111
|
+
Use the 'getCurrentTime' tool for this purpose.\`,
|
|
112
|
+
tools: [getCurrentTime],
|
|
113
|
+
});
|
|
114
|
+
`.trim();async function vt(){if(process.env.GOOGLE_CLOUD_PROJECT)return process.env.GOOGLE_CLOUD_PROJECT;try{return(0,H.execSync)("gcloud config get-value project",{encoding:"utf-8",stdio:"pipe"}).trim()}catch{return""}}async function wt(){if(process.env.GOOGLE_CLOUD_LOCATION)return process.env.GOOGLE_CLOUD_LOCATION;try{return(0,H.execSync)("gcloud config get-value compute/region",{encoding:"utf-8",stdio:"pipe"}).trim()}catch{return""}}async function yt(e,t){if(!await q(e))return await oe(e);let s=t?!0:await(0,h.select)({message:`Folder ${e} already exists. Would you like to overwrite existing folder?`,options:[{label:"Yes",value:!0},{label:"No",value:!1}]});(0,h.isCancel)(s)&&process.exit(0),s||(console.error(`Agent directory ${e} already exists.`),process.exit(0)),await Ae(e),await oe(e)}function St(e){let t=[];return e.apiKey&&(t.push(`GOOGLE_API_KEY=${e.apiKey}`),t.push("GOOGLE_GENAI_USE_VERTEXAI=0")),e.project&&t.push(`GOOGLE_CLOUD_PROJECT=${e.project}`),e.region&&t.push(`GOOGLE_CLOUD_LOCATION=${e.region}`),e.region&&e.project&&t.push("GOOGLE_GENAI_USE_VERTEXAI=1"),t.join(`
|
|
115
|
+
`)}async function It(e){let t=T.join(Me,e.agentName);await N(T.join(t,`agent.${e.language}`),ht(e.model||"gemini-2.5-flash")),await N(T.join(t,".env"),St(e)),await N(T.join(t,"package.json"),ft(e.agentName,e.language)),e.language==="ts"&&await N(T.join(t,"tsconfig.json"),mt)}async function qe(e){let t=T.join(Me,e.agentName);if(await yt(t,e.forceYes),!e.model){let n=e.forceYes?"gemini-2.5-flash":await(0,h.select)({message:"Choose a model for the root agent",options:[{label:"gemini-2.5-flash",value:"gemini-2.5-flash"},{label:"gemini-2.5-pro",value:"gemini-2.5-pro"},{label:"gemini-3-flash-preview",value:"gemini-3-flash-preview"},{label:"gemini-3-pro-preview",value:"gemini-3-pro-preview"}]});(0,h.isCancel)(n)&&process.exit(0),e.model=n}if(e.language!=="js"&&e.language!=="ts"){let n=e.forceYes?"ts":await(0,h.select)({message:"Choose a language for the agent",options:[{label:"TypeScript",value:"ts"},{label:"JavaScript",value:"js"}]});(0,h.isCancel)(n)&&process.exit(0),e.language=n}if(!e.apiKey&&!e.project){let n=e.forceYes?"googleai":await(0,h.select)({message:"Choose a backend",options:[{label:"Google AI",value:"googleai"},{label:"Vertex AI",value:"vertex"}]});if((0,h.isCancel)(n)&&process.exit(0),n==="vertex"){let r=await vt(),o=await wt(),a=e.forceYes?r:(await(0,h.text)({message:"Enter the Google Cloud Project ID",initialValue:r})).toString();(0,h.isCancel)(a)&&process.exit(0),e.project=a;let i=e.forceYes?o:await(0,h.text)({message:"Enter the Google Cloud Region",initialValue:o});(0,h.isCancel)(i)&&process.exit(0),e.region=i}else{let r=e.forceYes?"":await(0,h.text)({message:"Enter the Google API Key"});(0,h.isCancel)(r)&&process.exit(0),e.apiKey=r}}await It(e),e.language==="ts"&&await Ue("npm install typescript --save-dev",{cwd:t}),await Ue("npm install @paean-ai/adk @paean-ai/adk-devtools zod@3.25.76 dotenv",{cwd:t});let s=await be(t);console.log(`
|
|
116
|
+
Created the following files in ${t}:`),s.forEach(n=>{console.log(` - ${n}`)}),console.log(`Run 'cd ${e.agentName} && npm run web' to start the agent in a web interface`)}Ye.default.config();var At={debug:b.LogLevel.DEBUG,info:b.LogLevel.INFO,warn:b.LogLevel.WARN,error:b.LogLevel.ERROR};function pe(e){return e.verbose?b.LogLevel.DEBUG:typeof e.log_level=="string"?At[e.log_level.toLowerCase()]||b.LogLevel.INFO:b.LogLevel.INFO}function de(e){return te.isAbsolute(e)?e:te.join(process.cwd(),e)}function ge(e){if(e.startsWith("gs://")){let t=e.split("://")[1];return new b.GcsArtifactService(t)}throw new Error(`Unsupported artifact service URI: ${e}`)}var me=new O.Argument("[agents_dir]","Agent file or directory of agents to serve. For directory the internal structure should be agents_dir/{agentName}.js or agents_dir/{agentName}/agent.js. Agent file should has export of the rootAgent as instance of BaseAgent (e.g LlmAgent)").default(process.cwd()),Ve=new O.Option("-h, --host <string>","Optional. The binding host of the server").default(Ke.hostname()),fe=new O.Option("-p, --port <number>","Optional. The port of the server").default("8000"),he=new O.Option("--allow_origins <string>","Optional. The allow origins of the server").default(""),se=new O.Option("-v, --verbose [boolean]","Optional. The verbose level of the server").default(!1),ne=new O.Option("--log_level <string>","Optional. The log level of the server").default("info"),re=new O.Option("--artifact_service_uri <string>, Optional. The URI of the artifact service, supported URIs: gs://<bucket name> for GCS artifact service."),M=new O.Command("ADK CLI");M.command("web").description("Start ADK web server").addArgument(me).addOption(Ve).addOption(fe).addOption(he).addOption(se).addOption(ne).addOption(re).action((e,t)=>{(0,b.setLogLevel)(pe(t)),new V({agentsDir:de(e),host:t.host,port:parseInt(t.port,10),serveDebugUI:!0,allowOrigins:t.allow_origins,artifactService:t.artifact_service_uri?ge(t.artifact_service_uri):void 0}).start()});M.command("api_server").description("Start ADK API server").addArgument(me).addOption(Ve).addOption(fe).addOption(he).addOption(se).addOption(ne).addOption(re).action((e,t)=>{(0,b.setLogLevel)(pe(t)),new V({agentsDir:de(e),host:t.host,port:parseInt(t.port,10),serveDebugUI:!1,allowOrigins:t.allow_origins,artifactService:t.artifact_service_uri?ge(t.artifact_service_uri):void 0}).start()});M.command("create").description("Creates a new agent").argument("[agent]","Name to give the new agent","adk_agent").option("-y, --yes","Optional. Skip confirmation prompts.").option("--model <string>","Optional. THe model used for the root_agent").option("--api_key <string>","Optional. The API Key needed to access the model, e.g. Google AI API Key.").option("--project <string>","Optional. The Google Cloud Project for using VertexAI as backend.").option("--region <string>","Optional. The Google Cloud Region for using VertexAI as backend.").option("--language <string>","Optional. Either ts or js as the language to output.").action((e,t)=>{qe({agentName:e,forceYes:!!t.yes,model:t.model,apiKey:t.api_key,project:t.project,region:t.region,language:t.language})});M.command("run").description("Runs agent").argument("<agent>","Agent file path (.js or .ts)").option("--save_session [boolean]","Optional. Whether to save the session to a json file on exit.",!1).option("--session_id <string>","Optional. The session ID to save the session to on exit when --save_session is set to true. User will be prompted to enter a session ID if not set.").option("--replay <string>","The json file that contains the initial state of the session and user queries. A new session will be created using this state. And user queries are run against the newly created session. Users cannot continue to interact with the agent.").option("--resume <string>","The json file that contains a previously saved session (by --save_session option). The previous session will be re-displayed. And user can continue to interact with the agent.").addOption(se).addOption(ne).addOption(re).action((e,t)=>{(0,b.setLogLevel)(pe(t)),Le({agentPath:e,inputFile:t.replay,savedSessionFile:t.resume,saveSession:!!t.save_session,sessionId:t.session_id,artifactService:t.artifact_service_uri?ge(t.artifact_service_uri):void 0})});var bt=M.command("deploy").description("Deploy agent").allowUnknownOption().allowExcessArguments();bt.command("cloud_run").addArgument(me).addOption(fe).option("--project [string]","Optional. Google Cloud project to deploy the agent. If not set, default project from gcloud config is used").option("--region [string]","Optional. Google Cloud region to deploy the agent. If not set, default run/region from gcloud config is used").option("--service_name [string]",'Optional. The service name to use in Cloud Run. Default: "adk-default-service-name"',"adk-default-service-name").option("--temp_folder [string]","Optional. Temp folder for the generated Cloud Run source files (default: a timestamped folder in the system temp directory).",z("cloud_run_deploy_src")).option("--adk_version [string]","Optional. ADK version to use in the Cloud Run service. If not set, default to the latest version available on npm","latest").option("--with_ui [boolean]","Optional. Deploy ADK Web UI if set. (default: deploy ADK API server only)",!1).addOption(he).addOption(se).addOption(ne).addOption(re).action((e,t)=>{let s=[];for(let n of process.argv.slice(5)){let r=n.replace(/^-+/,"");r.includes("=")&&(r=r.split("=")[0]),!(r in t)&&s.push(n)}Ge({agentPath:de(e),project:t.project,region:t.region,serviceName:t.service_name,tempFolder:t.temp_folder,port:parseInt(t.port,10),withUi:!!t.with_ui,logLevel:t.log_level,adkVersion:t.adk_version,allowOrigins:t.allow_origins,extraGcloudArgs:s,artifactServiceUri:t.artifact_service_uri})});M.parse(process.argv);
|
|
117
|
+
/**
|
|
118
|
+
* @license
|
|
119
|
+
* Copyright 2025 Google LLC
|
|
120
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
121
|
+
*/
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
interface AgentCreationOptions {
|
|
7
|
+
agentName: string;
|
|
8
|
+
forceYes: boolean;
|
|
9
|
+
model: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
project: string;
|
|
12
|
+
region: string;
|
|
13
|
+
language: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function createAgent(options: AgentCreationOptions): Promise<void>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export interface CreateDockerFileContentOptions {
|
|
7
|
+
appName?: string;
|
|
8
|
+
project: string;
|
|
9
|
+
region?: string;
|
|
10
|
+
port: number;
|
|
11
|
+
withUi: boolean;
|
|
12
|
+
logLevel: string;
|
|
13
|
+
allowOrigins?: string;
|
|
14
|
+
artifactServiceUri?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface DeployToCloudRunOptions extends CreateDockerFileContentOptions {
|
|
17
|
+
agentPath: string;
|
|
18
|
+
serviceName: string;
|
|
19
|
+
tempFolder: string;
|
|
20
|
+
adkVersion: string;
|
|
21
|
+
extraGcloudArgs?: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function deployToCloudRun(options: DeployToCloudRunOptions): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseArtifactService, BaseMemoryService, BaseSessionService } from '@paean-ai/adk';
|
|
7
|
+
/**
|
|
8
|
+
* Runs an interactive CLI for a certain agent.
|
|
9
|
+
*/
|
|
10
|
+
export interface RunAgentOptions {
|
|
11
|
+
agentPath: string;
|
|
12
|
+
inputFile?: string;
|
|
13
|
+
savedSessionFile?: string;
|
|
14
|
+
saveSession?: boolean;
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
artifactService?: BaseArtifactService;
|
|
17
|
+
sessionService?: BaseSessionService;
|
|
18
|
+
memoryService?: BaseMemoryService;
|
|
19
|
+
}
|
|
20
|
+
export declare function runAgent(options: RunAgentOptions): Promise<void>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseArtifactService, BaseMemoryService, BaseSessionService } from '@paean-ai/adk';
|
|
7
|
+
import express from 'express';
|
|
8
|
+
import { AgentLoader } from '../utils/agent_loader.js';
|
|
9
|
+
interface ServerOptions {
|
|
10
|
+
agentsDir?: string;
|
|
11
|
+
host?: string;
|
|
12
|
+
port?: number;
|
|
13
|
+
sessionService?: BaseSessionService;
|
|
14
|
+
memoryService?: BaseMemoryService;
|
|
15
|
+
artifactService?: BaseArtifactService;
|
|
16
|
+
agentLoader?: AgentLoader;
|
|
17
|
+
serveDebugUI?: boolean;
|
|
18
|
+
allowOrigins?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class AdkWebServer {
|
|
21
|
+
private readonly host;
|
|
22
|
+
private readonly port;
|
|
23
|
+
readonly app: express.Application;
|
|
24
|
+
private readonly agentLoader;
|
|
25
|
+
private readonly runnerCache;
|
|
26
|
+
private readonly sessionService;
|
|
27
|
+
private readonly memoryService;
|
|
28
|
+
private readonly artifactService;
|
|
29
|
+
private readonly serveDebugUI;
|
|
30
|
+
private readonly allowOrigins?;
|
|
31
|
+
private server?;
|
|
32
|
+
constructor(options: ServerOptions);
|
|
33
|
+
private init;
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
private getRunner;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseAgent } from '@paean-ai/adk';
|
|
7
|
+
import { Digraph, RootGraph, Subgraph } from 'ts-graphviz';
|
|
8
|
+
export declare function buildGraph(graph: RootGraph | Subgraph, rootAgent: BaseAgent, highlightsPairs: Array<[string, string]>, parentAgent?: BaseAgent): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Returns a graphviz graph of the agent tree.
|
|
11
|
+
*
|
|
12
|
+
* @param rootAgent The root agent of the agent tree.
|
|
13
|
+
* @param highlightsPairs An array of pairs of agent names to highlight.
|
|
14
|
+
* @return A graphviz graph of the agent tree.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAgentGraph(rootAgent: BaseAgent, highlightsPairs: Array<[string, string]>): Promise<Digraph>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns a graphviz graph in DOT format of the agent tree as a string.
|
|
19
|
+
*
|
|
20
|
+
* @param rootAgent The root agent of the agent tree.
|
|
21
|
+
* @param highlightsPairs An array of pairs of agent names to highlight.
|
|
22
|
+
* @return A graphviz graph in DOT format of the agent tree as a string.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getAgentGraphAsDot(rootAgent: BaseAgent, highlightsPairs: Array<[string, string]>): Promise<string>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseAgent } from '@paean-ai/adk';
|
|
7
|
+
export declare enum AgentFileBundleMode {
|
|
8
|
+
ANY = "any",
|
|
9
|
+
TS = "ts"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Options for loading an agent file.
|
|
13
|
+
*/
|
|
14
|
+
export interface AgentFileOptions {
|
|
15
|
+
bundle?: AgentFileBundleMode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Wrapper class which loads file that contains base agent (support both .js and
|
|
19
|
+
* .ts) and has a dispose function to cleanup the comliped artifact after file
|
|
20
|
+
* usage.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AgentFile {
|
|
23
|
+
private readonly filePath;
|
|
24
|
+
private readonly options;
|
|
25
|
+
private cleanupFilePath;
|
|
26
|
+
private disposed;
|
|
27
|
+
private agent?;
|
|
28
|
+
constructor(filePath: string, options?: AgentFileOptions);
|
|
29
|
+
load(): Promise<BaseAgent>;
|
|
30
|
+
getFilePath(): string;
|
|
31
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
32
|
+
dispose(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Loads all agents from a given directory.
|
|
36
|
+
*
|
|
37
|
+
* The directory structure should be:
|
|
38
|
+
* - agents_dir/{agentName}.[js | ts | mjs | cjs]
|
|
39
|
+
* - agents_dir/{agentName}/agent.[js | ts | mjs | cjs]
|
|
40
|
+
*
|
|
41
|
+
* Agent file should has export of the rootAgent as instance of BaseAgent (e.g
|
|
42
|
+
* LlmAgent).
|
|
43
|
+
*/
|
|
44
|
+
export declare class AgentLoader {
|
|
45
|
+
private readonly agentsDirPath;
|
|
46
|
+
private readonly options;
|
|
47
|
+
private agentsAlreadyPreloaded;
|
|
48
|
+
private readonly preloadedAgents;
|
|
49
|
+
constructor(agentsDirPath?: string, options?: AgentFileOptions);
|
|
50
|
+
listAgents(): Promise<string[]>;
|
|
51
|
+
getAgentFile(agentName: string): Promise<AgentFile>;
|
|
52
|
+
disposeAll(): Promise<void>;
|
|
53
|
+
preloadAgents(): Promise<void>;
|
|
54
|
+
private loadAgentFromFile;
|
|
55
|
+
private loadAgentFromDirectory;
|
|
56
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** Check if the given folder exists. */
|
|
7
|
+
export declare function isFolderExists(folderPath: string): Promise<boolean>;
|
|
8
|
+
/** Create a new folder at the specific path */
|
|
9
|
+
export declare function createFolder(folderPath: string): Promise<void>;
|
|
10
|
+
/** Remove a folder at the specified location */
|
|
11
|
+
export declare function removeFolder(folderPath: string): Promise<void>;
|
|
12
|
+
/** List files within a directory */
|
|
13
|
+
export declare function listFiles(folderPath: string): Promise<string[]>;
|
|
14
|
+
/** Check if the given path is a file. */
|
|
15
|
+
export declare function isFile(filePath: string): Promise<boolean>;
|
|
16
|
+
/** Load data from a file in JSON format. */
|
|
17
|
+
export declare function loadFileData<T>(filePath: string): Promise<T | undefined>;
|
|
18
|
+
/** Save data to a file in JSON format. */
|
|
19
|
+
export declare function saveToFile<T>(filePath: string, data: T): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Return a temporary directory path.
|
|
22
|
+
* @param prefix Optional prefix for the temp directory
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTempDir(prefix?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Try to find a file recursively in the given folder.
|
|
28
|
+
* @param sourceFolder The folder to search in.
|
|
29
|
+
* @param fileName The name of the file to find.
|
|
30
|
+
* @param maxIterations The maximum number of iterations to perform.
|
|
31
|
+
* @returns The absolute path of the found file.
|
|
32
|
+
* @throws Error if the file is not found after the maximum number of
|
|
33
|
+
* iterations.
|
|
34
|
+
*/
|
|
35
|
+
export declare function tryToFindFileRecursively(sourceFolder: string, fileName: string, maxIterations: number): Promise<string>;
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@paean-ai/adk-devtools",
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"description": "Google ADK JS Development Tools",
|
|
5
|
+
"author": "Google",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/paean-ai/adk-js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"package.json",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"type": "commonjs",
|
|
18
|
+
"main": "./dist/cli/cli.cjs",
|
|
19
|
+
"bin": {
|
|
20
|
+
"adk": "./dist/cli/cli.cjs"
|
|
21
|
+
},
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/cli/cli.d.ts",
|
|
25
|
+
"require": "./dist/cli/cli.cjs"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"clean:all": "npm run clean && rm -rf node_modules",
|
|
31
|
+
"build": "tsc --emitDeclarationOnly && node ./build.js",
|
|
32
|
+
"test": "vitest",
|
|
33
|
+
"lint": "eslint 'src/**/*.ts'",
|
|
34
|
+
"format": "prettier --write 'src/**/*.ts'",
|
|
35
|
+
"prepublishOnly": "npm run build"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/cors": "^2.8.19",
|
|
39
|
+
"@types/express": "^4.17.21",
|
|
40
|
+
"@types/node": "^20.12.7",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
|
42
|
+
"@typescript-eslint/parser": "^7.7.1",
|
|
43
|
+
"eslint": "^8.57.0",
|
|
44
|
+
"eslint-config-prettier": "^9.1.0",
|
|
45
|
+
"prettier": "^3.2.5",
|
|
46
|
+
"tslib": "^2.6.2",
|
|
47
|
+
"typescript": "^5.9.2",
|
|
48
|
+
"vitest": "^3.2.4"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@clack/prompts": "^0.11.0",
|
|
52
|
+
"@paean-ai/adk": "^0.2.2",
|
|
53
|
+
"commander": "^14.0.0",
|
|
54
|
+
"cors": "^2.8.5",
|
|
55
|
+
"dotenv": "^17.2.3",
|
|
56
|
+
"esbuild": "^0.25.9",
|
|
57
|
+
"express": "^4.21.2",
|
|
58
|
+
"ts-graphviz": "^1.0.1",
|
|
59
|
+
"zod": "^3.22.4"
|
|
60
|
+
}
|
|
61
|
+
}
|