gauss-ts 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -145,6 +145,46 @@ const a = Agent.fromEnv({ instructions: "Be precise." });
145
145
 
146
146
  // Clone with a different model
147
147
  const b = a.withModel("gpt-4.1");
148
+
149
+ // Optional routing policy: alias + provider/model target
150
+ const c = new Agent({
151
+ model: "fast-chat",
152
+ routingPolicy: {
153
+ aliases: {
154
+ "fast-chat": [{ provider: "anthropic", model: "claude-3-5-haiku-latest", priority: 10 }],
155
+ },
156
+ fallbackOrder: ["anthropic", "openai"],
157
+ maxTotalCostUsd: 2.0,
158
+ maxRequestsPerMinute: 60,
159
+ },
160
+ });
161
+
162
+ // Runtime policy-router decision (availability + budget + rate)
163
+ const routed = c.withRoutingContext({
164
+ availableProviders: ["openai"],
165
+ estimatedCostUsd: 1.2,
166
+ currentRequestsPerMinute: 20,
167
+ });
168
+ ```
169
+
170
+ ### Unified Control Plane (M51 foundation)
171
+
172
+ ```ts
173
+ import { ControlPlane, Telemetry, ApprovalManager } from "gauss-ts";
174
+
175
+ const cp = new ControlPlane({
176
+ telemetry: new Telemetry(),
177
+ approvals: new ApprovalManager(),
178
+ model: "gpt-5.2",
179
+ });
180
+
181
+ cp.setCostUsage({ inputTokens: 1200, outputTokens: 600 });
182
+ const { url } = await cp.startServer("127.0.0.1", 0);
183
+ console.log(`Control Plane: ${url}`);
184
+ // SSE stream:
185
+ // single event quick-check -> GET ${url}/api/stream?channel=timeline&once=1
186
+ // multiplex channels -> GET ${url}/api/stream?channels=snapshot,timeline&once=1
187
+ // reconnect/replay cursor -> GET ${url}/api/stream?channel=snapshot&lastEventId=42
148
188
  ```
149
189
 
150
190
  ---
@@ -162,6 +202,8 @@ const b = a.withModel("gpt-4.1");
162
202
  - **Guardrails + Middleware**: `GuardrailChain`, `MiddlewareChain`
163
203
  - **Reliability**: retry, circuit breaker, fallback providers
164
204
  - **Observability & quality**: `Telemetry`, `EvalRunner`
205
+ - **Control plane**: `ControlPlane` (local snapshot API + dashboard)
206
+ - **Routing policy**: `routingPolicy` + `resolveRoutingTarget()`
165
207
  - **Enterprise preset**: `enterprisePreset()`, `enterpriseRun()`
166
208
 
167
209
  ---
@@ -1,6 +1,33 @@
1
- import { H as Handle, T as ToolDef, a as Message, A as AgentOptions, b as ToolExecutor, c as AgentResult, D as Disposable, d as ProviderType, e as ProviderOptions, C as CodeExecutionOptions, f as ProviderCapabilities, S as StreamCallback } from './types-BayYAhZL.cjs';
2
- import { M as MiddlewareChain, G as GuardrailChain } from './guardrail-BGqhOeWA.cjs';
3
- import { M as Memory } from './memory-BGrAWNqI.cjs';
1
+ import { a as ProviderType, H as Handle, T as ToolDef, b as Message, A as AgentOptions, c as ToolExecutor, d as AgentResult, D as Disposable, e as ProviderOptions, C as CodeExecutionOptions, f as ProviderCapabilities, S as StreamCallback } from './types-Dybn1DM6.cjs';
2
+ import { M as MiddlewareChain, G as GuardrailChain } from './guardrail-D7SUI-fg.cjs';
3
+ import { M as Memory } from './memory-bSgbqq8H.cjs';
4
+
5
+ interface RoutingCandidate {
6
+ provider: ProviderType;
7
+ model: string;
8
+ priority?: number;
9
+ maxCostUsd?: number;
10
+ }
11
+ interface RoutingPolicy {
12
+ aliases?: Record<string, RoutingCandidate[]>;
13
+ fallbackOrder?: ProviderType[];
14
+ maxTotalCostUsd?: number;
15
+ maxRequestsPerMinute?: number;
16
+ }
17
+ interface ResolvedRoutingTarget {
18
+ provider: ProviderType;
19
+ model: string;
20
+ selectedBy: "direct" | `alias:${string}` | `fallback:${ProviderType}`;
21
+ }
22
+ interface ResolveRoutingTargetOptions {
23
+ availableProviders?: ProviderType[];
24
+ estimatedCostUsd?: number;
25
+ currentRequestsPerMinute?: number;
26
+ }
27
+ declare function enforceRoutingCostLimit(policy: RoutingPolicy | undefined, costUsd: number): void;
28
+ declare function enforceRoutingRateLimit(policy: RoutingPolicy | undefined, requestsPerMinute: number): void;
29
+ declare function resolveFallbackProvider(policy: RoutingPolicy | undefined, availableProviders: ProviderType[]): ProviderType | null;
30
+ declare function resolveRoutingTarget(policy: RoutingPolicy | undefined, provider: ProviderType, model: string, options?: ResolveRoutingTargetOptions): ResolvedRoutingTarget;
4
31
 
5
32
  /**
6
33
  * A single event emitted during agent streaming.
@@ -340,6 +367,8 @@ interface AgentConfig {
340
367
  provider?: ProviderType;
341
368
  /** Model identifier (e.g. `"gpt-4o"`, `"claude-sonnet-4-20250514"`). Auto-selected if omitted. */
342
369
  model?: string;
370
+ /** Optional alias/fallback routing policy for model selection. */
371
+ routingPolicy?: RoutingPolicy;
343
372
  /** Provider connection options. API key auto-resolved from env if omitted. */
344
373
  providerOptions?: ProviderOptions;
345
374
  /** System instructions prepended to every conversation. */
@@ -410,8 +439,11 @@ interface AgentConfig {
410
439
  declare class Agent implements Disposable {
411
440
  private readonly providerHandle;
412
441
  private readonly _name;
442
+ private readonly _requestedProvider;
443
+ private readonly _requestedModel;
413
444
  private readonly _provider;
414
445
  private readonly _model;
446
+ private readonly _routingPolicy;
415
447
  private readonly _providerOptions;
416
448
  private readonly _instructions;
417
449
  private _tools;
@@ -559,6 +591,13 @@ declare class Agent implements Disposable {
559
591
  * @returns A new {@link Agent} configured with the selected model.
560
592
  */
561
593
  withModel(model: string): Agent;
594
+ /**
595
+ * Clone this agent and resolve a routing decision using runtime context.
596
+ *
597
+ * @param context - Runtime routing context (availability, budget, rate).
598
+ * @returns A new {@link Agent} routed according to current policy + context.
599
+ */
600
+ withRoutingContext(context: ResolveRoutingTargetOptions): Agent;
562
601
  /**
563
602
  * Attach a middleware chain (logging, caching, rate limiting). Chainable.
564
603
  *
@@ -846,4 +885,4 @@ declare class Agent implements Disposable {
846
885
  */
847
886
  declare function gauss(prompt: string, config?: Omit<AgentConfig, "name">): Promise<string>;
848
887
 
849
- export { type AgentConfig as A, McpClient as M, type StreamEvent as S, type TypedToolDef as T, Agent as a, AgentStream as b, type McpClientConfig as c, type McpToolDef as d, type McpToolResult as e, createToolExecutor as f, gauss as g, isTypedTool as i, tool as t };
888
+ export { type AgentConfig as A, McpClient as M, type ResolveRoutingTargetOptions as R, type StreamEvent as S, type TypedToolDef as T, Agent as a, AgentStream as b, type McpClientConfig as c, type McpToolDef as d, type McpToolResult as e, type ResolvedRoutingTarget as f, type RoutingCandidate as g, type RoutingPolicy as h, createToolExecutor as i, enforceRoutingCostLimit as j, enforceRoutingRateLimit as k, gauss as l, isTypedTool as m, resolveRoutingTarget as n, resolveFallbackProvider as r, tool as t };
@@ -1,6 +1,33 @@
1
- import { H as Handle, T as ToolDef, a as Message, A as AgentOptions, b as ToolExecutor, c as AgentResult, D as Disposable, d as ProviderType, e as ProviderOptions, C as CodeExecutionOptions, f as ProviderCapabilities, S as StreamCallback } from './types-BayYAhZL.js';
2
- import { M as MiddlewareChain, G as GuardrailChain } from './guardrail-8Z_HuIIT.js';
3
- import { M as Memory } from './memory-U2EleSW-.js';
1
+ import { a as ProviderType, H as Handle, T as ToolDef, b as Message, A as AgentOptions, c as ToolExecutor, d as AgentResult, D as Disposable, e as ProviderOptions, C as CodeExecutionOptions, f as ProviderCapabilities, S as StreamCallback } from './types-Dybn1DM6.js';
2
+ import { M as MiddlewareChain, G as GuardrailChain } from './guardrail-vCEyPx6e.js';
3
+ import { M as Memory } from './memory-Xr9Rri48.js';
4
+
5
+ interface RoutingCandidate {
6
+ provider: ProviderType;
7
+ model: string;
8
+ priority?: number;
9
+ maxCostUsd?: number;
10
+ }
11
+ interface RoutingPolicy {
12
+ aliases?: Record<string, RoutingCandidate[]>;
13
+ fallbackOrder?: ProviderType[];
14
+ maxTotalCostUsd?: number;
15
+ maxRequestsPerMinute?: number;
16
+ }
17
+ interface ResolvedRoutingTarget {
18
+ provider: ProviderType;
19
+ model: string;
20
+ selectedBy: "direct" | `alias:${string}` | `fallback:${ProviderType}`;
21
+ }
22
+ interface ResolveRoutingTargetOptions {
23
+ availableProviders?: ProviderType[];
24
+ estimatedCostUsd?: number;
25
+ currentRequestsPerMinute?: number;
26
+ }
27
+ declare function enforceRoutingCostLimit(policy: RoutingPolicy | undefined, costUsd: number): void;
28
+ declare function enforceRoutingRateLimit(policy: RoutingPolicy | undefined, requestsPerMinute: number): void;
29
+ declare function resolveFallbackProvider(policy: RoutingPolicy | undefined, availableProviders: ProviderType[]): ProviderType | null;
30
+ declare function resolveRoutingTarget(policy: RoutingPolicy | undefined, provider: ProviderType, model: string, options?: ResolveRoutingTargetOptions): ResolvedRoutingTarget;
4
31
 
5
32
  /**
6
33
  * A single event emitted during agent streaming.
@@ -340,6 +367,8 @@ interface AgentConfig {
340
367
  provider?: ProviderType;
341
368
  /** Model identifier (e.g. `"gpt-4o"`, `"claude-sonnet-4-20250514"`). Auto-selected if omitted. */
342
369
  model?: string;
370
+ /** Optional alias/fallback routing policy for model selection. */
371
+ routingPolicy?: RoutingPolicy;
343
372
  /** Provider connection options. API key auto-resolved from env if omitted. */
344
373
  providerOptions?: ProviderOptions;
345
374
  /** System instructions prepended to every conversation. */
@@ -410,8 +439,11 @@ interface AgentConfig {
410
439
  declare class Agent implements Disposable {
411
440
  private readonly providerHandle;
412
441
  private readonly _name;
442
+ private readonly _requestedProvider;
443
+ private readonly _requestedModel;
413
444
  private readonly _provider;
414
445
  private readonly _model;
446
+ private readonly _routingPolicy;
415
447
  private readonly _providerOptions;
416
448
  private readonly _instructions;
417
449
  private _tools;
@@ -559,6 +591,13 @@ declare class Agent implements Disposable {
559
591
  * @returns A new {@link Agent} configured with the selected model.
560
592
  */
561
593
  withModel(model: string): Agent;
594
+ /**
595
+ * Clone this agent and resolve a routing decision using runtime context.
596
+ *
597
+ * @param context - Runtime routing context (availability, budget, rate).
598
+ * @returns A new {@link Agent} routed according to current policy + context.
599
+ */
600
+ withRoutingContext(context: ResolveRoutingTargetOptions): Agent;
562
601
  /**
563
602
  * Attach a middleware chain (logging, caching, rate limiting). Chainable.
564
603
  *
@@ -846,4 +885,4 @@ declare class Agent implements Disposable {
846
885
  */
847
886
  declare function gauss(prompt: string, config?: Omit<AgentConfig, "name">): Promise<string>;
848
887
 
849
- export { type AgentConfig as A, McpClient as M, type StreamEvent as S, type TypedToolDef as T, Agent as a, AgentStream as b, type McpClientConfig as c, type McpToolDef as d, type McpToolResult as e, createToolExecutor as f, gauss as g, isTypedTool as i, tool as t };
888
+ export { type AgentConfig as A, McpClient as M, type ResolveRoutingTargetOptions as R, type StreamEvent as S, type TypedToolDef as T, Agent as a, AgentStream as b, type McpClientConfig as c, type McpToolDef as d, type McpToolResult as e, type ResolvedRoutingTarget as f, type RoutingCandidate as g, type RoutingPolicy as h, createToolExecutor as i, enforceRoutingCostLimit as j, enforceRoutingRateLimit as k, gauss as l, isTypedTool as m, resolveRoutingTarget as n, resolveFallbackProvider as r, tool as t };
package/dist/agent.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var _=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var L=(n,e)=>{for(var t in e)_(n,t,{get:e[t],enumerable:!0})},U=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of K(e))!G.call(n,r)&&r!==t&&_(n,r,{get:()=>e[r],enumerable:!(o=N(e,r))||o.enumerable});return n};var H=n=>U(_({},"__esModule",{value:!0}),n);var Q={};L(Q,{Agent:()=>u,AgentStream:()=>c,availableRuntimes:()=>D,batch:()=>k,executeCode:()=>C,gauss:()=>I,generateImage:()=>S,version:()=>v.version});module.exports=H(Q);var p=require("gauss-napi");var f=class extends Error{code;constructor(e,t){super(t),this.name="GaussError",this.code=e}},m=class extends f{resourceType;resourceName;constructor(e,t){super("RESOURCE_DISPOSED",`${e} "${t}" has been destroyed. Create a new instance.`),this.name="DisposedError",this.resourceType=e,this.resourceName=t}};var E="gpt-5.2";var Y="claude-sonnet-4-20250514";var F="gemini-2.5-flash";var j="openai/gpt-5.2",$="deepseek-chat";var J="meta-llama/Llama-3.3-70B-Instruct-Turbo",B="accounts/fireworks/models/llama-v3p1-70b-instruct",X="mistral-large-latest",q="sonar-pro",W="grok-3-beta",b={openai:E,anthropic:Y,google:F,openrouter:j,deepseek:$,groq:"llama-3.3-70b-versatile",ollama:"llama3.2",together:J,fireworks:B,mistral:X,perplexity:q,xai:W};var V={openai:"OPENAI_API_KEY",anthropic:"ANTHROPIC_API_KEY",google:"GOOGLE_API_KEY",groq:"GROQ_API_KEY",deepseek:"DEEPSEEK_API_KEY",openrouter:"OPENROUTER_API_KEY",together:"TOGETHER_API_KEY",fireworks:"FIREWORKS_API_KEY",mistral:"MISTRAL_API_KEY",perplexity:"PERPLEXITY_API_KEY",xai:"XAI_API_KEY",ollama:""};function g(n){let e=V[n]??"";return e?(typeof process<"u"?process.env[e]:"")??"":""}function h(){let n=[{env:"OPENAI_API_KEY",provider:"openai"},{env:"ANTHROPIC_API_KEY",provider:"anthropic"},{env:"GOOGLE_API_KEY",provider:"google"},{env:"GROQ_API_KEY",provider:"groq"},{env:"DEEPSEEK_API_KEY",provider:"deepseek"},{env:"OPENROUTER_API_KEY",provider:"openrouter"},{env:"TOGETHER_API_KEY",provider:"together"},{env:"FIREWORKS_API_KEY",provider:"fireworks"},{env:"MISTRAL_API_KEY",provider:"mistral"},{env:"PERPLEXITY_API_KEY",provider:"perplexity"},{env:"XAI_API_KEY",provider:"xai"}];for(let{env:e,provider:t}of n)if(typeof process<"u"&&process.env[e])return{provider:t,model:b[t]}}var P=require("gauss-napi");function z(n){return{...n,citations:n.citations?.map(e=>({type:e.citationType??e.type,citedText:e.citedText,documentTitle:e.documentTitle,start:e.start,end:e.end}))}}var c=class{constructor(e,t,o,r,i,s){this.agentName=e;this.providerHandle=t;this.tools=o;this.messages=r;this.options=i;this.toolExecutor=s}_result;get result(){return this._result}async*[Symbol.asyncIterator](){let e=[],t,o=!1,r=s=>{try{e.push(JSON.parse(s))}catch{e.push({type:"raw",text:s})}t?.()},i=(0,P.agent_stream_with_tool_executor)(this.agentName,this.providerHandle,this.tools,this.messages,this.options,r,this.toolExecutor).then(s=>{this._result=z(s),o=!0,t?.()});for(;!o||e.length>0;)e.length>0?yield e.shift():o||await new Promise(s=>{t=s});await i}};function R(n){return{name:n.name,description:n.description,parameters:n.parameters,execute:n.execute}}function A(n){return typeof n.execute=="function"}function O(n,e){let t=new Map(n.map(o=>[o.name,o]));return async o=>{let r;try{r=JSON.parse(o)}catch{return JSON.stringify({error:"Invalid tool call JSON"})}let i=r.tool??r.name??"",s=t.get(i);if(!s)return e?e(o):JSON.stringify({error:`Unknown tool: ${i}`});try{let a=r.args??r.arguments??{},d=await s.execute(a);return typeof d=="string"?d:JSON.stringify(d)}catch(a){let d=a instanceof Error?a.message:String(a);return JSON.stringify({error:`Tool "${i}" failed: ${d}`})}}}function y(n){return{...n,citations:n.citations?.map(e=>({type:e.citationType??e.type??"unknown",citedText:e.citedText,documentTitle:e.documentTitle,start:e.start,end:e.end}))}}var u=class n{providerHandle;_name;_provider;_model;_providerOptions;_instructions;_tools=[];_options={};disposed=!1;_middleware=null;_guardrails=null;_memory=null;_sessionId="";_mcpClients=[];_mcpToolsLoaded=!1;constructor(e={}){let t=h();this._provider=e.provider??t?.provider??"openai",this._model=e.model??t?.model??E,this._name=e.name??"agent",this._instructions=e.instructions??"";let o=e.providerOptions?.apiKey??g(this._provider);this._providerOptions={apiKey:o,...e.providerOptions},this.providerHandle=(0,p.create_provider)(this._provider,this._model,this._providerOptions),e.tools&&(this._tools=[...e.tools]),e.middleware&&(this._middleware=e.middleware),e.guardrails&&(this._guardrails=e.guardrails),e.memory&&(this._memory=e.memory),e.sessionId&&(this._sessionId=e.sessionId),e.mcpClients&&(this._mcpClients=[...e.mcpClients]);let r=e.codeExecution,i=r===!0?{python:!0,javascript:!0,bash:!0}:r||void 0;this._options={instructions:this._instructions||void 0,temperature:e.temperature,maxSteps:e.maxSteps,topP:e.topP,maxTokens:e.maxTokens,seed:e.seed,stopOnTool:e.stopOnTool,outputSchema:e.outputSchema,thinkingBudget:e.thinkingBudget,reasoningEffort:e.reasoningEffort,cacheControl:e.cacheControl,codeExecution:i,grounding:e.grounding,nativeCodeExecution:e.nativeCodeExecution,responseModalities:e.responseModalities}}static fromEnv(e={}){return new n(e)}get name(){return this._name}get provider(){return this._provider}get model(){return this._model}get instructions(){return this._instructions}get handle(){return this.providerHandle}get capabilities(){return(0,p.get_provider_capabilities)(this.providerHandle)}addTool(e){return this._tools.push(e),this}addTools(e){return this._tools.push(...e),this}withTool(e,t,o,r){return this._tools.push(R({name:e,description:t,parameters:r??{},execute:o})),this}setOptions(e){return this._options={...this._options,...e},this}withModel(e){return this.assertNotDisposed(),new n({...this.toConfig(),model:e})}withMiddleware(e){return this._middleware=e,this}withGuardrails(e){return this._guardrails=e,this}withMemory(e,t){return this._memory=e,t&&(this._sessionId=t),this}useMcpServer(e){return this._mcpClients.push(e),this._mcpToolsLoaded=!1,this}async run(e){this.assertNotDisposed(),await this.ensureMcpTools();let t=typeof e=="string"?[{role:"user",content:e}]:[...e];if(this._memory){let s=await this._memory.recall(this._sessionId?{sessionId:this._sessionId}:void 0);s.length>0&&(t=[{role:"system",content:`Previous context:
1
+ "use strict";var T=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var L=(r,e)=>{for(var t in e)T(r,t,{get:e[t],enumerable:!0})},H=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of G(e))!U.call(r,o)&&o!==t&&T(r,o,{get:()=>e[o],enumerable:!(n=K(e,o))||n.enumerable});return r};var Y=r=>H(T({},"__esModule",{value:!0}),r);var re={};L(re,{Agent:()=>c,AgentStream:()=>m,availableRuntimes:()=>S,batch:()=>M,executeCode:()=>D,gauss:()=>k,generateImage:()=>N,version:()=>R.version});module.exports=Y(re);var l=require("gauss-napi");var _=class extends Error{code;constructor(e,t){super(t),this.name="GaussError",this.code=e}},y=class extends _{resourceType;resourceName;constructor(e,t){super("RESOURCE_DISPOSED",`${e} "${t}" has been destroyed. Create a new instance.`),this.name="DisposedError",this.resourceType=e,this.resourceName=t}};var E="gpt-5.2";var j="claude-sonnet-4-20250514";var q="gemini-2.5-flash";var F="openai/gpt-5.2",$="deepseek-chat";var B="meta-llama/Llama-3.3-70B-Instruct-Turbo",J="accounts/fireworks/models/llama-v3p1-70b-instruct",X="mistral-large-latest",W="sonar-pro",V="grok-3-beta",b={openai:E,anthropic:j,google:q,openrouter:F,deepseek:$,groq:"llama-3.3-70b-versatile",ollama:"llama3.2",together:B,fireworks:J,mistral:X,perplexity:W,xai:V};var z={openai:"OPENAI_API_KEY",anthropic:"ANTHROPIC_API_KEY",google:"GOOGLE_API_KEY",groq:"GROQ_API_KEY",deepseek:"DEEPSEEK_API_KEY",openrouter:"OPENROUTER_API_KEY",together:"TOGETHER_API_KEY",fireworks:"FIREWORKS_API_KEY",mistral:"MISTRAL_API_KEY",perplexity:"PERPLEXITY_API_KEY",xai:"XAI_API_KEY",ollama:""};function f(r){let e=z[r]??"";return e?(typeof process<"u"?process.env[e]:"")??"":""}function v(){let r=[{env:"OPENAI_API_KEY",provider:"openai"},{env:"ANTHROPIC_API_KEY",provider:"anthropic"},{env:"GOOGLE_API_KEY",provider:"google"},{env:"GROQ_API_KEY",provider:"groq"},{env:"DEEPSEEK_API_KEY",provider:"deepseek"},{env:"OPENROUTER_API_KEY",provider:"openrouter"},{env:"TOGETHER_API_KEY",provider:"together"},{env:"FIREWORKS_API_KEY",provider:"fireworks"},{env:"MISTRAL_API_KEY",provider:"mistral"},{env:"PERPLEXITY_API_KEY",provider:"perplexity"},{env:"XAI_API_KEY",provider:"xai"}];for(let{env:e,provider:t}of r)if(typeof process<"u"&&process.env[e])return{provider:t,model:b[t]}}function Q(r,e){if(r?.maxTotalCostUsd!==void 0&&e>r.maxTotalCostUsd)throw new Error(`routing policy rejected cost ${e}`)}function Z(r,e){if(r?.maxRequestsPerMinute!==void 0&&e>r.maxRequestsPerMinute)throw new Error(`routing policy rejected rate ${e}`)}function ee(r,e){let t=r?.fallbackOrder;if(!t||t.length===0||e.length===0)return null;let n=new Set(e);for(let o of t)if(n.has(o))return o;return null}function P(r,e,t,n={}){n.estimatedCostUsd!==void 0&&Q(r,n.estimatedCostUsd),n.currentRequestsPerMinute!==void 0&&Z(r,n.currentRequestsPerMinute);let o=r?.aliases?.[t];if(o&&o.length>0){let s=[...o].sort((g,h)=>(h.priority??0)-(g.priority??0)),a=n.availableProviders;if(!a||a.length===0)return{provider:s[0].provider,model:s[0].model,selectedBy:`alias:${t}`};let d=new Set(a),u=s.find(g=>d.has(g.provider));if(u)return{provider:u.provider,model:u.model,selectedBy:`alias:${t}`}}let i=ee(r,n.availableProviders??[]);return i&&i!==e?{provider:i,model:t,selectedBy:`fallback:${i}`}:{provider:e,model:t,selectedBy:"direct"}}var O=require("gauss-napi");function te(r){return{...r,citations:r.citations?.map(e=>({type:e.citationType??e.type,citedText:e.citedText,documentTitle:e.documentTitle,start:e.start,end:e.end}))}}var m=class{constructor(e,t,n,o,i,s){this.agentName=e;this.providerHandle=t;this.tools=n;this.messages=o;this.options=i;this.toolExecutor=s}_result;get result(){return this._result}async*[Symbol.asyncIterator](){let e=[],t,n=!1,o=s=>{try{e.push(JSON.parse(s))}catch{e.push({type:"raw",text:s})}t?.()},i=(0,O.agent_stream_with_tool_executor)(this.agentName,this.providerHandle,this.tools,this.messages,this.options,o,this.toolExecutor).then(s=>{this._result=te(s),n=!0,t?.()});for(;!n||e.length>0;)e.length>0?yield e.shift():n||await new Promise(s=>{t=s});await i}};function w(r){return{name:r.name,description:r.description,parameters:r.parameters,execute:r.execute}}function A(r){return typeof r.execute=="function"}function C(r,e){let t=new Map(r.map(n=>[n.name,n]));return async n=>{let o;try{o=JSON.parse(n)}catch{return JSON.stringify({error:"Invalid tool call JSON"})}let i=o.tool??o.name??"",s=t.get(i);if(!s)return e?e(n):JSON.stringify({error:`Unknown tool: ${i}`});try{let a=o.args??o.arguments??{},d=await s.execute(a);return typeof d=="string"?d:JSON.stringify(d)}catch(a){let d=a instanceof Error?a.message:String(a);return JSON.stringify({error:`Tool "${i}" failed: ${d}`})}}}function x(r){return{...r,citations:r.citations?.map(e=>({type:e.citationType??e.type??"unknown",citedText:e.citedText,documentTitle:e.documentTitle,start:e.start,end:e.end}))}}var c=class r{providerHandle;_name;_requestedProvider;_requestedModel;_provider;_model;_routingPolicy;_providerOptions;_instructions;_tools=[];_options={};disposed=!1;_middleware=null;_guardrails=null;_memory=null;_sessionId="";_mcpClients=[];_mcpToolsLoaded=!1;constructor(e={}){let t=v(),n=e.provider??t?.provider??"openai",o=e.model??t?.model??E;this._requestedProvider=n,this._requestedModel=o,this._routingPolicy=e.routingPolicy;let i=P(this._routingPolicy,n,o);this._provider=i.provider,this._model=i.model,this._name=e.name??"agent",this._instructions=e.instructions??"";let s=e.providerOptions?.apiKey??f(this._provider);this._providerOptions={apiKey:s,...e.providerOptions},this.providerHandle=(0,l.create_provider)(this._provider,this._model,this._providerOptions),e.tools&&(this._tools=[...e.tools]),e.middleware&&(this._middleware=e.middleware),e.guardrails&&(this._guardrails=e.guardrails),e.memory&&(this._memory=e.memory),e.sessionId&&(this._sessionId=e.sessionId),e.mcpClients&&(this._mcpClients=[...e.mcpClients]);let a=e.codeExecution,d=a===!0?{python:!0,javascript:!0,bash:!0}:a||void 0;this._options={instructions:this._instructions||void 0,temperature:e.temperature,maxSteps:e.maxSteps,topP:e.topP,maxTokens:e.maxTokens,seed:e.seed,stopOnTool:e.stopOnTool,outputSchema:e.outputSchema,thinkingBudget:e.thinkingBudget,reasoningEffort:e.reasoningEffort,cacheControl:e.cacheControl,codeExecution:d,grounding:e.grounding,nativeCodeExecution:e.nativeCodeExecution,responseModalities:e.responseModalities}}static fromEnv(e={}){return new r(e)}get name(){return this._name}get provider(){return this._provider}get model(){return this._model}get instructions(){return this._instructions}get handle(){return this.providerHandle}get capabilities(){return(0,l.get_provider_capabilities)(this.providerHandle)}addTool(e){return this._tools.push(e),this}addTools(e){return this._tools.push(...e),this}withTool(e,t,n,o){return this._tools.push(w({name:e,description:t,parameters:o??{},execute:n})),this}setOptions(e){return this._options={...this._options,...e},this}withModel(e){return this.assertNotDisposed(),new r({...this.toConfig(),model:e})}withRoutingContext(e){this.assertNotDisposed();let t=P(this._routingPolicy,this._requestedProvider,this._requestedModel,e);return new r({...this.toConfig(),provider:t.provider,model:t.model})}withMiddleware(e){return this._middleware=e,this}withGuardrails(e){return this._guardrails=e,this}withMemory(e,t){return this._memory=e,t&&(this._sessionId=t),this}useMcpServer(e){return this._mcpClients.push(e),this._mcpToolsLoaded=!1,this}async run(e){this.assertNotDisposed(),await this.ensureMcpTools();let t=typeof e=="string"?[{role:"user",content:e}]:[...e];if(this._memory){let s=await this._memory.recall(this._sessionId?{sessionId:this._sessionId}:void 0);s.length>0&&(t=[{role:"system",content:`Previous context:
2
2
  ${s.map(d=>d.content).join(`
3
- `)}`},...t])}let{toolDefs:o,executor:r}=this.resolveToolsAndExecutor(),i;if(r?i=y(await(0,p.agent_run_with_tool_executor)(this._name,this.providerHandle,o,t,this._options,r)):i=y(await(0,p.agent_run)(this._name,this.providerHandle,o,t,this._options)),this._memory){let s=typeof e=="string"?e:e.map(a=>a.content).join(`
4
- `);await this._memory.store({id:`${Date.now()}-user`,content:s,entryType:"conversation",timestamp:new Date().toISOString(),sessionId:this._sessionId||void 0}),await this._memory.store({id:`${Date.now()}-assistant`,content:i.text,entryType:"conversation",timestamp:new Date().toISOString(),sessionId:this._sessionId||void 0})}return i}async runWithTools(e,t){this.assertNotDisposed(),await this.ensureMcpTools();let o=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:r,executor:i}=this.resolveToolsAndExecutor(),s=async a=>{if(i){let d=await i(a);if(!JSON.parse(d).error?.startsWith("Unknown tool:"))return d}return t(a)};return y(await(0,p.agent_run_with_tool_executor)(this._name,this.providerHandle,r,o,this._options,s))}async stream(e,t,o){this.assertNotDisposed(),await this.ensureMcpTools();let r=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:i,executor:s}=this.resolveToolsAndExecutor(),a=o??s??w;return y(await(0,p.agent_stream_with_tool_executor)(this._name,this.providerHandle,i,r,this._options,t,a))}streamIter(e,t){this.assertNotDisposed();let o=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:r,executor:i}=this.resolveToolsAndExecutor(),s=t??i??w;return new c(this._name,this.providerHandle,r,o,this._options,s)}async streamText(e,t,o){this.assertNotDisposed();let r=this.streamIter(e,o),i="";for await(let s of r){if(s.type!=="text_delta")continue;let a=typeof s.text=="string"?s.text:typeof s.delta=="string"?s.delta:"";a&&(i+=a,t?.(a))}return r.result?.text??i}async generate(e,t){this.assertNotDisposed();let o=typeof e=="string"?[{role:"user",content:e}]:e;return(0,p.generate)(this.providerHandle,o,t?.temperature,t?.maxTokens)}async generateWithTools(e,t,o){this.assertNotDisposed();let r=typeof e=="string"?[{role:"user",content:e}]:e;return(0,p.generate_with_tools)(this.providerHandle,r,t,o?.temperature,o?.maxTokens)}destroy(){if(!this.disposed){this.disposed=!0;for(let e of this._mcpClients)try{e.close()}catch{}try{(0,p.destroy_provider)(this.providerHandle)}catch{}}}[Symbol.dispose](){this.destroy()}assertNotDisposed(){if(this.disposed)throw new m("Agent",this._name)}resolveToolsAndExecutor(){let e=this._tools.filter(A),t=this._tools.map(r=>({name:r.name,description:r.description,parameters:r.parameters})),o=e.length>0?O(e):null;return{toolDefs:t,executor:o}}async ensureMcpTools(){if(!(this._mcpToolsLoaded||this._mcpClients.length===0)){for(let e of this._mcpClients){let{tools:t,executor:o}=await e.getToolsWithExecutor();for(let r of t){let i={...r,execute:async s=>{let a=JSON.stringify({tool:r.name,args:s}),d=await o(a);return JSON.parse(d)}};this._tools.push(i)}}this._mcpToolsLoaded=!0}}toConfig(){return{name:this._name,provider:this._provider,model:this._model,providerOptions:{...this._providerOptions},instructions:this._instructions||void 0,tools:[...this._tools],middleware:this._middleware??void 0,guardrails:this._guardrails??void 0,memory:this._memory??void 0,sessionId:this._sessionId||void 0,mcpClients:[...this._mcpClients],temperature:this._options.temperature,maxSteps:this._options.maxSteps,topP:this._options.topP,maxTokens:this._options.maxTokens,seed:this._options.seed,stopOnTool:this._options.stopOnTool,outputSchema:this._options.outputSchema,thinkingBudget:this._options.thinkingBudget,reasoningEffort:this._options.reasoningEffort,cacheControl:this._options.cacheControl,codeExecution:this._options.codeExecution,grounding:this._options.grounding,nativeCodeExecution:this._options.nativeCodeExecution,responseModalities:this._options.responseModalities}}},w=async()=>"{}";async function I(n,e){let t=new u({name:"gauss",...e});try{return(await t.run(n)).text}finally{t.destroy()}}async function k(n,e){let{concurrency:t=5,...o}=e??{},r=n.map(s=>({input:s})),i=new u({name:"batch",...o});try{let s=[...r.entries()],a=Array.from({length:Math.min(t,s.length)},async()=>{for(;s.length>0;){let d=s.shift();if(!d)break;let[x,M]=d;try{r[x].result=await i.run(M.input)}catch(T){r[x].error=T instanceof Error?T:new Error(String(T))}}});await Promise.all(a)}finally{i.destroy()}return r}var l=require("gauss-napi");var v=require("gauss-napi");async function C(n,e,t){return(0,l.execute_code)(n,e,t?.timeoutSecs,t?.workingDir,t?.sandbox)}async function D(){return(0,l.available_runtimes)()}async function S(n,e={}){let t=h(),o=e.provider??t?.provider??"openai",r=e.model??t?.model??"dall-e-3",i=e.providerOptions?.apiKey??g(o),s=(0,l.create_provider)(o,r,{apiKey:i,...e.providerOptions});try{return await(0,l.generate_image)(s,n,e.model,e.size,e.quality,e.style,e.aspectRatio,e.n,e.responseFormat)}finally{(0,l.destroy_provider)(s)}}0&&(module.exports={Agent,AgentStream,availableRuntimes,batch,executeCode,gauss,generateImage,version});
3
+ `)}`},...t])}let{toolDefs:n,executor:o}=this.resolveToolsAndExecutor(),i;if(o?i=x(await(0,l.agent_run_with_tool_executor)(this._name,this.providerHandle,n,t,this._options,o)):i=x(await(0,l.agent_run)(this._name,this.providerHandle,n,t,this._options)),this._memory){let s=typeof e=="string"?e:e.map(a=>a.content).join(`
4
+ `);await this._memory.store({id:`${Date.now()}-user`,content:s,entryType:"conversation",timestamp:new Date().toISOString(),sessionId:this._sessionId||void 0}),await this._memory.store({id:`${Date.now()}-assistant`,content:i.text,entryType:"conversation",timestamp:new Date().toISOString(),sessionId:this._sessionId||void 0})}return i}async runWithTools(e,t){this.assertNotDisposed(),await this.ensureMcpTools();let n=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:o,executor:i}=this.resolveToolsAndExecutor(),s=async a=>{if(i){let d=await i(a);if(!JSON.parse(d).error?.startsWith("Unknown tool:"))return d}return t(a)};return x(await(0,l.agent_run_with_tool_executor)(this._name,this.providerHandle,o,n,this._options,s))}async stream(e,t,n){this.assertNotDisposed(),await this.ensureMcpTools();let o=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:i,executor:s}=this.resolveToolsAndExecutor(),a=n??s??I;return x(await(0,l.agent_stream_with_tool_executor)(this._name,this.providerHandle,i,o,this._options,t,a))}streamIter(e,t){this.assertNotDisposed();let n=typeof e=="string"?[{role:"user",content:e}]:e,{toolDefs:o,executor:i}=this.resolveToolsAndExecutor(),s=t??i??I;return new m(this._name,this.providerHandle,o,n,this._options,s)}async streamText(e,t,n){this.assertNotDisposed();let o=this.streamIter(e,n),i="";for await(let s of o){if(s.type!=="text_delta")continue;let a=typeof s.text=="string"?s.text:typeof s.delta=="string"?s.delta:"";a&&(i+=a,t?.(a))}return o.result?.text??i}async generate(e,t){this.assertNotDisposed();let n=typeof e=="string"?[{role:"user",content:e}]:e;return(0,l.generate)(this.providerHandle,n,t?.temperature,t?.maxTokens)}async generateWithTools(e,t,n){this.assertNotDisposed();let o=typeof e=="string"?[{role:"user",content:e}]:e;return(0,l.generate_with_tools)(this.providerHandle,o,t,n?.temperature,n?.maxTokens)}destroy(){if(!this.disposed){this.disposed=!0;for(let e of this._mcpClients)try{e.close()}catch{}try{(0,l.destroy_provider)(this.providerHandle)}catch{}}}[Symbol.dispose](){this.destroy()}assertNotDisposed(){if(this.disposed)throw new y("Agent",this._name)}resolveToolsAndExecutor(){let e=this._tools.filter(A),t=this._tools.map(o=>({name:o.name,description:o.description,parameters:o.parameters})),n=e.length>0?C(e):null;return{toolDefs:t,executor:n}}async ensureMcpTools(){if(!(this._mcpToolsLoaded||this._mcpClients.length===0)){for(let e of this._mcpClients){let{tools:t,executor:n}=await e.getToolsWithExecutor();for(let o of t){let i={...o,execute:async s=>{let a=JSON.stringify({tool:o.name,args:s}),d=await n(a);return JSON.parse(d)}};this._tools.push(i)}}this._mcpToolsLoaded=!0}}toConfig(){return{name:this._name,provider:this._requestedProvider,model:this._requestedModel,routingPolicy:this._routingPolicy,providerOptions:{...this._providerOptions},instructions:this._instructions||void 0,tools:[...this._tools],middleware:this._middleware??void 0,guardrails:this._guardrails??void 0,memory:this._memory??void 0,sessionId:this._sessionId||void 0,mcpClients:[...this._mcpClients],temperature:this._options.temperature,maxSteps:this._options.maxSteps,topP:this._options.topP,maxTokens:this._options.maxTokens,seed:this._options.seed,stopOnTool:this._options.stopOnTool,outputSchema:this._options.outputSchema,thinkingBudget:this._options.thinkingBudget,reasoningEffort:this._options.reasoningEffort,cacheControl:this._options.cacheControl,codeExecution:this._options.codeExecution,grounding:this._options.grounding,nativeCodeExecution:this._options.nativeCodeExecution,responseModalities:this._options.responseModalities}}},I=async()=>"{}";async function k(r,e){let t=new c({name:"gauss",...e});try{return(await t.run(r)).text}finally{t.destroy()}}async function M(r,e){let{concurrency:t=5,...n}=e??{},o=r.map(s=>({input:s})),i=new c({name:"batch",...n});try{let s=[...o.entries()],a=Array.from({length:Math.min(t,s.length)},async()=>{for(;s.length>0;){let d=s.shift();if(!d)break;let[u,g]=d;try{o[u].result=await i.run(g.input)}catch(h){o[u].error=h instanceof Error?h:new Error(String(h))}}});await Promise.all(a)}finally{i.destroy()}return o}var p=require("gauss-napi");var R=require("gauss-napi");async function D(r,e,t){return(0,p.execute_code)(r,e,t?.timeoutSecs,t?.workingDir,t?.sandbox)}async function S(){return(0,p.available_runtimes)()}async function N(r,e={}){let t=v(),n=e.provider??t?.provider??"openai",o=e.model??t?.model??"dall-e-3",i=e.providerOptions?.apiKey??f(n),s=(0,p.create_provider)(n,o,{apiKey:i,...e.providerOptions});try{return await(0,p.generate_image)(s,r,e.model,e.size,e.quality,e.style,e.aspectRatio,e.n,e.responseFormat)}finally{(0,p.destroy_provider)(s)}}0&&(module.exports={Agent,AgentStream,availableRuntimes,batch,executeCode,gauss,generateImage,version});
5
5
  //# sourceMappingURL=agent.cjs.map