@lssm/lib.ai-agent 0.4.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/agent/agent-factory.js +1 -0
  2. package/dist/agent/contract-spec-agent.js +1 -0
  3. package/dist/agent/index.js +1 -0
  4. package/dist/approval/index.js +1 -1
  5. package/dist/approval/workflow.js +1 -2
  6. package/dist/index.js +1 -1
  7. package/dist/knowledge/index.js +1 -0
  8. package/dist/knowledge/injector.js +13 -0
  9. package/dist/memory/in-memory.js +1 -2
  10. package/dist/memory/manager.js +1 -2
  11. package/dist/schema/index.js +1 -0
  12. package/dist/schema/json-schema-to-zod.js +1 -0
  13. package/dist/schema/schema-output.js +1 -0
  14. package/dist/session/index.js +1 -0
  15. package/dist/session/store.js +1 -0
  16. package/dist/spec/index.js +1 -0
  17. package/dist/spec/registry.js +1 -0
  18. package/dist/spec/spec.js +1 -0
  19. package/dist/telemetry/adapter.js +1 -0
  20. package/dist/telemetry/index.js +1 -0
  21. package/dist/tools/index.js +1 -1
  22. package/dist/tools/knowledge-tool.js +9 -0
  23. package/dist/tools/mcp-client.js +1 -0
  24. package/dist/tools/mcp-server.js +1 -0
  25. package/dist/tools/tool-adapter.js +1 -0
  26. package/package.json +72 -18
  27. package/dist/approval/index.d.ts +0 -2
  28. package/dist/approval/workflow.d.ts +0 -41
  29. package/dist/approval/workflow.d.ts.map +0 -1
  30. package/dist/approval/workflow.js.map +0 -1
  31. package/dist/index.d.ts +0 -8
  32. package/dist/memory/in-memory.d.ts +0 -22
  33. package/dist/memory/in-memory.d.ts.map +0 -1
  34. package/dist/memory/in-memory.js.map +0 -1
  35. package/dist/memory/index.d.ts +0 -3
  36. package/dist/memory/manager.d.ts +0 -42
  37. package/dist/memory/manager.d.ts.map +0 -1
  38. package/dist/memory/manager.js.map +0 -1
  39. package/dist/runner.d.ts +0 -46
  40. package/dist/runner.d.ts.map +0 -1
  41. package/dist/runner.js +0 -5
  42. package/dist/runner.js.map +0 -1
  43. package/dist/spec.d.ts +0 -78
  44. package/dist/spec.d.ts.map +0 -1
  45. package/dist/spec.js +0 -2
  46. package/dist/spec.js.map +0 -1
  47. package/dist/tools/executor.d.ts +0 -25
  48. package/dist/tools/executor.d.ts.map +0 -1
  49. package/dist/tools/executor.js +0 -2
  50. package/dist/tools/executor.js.map +0 -1
  51. package/dist/tools/index.d.ts +0 -2
  52. package/dist/types.d.ts +0 -96
  53. package/dist/types.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ import{ContractSpecAgent as e}from"./contract-spec-agent.js";var t=class{config;cache=new Map;constructor(e){this.config=e}async create(e,t,n){let r=this.config.registry.require(e,t);return this.createFromSpec(r,n)}async createFromSpec(t,n){let r=new Map(this.config.toolHandlers);if(n?.toolHandlers)for(let[e,t]of n.toolHandlers)r.set(e,t);let i={...this.config.additionalTools,...n?.additionalTools};return e.create({spec:t,model:n?.model??this.config.defaultModel,toolHandlers:r,knowledgeRetriever:this.config.knowledgeRetriever,sessionStore:this.config.sessionStore,telemetryCollector:this.config.telemetryCollector,additionalTools:i})}async getOrCreate(e,t){let n=this.config.registry.require(e,t),r=`${n.meta.name}.v${n.meta.version}`,i=this.cache.get(r);return i||(i=await this.createFromSpec(n),this.cache.set(r,i)),i}clearCache(){this.cache.clear()}listAvailable(){return this.config.registry.listNames()}};function n(e){return new t(e)}export{t as AgentFactory,n as createAgentFactory};
@@ -0,0 +1 @@
1
+ import{agentKey as e}from"../spec/spec.js";import{specToolsToAISDKTools as t}from"../tools/tool-adapter.js";import{createKnowledgeQueryTool as n}from"../tools/knowledge-tool.js";import{injectStaticKnowledge as r}from"../knowledge/injector.js";import{generateSessionId as i}from"../session/store.js";import{trackAgentStep as a}from"../telemetry/adapter.js";import{Experimental_Agent as o,stepCountIs as s}from"ai";import*as c from"zod";const l=c.object({tenantId:c.string().optional(),actorId:c.string().optional(),sessionId:c.string().optional(),metadata:c.record(c.string(),c.unknown()).optional()});var u=class c{version=`agent-v1`;id;spec;tools;inner;config;instructions;constructor(t,n,r){this.config=t,this.spec=t.spec,this.id=e(t.spec.meta),this.tools=r,this.instructions=n,this.inner=new o({model:t.model,instructions:n,tools:r,stopWhen:s(t.spec.maxSteps??10),callOptionsSchema:l,onStepFinish:async e=>{await this.handleStepFinish(e)}})}static async create(i){let a=await r(i.spec.instructions,i.spec.knowledge??[],i.knowledgeRetriever),o=t(i.spec.tools,i.toolHandlers,{agentId:e(i.spec.meta)}),s=i.knowledgeRetriever?n(i.knowledgeRetriever,i.spec.knowledge??[]):null;return new c(i,a,{...o,...s?{query_knowledge:s}:{},...i.additionalTools??{}})}async generate(e){let t=e.options?.sessionId??i();this.config.sessionStore&&(await this.config.sessionStore.get(t)||await this.config.sessionStore.create({sessionId:t,agentId:this.id,tenantId:e.options?.tenantId,actorId:e.options?.actorId,status:`running`,messages:[],steps:[],metadata:e.options?.metadata}));let n=e.systemOverride?`${this.instructions}\n\n${e.systemOverride}\n\n${e.prompt}`:e.prompt,r=await this.inner.generate({prompt:n,abortSignal:e.signal,options:{tenantId:e.options?.tenantId,actorId:e.options?.actorId,sessionId:t,metadata:e.options?.metadata}});return this.config.sessionStore&&await this.config.sessionStore.update(t,{status:`completed`}),{text:r.text,steps:r.steps,toolCalls:r.toolCalls.map(e=>({type:`tool-call`,toolCallId:e.toolCallId,toolName:e.toolName,args:`args`in e?e.args:`input`in e?e.input:void 0})),toolResults:r.toolResults.map(e=>({type:`tool-result`,toolCallId:e.toolCallId,toolName:e.toolName,output:e.output})),finishReason:r.finishReason,usage:r.usage}}async stream(e){let t=e.options?.sessionId??i(),n=e.systemOverride?`${this.instructions}\n\n${e.systemOverride}\n\n${e.prompt}`:e.prompt;return this.inner.stream({prompt:n,abortSignal:e.signal,options:{tenantId:e.options?.tenantId,actorId:e.options?.actorId,sessionId:t,metadata:e.options?.metadata}})}async handleStepFinish(e){let t=e.options?.sessionId;t&&this.config.sessionStore&&await this.config.sessionStore.appendStep(t,e),this.config.telemetryCollector&&await a(this.config.telemetryCollector,this.id,e)}};export{u as ContractSpecAgent};
@@ -0,0 +1 @@
1
+ import{ContractSpecAgent as e}from"./contract-spec-agent.js";import{AgentFactory as t,createAgentFactory as n}from"./agent-factory.js";export{t as AgentFactory,e as ContractSpecAgent,n as createAgentFactory};
@@ -1 +1 @@
1
- import{ApprovalWorkflow as e,InMemoryApprovalStore as t}from"./workflow.js";export{e as ApprovalWorkflow,t as InMemoryApprovalStore};
1
+ import{ApprovalWorkflow as e,InMemoryApprovalStore as t,createApprovalWorkflow as n}from"./workflow.js";export{e as ApprovalWorkflow,t as InMemoryApprovalStore,n as createApprovalWorkflow};
@@ -1,2 +1 @@
1
- import{randomUUID as e}from"node:crypto";var t=class{items=[];async create(e){this.items.push(e)}async update(e,t){let n=this.items.findIndex(t=>t.id===e);n!==-1&&(this.items[n]={...this.items[n],...t})}async list(e){return e?this.items.filter(t=>t.status===e):[...this.items]}},n=class{constructor(e=new t){this.store=e}async requestApproval(t,n,r){let i={id:e(),sessionId:t.sessionId,agent:t.agent,tenantId:t.tenantId,reason:n,requestedAt:new Date,status:`pending`,payload:r};return await this.store.create(i),i}async resolve(e,t,n,r){await this.store.update(e,{status:t,reviewer:n,resolvedAt:new Date,notes:r})}async listPending(){return this.store.list(`pending`)}};export{n as ApprovalWorkflow,t as InMemoryApprovalStore};
2
- //# sourceMappingURL=workflow.js.map
1
+ import{randomUUID as e}from"node:crypto";var t=class{items=new Map;async create(e){this.items.set(e.id,e)}async get(e){return this.items.get(e)??null}async getByToolCallId(e){for(let t of this.items.values())if(t.toolCallId===e)return t;return null}async update(e,t){let n=this.items.get(e);n&&this.items.set(e,{...n,...t})}async list(e){let t=[...this.items.values()];return e?.status&&(t=t.filter(t=>t.status===e.status)),e?.agentId&&(t=t.filter(t=>t.agentId===e.agentId)),e?.tenantId&&(t=t.filter(t=>t.tenantId===e.tenantId)),t.sort((e,t)=>t.requestedAt.getTime()-e.requestedAt.getTime())}clear(){this.items.clear()}},n=class{constructor(e=new t){this.store=e}async requestApproval(t){let n={id:e(),sessionId:t.sessionId,agentId:t.agentId,tenantId:t.tenantId,toolName:t.toolName,toolCallId:t.toolCallId,toolArgs:t.toolArgs,reason:t.reason,requestedAt:new Date,status:`pending`,payload:t.payload};return await this.store.create(n),n}async requestApprovalFromToolCall(e,t){return this.requestApproval({sessionId:t.sessionId,agentId:t.agentId,tenantId:t.tenantId,toolName:e.toolName,toolCallId:e.toolCallId,toolArgs:e.args,reason:t.reason??`Tool "${e.toolName}" requires approval`})}async approve(e,t,n){await this.store.update(e,{status:`approved`,reviewer:t,resolvedAt:new Date,notes:n})}async reject(e,t,n){await this.store.update(e,{status:`rejected`,reviewer:t,resolvedAt:new Date,notes:n})}async getStatus(e){return(await this.store.getByToolCallId(e))?.status??null}async isApproved(e){return await this.getStatus(e)===`approved`}async listPending(e){return this.store.list({...e,status:`pending`})}async get(e){return this.store.get(e)}};function r(e){return new n(e)}export{n as ApprovalWorkflow,t as InMemoryApprovalStore,r as createApprovalWorkflow};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{AgentRegistry as e,defineAgent as t}from"./spec.js";import{ToolExecutor as n}from"./tools/executor.js";import{BaseAgentMemoryManager as r,trackMessageInMemory as i}from"./memory/manager.js";import{AgentRunner as a}from"./runner.js";import{InMemoryAgentMemory as o}from"./memory/in-memory.js";import"./memory/index.js";import"./tools/index.js";import{ApprovalWorkflow as s,InMemoryApprovalStore as c}from"./approval/workflow.js";import"./approval/index.js";export{e as AgentRegistry,a as AgentRunner,s as ApprovalWorkflow,r as BaseAgentMemoryManager,o as InMemoryAgentMemory,c as InMemoryApprovalStore,n as ToolExecutor,t as defineAgent,i as trackMessageInMemory};
1
+ import{agentKey as e,defineAgent as t}from"./spec/spec.js";import{jsonSchemaToZod as n,jsonSchemaToZodSafe as r}from"./schema/json-schema-to-zod.js";import{buildToolHandlers as i,createToolHandler as a,specToolToAISDKTool as o,specToolsToAISDKTools as s}from"./tools/tool-adapter.js";import{createKnowledgeQueryTool as c}from"./tools/knowledge-tool.js";import{createKnowledgeInjector as l,injectStaticKnowledge as u}from"./knowledge/injector.js";import{InMemorySessionStore as d,createInMemorySessionStore as f,generateSessionId as p}from"./session/store.js";import{InMemoryTelemetryCollector as m,createInMemoryTelemetryCollector as h,noopTelemetryCollector as g,trackAgentStep as _}from"./telemetry/adapter.js";import{ContractSpecAgent as v}from"./agent/contract-spec-agent.js";import{AgentFactory as y,createAgentFactory as b}from"./agent/agent-factory.js";import"./agent/index.js";import{AgentRegistry as x,createAgentRegistry as S}from"./spec/registry.js";import{createMcpToolsets as C,mcpServerToTools as w}from"./tools/mcp-client.js";import{agentToMcpServer as T,createAgentMcpServer as E}from"./tools/mcp-server.js";import"./tools/index.js";import{SchemaOutput as D,enumToChoiceOutput as O,jsonSchemaToArrayOutput as k,jsonSchemaToOutput as A,textOutput as j,zodToOutput as M}from"./schema/schema-output.js";import"./schema/index.js";import{ApprovalWorkflow as N,InMemoryApprovalStore as P,createApprovalWorkflow as F}from"./approval/workflow.js";import"./approval/index.js";import{Experimental_Agent as I}from"ai";export{y as AgentFactory,x as AgentRegistry,N as ApprovalWorkflow,v as ContractSpecAgent,P as InMemoryApprovalStore,d as InMemorySessionStore,m as InMemoryTelemetryCollector,D as SchemaOutput,I as ToolLoopAgent,e as agentKey,T as agentToMcpServer,i as buildToolHandlers,b as createAgentFactory,E as createAgentMcpServer,S as createAgentRegistry,F as createApprovalWorkflow,f as createInMemorySessionStore,h as createInMemoryTelemetryCollector,l as createKnowledgeInjector,c as createKnowledgeQueryTool,C as createMcpToolsets,a as createToolHandler,t as defineAgent,O as enumToChoiceOutput,p as generateSessionId,u as injectStaticKnowledge,k as jsonSchemaToArrayOutput,A as jsonSchemaToOutput,n as jsonSchemaToZod,r as jsonSchemaToZodSafe,w as mcpServerToTools,g as noopTelemetryCollector,o as specToolToAISDKTool,s as specToolsToAISDKTools,j as textOutput,_ as trackAgentStep,M as zodToOutput};
@@ -0,0 +1 @@
1
+ import{createKnowledgeInjector as e,injectStaticKnowledge as t}from"./injector.js";export{e as createKnowledgeInjector,t as injectStaticKnowledge};
@@ -0,0 +1,13 @@
1
+ async function e(e,t,n){if(!n)return e;let r=t.filter(e=>e.required);if(r.length===0)return e;let i=[];for(let e of r){if(!n.supportsSpace(e.key)){console.warn(`Required knowledge space "${e.key}" is not available`);continue}try{let t=await n.getStatic(e.key);if(t){let n=e.instructions?`## ${e.key}\n${e.instructions}`:`## ${e.key}`;i.push(`${n}\n\n${t}`)}}catch(t){console.warn(`Failed to load required knowledge "${e.key}":`,t)}}return i.length===0?e:`${e}
2
+
3
+ ---
4
+
5
+ # Reference Knowledge
6
+
7
+ The following information is provided for your reference. Use it to inform your responses.
8
+
9
+ ${i.join(`
10
+
11
+ ---
12
+
13
+ `)}`}function t(t){return{inject:(n,r)=>e(n,r,t),hasSpace:e=>t?.supportsSpace(e)??!1,listSpaces:()=>t?.listSpaces()??[]}}export{t as createKnowledgeInjector,e as injectStaticKnowledge};
@@ -1,3 +1,2 @@
1
1
  import{BaseAgentMemoryManager as e}from"./manager.js";var t=class extends e{ttlMs;maxEntries;store=new Map;constructor(e){super(),this.ttlMs=(e?.ttlMinutes??60)*60*1e3,this.maxEntries=e?.maxEntries??250}async load(e){this.evictExpired();let t=this.store.get(e);return t?(t.data.session.updatedAt=new Date,t.expiresAt=Date.now()+this.ttlMs,t.data):null}async save(e){this.trim(e.memory.entries),this.store.set(e.session.sessionId,{data:e,expiresAt:Date.now()+this.ttlMs})}async summarize(e){let t=await this.load(e.sessionId)??this.bootstrapMemory(e),n=t.memory.entries.slice(-10).map(e=>`- ${e.type}: ${e.content}`).join(`
2
- `);return t.memory.summary=n,t.memory.lastSummarizedAt=new Date,await this.save(t),t.memory}trim(e){e.length<=this.maxEntries||e.splice(0,e.length-this.maxEntries)}evictExpired(){let e=Date.now();for(let[t,n]of this.store.entries())n.expiresAt<=e&&this.store.delete(t)}};export{t as InMemoryAgentMemory};
3
- //# sourceMappingURL=in-memory.js.map
2
+ `);return t.memory.summary=n,t.memory.lastSummarizedAt=new Date,await this.save(t),t.memory}trim(e){e.length<=this.maxEntries||e.splice(0,e.length-this.maxEntries)}evictExpired(){let e=Date.now();for(let[t,n]of this.store.entries())n.expiresAt<=e&&this.store.delete(t)}};export{t as InMemoryAgentMemory};
@@ -1,2 +1 @@
1
- import{randomUUID as e}from"node:crypto";var t=class{async append(t,n){let r=await this.load(t.sessionId)??this.bootstrapMemory(t),i={id:e(),createdAt:n.createdAt??new Date,...n};return r.memory.entries.push(i),await this.save(r),r}async summarize(e){}async prune(e){}bootstrapMemory(t){return{session:t,memory:{entries:t.messages.map(t=>({id:e(),createdAt:new Date,type:t.role===`assistant`?`assistant`:`user`,content:t.content.map(e=>`text`in e?e.text:``).join(``),metadata:t.metadata}))}}}};function n(e,t,n){e&&e.append(t,{type:n.role,content:n.content.map(e=>`text`in e?e.text:``).join(``),metadata:n.metadata})}export{t as BaseAgentMemoryManager,n as trackMessageInMemory};
2
- //# sourceMappingURL=manager.js.map
1
+ import{randomUUID as e}from"node:crypto";function t(e){let t=e.content;return typeof t==`string`?t:Array.isArray(t)?t.map(e=>typeof e==`string`?e:`text`in e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(``):``}function n(e){let t=e.content;return typeof t==`string`?t:Array.isArray(t)?t.map(e=>typeof e==`string`?e:`text`in e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(``):``}function r(e){switch(e){case`assistant`:return`assistant`;case`system`:return`system`;case`tool`:return`tool`;case`user`:default:return`user`}}var i=class{async append(t,n){let r=await this.load(t.sessionId)??this.bootstrapMemory(t),i={id:e(),createdAt:n.createdAt??new Date,...n};return r.memory.entries.push(i),await this.save(r),r}async summarize(e){}async prune(e){}bootstrapMemory(n){return{session:n,memory:{entries:n.messages.map(n=>({id:e(),createdAt:new Date,type:r(n.role),content:t(n)}))}}}};function a(e,t,r){e&&e.append(t,{type:r.role,content:n(r),metadata:r.metadata})}export{i as BaseAgentMemoryManager,a as trackMessageInMemory};
@@ -0,0 +1 @@
1
+ import{jsonSchemaToZod as e,jsonSchemaToZodSafe as t}from"./json-schema-to-zod.js";import{SchemaOutput as n,enumToChoiceOutput as r,jsonSchemaToArrayOutput as i,jsonSchemaToOutput as a,textOutput as o,zodToOutput as s}from"./schema-output.js";export{n as SchemaOutput,r as enumToChoiceOutput,i as jsonSchemaToArrayOutput,a as jsonSchemaToOutput,e as jsonSchemaToZod,t as jsonSchemaToZodSafe,o as textOutput,s as zodToOutput};
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";function t(o){let s=o,c=t=>s.nullable?e.union([t,e.null()]):t;if(s.const!==void 0)return e.literal(s.const);if(s.enum){let t=s.enum;return c(e.enum(t.map(String)))}if(s.anyOf&&s.anyOf.length>0){let n=s.anyOf.map(e=>t(e));return n.length===1?n[0]:e.union([n[0],n[1],...n.slice(2)])}if(s.oneOf&&s.oneOf.length>0){let n=s.oneOf.map(e=>t(e));return n.length===1?n[0]:e.union([n[0],n[1],...n.slice(2)])}if(s.allOf&&s.allOf.length>0)return s.allOf.map(e=>t(e)).reduce((t,n)=>e.intersection(t,n));switch(s.type){case`string`:return c(n(s));case`number`:case`integer`:return c(r(s));case`boolean`:return c(e.boolean());case`null`:return e.null();case`array`:return c(i(s));case`object`:return c(a(s));default:return e.unknown()}}function n(t){let n=e.string();switch(t.description&&(n=n.describe(t.description)),t.format){case`email`:n=n.email();break;case`uri`:case`url`:n=n.url();break;case`uuid`:n=n.uuid();break;case`date-time`:n=n.datetime();break;case`date`:n=n.date();break}return t.minLength!==void 0&&(n=n.min(t.minLength)),t.maxLength!==void 0&&(n=n.max(t.maxLength)),t.pattern&&(n=n.regex(new RegExp(t.pattern))),n}function r(t){let n=t.type===`integer`?e.number().int():e.number();return t.description&&(n=n.describe(t.description)),t.minimum!==void 0&&(n=n.min(t.minimum)),t.maximum!==void 0&&(n=n.max(t.maximum)),n}function i(n){let r=n.items?t(n.items):e.unknown(),i=e.array(r);return n.description&&(i=i.describe(n.description)),i}function a(n){let r=n.properties??{},i=new Set(n.required??[]),a={};for(let[e,n]of Object.entries(r)){let r=t(n);a[e]=i.has(e)?r:r.optional()}let o=e.object(a);return n.description&&(o=o.describe(n.description)),o}function o(n){return!n||Object.keys(n).length===0?e.object({}):t(n)}export{t as jsonSchemaToZod,o as jsonSchemaToZodSafe};
@@ -0,0 +1 @@
1
+ import{jsonSchemaToZod as e}from"./json-schema-to-zod.js";import{Output as t}from"ai";import{z as n}from"zod";function r(n){let r=e(n);return t.object({schema:r})}function i(n){let r=e(n);return t.array({element:r})}function a(e){return t.choice({options:e})}function o(e){return t.object({schema:e})}function s(){return t.text()}const c={fromJsonSchema:r,arrayFromJsonSchema:i,fromEnum:a,fromZod:o,text:s};export{c as SchemaOutput,a as enumToChoiceOutput,i as jsonSchemaToArrayOutput,r as jsonSchemaToOutput,s as textOutput,o as zodToOutput};
@@ -0,0 +1 @@
1
+ import{InMemorySessionStore as e,createInMemorySessionStore as t,generateSessionId as n}from"./store.js";export{e as InMemorySessionStore,t as createInMemorySessionStore,n as generateSessionId};
@@ -0,0 +1 @@
1
+ var e=class{sessions=new Map;async get(e){return this.sessions.get(e)??null}async create(e){let t=new Date,n={...e,createdAt:t,updatedAt:t};return this.sessions.set(e.sessionId,n),n}async appendStep(e,t){let n=this.sessions.get(e);n&&(n.steps.push(t),n.updatedAt=new Date)}async appendMessage(e,t){let n=this.sessions.get(e);n&&(n.messages.push(t),n.updatedAt=new Date)}async update(e,t){let n=this.sessions.get(e);n&&Object.assign(n,t,{updatedAt:new Date})}async delete(e){return this.sessions.delete(e)}async listByAgent(e,t=100){let n=[];for(let r of this.sessions.values())if(r.agentId===e&&(n.push(r),n.length>=t))break;return n.sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime())}async listByTenant(e,t=100){let n=[];for(let r of this.sessions.values())if(r.tenantId===e&&(n.push(r),n.length>=t))break;return n.sort((e,t)=>t.updatedAt.getTime()-e.updatedAt.getTime())}clear(){this.sessions.clear()}};function t(){return new e}function n(){return`sess_${Date.now()}_${Math.random().toString(36).slice(2,11)}`}export{e as InMemorySessionStore,t as createInMemorySessionStore,n as generateSessionId};
@@ -0,0 +1 @@
1
+ import{agentKey as e,defineAgent as t}from"./spec.js";import{AgentRegistry as n,createAgentRegistry as r}from"./registry.js";export{n as AgentRegistry,e as agentKey,r as createAgentRegistry,t as defineAgent};
@@ -0,0 +1 @@
1
+ import{agentKey as e}from"./spec.js";var t=class{specs=new Map;register(t){let n=e(t.meta);if(this.specs.has(n))throw Error(`Duplicate agent spec registered for ${n}`);return this.specs.set(n,t),this}unregister(e,t){return this.specs.delete(`${e}.v${t}`)}list(){return[...this.specs.values()]}listNames(){let e=new Set;for(let t of this.specs.values())e.add(t.meta.name);return[...e]}get(e,t){if(t!=null)return this.specs.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.specs.values())t.meta.name===e&&t.meta.version>r&&(n=t,r=t.meta.version);return n}require(e,t){let n=this.get(e,t);if(!n)throw Error(`Agent spec not found for ${e}${t==null?``:`.v${t}`}`);return n}has(e,t){return this.get(e,t)!==void 0}getVersions(e){let t=[];for(let n of this.specs.values())n.meta.name===e&&t.push(n);return t.sort((e,t)=>e.meta.version-t.meta.version)}clear(){this.specs.clear()}};function n(){return new t}export{t as AgentRegistry,n as createAgentRegistry};
@@ -0,0 +1 @@
1
+ function e(e){if(!e.meta?.name)throw Error(`Agent name is required`);if(!Number.isFinite(e.meta.version))throw Error(`Agent ${e.meta.name} is missing a numeric version`);if(!e.instructions?.trim())throw Error(`Agent ${e.meta.name} requires instructions`);if(!e.tools?.length)throw Error(`Agent ${e.meta.name} must expose at least one tool`);let t=new Set;for(let n of e.tools){if(t.has(n.name))throw Error(`Agent ${e.meta.name} has duplicate tool name: ${n.name}`);t.add(n.name)}return Object.freeze(e)}function t(e){return`${e.name}.v${e.version}`}export{t as agentKey,e as defineAgent};
@@ -0,0 +1 @@
1
+ function e(e){let t=e.match(/^(.+)\.v(\d+)$/);return t?{name:t[1],version:parseInt(t[2],10)}:{name:e,version:1}}async function t(t,n,r,i){let{name:a,version:o}=e(n);for(let e of r.toolCalls??[]){let s={operation:{name:`${a}.${e.toolName}`,version:o},durationMs:i??0,success:r.toolResults?.some(t=>t.toolCallId===e.toolCallId&&t.output!==void 0)??!1,timestamp:new Date,metadata:{agentId:n,toolName:e.toolName,finishReason:r.finishReason}};await t.collect(s)}let s={operation:{name:a,version:o},durationMs:i??0,success:r.finishReason!==`error`,timestamp:new Date,metadata:{agentId:n,finishReason:r.finishReason,tokenUsage:r.usage,toolCallCount:r.toolCalls?.length??0}};await t.collect(s)}var n=class{samples=[];async collect(e){this.samples.push(e)}getSamples(){return[...this.samples]}getSamplesForOperation(e){return this.samples.filter(t=>t.operation.name===e)}clear(){this.samples.length=0}};function r(){return new n}const i={collect:async()=>{}};export{n as InMemoryTelemetryCollector,r as createInMemoryTelemetryCollector,i as noopTelemetryCollector,t as trackAgentStep};
@@ -0,0 +1 @@
1
+ import{InMemoryTelemetryCollector as e,createInMemoryTelemetryCollector as t,noopTelemetryCollector as n,trackAgentStep as r}from"./adapter.js";export{e as InMemoryTelemetryCollector,t as createInMemoryTelemetryCollector,n as noopTelemetryCollector,r as trackAgentStep};
@@ -1 +1 @@
1
- import{ToolExecutor as e}from"./executor.js";export{e as ToolExecutor};
1
+ import{buildToolHandlers as e,createToolHandler as t,specToolToAISDKTool as n,specToolsToAISDKTools as r}from"./tool-adapter.js";import{createKnowledgeQueryTool as i}from"./knowledge-tool.js";import{createMcpToolsets as a,mcpServerToTools as o}from"./mcp-client.js";import{agentToMcpServer as s,createAgentMcpServer as c}from"./mcp-server.js";export{s as agentToMcpServer,e as buildToolHandlers,c as createAgentMcpServer,i as createKnowledgeQueryTool,a as createMcpToolsets,t as createToolHandler,o as mcpServerToTools,n as specToolToAISDKTool,r as specToolsToAISDKTools};
@@ -0,0 +1,9 @@
1
+ import{tool as e}from"ai";import*as t from"zod";function n(n,r){let i=r.filter(e=>!e.required).map(e=>e.key).filter(e=>n.supportsSpace(e));return i.length===0?null:e({description:`Query knowledge bases for relevant information. Use this tool when you need to look up specific information that may not be in your context.
2
+
3
+ Available knowledge spaces:
4
+ ${r.filter(e=>!e.required&&n.supportsSpace(e.key)).map(e=>`- ${e.key}: ${e.instructions??`Knowledge space`}`).join(`
5
+ `)}`,inputSchema:t.object({query:t.string().describe(`The question or search query to find relevant information`),spaceKey:t.enum(i).optional().describe(`Specific knowledge space to query. If omitted, searches all available spaces.`),topK:t.number().optional().default(5).describe(`Maximum number of results to return`)}),execute:async({query:e,spaceKey:t,topK:r})=>{let a=t?[t]:i,o=[];for(let t of a)try{let i=await n.retrieve(e,{spaceKey:t,topK:r??5});for(let e of i)o.push({space:t,content:e.content,score:e.score})}catch(e){console.warn(`Failed to query knowledge space ${t}:`,e)}return o.length===0?`No relevant information found in the knowledge bases.`:(o.sort((e,t)=>t.score-e.score),o.slice(0,r??5).map((e,t)=>`[Source ${t+1} - ${e.space}] (relevance: ${(e.score*100).toFixed(0)}%)\n${e.content}`).join(`
6
+
7
+ ---
8
+
9
+ `))}})}export{n as createKnowledgeQueryTool};
@@ -0,0 +1 @@
1
+ import{experimental_createMCPClient as e}from"@ai-sdk/mcp";import{Experimental_StdioMCPTransport as t}from"@ai-sdk/mcp/mcp-stdio";async function n(n){let r=await e({transport:new t({command:n.command,args:n.args,env:n.env})});return{tools:await r.tools(),cleanup:()=>r.close()}}async function r(e){let t=await Promise.all(e.map(n)),r={};for(let e of t)Object.assign(r,e.tools);return{tools:r,cleanup:async()=>{await Promise.all(t.map(e=>e.cleanup()))}}}export{r as createMcpToolsets,n as mcpServerToTools};
@@ -0,0 +1 @@
1
+ import{jsonSchemaToZodSafe as e}from"../schema/json-schema-to-zod.js";import*as t from"zod";import{McpServer as n}from"@modelcontextprotocol/sdk/server/mcp.js";function r(r,i){let a=new n({name:i.meta.name,version:`${i.meta.version}`});a.registerTool(i.meta.name,{description:i.description??`Interact with ${i.meta.name} agent`,inputSchema:t.object({message:t.string().describe(`The message or query to send to the agent`),sessionId:t.string().optional().describe(`Optional session ID to continue a conversation`)})},async e=>{let{message:t,sessionId:n}=e;return{content:[{type:`text`,text:(await r.generate({prompt:t,options:{sessionId:n}})).text}]}});for(let n of i.tools){let o=n.schema?e(n.schema):t.object({});a.registerTool(`${i.meta.name}.${n.name}`,{description:n.description??`Execute ${n.name} tool`,inputSchema:o},async e=>({content:[{type:`text`,text:(await r.generate({prompt:`Execute the ${n.name} tool with the following arguments: ${JSON.stringify(e)}`})).text}]}))}return a}function i(e){return r(e.agent,e.spec)}export{r as agentToMcpServer,i as createAgentMcpServer};
@@ -0,0 +1 @@
1
+ import{jsonSchemaToZodSafe as e}from"../schema/json-schema-to-zod.js";import{tool as t}from"ai";function n(n,r,i={}){return t({description:n.description??n.name,inputSchema:e(n.schema),needsApproval:n.requiresApproval??!n.automationSafe,execute:async e=>{let t=await r(e,{agentId:i.agentId??`unknown`,sessionId:i.sessionId??`unknown`,tenantId:i.tenantId,actorId:i.actorId,metadata:i.metadata,signal:i.signal});return typeof t==`string`?t:JSON.stringify(t)}})}function r(e,t,r={}){let i={};for(let a of e){let e=t.get(a.name);if(!e)throw Error(`Missing handler for tool: ${a.name}`);i[a.name]=n(a,e,r)}return i}function i(e){return async(t,n)=>e(t,n)}function a(e){return new Map(Object.entries(e))}export{a as buildToolHandlers,i as createToolHandler,n as specToolToAISDKTool,r as specToolsToAISDKTools};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.ai-agent",
3
- "version": "0.4.0",
3
+ "version": "1.41.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -19,32 +19,86 @@
19
19
  "lint": "bun lint:fix",
20
20
  "lint:fix": "eslint src --fix",
21
21
  "lint:check": "eslint src",
22
- "test": "bun run"
22
+ "test": "bun test"
23
23
  },
24
24
  "dependencies": {
25
- "@lssm/lib.contracts": "1.11.0"
25
+ "ai": "beta",
26
+ "@ai-sdk/mcp": "beta",
27
+ "@ai-sdk/mistral": "beta",
28
+ "@ai-sdk/openai": "beta",
29
+ "@ai-sdk/anthropic": "beta",
30
+ "@modelcontextprotocol/sdk": "^1.24.3",
31
+ "@lssm/lib.contracts": "workspace:*",
32
+ "@lssm/lib.knowledge": "workspace:*",
33
+ "zod": "^4.1.13"
26
34
  },
27
35
  "devDependencies": {
28
- "@lssm/tool.tsdown": "0.12.0",
29
- "@lssm/tool.typescript": "0.11.0",
30
- "tsdown": "^0.16.6",
36
+ "@lssm/tool.tsdown": "workspace:*",
37
+ "@lssm/tool.typescript": "workspace:*",
38
+ "tsdown": "^0.17.4",
31
39
  "typescript": "^5.9.3"
32
40
  },
33
41
  "exports": {
34
- ".": "./dist/index.js",
35
- "./approval": "./dist/approval/index.js",
36
- "./approval/workflow": "./dist/approval/workflow.js",
37
- "./memory": "./dist/memory/index.js",
38
- "./memory/in-memory": "./dist/memory/in-memory.js",
39
- "./memory/manager": "./dist/memory/manager.js",
40
- "./runner": "./dist/runner.js",
41
- "./spec": "./dist/spec.js",
42
- "./tools": "./dist/tools/index.js",
43
- "./tools/executor": "./dist/tools/executor.js",
44
- "./types": "./dist/types.js",
42
+ ".": "./src/index.ts",
43
+ "./agent": "./src/agent/index.ts",
44
+ "./agent/agent-factory": "./src/agent/agent-factory.ts",
45
+ "./agent/contract-spec-agent": "./src/agent/contract-spec-agent.ts",
46
+ "./approval": "./src/approval/index.ts",
47
+ "./approval/workflow": "./src/approval/workflow.ts",
48
+ "./knowledge": "./src/knowledge/index.ts",
49
+ "./knowledge/injector": "./src/knowledge/injector.ts",
50
+ "./memory": "./src/memory/index.ts",
51
+ "./memory/in-memory": "./src/memory/in-memory.ts",
52
+ "./memory/manager": "./src/memory/manager.ts",
53
+ "./schema": "./src/schema/index.ts",
54
+ "./schema/json-schema-to-zod": "./src/schema/json-schema-to-zod.ts",
55
+ "./schema/schema-output": "./src/schema/schema-output.ts",
56
+ "./session": "./src/session/index.ts",
57
+ "./session/store": "./src/session/store.ts",
58
+ "./spec": "./src/spec/index.ts",
59
+ "./spec/registry": "./src/spec/registry.ts",
60
+ "./spec/spec": "./src/spec/spec.ts",
61
+ "./telemetry": "./src/telemetry/index.ts",
62
+ "./telemetry/adapter": "./src/telemetry/adapter.ts",
63
+ "./tools": "./src/tools/index.ts",
64
+ "./tools/knowledge-tool": "./src/tools/knowledge-tool.ts",
65
+ "./tools/mcp-client": "./src/tools/mcp-client.ts",
66
+ "./tools/mcp-server": "./src/tools/mcp-server.ts",
67
+ "./tools/tool-adapter": "./src/tools/tool-adapter.ts",
68
+ "./types": "./src/types.ts",
45
69
  "./*": "./*"
46
70
  },
47
71
  "publishConfig": {
48
- "access": "public"
72
+ "access": "public",
73
+ "exports": {
74
+ ".": "./dist/index.js",
75
+ "./agent": "./dist/agent/index.js",
76
+ "./agent/agent-factory": "./dist/agent/agent-factory.js",
77
+ "./agent/contract-spec-agent": "./dist/agent/contract-spec-agent.js",
78
+ "./approval": "./dist/approval/index.js",
79
+ "./approval/workflow": "./dist/approval/workflow.js",
80
+ "./knowledge": "./dist/knowledge/index.js",
81
+ "./knowledge/injector": "./dist/knowledge/injector.js",
82
+ "./memory": "./dist/memory/index.js",
83
+ "./memory/in-memory": "./dist/memory/in-memory.js",
84
+ "./memory/manager": "./dist/memory/manager.js",
85
+ "./schema": "./dist/schema/index.js",
86
+ "./schema/json-schema-to-zod": "./dist/schema/json-schema-to-zod.js",
87
+ "./schema/schema-output": "./dist/schema/schema-output.js",
88
+ "./session": "./dist/session/index.js",
89
+ "./session/store": "./dist/session/store.js",
90
+ "./spec": "./dist/spec/index.js",
91
+ "./spec/registry": "./dist/spec/registry.js",
92
+ "./spec/spec": "./dist/spec/spec.js",
93
+ "./telemetry": "./dist/telemetry/index.js",
94
+ "./telemetry/adapter": "./dist/telemetry/adapter.js",
95
+ "./tools": "./dist/tools/index.js",
96
+ "./tools/knowledge-tool": "./dist/tools/knowledge-tool.js",
97
+ "./tools/mcp-client": "./dist/tools/mcp-client.js",
98
+ "./tools/mcp-server": "./dist/tools/mcp-server.js",
99
+ "./tools/tool-adapter": "./dist/tools/tool-adapter.js",
100
+ "./types": "./dist/types.js",
101
+ "./*": "./*"
102
+ }
49
103
  }
50
104
  }
@@ -1,2 +0,0 @@
1
- import { ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ApprovalWorkflowOptions, InMemoryApprovalStore } from "./workflow.js";
2
- export { ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ApprovalWorkflowOptions, InMemoryApprovalStore };
@@ -1,41 +0,0 @@
1
- import { AgentSessionState } from "../types.js";
2
-
3
- //#region src/approval/workflow.d.ts
4
- type ApprovalStatus = 'pending' | 'approved' | 'rejected';
5
- interface ApprovalRequest {
6
- id: string;
7
- sessionId: string;
8
- agent: string;
9
- tenantId?: string;
10
- reason: string;
11
- requestedAt: Date;
12
- status: ApprovalStatus;
13
- payload?: Record<string, unknown>;
14
- reviewer?: string;
15
- resolvedAt?: Date;
16
- notes?: string;
17
- }
18
- interface ApprovalStore {
19
- create(request: ApprovalRequest): Promise<void>;
20
- update(id: string, updates: Partial<Omit<ApprovalRequest, 'id' | 'sessionId'>>): Promise<void>;
21
- list(status?: ApprovalStatus): Promise<ApprovalRequest[]>;
22
- }
23
- declare class InMemoryApprovalStore implements ApprovalStore {
24
- private readonly items;
25
- create(request: ApprovalRequest): Promise<void>;
26
- update(id: string, updates: Partial<Omit<ApprovalRequest, 'id' | 'sessionId'>>): Promise<void>;
27
- list(status?: ApprovalStatus): Promise<ApprovalRequest[]>;
28
- }
29
- interface ApprovalWorkflowOptions {
30
- store?: ApprovalStore;
31
- }
32
- declare class ApprovalWorkflow {
33
- private readonly store;
34
- constructor(store?: ApprovalStore);
35
- requestApproval(session: AgentSessionState, reason: string, payload?: Record<string, unknown>): Promise<ApprovalRequest>;
36
- resolve(id: string, status: Exclude<ApprovalStatus, 'pending'>, reviewer: string, notes?: string): Promise<void>;
37
- listPending(): Promise<ApprovalRequest[]>;
38
- }
39
- //#endregion
40
- export { ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ApprovalWorkflowOptions, InMemoryApprovalStore };
41
- //# sourceMappingURL=workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.d.ts","names":[],"sources":["../../src/approval/workflow.ts"],"sourcesContent":[],"mappings":";;;KAGY,cAAA;UAEK,eAAA;EAFL,EAAA,EAAA,MAAA;EAEK,SAAA,EAAA,MAAA;EAMF,KAAA,EAAA,MAAA;EACL,QAAA,CAAA,EAAA,MAAA;EACE,MAAA,EAAA,MAAA;EAEG,WAAA,EAJA,IAIA;EAAI,MAAA,EAHT,cAGS;EAIF,OAAA,CAAA,EANL,MAMkB,CAAA,MAAA,EAAA,OAAA,CAAA;EACZ,QAAA,CAAA,EAAA,MAAA;EAAkB,UAAA,CAAA,EALrB,IAKqB;EAGV,KAAA,CAAA,EAAA,MAAA;;AAAb,UAJI,aAAA,CAIJ;EACR,MAAA,CAAA,OAAA,EAJa,eAIb,CAAA,EAJ+B,OAI/B,CAAA,IAAA,CAAA;EACW,MAAA,CAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAFH,OAEG,CAFK,IAEL,CAFU,eAEV,EAAA,IAAA,GAAA,WAAA,CAAA,CAAA,CAAA,EADX,OACW,CAAA,IAAA,CAAA;EAAyB,IAAA,CAAA,MAAA,CAAA,EAAzB,cAAyB,CAAA,EAAR,OAAQ,CAAA,eAAA,EAAA,CAAA;;AAAD,cAG3B,qBAAA,YAAiC,aAHN,CAAA;EAG3B,iBAAA,KAAA;EAGW,MAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAkB,OAAlB,CAAA,IAAA,CAAA;EAAkB,MAAA,CAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAM7B,OAN6B,CAMrB,IANqB,CAMhB,eANgB,EAAA,IAAA,GAAA,WAAA,CAAA,CAAA,CAAA,EAOrC,OAPqC,CAAA,IAAA,CAAA;EAMhB,IAAA,CAAA,MAAA,CAAA,EAOJ,cAPI,CAAA,EAOa,OAPb,CAOqB,eAPrB,EAAA,CAAA;;AAAb,UAcI,uBAAA,CAdJ;EACR,KAAA,CAAA,EAcK,aAdL;;AAM0C,cAWlC,gBAAA,CAXkC;EAAR,iBAAA,KAAA;EAhBO,WAAA,CAAA,KAAA,CAAA,EA6BlB,aA7BkB;EAAa,eAAA,CAAA,OAAA,EAiC9C,iBAjC8C,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAmC7C,MAnC6C,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAmCtB,OAnCsB,CAmCtB,eAnCsB,CAAA;EAuB1C,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAuB,EA8B5B,OA9B4B,CA8BpB,cA7BV,EAAa,SAAA,CAAA,EAAA,QAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,MAAA,CAAA,EA+BL,OA/BK,CAAA,IAAA,CAAA;EAGV,WAAA,CAAA,CAAA,EAsCM,OAtCU,CAsCV,eAtCU,EAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","names":["store: ApprovalStore","request: ApprovalRequest"],"sources":["../../src/approval/workflow.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { AgentSessionState } from '../types';\n\nexport type ApprovalStatus = 'pending' | 'approved' | 'rejected';\n\nexport interface ApprovalRequest {\n id: string;\n sessionId: string;\n agent: string;\n tenantId?: string;\n reason: string;\n requestedAt: Date;\n status: ApprovalStatus;\n payload?: Record<string, unknown>;\n reviewer?: string;\n resolvedAt?: Date;\n notes?: string;\n}\n\nexport interface ApprovalStore {\n create(request: ApprovalRequest): Promise<void>;\n update(\n id: string,\n updates: Partial<Omit<ApprovalRequest, 'id' | 'sessionId'>>\n ): Promise<void>;\n list(status?: ApprovalStatus): Promise<ApprovalRequest[]>;\n}\n\nexport class InMemoryApprovalStore implements ApprovalStore {\n private readonly items: ApprovalRequest[] = [];\n\n async create(request: ApprovalRequest): Promise<void> {\n this.items.push(request);\n }\n\n async update(\n id: string,\n updates: Partial<Omit<ApprovalRequest, 'id' | 'sessionId'>>\n ): Promise<void> {\n const index = this.items.findIndex((item) => item.id === id);\n if (index === -1) return;\n this.items[index] = { ...this.items[index], ...updates } as ApprovalRequest;\n }\n\n async list(status?: ApprovalStatus): Promise<ApprovalRequest[]> {\n return status\n ? this.items.filter((item) => item.status === status)\n : [...this.items];\n }\n}\n\nexport interface ApprovalWorkflowOptions {\n store?: ApprovalStore;\n}\n\nexport class ApprovalWorkflow {\n constructor(\n private readonly store: ApprovalStore = new InMemoryApprovalStore()\n ) {}\n\n async requestApproval(\n session: AgentSessionState,\n reason: string,\n payload?: Record<string, unknown>\n ) {\n const request: ApprovalRequest = {\n id: randomUUID(),\n sessionId: session.sessionId,\n agent: session.agent,\n tenantId: session.tenantId,\n reason,\n requestedAt: new Date(),\n status: 'pending',\n payload,\n };\n await this.store.create(request);\n return request;\n }\n\n async resolve(\n id: string,\n status: Exclude<ApprovalStatus, 'pending'>,\n reviewer: string,\n notes?: string\n ) {\n await this.store.update(id, {\n status,\n reviewer,\n resolvedAt: new Date(),\n notes,\n });\n }\n\n async listPending() {\n return this.store.list('pending');\n }\n}\n"],"mappings":"yCA4BA,IAAa,EAAb,KAA4D,CAC1D,MAA4C,EAAE,CAE9C,MAAM,OAAO,EAAyC,CACpD,KAAK,MAAM,KAAK,EAAQ,CAG1B,MAAM,OACJ,EACA,EACe,CACf,IAAM,EAAQ,KAAK,MAAM,UAAW,GAAS,EAAK,KAAO,EAAG,CACxD,IAAU,KACd,KAAK,MAAM,GAAS,CAAE,GAAG,KAAK,MAAM,GAAQ,GAAG,EAAS,EAG1D,MAAM,KAAK,EAAqD,CAC9D,OAAO,EACH,KAAK,MAAM,OAAQ,GAAS,EAAK,SAAW,EAAO,CACnD,CAAC,GAAG,KAAK,MAAM,GAQV,EAAb,KAA8B,CAC5B,YACE,EAAwC,IAAI,EAC5C,CADiB,KAAA,MAAA,EAGnB,MAAM,gBACJ,EACA,EACA,EACA,CACA,IAAMC,EAA2B,CAC/B,GAAI,GAAY,CAChB,UAAW,EAAQ,UACnB,MAAO,EAAQ,MACf,SAAU,EAAQ,SAClB,SACA,YAAa,IAAI,KACjB,OAAQ,UACR,UACD,CAED,OADA,MAAM,KAAK,MAAM,OAAO,EAAQ,CACzB,EAGT,MAAM,QACJ,EACA,EACA,EACA,EACA,CACA,MAAM,KAAK,MAAM,OAAO,EAAI,CAC1B,SACA,WACA,WAAY,IAAI,KAChB,QACD,CAAC,CAGJ,MAAM,aAAc,CAClB,OAAO,KAAK,MAAM,KAAK,UAAU"}
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import { AgentEventName, AgentEventPayload, AgentMessage, AgentMessageMetadata, AgentRunRequestInput, AgentRunResult, AgentRunnerEventEmitter, AgentSessionState, AgentStatus, AgentToolContext, AgentToolDefinitionWithHandler, AgentToolInvocation, AgentToolResult } from "./types.js";
2
- import { ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ApprovalWorkflowOptions, InMemoryApprovalStore } from "./approval/workflow.js";
3
- import { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentRegistry, AgentSpec, AgentToolConfig, defineAgent } from "./spec.js";
4
- import { ToolExecutor, ToolExecutorOptions } from "./tools/executor.js";
5
- import { AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager, trackMessageInMemory } from "./memory/manager.js";
6
- import { AgentRunner, AgentRunnerConfig } from "./runner.js";
7
- import { InMemoryAgentMemory, InMemoryAgentMemoryOptions } from "./memory/in-memory.js";
8
- export { AgentConfidencePolicy, AgentEscalationPolicy, AgentEventName, AgentEventPayload, AgentKnowledgeRef, AgentMemoryConfig, AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentMessage, AgentMessageMetadata, AgentMeta, AgentPolicy, AgentRegistry, AgentRunRequestInput, AgentRunResult, AgentRunner, AgentRunnerConfig, AgentRunnerEventEmitter, AgentSessionMemory, AgentSessionState, AgentSpec, AgentStatus, AgentToolConfig, AgentToolContext, AgentToolDefinitionWithHandler, AgentToolInvocation, AgentToolResult, ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ApprovalWorkflowOptions, BaseAgentMemoryManager, InMemoryAgentMemory, InMemoryAgentMemoryOptions, InMemoryApprovalStore, ToolExecutor, ToolExecutorOptions, defineAgent, trackMessageInMemory };
@@ -1,22 +0,0 @@
1
- import { AgentSessionState } from "../types.js";
2
- import { AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager } from "./manager.js";
3
-
4
- //#region src/memory/in-memory.d.ts
5
- interface InMemoryAgentMemoryOptions {
6
- ttlMinutes?: number;
7
- maxEntries?: number;
8
- }
9
- declare class InMemoryAgentMemory extends BaseAgentMemoryManager {
10
- private readonly ttlMs;
11
- private readonly maxEntries;
12
- private readonly store;
13
- constructor(options?: InMemoryAgentMemoryOptions);
14
- load(sessionId: string): Promise<AgentSessionMemory | null>;
15
- save(snapshot: AgentSessionMemory): Promise<void>;
16
- summarize(session: AgentSessionState): Promise<AgentMemorySnapshot>;
17
- private trim;
18
- private evictExpired;
19
- }
20
- //#endregion
21
- export { InMemoryAgentMemory, InMemoryAgentMemoryOptions };
22
- //# sourceMappingURL=in-memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory.d.ts","names":[],"sources":["../../src/memory/in-memory.ts"],"sourcesContent":[],"mappings":";;;;UAaiB,0BAAA;;EAAA,UAAA,CAAA,EAAA,MAAA;AAKjB;AAKwB,cALX,mBAAA,SAA4B,sBAAA,CAKjB;EAMiB,iBAAA,KAAA;EAAR,iBAAA,UAAA;EASV,iBAAA,KAAA;EAAqB,WAAA,CAAA,OAAA,CAAA,EAfpB,0BAeoB;EAQjB,IAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAjBM,OAiBN,CAjBc,kBAiBd,GAAA,IAAA,CAAA;EAA4B,IAAA,CAAA,QAAA,EARhC,kBAQgC,CAAA,EARX,OAQW,CAAA,IAAA,CAAA;EAAR,SAAA,CAAA,OAAA,EAApB,iBAAoB,CAAA,EAAA,OAAA,CAAQ,mBAAR,CAAA;EA5BN,QAAA,IAAA;EAAsB,QAAA,YAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory.js","names":[],"sources":["../../src/memory/in-memory.ts"],"sourcesContent":["import type { AgentSessionState } from '../types';\nimport {\n BaseAgentMemoryManager,\n type AgentMemoryEntry,\n type AgentMemorySnapshot,\n type AgentSessionMemory,\n} from './manager';\n\ninterface StoredSession {\n data: AgentSessionMemory;\n expiresAt: number;\n}\n\nexport interface InMemoryAgentMemoryOptions {\n ttlMinutes?: number;\n maxEntries?: number;\n}\n\nexport class InMemoryAgentMemory extends BaseAgentMemoryManager {\n private readonly ttlMs: number;\n private readonly maxEntries: number;\n private readonly store = new Map<string, StoredSession>();\n\n constructor(options?: InMemoryAgentMemoryOptions) {\n super();\n this.ttlMs = (options?.ttlMinutes ?? 60) * 60 * 1000;\n this.maxEntries = options?.maxEntries ?? 250;\n }\n\n async load(sessionId: string): Promise<AgentSessionMemory | null> {\n this.evictExpired();\n const stored = this.store.get(sessionId);\n if (!stored) return null;\n stored.data.session.updatedAt = new Date();\n stored.expiresAt = Date.now() + this.ttlMs;\n return stored.data;\n }\n\n async save(snapshot: AgentSessionMemory): Promise<void> {\n this.trim(snapshot.memory.entries);\n this.store.set(snapshot.session.sessionId, {\n data: snapshot,\n expiresAt: Date.now() + this.ttlMs,\n });\n }\n\n async summarize(session: AgentSessionState): Promise<AgentMemorySnapshot> {\n const current =\n (await this.load(session.sessionId)) ?? this.bootstrapMemory(session);\n const content = current.memory.entries\n .slice(-10)\n .map((entry) => `- ${entry.type}: ${entry.content}`)\n .join('\\n');\n current.memory.summary = content;\n current.memory.lastSummarizedAt = new Date();\n await this.save(current);\n return current.memory;\n }\n\n private trim(entries: AgentMemoryEntry[]) {\n if (entries.length <= this.maxEntries) return;\n entries.splice(0, entries.length - this.maxEntries);\n }\n\n private evictExpired() {\n const now = Date.now();\n for (const [sessionId, stored] of this.store.entries()) {\n if (stored.expiresAt <= now) {\n this.store.delete(sessionId);\n }\n }\n }\n}\n"],"mappings":"sDAkBA,IAAa,EAAb,cAAyC,CAAuB,CAC9D,MACA,WACA,MAAyB,IAAI,IAE7B,YAAY,EAAsC,CAChD,OAAO,CACP,KAAK,OAAS,GAAS,YAAc,IAAM,GAAK,IAChD,KAAK,WAAa,GAAS,YAAc,IAG3C,MAAM,KAAK,EAAuD,CAChE,KAAK,cAAc,CACnB,IAAM,EAAS,KAAK,MAAM,IAAI,EAAU,CAIxC,OAHK,GACL,EAAO,KAAK,QAAQ,UAAY,IAAI,KACpC,EAAO,UAAY,KAAK,KAAK,CAAG,KAAK,MAC9B,EAAO,MAHM,KAMtB,MAAM,KAAK,EAA6C,CACtD,KAAK,KAAK,EAAS,OAAO,QAAQ,CAClC,KAAK,MAAM,IAAI,EAAS,QAAQ,UAAW,CACzC,KAAM,EACN,UAAW,KAAK,KAAK,CAAG,KAAK,MAC9B,CAAC,CAGJ,MAAM,UAAU,EAA0D,CACxE,IAAM,EACH,MAAM,KAAK,KAAK,EAAQ,UAAU,EAAK,KAAK,gBAAgB,EAAQ,CACjE,EAAU,EAAQ,OAAO,QAC5B,MAAM,IAAI,CACV,IAAK,GAAU,KAAK,EAAM,KAAK,IAAI,EAAM,UAAU,CACnD,KAAK;EAAK,CAIb,MAHA,GAAQ,OAAO,QAAU,EACzB,EAAQ,OAAO,iBAAmB,IAAI,KACtC,MAAM,KAAK,KAAK,EAAQ,CACjB,EAAQ,OAGjB,KAAa,EAA6B,CACpC,EAAQ,QAAU,KAAK,YAC3B,EAAQ,OAAO,EAAG,EAAQ,OAAS,KAAK,WAAW,CAGrD,cAAuB,CACrB,IAAM,EAAM,KAAK,KAAK,CACtB,IAAK,GAAM,CAAC,EAAW,KAAW,KAAK,MAAM,SAAS,CAChD,EAAO,WAAa,GACtB,KAAK,MAAM,OAAO,EAAU"}
@@ -1,3 +0,0 @@
1
- import { AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager, trackMessageInMemory } from "./manager.js";
2
- import { InMemoryAgentMemory, InMemoryAgentMemoryOptions } from "./in-memory.js";
3
- export { AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager, InMemoryAgentMemory, InMemoryAgentMemoryOptions, trackMessageInMemory };
@@ -1,42 +0,0 @@
1
- import { AgentMessage, AgentSessionState } from "../types.js";
2
-
3
- //#region src/memory/manager.d.ts
4
- interface AgentMemoryEntry {
5
- id: string;
6
- type: 'user' | 'assistant' | 'tool' | 'system';
7
- content: string;
8
- createdAt: Date;
9
- metadata?: Record<string, string>;
10
- }
11
- interface AgentMemorySnapshot {
12
- entries: AgentMemoryEntry[];
13
- summary?: string;
14
- lastSummarizedAt?: Date;
15
- }
16
- interface AgentSessionMemory {
17
- session: AgentSessionState;
18
- memory: AgentMemorySnapshot;
19
- }
20
- interface AgentMemoryManager {
21
- load(sessionId: string): Promise<AgentSessionMemory | null>;
22
- save(snapshot: AgentSessionMemory): Promise<void>;
23
- append(session: AgentSessionState, entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & {
24
- createdAt?: Date;
25
- }): Promise<AgentSessionMemory>;
26
- summarize(session: AgentSessionState): Promise<AgentMemorySnapshot | undefined>;
27
- prune(session: AgentSessionState): Promise<void>;
28
- }
29
- declare abstract class BaseAgentMemoryManager implements AgentMemoryManager {
30
- abstract load(sessionId: string): Promise<AgentSessionMemory | null>;
31
- abstract save(snapshot: AgentSessionMemory): Promise<void>;
32
- append(session: AgentSessionState, entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & {
33
- createdAt?: Date;
34
- }): Promise<AgentSessionMemory>;
35
- summarize(_session: AgentSessionState): Promise<AgentMemorySnapshot | undefined>;
36
- prune(_session: AgentSessionState): Promise<void>;
37
- protected bootstrapMemory(session: AgentSessionState): AgentSessionMemory;
38
- }
39
- declare function trackMessageInMemory(manager: AgentMemoryManager | undefined, session: AgentSessionState, message: AgentMessage): void;
40
- //#endregion
41
- export { AgentMemoryEntry, AgentMemoryManager, AgentMemorySnapshot, AgentSessionMemory, BaseAgentMemoryManager, trackMessageInMemory };
42
- //# sourceMappingURL=manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.d.ts","names":[],"sources":["../../src/memory/manager.ts"],"sourcesContent":[],"mappings":";;;UAGiB,gBAAA;;EAAA,IAAA,EAAA,MAAA,GAAA,WAAgB,GAAA,MAIpB,GACA,QAAM;EAGF,OAAA,EAAA,MAAA;EAMA,SAAA,EAVJ,IAUI;EAKA,QAAA,CAAA,EAdJ,MAcI,CAAA,MAAkB,EAAA,MAAA,CAAA;;AACR,UAZV,mBAAA,CAYU;EACV,OAAA,EAZN,gBAYM,EAAA;EAAqB,OAAA,CAAA,EAAA,MAAA;EAEzB,gBAAA,CAAA,EAZQ,IAYR;;AACF,UAVM,kBAAA,CAUN;EAA2D,OAAA,EAT3D,iBAS2D;EACzD,MAAA,EATH,mBASG;;AAEA,UARI,kBAAA,CAQJ;EACA,IAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EARc,OAQd,CARsB,kBAQtB,GAAA,IAAA,CAAA;EAAR,IAAA,CAAA,QAAA,EAPY,kBAOZ,CAAA,EAPiC,OAOjC,CAAA,IAAA,CAAA;EACY,MAAA,CAAA,OAAA,EANJ,iBAMI,EAAA,KAAA,EALN,IAKM,CALD,gBAKC,EAAA,IAAA,GAAA,WAAA,CAAA,GAAA;IAAoB,SAAA,CAAA,EALiC,IAKjC;EAAO,CAAA,CAAA,EAJvC,OAIuC,CAJ/B,kBAI+B,CAAA;EAGtB,SAAA,CAAA,OAAA,EALT,iBAKgC,CAAA,EAJxC,OAIwC,CAJhC,mBAIgC,GAAA,SAAA,CAAA;EACD,KAAA,CAAA,OAAA,EAJ3B,iBAI2B,CAAA,EAJP,OAIO,CAAA,IAAA,CAAA;;AAClB,uBAFJ,sBAAA,YAAkC,kBAE9B,CAAA;EAAqB,SAAA,IAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EADX,OACW,CADH,kBACG,GAAA,IAAA,CAAA;EAGlC,SAAA,IAAA,CAAA,QAAA,EAHa,kBAGb,CAAA,EAHkC,OAGlC,CAAA,IAAA,CAAA;EACG,MAAA,CAAA,OAAA,EADH,iBACG,EAAA,KAAA,EAAL,IAAK,CAAA,gBAAA,EAAA,IAAA,GAAA,WAAA,CAAA,GAAA;IAAL,SAAA,CAAA,EAA2D,IAA3D;EAA2D,CAAA,CAAA,EACjE,OADiE,CACzD,kBADyD,CAAA;EACzD,SAAA,CAAA,QAAA,EAcC,iBAdD,CAAA,EAeR,OAfQ,CAeA,mBAfA,GAAA,SAAA,CAAA;EAAR,KAAA,CAAA,QAAA,EAmBmB,iBAnBnB,CAAA,EAmBuC,OAnBvC,CAAA,IAAA,CAAA;EAcS,UAAA,eAAA,CAAA,OAAA,EASuB,iBATvB,CAAA,EAS2C,kBAT3C;;AACT,iBA0BW,oBAAA,CA1BX,OAAA,EA2BM,kBA3BN,GAAA,SAAA,EAAA,OAAA,EA4BM,iBA5BN,EAAA,OAAA,EA6BM,YA7BN,CAAA,EAAA,IAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","names":["finalEntry: AgentMemoryEntry"],"sources":["../../src/memory/manager.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { AgentMessage, AgentSessionState } from '../types';\n\nexport interface AgentMemoryEntry {\n id: string;\n type: 'user' | 'assistant' | 'tool' | 'system';\n content: string;\n createdAt: Date;\n metadata?: Record<string, string>;\n}\n\nexport interface AgentMemorySnapshot {\n entries: AgentMemoryEntry[];\n summary?: string;\n lastSummarizedAt?: Date;\n}\n\nexport interface AgentSessionMemory {\n session: AgentSessionState;\n memory: AgentMemorySnapshot;\n}\n\nexport interface AgentMemoryManager {\n load(sessionId: string): Promise<AgentSessionMemory | null>;\n save(snapshot: AgentSessionMemory): Promise<void>;\n append(\n session: AgentSessionState,\n entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & { createdAt?: Date }\n ): Promise<AgentSessionMemory>;\n summarize(\n session: AgentSessionState\n ): Promise<AgentMemorySnapshot | undefined>;\n prune(session: AgentSessionState): Promise<void>;\n}\n\nexport abstract class BaseAgentMemoryManager implements AgentMemoryManager {\n abstract load(sessionId: string): Promise<AgentSessionMemory | null>;\n abstract save(snapshot: AgentSessionMemory): Promise<void>;\n\n async append(\n session: AgentSessionState,\n entry: Omit<AgentMemoryEntry, 'id' | 'createdAt'> & { createdAt?: Date }\n ): Promise<AgentSessionMemory> {\n const current =\n (await this.load(session.sessionId)) ?? this.bootstrapMemory(session);\n const finalEntry: AgentMemoryEntry = {\n id: randomUUID(),\n createdAt: entry.createdAt ?? new Date(),\n ...entry,\n };\n current.memory.entries.push(finalEntry);\n await this.save(current);\n return current;\n }\n\n async summarize(\n _session: AgentSessionState\n ): Promise<AgentMemorySnapshot | undefined> {\n return undefined;\n }\n\n async prune(_session: AgentSessionState): Promise<void> {\n // noop by default\n }\n\n protected bootstrapMemory(session: AgentSessionState): AgentSessionMemory {\n return {\n session,\n memory: {\n entries: session.messages.map<AgentMemoryEntry>((message) => ({\n id: randomUUID(),\n createdAt: new Date(),\n type: message.role === 'assistant' ? 'assistant' : 'user',\n content: message.content\n .map((part) => ('text' in part ? part.text : ''))\n .join(''),\n metadata: message.metadata,\n })),\n },\n };\n }\n}\n\nexport function trackMessageInMemory(\n manager: AgentMemoryManager | undefined,\n session: AgentSessionState,\n message: AgentMessage\n) {\n if (!manager) return;\n void manager.append(session, {\n type: message.role,\n content: message.content\n .map((part) => ('text' in part ? part.text : ''))\n .join(''),\n metadata: message.metadata,\n });\n}\n"],"mappings":"yCAmCA,IAAsB,EAAtB,KAA2E,CAIzE,MAAM,OACJ,EACA,EAC6B,CAC7B,IAAM,EACH,MAAM,KAAK,KAAK,EAAQ,UAAU,EAAK,KAAK,gBAAgB,EAAQ,CACjEA,EAA+B,CACnC,GAAI,GAAY,CAChB,UAAW,EAAM,WAAa,IAAI,KAClC,GAAG,EACJ,CAGD,OAFA,EAAQ,OAAO,QAAQ,KAAK,EAAW,CACvC,MAAM,KAAK,KAAK,EAAQ,CACjB,EAGT,MAAM,UACJ,EAC0C,EAI5C,MAAM,MAAM,EAA4C,EAIxD,gBAA0B,EAAgD,CACxE,MAAO,CACL,UACA,OAAQ,CACN,QAAS,EAAQ,SAAS,IAAuB,IAAa,CAC5D,GAAI,GAAY,CAChB,UAAW,IAAI,KACf,KAAM,EAAQ,OAAS,YAAc,YAAc,OACnD,QAAS,EAAQ,QACd,IAAK,GAAU,SAAU,EAAO,EAAK,KAAO,GAAI,CAChD,KAAK,GAAG,CACX,SAAU,EAAQ,SACnB,EAAE,CACJ,CACF,GAIL,SAAgB,EACd,EACA,EACA,EACA,CACK,GACA,EAAQ,OAAO,EAAS,CAC3B,KAAM,EAAQ,KACd,QAAS,EAAQ,QACd,IAAK,GAAU,SAAU,EAAO,EAAK,KAAO,GAAI,CAChD,KAAK,GAAG,CACX,SAAU,EAAQ,SACnB,CAAC"}
package/dist/runner.d.ts DELETED
@@ -1,46 +0,0 @@
1
- import { AgentRunRequestInput, AgentRunResult, AgentRunnerEventEmitter, AgentSessionState } from "./types.js";
2
- import { ApprovalWorkflow } from "./approval/workflow.js";
3
- import { AgentRegistry } from "./spec.js";
4
- import { ToolExecutor } from "./tools/executor.js";
5
- import { AgentMemoryManager } from "./memory/manager.js";
6
- import { LLMProvider } from "@lssm/lib.contracts/integrations/providers/llm";
7
-
8
- //#region src/runner.d.ts
9
- interface AgentSessionStore {
10
- get(sessionId: string): Promise<AgentSessionState | null>;
11
- save(session: AgentSessionState): Promise<void>;
12
- }
13
- interface AgentRunnerConfig {
14
- registry: AgentRegistry;
15
- llm: LLMProvider;
16
- toolExecutor: ToolExecutor;
17
- memoryManager?: AgentMemoryManager;
18
- sessionStore?: AgentSessionStore;
19
- eventEmitter?: AgentRunnerEventEmitter;
20
- maxIterations?: number;
21
- defaultSystemPrompt?: string;
22
- approvalWorkflow?: ApprovalWorkflow;
23
- }
24
- declare class AgentRunner {
25
- private readonly registry;
26
- private readonly llm;
27
- private readonly toolExecutor;
28
- private readonly memoryManager?;
29
- private readonly sessionStore;
30
- private readonly eventEmitter?;
31
- private readonly maxIterations;
32
- private readonly defaultSystemPrompt;
33
- private readonly approvalWorkflow?;
34
- constructor(config: AgentRunnerConfig);
35
- run(request: AgentRunRequestInput): Promise<AgentRunResult>;
36
- private loadSession;
37
- private appendUserMessage;
38
- private buildMessages;
39
- private renderKnowledgeInstructions;
40
- private persistSession;
41
- private emit;
42
- private ensureTools;
43
- }
44
- //#endregion
45
- export { AgentRunner, AgentRunnerConfig };
46
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","names":[],"sources":["../src/runner.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAuBU,iBAAA;0BACgB,QAAQ;EADxB,IAAA,CAAA,OAAA,EAEM,iBAFW,CAAA,EAES,OAFT,CAAA,IAAA,CAAA;;AACD,UAgBT,iBAAA,CAhBS;EACV,QAAA,EAgBJ,aAhBI;EAAoB,GAAA,EAiB7B,WAjB6B;EAAO,YAAA,EAkB3B,YAlB2B;EAe1B,aAAA,CAAA,EAIC,kBAJgB;EACtB,YAAA,CAAA,EAIK,iBAJL;EACL,YAAA,CAAA,EAIU,uBAJV;EACS,aAAA,CAAA,EAAA,MAAA;EACE,mBAAA,CAAA,EAAA,MAAA;EACD,gBAAA,CAAA,EAII,gBAJJ;;AAII,cAGR,WAAA,CAHQ;EAAgB,iBAAA,QAAA;EAGxB,iBAAW,GAAA;EAWF,iBAAA,YAAA;EAcD,iBAAA,aAAA;EAA+B,iBAAA,YAAA;EAAR,iBAAA,YAAA;EAAO,iBAAA,aAAA;;;sBAd7B;eAcD,uBAAuB,QAAQ"}
package/dist/runner.js DELETED
@@ -1,5 +0,0 @@
1
- import"./tools/executor.js";import{trackMessageInMemory as e}from"./memory/manager.js";import{randomUUID as t}from"node:crypto";var n=class{store=new Map;async get(e){return this.store.get(e)??null}async save(e){this.store.set(e.sessionId,{...e})}},r=class{registry;llm;toolExecutor;memoryManager;sessionStore;eventEmitter;maxIterations;defaultSystemPrompt;approvalWorkflow;constructor(e){this.registry=e.registry,this.llm=e.llm,this.toolExecutor=e.toolExecutor,this.memoryManager=e.memoryManager,this.sessionStore=e.sessionStore??new n,this.eventEmitter=e.eventEmitter,this.maxIterations=e.maxIterations??6,this.defaultSystemPrompt=e.defaultSystemPrompt??`You are a ContractSpec agent. Follow policies, cite sources, and escalate when unsure.`,this.approvalWorkflow=e.approvalWorkflow}async run(t){let n=this.registry.require(t.agent,t.version);this.ensureTools(n);let r=await this.loadSession(n,t);this.appendUserMessage(r,t),await this.persistSession(r);let l=[],u=null,d;for(let f=0;f<this.maxIterations;f++){await this.emit(`agent.iteration.started`,{sessionId:r.sessionId,agent:n.meta.name,iteration:f+1,tenantId:t.tenantId}),u=await this.llm.chat(this.buildMessages(n,r,t),{tools:this.toolExecutor.listLLMTools(n.tools.map(e=>e.name)),metadata:{agent:n.meta.name,tenantId:t.tenantId??``},userId:t.actorId});let p=u.message;r.messages.push(p),r.iterations+=1,r.updatedAt=new Date,e(this.memoryManager,r,p),await this.persistSession(r);let m=i(p);if(m.length>0){for(let i of m){let o=a(i.arguments),{invocation:s,result:c}=await this.toolExecutor.execute(i.name,o,{session:r,tenantId:t.tenantId,actorId:t.actorId,metadata:t.metadata,emit:(e,t)=>this.emit(e,t)});l.push(s);let u={role:`tool`,name:i.name,toolCallId:i.id,content:[{type:`tool-result`,toolCallId:i.id,output:JSON.stringify(c??{})}]};r.messages.push(u),e(this.memoryManager,r,u),await this.persistSession(r),await this.emit(`agent.tool.completed`,{sessionId:r.sessionId,agent:n.meta.name,toolName:i.name,tenantId:t.tenantId})}continue}let h=o(p),g=s(p,n.policy?.confidence),_=c(g,n);if(r.status=_?`escalated`:`completed`,r.lastConfidence=g,await this.persistSession(r),_&&this.approvalWorkflow){let e=await this.approvalWorkflow.requestApproval(r,`Low confidence response`,{confidence:g,outputText:h});d=e.id,await this.emit(`agent.approval_requested`,{sessionId:r.sessionId,agent:n.meta.name,tenantId:t.tenantId,metadata:{approvalId:e.id}})}return await this.emit(_?`agent.escalated`:`agent.completed`,{sessionId:r.sessionId,agent:n.meta.name,tenantId:t.tenantId,metadata:{confidence:g,finishReason:u.finishReason??`stop`}}),{session:r,response:u,outputText:h,confidence:g,iterations:r.iterations,requiresEscalation:_,approvalRequestId:d,finishReason:u.finishReason??`stop`,toolInvocations:l}}return r.status=`failed`,await this.persistSession(r),await this.emit(`agent.failed`,{sessionId:r.sessionId,agent:n.meta.name,tenantId:t.tenantId,metadata:{reason:`max_iterations`}}),{session:r,response:u??{message:{role:`assistant`,content:[{type:`text`,text:``}]}},outputText:u?o(u.message):``,confidence:r.lastConfidence??0,iterations:r.iterations,requiresEscalation:!0,approvalRequestId:d,finishReason:`max_iterations`,toolInvocations:l}}async loadSession(e,n){if(n.sessionId){let e=await this.sessionStore.get(n.sessionId);if(e)return e}let r=new Date,i={sessionId:n.sessionId??t(),agent:e.meta.name,version:e.meta.version,tenantId:n.tenantId,status:`running`,messages:[],createdAt:r,updatedAt:r,iterations:0,metadata:n.metadata};return await this.emit(`agent.session.created`,{sessionId:i.sessionId,agent:e.meta.name,tenantId:n.tenantId}),i}appendUserMessage(t,n){let r={role:`user`,content:[{type:`text`,text:n.input}],metadata:n.metadata};t.messages.push(r),e(this.memoryManager,t,r)}buildMessages(e,t,n){return[{role:`system`,content:[{type:`text`,text:[this.defaultSystemPrompt,e.instructions,n.instructionsOverride,this.renderKnowledgeInstructions(e)].filter(Boolean).join(`
2
-
3
- `)}]},...t.messages]}renderKnowledgeInstructions(e){return e.knowledge?.length?`Knowledge spaces available:\n${e.knowledge.map(e=>{let t=e.category??`unspecified`,n=e.instructions?` Guidance: ${e.instructions}`:``;return`- ${e.key} (category: ${t})${n}`}).join(`
4
- `)}`:``}async persistSession(e){e.updatedAt=new Date,await this.sessionStore.save(e),await this.emit(`agent.session.updated`,{sessionId:e.sessionId,agent:e.agent,tenantId:e.tenantId,metadata:{status:e.status}})}async emit(e,t){await this.eventEmitter?.(e,t)}ensureTools(e){for(let t of e.tools)if(!this.toolExecutor.has(t.name))throw Error(`Agent ${e.meta.name} requires tool "${t.name}" but it is not registered.`)}};function i(e){return e.content.filter(e=>e.type===`tool-call`)}function a(e){if(!e)return{};try{return JSON.parse(e)}catch{return e}}function o(e){return e.content.map(e=>`text`in e?e.text:``).join(``).trim()}function s(e,t){let n=e.metadata?.confidence??e.metadata?.Confidence,r=n?Number.parseFloat(n):NaN;return Number.isNaN(r)?t?.default??.5:Math.max(0,Math.min(1,r))}function c(e,t){let n=t.policy?.confidence?.min??.7;return e<(t.policy?.escalation?.confidenceThreshold??n)}export{r as AgentRunner};
5
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","names":["toolInvocations: AgentToolInvocation[]","response: LLMResponse | null","approvalRequestId: string | undefined","toolMessage: AgentMessage","session: AgentSessionState","userMessage: AgentMessage"],"sources":["../src/runner.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type {\n LLMMessage,\n LLMProvider,\n LLMResponse,\n LLMToolCallPart,\n} from '@lssm/lib.contracts/integrations/providers/llm';\nimport type { AgentSpec, AgentRegistry } from './spec';\nimport type {\n AgentEventName,\n AgentEventPayload,\n AgentMessage,\n AgentRunRequestInput,\n AgentRunResult,\n AgentSessionState,\n AgentToolInvocation,\n AgentRunnerEventEmitter,\n} from './types';\nimport { ToolExecutor } from './tools/executor';\nimport type { AgentMemoryManager } from './memory/manager';\nimport { trackMessageInMemory } from './memory/manager';\nimport type { ApprovalWorkflow } from './approval';\n\ninterface AgentSessionStore {\n get(sessionId: string): Promise<AgentSessionState | null>;\n save(session: AgentSessionState): Promise<void>;\n}\n\nclass InMemoryAgentSessionStore implements AgentSessionStore {\n private readonly store = new Map<string, AgentSessionState>();\n\n async get(sessionId: string): Promise<AgentSessionState | null> {\n return this.store.get(sessionId) ?? null;\n }\n\n async save(session: AgentSessionState): Promise<void> {\n this.store.set(session.sessionId, { ...session });\n }\n}\n\nexport interface AgentRunnerConfig {\n registry: AgentRegistry;\n llm: LLMProvider;\n toolExecutor: ToolExecutor;\n memoryManager?: AgentMemoryManager;\n sessionStore?: AgentSessionStore;\n eventEmitter?: AgentRunnerEventEmitter;\n maxIterations?: number;\n defaultSystemPrompt?: string;\n approvalWorkflow?: ApprovalWorkflow;\n}\n\nexport class AgentRunner {\n private readonly registry: AgentRegistry;\n private readonly llm: LLMProvider;\n private readonly toolExecutor: ToolExecutor;\n private readonly memoryManager?: AgentMemoryManager;\n private readonly sessionStore: AgentSessionStore;\n private readonly eventEmitter?: AgentRunnerEventEmitter;\n private readonly maxIterations: number;\n private readonly defaultSystemPrompt: string;\n private readonly approvalWorkflow?: ApprovalWorkflow;\n\n constructor(config: AgentRunnerConfig) {\n this.registry = config.registry;\n this.llm = config.llm;\n this.toolExecutor = config.toolExecutor;\n this.memoryManager = config.memoryManager;\n this.sessionStore = config.sessionStore ?? new InMemoryAgentSessionStore();\n this.eventEmitter = config.eventEmitter;\n this.maxIterations = config.maxIterations ?? 6;\n this.defaultSystemPrompt =\n config.defaultSystemPrompt ??\n 'You are a ContractSpec agent. Follow policies, cite sources, and escalate when unsure.';\n this.approvalWorkflow = config.approvalWorkflow;\n }\n\n async run(request: AgentRunRequestInput): Promise<AgentRunResult> {\n const spec = this.registry.require(request.agent, request.version);\n this.ensureTools(spec);\n const session = await this.loadSession(spec, request);\n this.appendUserMessage(session, request);\n await this.persistSession(session);\n\n const toolInvocations: AgentToolInvocation[] = [];\n let response: LLMResponse | null = null;\n let approvalRequestId: string | undefined;\n\n for (let iteration = 0; iteration < this.maxIterations; iteration++) {\n await this.emit('agent.iteration.started', {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n iteration: iteration + 1,\n tenantId: request.tenantId,\n });\n\n response = await this.llm.chat(\n this.buildMessages(spec, session, request),\n {\n tools: this.toolExecutor.listLLMTools(\n spec.tools.map((tool) => tool.name)\n ),\n metadata: {\n agent: spec.meta.name,\n tenantId: request.tenantId ?? '',\n },\n userId: request.actorId,\n }\n );\n\n const assistantMessage = response.message as AgentMessage;\n session.messages.push(assistantMessage);\n session.iterations += 1;\n session.updatedAt = new Date();\n trackMessageInMemory(this.memoryManager, session, assistantMessage);\n await this.persistSession(session);\n\n const toolCalls = extractToolCalls(assistantMessage);\n if (toolCalls.length > 0) {\n for (const call of toolCalls) {\n const args = safeParse(call.arguments);\n const { invocation, result } = await this.toolExecutor.execute(\n call.name,\n args,\n {\n session,\n tenantId: request.tenantId,\n actorId: request.actorId,\n metadata: request.metadata,\n emit: (event, payload) => this.emit(event, payload),\n }\n );\n toolInvocations.push(invocation);\n const toolMessage: AgentMessage = {\n role: 'tool',\n name: call.name,\n toolCallId: call.id,\n content: [\n {\n type: 'tool-result',\n toolCallId: call.id,\n output: JSON.stringify(result ?? {}),\n },\n ],\n } as LLMMessage;\n session.messages.push(toolMessage);\n trackMessageInMemory(this.memoryManager, session, toolMessage);\n await this.persistSession(session);\n await this.emit('agent.tool.completed', {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n toolName: call.name,\n tenantId: request.tenantId,\n });\n }\n continue;\n }\n\n const outputText = getAssistantText(assistantMessage);\n const confidence = deriveConfidence(\n assistantMessage,\n spec.policy?.confidence\n );\n const requiresEscalation = shouldEscalate(confidence, spec);\n session.status = requiresEscalation ? 'escalated' : 'completed';\n session.lastConfidence = confidence;\n await this.persistSession(session);\n if (requiresEscalation && this.approvalWorkflow) {\n const approval = await this.approvalWorkflow.requestApproval(\n session,\n 'Low confidence response',\n {\n confidence,\n outputText,\n }\n );\n approvalRequestId = approval.id;\n await this.emit('agent.approval_requested', {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n tenantId: request.tenantId,\n metadata: { approvalId: approval.id },\n });\n }\n await this.emit(\n requiresEscalation ? 'agent.escalated' : 'agent.completed',\n {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n tenantId: request.tenantId,\n metadata: {\n confidence,\n finishReason: response.finishReason ?? 'stop',\n },\n }\n );\n\n return {\n session,\n response,\n outputText,\n confidence,\n iterations: session.iterations,\n requiresEscalation,\n approvalRequestId,\n finishReason: response.finishReason ?? 'stop',\n toolInvocations,\n };\n }\n\n session.status = 'failed';\n await this.persistSession(session);\n await this.emit('agent.failed', {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n tenantId: request.tenantId,\n metadata: { reason: 'max_iterations' },\n });\n\n return {\n session,\n response:\n response ??\n ({\n message: { role: 'assistant', content: [{ type: 'text', text: '' }] },\n } as LLMResponse),\n outputText: response\n ? getAssistantText(response.message as AgentMessage)\n : '',\n confidence: session.lastConfidence ?? 0,\n iterations: session.iterations,\n requiresEscalation: true,\n approvalRequestId,\n finishReason: 'max_iterations',\n toolInvocations,\n };\n }\n\n private async loadSession(\n spec: AgentSpec,\n request: AgentRunRequestInput\n ): Promise<AgentSessionState> {\n if (request.sessionId) {\n const existing = await this.sessionStore.get(request.sessionId);\n if (existing) return existing;\n }\n const now = new Date();\n const session: AgentSessionState = {\n sessionId: request.sessionId ?? randomUUID(),\n agent: spec.meta.name,\n version: spec.meta.version,\n tenantId: request.tenantId,\n status: 'running',\n messages: [],\n createdAt: now,\n updatedAt: now,\n iterations: 0,\n metadata: request.metadata,\n };\n await this.emit('agent.session.created', {\n sessionId: session.sessionId,\n agent: spec.meta.name,\n tenantId: request.tenantId,\n });\n return session;\n }\n\n private appendUserMessage(\n session: AgentSessionState,\n request: AgentRunRequestInput\n ) {\n const userMessage: AgentMessage = {\n role: 'user',\n content: [{ type: 'text', text: request.input }],\n metadata: request.metadata,\n } as LLMMessage;\n session.messages.push(userMessage);\n trackMessageInMemory(this.memoryManager, session, userMessage);\n }\n\n private buildMessages(\n spec: AgentSpec,\n session: AgentSessionState,\n request: AgentRunRequestInput\n ): AgentMessage[] {\n const systemPrompt = [\n this.defaultSystemPrompt,\n spec.instructions,\n request.instructionsOverride,\n this.renderKnowledgeInstructions(spec),\n ]\n .filter(Boolean)\n .join('\\n\\n');\n\n const systemMessage: AgentMessage = {\n role: 'system',\n content: [{ type: 'text', text: systemPrompt }],\n } as LLMMessage;\n\n return [systemMessage, ...session.messages];\n }\n\n private renderKnowledgeInstructions(spec: AgentSpec): string {\n if (!spec.knowledge?.length) return '';\n const bullets = spec.knowledge\n .map((binding) => {\n const category = binding.category ?? 'unspecified';\n const instruction = binding.instructions\n ? ` Guidance: ${binding.instructions}`\n : '';\n return `- ${binding.key} (category: ${category})${instruction}`;\n })\n .join('\\n');\n return `Knowledge spaces available:\\n${bullets}`;\n }\n\n private async persistSession(session: AgentSessionState) {\n session.updatedAt = new Date();\n await this.sessionStore.save(session);\n await this.emit('agent.session.updated', {\n sessionId: session.sessionId,\n agent: session.agent,\n tenantId: session.tenantId,\n metadata: { status: session.status },\n });\n }\n\n private async emit(event: AgentEventName, payload: AgentEventPayload) {\n await this.eventEmitter?.(event, payload);\n }\n\n private ensureTools(spec: AgentSpec) {\n for (const tool of spec.tools) {\n if (!this.toolExecutor.has(tool.name)) {\n throw new Error(\n `Agent ${spec.meta.name} requires tool \"${tool.name}\" but it is not registered.`\n );\n }\n }\n }\n}\n\nfunction extractToolCalls(message: AgentMessage): LLMToolCallPart[] {\n return message.content.filter(\n (part): part is LLMToolCallPart => part.type === 'tool-call'\n );\n}\n\nfunction safeParse(payload?: string): unknown {\n if (!payload) return {};\n try {\n return JSON.parse(payload);\n } catch {\n return payload;\n }\n}\n\nfunction getAssistantText(message: AgentMessage): string {\n return message.content\n .map((part) => ('text' in part ? part.text : ''))\n .join('')\n .trim();\n}\n\nfunction deriveConfidence(\n message: AgentMessage,\n config?: { min?: number; default?: number }\n): number {\n const raw = message.metadata?.confidence ?? message.metadata?.Confidence;\n const parsed = raw ? Number.parseFloat(raw) : NaN;\n if (!Number.isNaN(parsed)) return Math.max(0, Math.min(1, parsed));\n return config?.default ?? 0.5;\n}\n\nfunction shouldEscalate(confidence: number, spec: AgentSpec): boolean {\n const min = spec.policy?.confidence?.min ?? 0.7;\n const threshold = spec.policy?.escalation?.confidenceThreshold ?? min;\n return confidence < threshold;\n}\n"],"mappings":"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"}
package/dist/spec.d.ts DELETED
@@ -1,78 +0,0 @@
1
- import { OwnerShipMeta } from "@lssm/lib.contracts/ownership";
2
- import { KnowledgeCategory } from "@lssm/lib.contracts/knowledge/spec";
3
- import { PolicyRef } from "@lssm/lib.contracts/policy/spec";
4
-
5
- //#region src/spec.d.ts
6
- interface AgentMeta extends OwnerShipMeta {
7
- name: string;
8
- version: number;
9
- }
10
- interface AgentToolConfig {
11
- name: string;
12
- description?: string;
13
- /** JSON Schema fragment forwarded to the LLM tool definition. */
14
- schema?: Record<string, unknown>;
15
- /** Optional cooldown in milliseconds. */
16
- cooldownMs?: number;
17
- timeoutMs?: number;
18
- /** Whether the tool can be executed without human approval. */
19
- automationSafe?: boolean;
20
- /** Optional policy guard that must evaluate to allow the tool call. */
21
- policy?: PolicyRef;
22
- }
23
- interface AgentKnowledgeRef {
24
- key: string;
25
- version?: number;
26
- category?: KnowledgeCategory;
27
- required?: boolean;
28
- /** Additional instructions appended when the space is available. */
29
- instructions?: string;
30
- }
31
- interface AgentMemoryConfig {
32
- maxEntries?: number;
33
- ttlMinutes?: number;
34
- summaryTrigger?: number;
35
- persistLongTerm?: boolean;
36
- }
37
- interface AgentConfidencePolicy {
38
- /** Minimum acceptable confidence before escalation. Defaults to 0.7. */
39
- min?: number;
40
- /** Default value used when provider does not report confidence. */
41
- default?: number;
42
- }
43
- interface AgentEscalationPolicy {
44
- /** Auto escalate when confidence < threshold. */
45
- confidenceThreshold?: number;
46
- /** Escalate when a tool throws irrecoverable errors. */
47
- onToolFailure?: boolean;
48
- /** Escalate when iteration budget exceeded. */
49
- onTimeout?: boolean;
50
- /** Optional human approval workflow ID. */
51
- approvalWorkflow?: string;
52
- }
53
- interface AgentPolicy {
54
- confidence?: AgentConfidencePolicy;
55
- escalation?: AgentEscalationPolicy;
56
- flags?: string[];
57
- }
58
- interface AgentSpec {
59
- meta: AgentMeta;
60
- instructions: string;
61
- description?: string;
62
- tags?: string[];
63
- tools: AgentToolConfig[];
64
- memory?: AgentMemoryConfig;
65
- knowledge?: AgentKnowledgeRef[];
66
- policy?: AgentPolicy;
67
- }
68
- declare function defineAgent(spec: AgentSpec): AgentSpec;
69
- declare class AgentRegistry {
70
- private readonly specs;
71
- register(spec: AgentSpec): this;
72
- list(): AgentSpec[];
73
- get(name: string, version?: number): AgentSpec | undefined;
74
- require(name: string, version?: number): AgentSpec;
75
- }
76
- //#endregion
77
- export { AgentConfidencePolicy, AgentEscalationPolicy, AgentKnowledgeRef, AgentMemoryConfig, AgentMeta, AgentPolicy, AgentRegistry, AgentSpec, AgentToolConfig, defineAgent };
78
- //# sourceMappingURL=spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../src/spec.ts"],"sourcesContent":[],"mappings":";;;;;UAIiB,SAAA,SAAkB;;EAAlB,OAAA,EAAA,MAAU;AAK3B;AAciB,UAdA,eAAA,CAciB;EASjB,IAAA,EAAA,MAAA;EAOA,WAAA,CAAA,EAAA,MAAA;EAOA;EAWA,MAAA,CAAA,EA5CN,MA4CiB,CAAA,MAAA,EAAA,OACb,CAAA;EAKE;EACT,UAAA,CAAA,EAAA,MAAA;EAIC,SAAA,CAAA,EAAA,MAAA;EACE;EACG,cAAA,CAAA,EAAA,OAAA;EACH;EAAW,MAAA,CAAA,EAnDX,SAmDW;AAKtB;AAca,UAnEI,iBAAA,CAmES;EAGT,GAAA,EAAA,MAAA;EASP,OAAA,CAAA,EAAA,MAAA;EAI6B,QAAA,CAAA,EAhF1B,iBAgF0B;EAgBI,QAAA,CAAA,EAAA,OAAA;EAAS;;;UA1FnC,iBAAA;;;;;;UAOA,qBAAA;;;;;;UAOA,qBAAA;;;;;;;;;;UAWA,WAAA;eACF;eACA;;;UAIE,SAAA;QACT;;;;SAIC;WACE;cACG;WACH;;iBAKK,WAAA,OAAkB,YAAY;cAcjC,aAAA;;iBAGI;UASP;uCAI6B;2CAgBI"}
package/dist/spec.js DELETED
@@ -1,2 +0,0 @@
1
- const e=e=>`${e.name}.v${e.version}`;function t(e){if(!e.meta?.name)throw Error(`Agent name is required`);if(!Number.isFinite(e.meta.version))throw Error(`Agent ${e.meta.name} is missing a numeric version`);if(!e.instructions?.trim())throw Error(`Agent ${e.meta.name} requires instructions`);if(!e.tools?.length)throw Error(`Agent ${e.meta.name} must expose at least one tool`);return Object.freeze(e)}var n=class{specs=new Map;register(t){let n=e(t.meta);if(this.specs.has(n))throw Error(`Duplicate agent spec registered for ${n}`);return this.specs.set(n,t),this}list(){return[...this.specs.values()]}get(e,t){if(t!=null)return this.specs.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.specs.values())t.meta.name===e&&t.meta.version>r&&(n=t,r=t.meta.version);return n}require(e,t){let n=this.get(e,t);if(!n)throw Error(`Agent spec not found for ${e}${t?`.v${t}`:``}`);return n}};export{n as AgentRegistry,t as defineAgent};
2
- //# sourceMappingURL=spec.js.map
package/dist/spec.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","names":["latest: AgentSpec | undefined"],"sources":["../src/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '@lssm/lib.contracts/ownership';\nimport type { KnowledgeCategory } from '@lssm/lib.contracts/knowledge/spec';\nimport type { PolicyRef } from '@lssm/lib.contracts/policy/spec';\n\nexport interface AgentMeta extends OwnerShipMeta {\n name: string;\n version: number;\n}\n\nexport interface AgentToolConfig {\n name: string;\n description?: string;\n /** JSON Schema fragment forwarded to the LLM tool definition. */\n schema?: Record<string, unknown>;\n /** Optional cooldown in milliseconds. */\n cooldownMs?: number;\n timeoutMs?: number;\n /** Whether the tool can be executed without human approval. */\n automationSafe?: boolean;\n /** Optional policy guard that must evaluate to allow the tool call. */\n policy?: PolicyRef;\n}\n\nexport interface AgentKnowledgeRef {\n key: string;\n version?: number;\n category?: KnowledgeCategory;\n required?: boolean;\n /** Additional instructions appended when the space is available. */\n instructions?: string;\n}\n\nexport interface AgentMemoryConfig {\n maxEntries?: number;\n ttlMinutes?: number;\n summaryTrigger?: number;\n persistLongTerm?: boolean;\n}\n\nexport interface AgentConfidencePolicy {\n /** Minimum acceptable confidence before escalation. Defaults to 0.7. */\n min?: number;\n /** Default value used when provider does not report confidence. */\n default?: number;\n}\n\nexport interface AgentEscalationPolicy {\n /** Auto escalate when confidence < threshold. */\n confidenceThreshold?: number;\n /** Escalate when a tool throws irrecoverable errors. */\n onToolFailure?: boolean;\n /** Escalate when iteration budget exceeded. */\n onTimeout?: boolean;\n /** Optional human approval workflow ID. */\n approvalWorkflow?: string;\n}\n\nexport interface AgentPolicy {\n confidence?: AgentConfidencePolicy;\n escalation?: AgentEscalationPolicy;\n flags?: string[];\n}\n\nexport interface AgentSpec {\n meta: AgentMeta;\n instructions: string;\n description?: string;\n tags?: string[];\n tools: AgentToolConfig[];\n memory?: AgentMemoryConfig;\n knowledge?: AgentKnowledgeRef[];\n policy?: AgentPolicy;\n}\n\nconst agentKey = (meta: AgentMeta) => `${meta.name}.v${meta.version}`;\n\nexport function defineAgent(spec: AgentSpec): AgentSpec {\n if (!spec.meta?.name) throw new Error('Agent name is required');\n if (!Number.isFinite(spec.meta.version)) {\n throw new Error(`Agent ${spec.meta.name} is missing a numeric version`);\n }\n if (!spec.instructions?.trim()) {\n throw new Error(`Agent ${spec.meta.name} requires instructions`);\n }\n if (!spec.tools?.length) {\n throw new Error(`Agent ${spec.meta.name} must expose at least one tool`);\n }\n return Object.freeze(spec);\n}\n\nexport class AgentRegistry {\n private readonly specs = new Map<string, AgentSpec>();\n\n register(spec: AgentSpec): this {\n const key = agentKey(spec.meta);\n if (this.specs.has(key)) {\n throw new Error(`Duplicate agent spec registered for ${key}`);\n }\n this.specs.set(key, spec);\n return this;\n }\n\n list(): AgentSpec[] {\n return [...this.specs.values()];\n }\n\n get(name: string, version?: number): AgentSpec | undefined {\n if (version != null) {\n return this.specs.get(`${name}.v${version}`);\n }\n let latest: AgentSpec | undefined;\n let maxVersion = -Infinity;\n for (const spec of this.specs.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > maxVersion) {\n latest = spec;\n maxVersion = spec.meta.version;\n }\n }\n return latest;\n }\n\n require(name: string, version?: number): AgentSpec {\n const spec = this.get(name, version);\n if (!spec) {\n throw new Error(\n `Agent spec not found for ${name}${version ? `.v${version}` : ''}`\n );\n }\n return spec;\n }\n}\n"],"mappings":"AA0EA,MAAM,EAAY,GAAoB,GAAG,EAAK,KAAK,IAAI,EAAK,UAE5D,SAAgB,EAAY,EAA4B,CACtD,GAAI,CAAC,EAAK,MAAM,KAAM,MAAU,MAAM,yBAAyB,CAC/D,GAAI,CAAC,OAAO,SAAS,EAAK,KAAK,QAAQ,CACrC,MAAU,MAAM,SAAS,EAAK,KAAK,KAAK,+BAA+B,CAEzE,GAAI,CAAC,EAAK,cAAc,MAAM,CAC5B,MAAU,MAAM,SAAS,EAAK,KAAK,KAAK,wBAAwB,CAElE,GAAI,CAAC,EAAK,OAAO,OACf,MAAU,MAAM,SAAS,EAAK,KAAK,KAAK,gCAAgC,CAE1E,OAAO,OAAO,OAAO,EAAK,CAG5B,IAAa,EAAb,KAA2B,CACzB,MAAyB,IAAI,IAE7B,SAAS,EAAuB,CAC9B,IAAM,EAAM,EAAS,EAAK,KAAK,CAC/B,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,uCAAuC,IAAM,CAG/D,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAAoB,CAClB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAyC,CACzD,GAAI,GAAW,KACb,OAAO,KAAK,MAAM,IAAI,GAAG,EAAK,IAAI,IAAU,CAE9C,IAAIA,EACA,EAAa,KACjB,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAS,EACT,EAAa,EAAK,KAAK,SAG3B,OAAO,EAGT,QAAQ,EAAc,EAA6B,CACjD,IAAM,EAAO,KAAK,IAAI,EAAM,EAAQ,CACpC,GAAI,CAAC,EACH,MAAU,MACR,4BAA4B,IAAO,EAAU,KAAK,IAAY,KAC/D,CAEH,OAAO"}
@@ -1,25 +0,0 @@
1
- import { AgentToolContext, AgentToolDefinitionWithHandler, AgentToolInvocation, AgentToolResult } from "../types.js";
2
- import { LLMToolDefinition } from "@lssm/lib.contracts/integrations/providers/llm";
3
-
4
- //#region src/tools/executor.d.ts
5
- interface ToolExecutorOptions {
6
- tools?: AgentToolDefinitionWithHandler[];
7
- /** Maximum time to wait for graceful cancellation after timeout. */
8
- abortGracePeriodMs?: number;
9
- }
10
- declare class ToolExecutor {
11
- private readonly tools;
12
- private readonly abortGracePeriodMs;
13
- constructor(options?: ToolExecutorOptions);
14
- register(tool: AgentToolDefinitionWithHandler): this;
15
- listLLMTools(allowed?: string[]): LLMToolDefinition[];
16
- has(name: string): boolean;
17
- execute(name: string, args: unknown, ctx: AgentToolContext): Promise<{
18
- invocation: AgentToolInvocation;
19
- result?: AgentToolResult;
20
- }>;
21
- private rejectOnAbort;
22
- }
23
- //#endregion
24
- export { ToolExecutor, ToolExecutorOptions };
25
- //# sourceMappingURL=executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.d.ts","names":[],"sources":["../../src/tools/executor.ts"],"sourcesContent":[],"mappings":";;;;UASiB,mBAAA;UACP;EADO;EAMJ,kBAAY,CAAA,EAAA,MAAA;;AASR,cATJ,YAAA,CASI;EAKmB,iBAAA,KAAA;EAgB3B,iBAAA,kBAAA;EACkB,WAAA,CAAA,OAAA,CAAA,EA3BH,mBA2BG;EAA8B,QAAA,CAAA,IAAA,EAtBxC,8BAsBwC,CAAA,EAAA,IAAA;EAApD,YAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAjB+B,iBAiB/B,EAAA;EAAO,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;4CADH,mBACJ;gBAAsB;aAA8B"}
@@ -1,2 +0,0 @@
1
- import{setTimeout as e}from"node:timers/promises";var t=class{tools=new Map;abortGracePeriodMs;constructor(e){this.abortGracePeriodMs=e?.abortGracePeriodMs??250,e?.tools?.forEach(e=>this.register(e))}register(e){return this.tools.set(e.definition.name,e),this}listLLMTools(e){return e?.length?e.map(e=>this.tools.get(e)?.definition).filter(e=>!!e):[...this.tools.values()].map(e=>e.definition)}has(e){return this.tools.has(e)}async execute(t,n,r){let i=this.tools.get(t);if(!i)throw Error(`Agent tool ${t} is not registered`);let a={name:t,arguments:n,startedAt:new Date,success:!1};try{let t=new AbortController,o=i.timeoutMs??1e4,s=setTimeout(()=>t.abort(),o);try{let e=await Promise.race([i.handler(n,{...r,emit:r.emit}),this.rejectOnAbort(t.signal,o)]);return a.success=!0,{invocation:a,result:e}}finally{clearTimeout(s),t.signal.aborted&&await e(this.abortGracePeriodMs).catch(()=>void 0)}}catch(e){throw a.error=e instanceof Error?e.message:String(e),e}finally{a.completedAt=new Date,a.durationMs=a.completedAt.getTime()-a.startedAt.getTime()}}async rejectOnAbort(e,t){if(e.aborted)throw Error(`Tool execution aborted`);return new Promise((n,r)=>{e.addEventListener(`abort`,()=>r(Error(`Tool execution timed out after ${t}ms`)),{once:!0})})}};export{t as ToolExecutor};
2
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","names":["invocation: AgentToolInvocation","delay"],"sources":["../../src/tools/executor.ts"],"sourcesContent":["import { setTimeout as delay } from 'node:timers/promises';\nimport type { LLMToolDefinition } from '@lssm/lib.contracts/integrations/providers/llm';\nimport type {\n AgentToolContext,\n AgentToolDefinitionWithHandler,\n AgentToolInvocation,\n AgentToolResult,\n} from '../types';\n\nexport interface ToolExecutorOptions {\n tools?: AgentToolDefinitionWithHandler[];\n /** Maximum time to wait for graceful cancellation after timeout. */\n abortGracePeriodMs?: number;\n}\n\nexport class ToolExecutor {\n private readonly tools = new Map<string, AgentToolDefinitionWithHandler>();\n private readonly abortGracePeriodMs: number;\n\n constructor(options?: ToolExecutorOptions) {\n this.abortGracePeriodMs = options?.abortGracePeriodMs ?? 250;\n options?.tools?.forEach((tool) => this.register(tool));\n }\n\n register(tool: AgentToolDefinitionWithHandler): this {\n this.tools.set(tool.definition.name, tool);\n return this;\n }\n\n listLLMTools(allowed?: string[]): LLMToolDefinition[] {\n if (!allowed?.length) {\n return [...this.tools.values()].map((tool) => tool.definition);\n }\n return allowed\n .map((name) => this.tools.get(name)?.definition)\n .filter((tool): tool is LLMToolDefinition => Boolean(tool));\n }\n\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n async execute(\n name: string,\n args: unknown,\n ctx: AgentToolContext\n ): Promise<{ invocation: AgentToolInvocation; result?: AgentToolResult }> {\n const tool = this.tools.get(name);\n if (!tool) {\n throw new Error(`Agent tool ${name} is not registered`);\n }\n\n const invocation: AgentToolInvocation = {\n name,\n arguments: args,\n startedAt: new Date(),\n success: false,\n };\n\n try {\n const controller = new AbortController();\n const timeout = tool.timeoutMs ?? 10_000;\n const timer = setTimeout(() => controller.abort(), timeout);\n try {\n const result = await Promise.race([\n tool.handler(args, {\n ...ctx,\n emit: ctx.emit,\n }),\n this.rejectOnAbort(controller.signal, timeout),\n ]);\n invocation.success = true;\n return { invocation, result };\n } finally {\n clearTimeout(timer);\n if (controller.signal.aborted) {\n await delay(this.abortGracePeriodMs).catch(() => undefined);\n }\n }\n } catch (error) {\n invocation.error = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n invocation.completedAt = new Date();\n invocation.durationMs =\n invocation.completedAt.getTime() - invocation.startedAt.getTime();\n }\n }\n\n private async rejectOnAbort(signal: AbortSignal, timeout: number) {\n if (signal.aborted) {\n throw new Error('Tool execution aborted');\n }\n return new Promise<never>((_, reject) => {\n signal.addEventListener(\n 'abort',\n () => reject(new Error(`Tool execution timed out after ${timeout}ms`)),\n { once: true }\n );\n });\n }\n}\n"],"mappings":"kDAeA,IAAa,EAAb,KAA0B,CACxB,MAAyB,IAAI,IAC7B,mBAEA,YAAY,EAA+B,CACzC,KAAK,mBAAqB,GAAS,oBAAsB,IACzD,GAAS,OAAO,QAAS,GAAS,KAAK,SAAS,EAAK,CAAC,CAGxD,SAAS,EAA4C,CAEnD,OADA,KAAK,MAAM,IAAI,EAAK,WAAW,KAAM,EAAK,CACnC,KAGT,aAAa,EAAyC,CAIpD,OAHK,GAAS,OAGP,EACJ,IAAK,GAAS,KAAK,MAAM,IAAI,EAAK,EAAE,WAAW,CAC/C,OAAQ,GAAoC,EAAQ,EAAM,CAJpD,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC,IAAK,GAAS,EAAK,WAAW,CAOlE,IAAI,EAAuB,CACzB,OAAO,KAAK,MAAM,IAAI,EAAK,CAG7B,MAAM,QACJ,EACA,EACA,EACwE,CACxE,IAAM,EAAO,KAAK,MAAM,IAAI,EAAK,CACjC,GAAI,CAAC,EACH,MAAU,MAAM,cAAc,EAAK,oBAAoB,CAGzD,IAAMA,EAAkC,CACtC,OACA,UAAW,EACX,UAAW,IAAI,KACf,QAAS,GACV,CAED,GAAI,CACF,IAAM,EAAa,IAAI,gBACjB,EAAU,EAAK,WAAa,IAC5B,EAAQ,eAAiB,EAAW,OAAO,CAAE,EAAQ,CAC3D,GAAI,CACF,IAAM,EAAS,MAAM,QAAQ,KAAK,CAChC,EAAK,QAAQ,EAAM,CACjB,GAAG,EACH,KAAM,EAAI,KACX,CAAC,CACF,KAAK,cAAc,EAAW,OAAQ,EAAQ,CAC/C,CAAC,CAEF,MADA,GAAW,QAAU,GACd,CAAE,aAAY,SAAQ,QACrB,CACR,aAAa,EAAM,CACf,EAAW,OAAO,SACpB,MAAMC,EAAM,KAAK,mBAAmB,CAAC,UAAY,IAAA,GAAU,QAGxD,EAAO,CAEd,KADA,GAAW,MAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACnE,SACE,CACR,EAAW,YAAc,IAAI,KAC7B,EAAW,WACT,EAAW,YAAY,SAAS,CAAG,EAAW,UAAU,SAAS,EAIvE,MAAc,cAAc,EAAqB,EAAiB,CAChE,GAAI,EAAO,QACT,MAAU,MAAM,yBAAyB,CAE3C,OAAO,IAAI,SAAgB,EAAG,IAAW,CACvC,EAAO,iBACL,YACM,EAAW,MAAM,kCAAkC,EAAQ,IAAI,CAAC,CACtE,CAAE,KAAM,GAAM,CACf,EACD"}
@@ -1,2 +0,0 @@
1
- import { ToolExecutor, ToolExecutorOptions } from "./executor.js";
2
- export { ToolExecutor, ToolExecutorOptions };
package/dist/types.d.ts DELETED
@@ -1,96 +0,0 @@
1
- import { LLMMessage, LLMResponse, LLMToolDefinition } from "@lssm/lib.contracts/integrations/providers/llm";
2
-
3
- //#region src/types.d.ts
4
- type AgentStatus = 'idle' | 'running' | 'waiting' | 'completed' | 'failed' | 'escalated';
5
- type AgentEventName = 'agent.session.created' | 'agent.session.updated' | 'agent.iteration.started' | 'agent.iteration.completed' | 'agent.tool.called' | 'agent.tool.completed' | 'agent.tool.failed' | 'agent.escalated' | 'agent.approval_requested' | 'agent.approval_resolved' | 'agent.completed' | 'agent.failed';
6
- interface AgentEventPayload {
7
- sessionId: string;
8
- agent: string;
9
- tenantId?: string;
10
- iteration?: number;
11
- toolName?: string;
12
- metadata?: Record<string, unknown>;
13
- }
14
- type AgentMessageMetadata = Record<string, string>;
15
- interface AgentMessage extends Omit<LLMMessage, 'metadata'> {
16
- metadata?: AgentMessageMetadata;
17
- }
18
- interface AgentSessionState {
19
- sessionId: string;
20
- agent: string;
21
- version: number;
22
- tenantId?: string;
23
- status: AgentStatus;
24
- messages: AgentMessage[];
25
- createdAt: Date;
26
- updatedAt: Date;
27
- iterations: number;
28
- lastConfidence?: number;
29
- lastToolName?: string;
30
- metadata?: Record<string, string>;
31
- }
32
- interface AgentRunRequestInput {
33
- /** Agent name, e.g. `support.bot`. */
34
- agent: string;
35
- /** Optional version. Defaults to latest registered version. */
36
- version?: number;
37
- /** User-provided input or ticket description. */
38
- input: string;
39
- /** Tenant scoping for guardrails. */
40
- tenantId?: string;
41
- /** Unique end-user identifier (for personalization). */
42
- actorId?: string;
43
- /** Session to resume; new session created when omitted. */
44
- sessionId?: string;
45
- /** Arbitrary metadata forwarded to events and tool handlers. */
46
- metadata?: Record<string, string>;
47
- /** Optional additional system instructions appended to the agent spec. */
48
- instructionsOverride?: string;
49
- }
50
- interface AgentRunResult {
51
- session: AgentSessionState;
52
- response: LLMResponse;
53
- outputText: string;
54
- confidence: number;
55
- iterations: number;
56
- requiresEscalation: boolean;
57
- approvalRequestId?: string;
58
- finishReason: 'stop' | 'tool_call' | 'timeout' | 'max_iterations' | 'length' | 'content_filter';
59
- toolInvocations: AgentToolInvocation[];
60
- }
61
- interface AgentToolInvocation {
62
- name: string;
63
- arguments: unknown;
64
- startedAt: Date;
65
- completedAt?: Date;
66
- durationMs?: number;
67
- success: boolean;
68
- error?: string;
69
- }
70
- interface AgentToolContext {
71
- session: AgentSessionState;
72
- tenantId?: string;
73
- actorId?: string;
74
- metadata?: Record<string, string>;
75
- emit: (event: AgentEventName, payload: AgentEventPayload) => void;
76
- }
77
- interface AgentToolResult {
78
- content: string;
79
- citations?: {
80
- label: string;
81
- url?: string;
82
- snippet?: string;
83
- }[];
84
- metadata?: Record<string, string>;
85
- }
86
- interface AgentToolDefinitionWithHandler {
87
- definition: LLMToolDefinition;
88
- timeoutMs?: number;
89
- requiresApproval?: boolean;
90
- allowedAgents?: string[];
91
- handler: (input: unknown, ctx: AgentToolContext) => Promise<AgentToolResult>;
92
- }
93
- type AgentRunnerEventEmitter = (event: AgentEventName, payload: AgentEventPayload) => void | Promise<void>;
94
- //#endregion
95
- export { AgentEventName, AgentEventPayload, AgentMessage, AgentMessageMetadata, AgentRunRequestInput, AgentRunResult, AgentRunnerEventEmitter, AgentSessionState, AgentStatus, AgentToolContext, AgentToolDefinitionWithHandler, AgentToolInvocation, AgentToolResult };
96
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;KAMY,WAAA;KAQA,cAAA;AARA,UAsBK,iBAAA,CAtBM;EAQX,SAAA,EAAA,MAAc;EAcT,KAAA,EAAA,MAAA;EASL,QAAA,CAAA,EAAA,MAAA;EAEK,SAAA,CAAA,EAAA,MAAa;EAAa,QAAA,CAAA,EAAA,MAAA;EAC9B,QAAA,CAAA,EANA,MAMA,CAAA,MAAA,EAAA,OAAA,CAAA;;AAD6B,KAF9B,oBAAA,GAAuB,MAEO,CAAA,MAAA,EAAA,MAAA,CAAA;AAIzB,UAJA,YAAA,SAAqB,IAIJ,CAJS,UAIT,EAAA,UAAA,CAAA,CAAA;EAKxB,QAAA,CAAA,EARG,oBAQH;;AAEG,UAPI,iBAAA,CAOJ;EACA,SAAA,EAAA,MAAA;EAIA,KAAA,EAAA,MAAA;EAAM,OAAA,EAAA,MAAA;EAGF,QAAA,CAAA,EAAA,MAAA;EAmBA,MAAA,EA7BP,WA6BqB;EACpB,QAAA,EA7BC,YA6BD,EAAA;EACC,SAAA,EA7BC,IA6BD;EAaO,SAAA,EAzCN,IAyCM;EAAmB,UAAA,EAAA,MAAA;EAGrB,cAAA,CAAA,EAAA,MAAmB;EAUnB,YAAA,CAAA,EAAA,MAAgB;EACtB,QAAA,CAAA,EAnDE,MAmDF,CAAA,MAAA,EAAA,MAAA,CAAA;;AAIK,UApDC,oBAAA,CAoDD;EAAyB;EAAiB,KAAA,EAAA,MAAA;EAGzC;EAMA,OAAA,CAAA,EAAA,MAAA;EACH;EAImB,KAAA,EAAA,MAAA;EAA6B;EAAR,QAAA,CAAA,EAAA,MAAA;EAAO;EAGjD,OAAA,CAAA,EAAA,MAAA;EACH;EACE,SAAA,CAAA,EAAA,MAAA;EACC;EAAO,QAAA,CAAA,EA1DN,MA0DM,CAAA,MAAA,EAAA,MAAA,CAAA;;;;UArDF,cAAA;WACN;YACC;;;;;;;mBAaO;;UAGF,mBAAA;;;aAGJ;gBACG;;;;;UAMC,gBAAA;WACN;;;aAGE;gBACG,yBAAyB;;UAGxB,eAAA;;;;;;;aAGJ;;UAGI,8BAAA;cACH;;;;iCAImB,qBAAqB,QAAQ;;KAGlD,uBAAA,WACH,yBACE,6BACC"}