elsium-ai 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +539 -0
- package/package.json +12 -12
package/dist/index.d.ts
CHANGED
|
@@ -13,10 +13,10 @@ export { ElsiumError, ok, err, isOk, isErr, unwrap, unwrapOr, tryCatch, tryCatch
|
|
|
13
13
|
export type { Role, ContentPart, TextContent, ImageContent, AudioContent, DocumentContent, Message, ToolCall, ToolResult, TokenUsage, CostBreakdown, StopReason, LLMResponse, StreamEvent, XRayData, StreamCheckpoint, ProviderConfig, CompletionRequest, ToolDefinition, TenantContext, Middleware, Result, Ok, Err, ElsiumStream, ResilientStreamOptions, LogLevel, Logger, ErrorCode, Registry, ContextStrategy, ContextManagerConfig, ContextManager, } from '@elsium-ai/core';
|
|
14
14
|
export { gateway, registerProviderFactory, registerProvider, getProviderFactory, listProviders, registerProviderMetadata, getProviderMetadata, calculateCost, registerPricing, composeMiddleware, loggingMiddleware, costTrackingMiddleware, xrayMiddleware, createAnthropicProvider, createOpenAIProvider, createGoogleProvider, createProviderMesh, securityMiddleware, detectPromptInjection, detectJailbreak, redactSecrets, checkBlockedPatterns, cacheMiddleware, createInMemoryCache, outputGuardrailMiddleware, createBatch, } from '@elsium-ai/gateway';
|
|
15
15
|
export type { LLMProvider, ProviderFactory, ProviderMetadata, ModelPricing, ModelTier, Gateway, GatewayConfig, XRayStore, ProviderMeshConfig, ProviderEntry, RoutingStrategy, ProviderMesh, SecurityMiddlewareConfig, SecurityViolation, SecurityResult, CacheAdapter, CacheStats, CacheMiddlewareConfig, OutputGuardrailConfig, OutputGuardrailRule, OutputViolation, BatchConfig, BatchResult, BatchResultItem, } from '@elsium-ai/gateway';
|
|
16
|
-
export { defineAgent, runSequential, runParallel, runSupervisor, createMemory, createSemanticValidator, createAgentSecurity, createConfidenceScorer, executeStateMachine, createInMemoryMemoryStore, createSqliteMemoryStore, createAgentStream, createThread, loadThread, createInMemoryThreadStore, createAsyncAgent, } from '@elsium-ai/agents';
|
|
17
|
-
export type { Agent, AgentDependencies, AgentConfig, AgentResult, AgentRunOptions, GuardrailConfig, AgentHooks, Memory, MemoryConfig, SemanticGuardrailConfig, SemanticCheck, SemanticCheckResult, SemanticValidationResult, SemanticValidator, AgentSecurityConfig, AgentSecurityResult, ConfidenceConfig, ConfidenceResult, StateDefinition, StateHistoryEntry, StateMachineResult, MemoryStore, SqliteMemoryStoreConfig, AgentStreamEvent, AgentStream, StreamingAgentDependencies, Thread, ThreadConfig, ThreadStore, ThreadSnapshot, ThreadSummary, AsyncAgent, AsyncAgentConfig, AsyncAgentRunOptions, AgentTask, TaskStatus, TaskProgressEvent, } from '@elsium-ai/agents';
|
|
18
|
-
export { defineTool, createToolkit, httpFetchTool, calculatorTool, jsonParseTool, currentTimeTool, formatToolResult, formatToolResultAsText, } from '@elsium-ai/tools';
|
|
19
|
-
export type { Tool, ToolConfig, ToolContext, ToolExecutionResult, Toolkit, } from '@elsium-ai/tools';
|
|
16
|
+
export { defineAgent, runSequential, runParallel, runSupervisor, createMemory, createSummarizeFn, createSemanticValidator, createAgentSecurity, createConfidenceScorer, executeStateMachine, createInMemoryMemoryStore, createSqliteMemoryStore, createAgentStream, createThread, loadThread, createInMemoryThreadStore, createAsyncAgent, createChannelGateway, createWebhookChannel, createSessionRouter, createScheduler, parseCronExpression, cronMatchesDate, getNextCronDate, } from '@elsium-ai/agents';
|
|
17
|
+
export type { Agent, AgentDependencies, AgentGenerateResult, AgentConfig, AgentResult, AgentRunOptions, GuardrailConfig, AgentHooks, Memory, MemoryConfig, SummarizeFn, SemanticGuardrailConfig, SemanticCheck, SemanticCheckResult, SemanticValidationResult, SemanticValidator, AgentSecurityConfig, AgentSecurityResult, ConfidenceConfig, ConfidenceResult, StateDefinition, StateHistoryEntry, StateMachineResult, MemoryStore, SqliteMemoryStoreConfig, AgentStreamEvent, AgentStream, StreamingAgentDependencies, Thread, ThreadConfig, ThreadStore, ThreadSnapshot, ThreadSummary, AsyncAgent, AsyncAgentConfig, AsyncAgentRunOptions, AgentTask, TaskStatus, TaskProgressEvent, ChannelAdapter, ChannelGateway, ChannelGatewayConfig, IncomingMessage, OutgoingMessage, ChannelAttachment, WebhookChannelConfig, SessionRouter, SessionRouterConfig, SessionInfo, SessionResolveOptions, Scheduler, SchedulerConfig, ScheduleOptions, ScheduledTask, CronFields, } from '@elsium-ai/agents';
|
|
18
|
+
export { defineTool, createToolkit, httpFetchTool, calculatorTool, jsonParseTool, currentTimeTool, formatToolResult, formatToolResultAsText, createRetrievalTool, } from '@elsium-ai/tools';
|
|
19
|
+
export type { Tool, ToolConfig, ToolContext, ToolExecutionResult, Toolkit, RetrievalToolConfig, RetrievalResult as ToolRetrievalResult, RetrieveFn, } from '@elsium-ai/tools';
|
|
20
20
|
export { rag, createInMemoryStore, createOpenAIEmbeddings, createMockEmbeddings, vectorStoreRegistry, embeddingProviderRegistry, createPgVectorStore, } from '@elsium-ai/rag';
|
|
21
21
|
export type { RAGPipeline, RAGPipelineConfig, IngestResult, Document, Chunk, EmbeddedChunk, RetrievalResult, QueryOptions, EmbeddingProvider, VectorStore, VectorStoreFactory, EmbeddingProviderFactory, PgVectorStoreConfig, } from '@elsium-ai/rag';
|
|
22
22
|
export { defineWorkflow, defineParallelWorkflow, defineBranchWorkflow, step, } from '@elsium-ai/workflows';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAEN,WAAW,EAEX,EAAE,EACF,GAAG,EACH,IAAI,EACJ,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,YAAY,EAEZ,YAAY,EAEZ,YAAY,EAEZ,GAAG,EACH,SAAS,EACT,OAAO,EAEP,UAAU,EACV,eAAe,EACf,WAAW,EACX,KAAK,EACL,KAAK,EAEL,eAAe,EAEf,cAAc,EAEd,WAAW,EACX,oBAAoB,GACpB,MAAM,iBAAiB,CAAA;AAExB,YAAY,EAEX,IAAI,EACJ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,UAAU,EAEV,MAAM,EACN,EAAE,EACF,GAAG,EAEH,YAAY,EACZ,sBAAsB,EAEtB,QAAQ,EACR,MAAM,EAEN,SAAS,EAET,QAAQ,EAER,eAAe,EACf,oBAAoB,EACpB,cAAc,GACd,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACN,OAAO,EACP,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,eAAe,EACf,mBAAmB,EAEnB,yBAAyB,EAEzB,WAAW,GACX,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EACX,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EAEd,YAAY,EACZ,UAAU,EACV,qBAAqB,EAErB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EAEf,WAAW,EACX,WAAW,EACX,eAAe,GACf,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACN,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EAEnB,yBAAyB,EACzB,uBAAuB,EAEvB,iBAAiB,EAEjB,YAAY,EACZ,UAAU,EACV,yBAAyB,EAEzB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7858,6 +7858,35 @@ var currentTimeTool = defineTool({
|
|
|
7858
7858
|
};
|
|
7859
7859
|
}
|
|
7860
7860
|
});
|
|
7861
|
+
// ../tools/src/retrieval.ts
|
|
7862
|
+
function defaultFormatResults(results) {
|
|
7863
|
+
if (results.length === 0)
|
|
7864
|
+
return "No relevant results found.";
|
|
7865
|
+
return results.map((r, i) => {
|
|
7866
|
+
const source = r.source ? ` (source: ${r.source})` : "";
|
|
7867
|
+
return `[${i + 1}]${source} (score: ${r.score.toFixed(2)})
|
|
7868
|
+
${r.content}`;
|
|
7869
|
+
}).join(`
|
|
7870
|
+
|
|
7871
|
+
---
|
|
7872
|
+
|
|
7873
|
+
`);
|
|
7874
|
+
}
|
|
7875
|
+
function createRetrievalTool(config) {
|
|
7876
|
+
const topK = config.topK ?? 5;
|
|
7877
|
+
const formatResult = config.formatResult ?? defaultFormatResults;
|
|
7878
|
+
return defineTool({
|
|
7879
|
+
name: config.name ?? "search_knowledge",
|
|
7880
|
+
description: config.description ?? "Search the knowledge base for relevant information. Use this when you need to find facts, documentation, or context to answer questions.",
|
|
7881
|
+
input: exports_external.object({
|
|
7882
|
+
query: exports_external.string().describe("The search query to find relevant information")
|
|
7883
|
+
}),
|
|
7884
|
+
async handler(input) {
|
|
7885
|
+
const results = await config.retrieve(input.query, { topK });
|
|
7886
|
+
return formatResult(results);
|
|
7887
|
+
}
|
|
7888
|
+
});
|
|
7889
|
+
}
|
|
7861
7890
|
// ../agents/src/approval.ts
|
|
7862
7891
|
function createApprovalGate(config) {
|
|
7863
7892
|
const timeoutMs = config.timeoutMs ?? 300000;
|
|
@@ -8036,6 +8065,35 @@ function createMemory(config) {
|
|
|
8036
8065
|
messages.shift();
|
|
8037
8066
|
}
|
|
8038
8067
|
}
|
|
8068
|
+
let summaryPending = false;
|
|
8069
|
+
function needsSummarization() {
|
|
8070
|
+
if (config.strategy !== "summary")
|
|
8071
|
+
return false;
|
|
8072
|
+
if (!config.summarize)
|
|
8073
|
+
return false;
|
|
8074
|
+
return messages.length > maxMessages;
|
|
8075
|
+
}
|
|
8076
|
+
async function runSummarization() {
|
|
8077
|
+
if (summaryPending || !config.summarize)
|
|
8078
|
+
return;
|
|
8079
|
+
if (messages.length <= maxMessages)
|
|
8080
|
+
return;
|
|
8081
|
+
summaryPending = true;
|
|
8082
|
+
try {
|
|
8083
|
+
const keepCount = Math.floor(maxMessages / 2);
|
|
8084
|
+
const toSummarize = messages.splice(0, messages.length - keepCount);
|
|
8085
|
+
const summaryText = await config.summarize(toSummarize);
|
|
8086
|
+
messages.unshift({
|
|
8087
|
+
role: "system",
|
|
8088
|
+
content: `[Conversation summary]: ${summaryText}`
|
|
8089
|
+
});
|
|
8090
|
+
} finally {
|
|
8091
|
+
summaryPending = false;
|
|
8092
|
+
}
|
|
8093
|
+
if (config.store && config.agentId) {
|
|
8094
|
+
config.store.save(config.agentId, [...messages]).catch(() => {});
|
|
8095
|
+
}
|
|
8096
|
+
}
|
|
8039
8097
|
return {
|
|
8040
8098
|
strategy: config.strategy,
|
|
8041
8099
|
add(message) {
|
|
@@ -8047,6 +8105,8 @@ function createMemory(config) {
|
|
|
8047
8105
|
case "token-limited":
|
|
8048
8106
|
trimToTokenLimit();
|
|
8049
8107
|
break;
|
|
8108
|
+
case "summary":
|
|
8109
|
+
break;
|
|
8050
8110
|
case "unlimited":
|
|
8051
8111
|
break;
|
|
8052
8112
|
}
|
|
@@ -8077,9 +8137,28 @@ function createMemory(config) {
|
|
|
8077
8137
|
if (!config.store || !config.agentId)
|
|
8078
8138
|
return;
|
|
8079
8139
|
await config.store.save(config.agentId, [...messages]);
|
|
8140
|
+
},
|
|
8141
|
+
async summarizeIfNeeded() {
|
|
8142
|
+
if (needsSummarization()) {
|
|
8143
|
+
await runSummarization();
|
|
8144
|
+
}
|
|
8080
8145
|
}
|
|
8081
8146
|
};
|
|
8082
8147
|
}
|
|
8148
|
+
var SUMMARIZE_SYSTEM = "You are a conversation summarizer. Given a conversation, produce a concise summary that preserves all key facts, decisions, user preferences, and context needed to continue the conversation. Be factual and complete. Do not add commentary.";
|
|
8149
|
+
function createSummarizeFn(complete) {
|
|
8150
|
+
return async (messages) => {
|
|
8151
|
+
const text = messages.map((m) => `${m.role}: ${extractText(m.content)}`).join(`
|
|
8152
|
+
`);
|
|
8153
|
+
const response = await complete({
|
|
8154
|
+
messages: [{ role: "user", content: `Summarize this conversation:
|
|
8155
|
+
|
|
8156
|
+
${text}` }],
|
|
8157
|
+
system: SUMMARIZE_SYSTEM
|
|
8158
|
+
});
|
|
8159
|
+
return extractText(response.message.content);
|
|
8160
|
+
};
|
|
8161
|
+
}
|
|
8083
8162
|
|
|
8084
8163
|
// ../agents/src/security.ts
|
|
8085
8164
|
var INJECTION_PATTERNS2 = [
|
|
@@ -9153,6 +9232,34 @@ function defineAgent(config, deps) {
|
|
|
9153
9232
|
const userMessage = { role: "user", content: input };
|
|
9154
9233
|
return executeLoop([userMessage], options);
|
|
9155
9234
|
},
|
|
9235
|
+
async generate(input, schema, options = {}) {
|
|
9236
|
+
validateInputText(input);
|
|
9237
|
+
const jsonSchema = zodToJsonSchema(schema);
|
|
9238
|
+
const schemaInstruction = [
|
|
9239
|
+
"You MUST respond with valid JSON matching this schema:",
|
|
9240
|
+
JSON.stringify(jsonSchema, null, 2),
|
|
9241
|
+
"Respond ONLY with the JSON object, no markdown or explanation."
|
|
9242
|
+
].join(`
|
|
9243
|
+
`);
|
|
9244
|
+
const augmentedInput = `${input}
|
|
9245
|
+
|
|
9246
|
+
${schemaInstruction}`;
|
|
9247
|
+
const userMessage = { role: "user", content: augmentedInput };
|
|
9248
|
+
const agentResult = await executeLoop([userMessage], options);
|
|
9249
|
+
const text = extractText(agentResult.message.content);
|
|
9250
|
+
const cleaned = text.replace(/^```(?:json)?\s*\n?([\s\S]*?)\n?\s*```$/gm, "$1").trim();
|
|
9251
|
+
const jsonMatch = cleaned.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);
|
|
9252
|
+
if (!jsonMatch) {
|
|
9253
|
+
throw ElsiumError.validation("Agent response did not contain valid JSON");
|
|
9254
|
+
}
|
|
9255
|
+
const parsed = schema.safeParse(JSON.parse(jsonMatch[0]));
|
|
9256
|
+
if (!parsed.success) {
|
|
9257
|
+
throw ElsiumError.validation("Agent response did not match schema", {
|
|
9258
|
+
errors: parsed.error.issues
|
|
9259
|
+
});
|
|
9260
|
+
}
|
|
9261
|
+
return { data: parsed.data, result: agentResult };
|
|
9262
|
+
},
|
|
9156
9263
|
stream(input, options = {}) {
|
|
9157
9264
|
validateInputText(input);
|
|
9158
9265
|
const streamDeps = resolvedDeps;
|
|
@@ -9635,6 +9742,429 @@ function createAsyncAgent(config) {
|
|
|
9635
9742
|
}
|
|
9636
9743
|
};
|
|
9637
9744
|
}
|
|
9745
|
+
// ../agents/src/channels.ts
|
|
9746
|
+
function createWebhookChannel(config) {
|
|
9747
|
+
let messageHandler = null;
|
|
9748
|
+
return {
|
|
9749
|
+
name: config.name,
|
|
9750
|
+
async start() {},
|
|
9751
|
+
async stop() {},
|
|
9752
|
+
async send(userId, message) {
|
|
9753
|
+
await config.onSend?.(userId, message);
|
|
9754
|
+
},
|
|
9755
|
+
onMessage(handler) {
|
|
9756
|
+
messageHandler = handler;
|
|
9757
|
+
},
|
|
9758
|
+
receive(message) {
|
|
9759
|
+
if (!messageHandler)
|
|
9760
|
+
return;
|
|
9761
|
+
messageHandler({ ...message, channelName: config.name });
|
|
9762
|
+
}
|
|
9763
|
+
};
|
|
9764
|
+
}
|
|
9765
|
+
function createChannelGateway(config) {
|
|
9766
|
+
const adapterMap = new Map;
|
|
9767
|
+
for (const adapter of config.adapters) {
|
|
9768
|
+
if (adapter.name === "__proto__" || adapter.name === "constructor" || adapter.name === "prototype")
|
|
9769
|
+
continue;
|
|
9770
|
+
adapterMap.set(adapter.name, adapter);
|
|
9771
|
+
}
|
|
9772
|
+
function findAdapter(channelName) {
|
|
9773
|
+
return adapterMap.get(channelName);
|
|
9774
|
+
}
|
|
9775
|
+
async function handleIncoming(message) {
|
|
9776
|
+
const agent = config.resolveAgent?.(message) ?? config.agent;
|
|
9777
|
+
try {
|
|
9778
|
+
const session = await config.router.resolve({
|
|
9779
|
+
channelName: message.channelName,
|
|
9780
|
+
userId: message.userId,
|
|
9781
|
+
agent
|
|
9782
|
+
});
|
|
9783
|
+
const result = await session.send(message.text);
|
|
9784
|
+
const responseText = typeof result.message.content === "string" ? result.message.content : "";
|
|
9785
|
+
const adapter = findAdapter(message.channelName);
|
|
9786
|
+
if (adapter && responseText) {
|
|
9787
|
+
await adapter.send(message.userId, { text: responseText });
|
|
9788
|
+
}
|
|
9789
|
+
} catch (err2) {
|
|
9790
|
+
const error = err2 instanceof Error ? err2 : new Error(String(err2));
|
|
9791
|
+
try {
|
|
9792
|
+
config.onError?.(error, message);
|
|
9793
|
+
} catch {}
|
|
9794
|
+
}
|
|
9795
|
+
}
|
|
9796
|
+
for (const adapter of config.adapters) {
|
|
9797
|
+
adapter.onMessage(handleIncoming);
|
|
9798
|
+
}
|
|
9799
|
+
return {
|
|
9800
|
+
adapters: adapterMap,
|
|
9801
|
+
async start() {
|
|
9802
|
+
const startPromises = [...adapterMap.values()].map((a) => a.start());
|
|
9803
|
+
await Promise.all(startPromises);
|
|
9804
|
+
},
|
|
9805
|
+
async stop() {
|
|
9806
|
+
const stopPromises = [...adapterMap.values()].map((a) => a.stop());
|
|
9807
|
+
await Promise.all(stopPromises);
|
|
9808
|
+
}
|
|
9809
|
+
};
|
|
9810
|
+
}
|
|
9811
|
+
// ../agents/src/session.ts
|
|
9812
|
+
function sessionKey(channelName, userId) {
|
|
9813
|
+
return `${channelName}::${userId}`;
|
|
9814
|
+
}
|
|
9815
|
+
function createSessionRouter(config) {
|
|
9816
|
+
const sessions = new Map;
|
|
9817
|
+
const concurrency = config.concurrency ?? "serial";
|
|
9818
|
+
const sessionTimeout = config.sessionTimeout ?? 0;
|
|
9819
|
+
let cleanupTimer = null;
|
|
9820
|
+
if (sessionTimeout > 0) {
|
|
9821
|
+
cleanupTimer = setInterval(() => {
|
|
9822
|
+
const now = Date.now();
|
|
9823
|
+
for (const [key, session] of sessions) {
|
|
9824
|
+
if (now - session.lastActiveAt > sessionTimeout) {
|
|
9825
|
+
sessions.delete(key);
|
|
9826
|
+
try {
|
|
9827
|
+
config.onSessionExpired?.({
|
|
9828
|
+
sessionId: session.sessionId,
|
|
9829
|
+
channelName: session.channelName,
|
|
9830
|
+
userId: session.userId,
|
|
9831
|
+
agentName: session.agent.name,
|
|
9832
|
+
createdAt: session.createdAt,
|
|
9833
|
+
lastActiveAt: session.lastActiveAt
|
|
9834
|
+
});
|
|
9835
|
+
} catch {}
|
|
9836
|
+
}
|
|
9837
|
+
}
|
|
9838
|
+
}, Math.min(sessionTimeout, 60000));
|
|
9839
|
+
if (typeof cleanupTimer === "object" && "unref" in cleanupTimer) {
|
|
9840
|
+
cleanupTimer.unref();
|
|
9841
|
+
}
|
|
9842
|
+
}
|
|
9843
|
+
function toPublicSession(session) {
|
|
9844
|
+
return {
|
|
9845
|
+
sessionId: session.sessionId,
|
|
9846
|
+
channelName: session.channelName,
|
|
9847
|
+
userId: session.userId,
|
|
9848
|
+
agentName: session.agent.name,
|
|
9849
|
+
createdAt: session.createdAt,
|
|
9850
|
+
lastActiveAt: session.lastActiveAt
|
|
9851
|
+
};
|
|
9852
|
+
}
|
|
9853
|
+
async function createNewSession(key, channelName, userId, agent) {
|
|
9854
|
+
const sessionId = generateId("sess");
|
|
9855
|
+
const threadId = `${channelName}-${userId}-${sessionId}`;
|
|
9856
|
+
let thread = null;
|
|
9857
|
+
if (config.store) {
|
|
9858
|
+
thread = await loadThread(threadId, { agent, store: config.store });
|
|
9859
|
+
}
|
|
9860
|
+
if (!thread) {
|
|
9861
|
+
thread = createThread({
|
|
9862
|
+
id: threadId,
|
|
9863
|
+
agent,
|
|
9864
|
+
metadata: { channelName, userId, sessionId },
|
|
9865
|
+
store: config.store
|
|
9866
|
+
});
|
|
9867
|
+
}
|
|
9868
|
+
const now = Date.now();
|
|
9869
|
+
const session = {
|
|
9870
|
+
sessionId,
|
|
9871
|
+
channelName,
|
|
9872
|
+
userId,
|
|
9873
|
+
agent,
|
|
9874
|
+
thread,
|
|
9875
|
+
createdAt: now,
|
|
9876
|
+
lastActiveAt: now,
|
|
9877
|
+
lock: null,
|
|
9878
|
+
lockResolve: null
|
|
9879
|
+
};
|
|
9880
|
+
sessions.set(key, session);
|
|
9881
|
+
try {
|
|
9882
|
+
config.onSessionCreated?.(toPublicSession(session));
|
|
9883
|
+
} catch {}
|
|
9884
|
+
return session;
|
|
9885
|
+
}
|
|
9886
|
+
function wrapThreadWithConcurrency(session) {
|
|
9887
|
+
if (concurrency !== "serial")
|
|
9888
|
+
return session.thread;
|
|
9889
|
+
const originalSend = session.thread.send.bind(session.thread);
|
|
9890
|
+
return {
|
|
9891
|
+
...session.thread,
|
|
9892
|
+
async send(input, options) {
|
|
9893
|
+
while (session.lock) {
|
|
9894
|
+
await session.lock;
|
|
9895
|
+
}
|
|
9896
|
+
let unlock;
|
|
9897
|
+
session.lock = new Promise((resolve) => {
|
|
9898
|
+
unlock = resolve;
|
|
9899
|
+
});
|
|
9900
|
+
session.lockResolve = unlock;
|
|
9901
|
+
try {
|
|
9902
|
+
const result = await originalSend(input, options);
|
|
9903
|
+
session.lastActiveAt = Date.now();
|
|
9904
|
+
return result;
|
|
9905
|
+
} finally {
|
|
9906
|
+
session.lock = null;
|
|
9907
|
+
session.lockResolve = null;
|
|
9908
|
+
unlock();
|
|
9909
|
+
}
|
|
9910
|
+
}
|
|
9911
|
+
};
|
|
9912
|
+
}
|
|
9913
|
+
return {
|
|
9914
|
+
async resolve(options) {
|
|
9915
|
+
const agent = options.agent ?? config.defaultAgent;
|
|
9916
|
+
const key = sessionKey(options.channelName, options.userId);
|
|
9917
|
+
let session = sessions.get(key);
|
|
9918
|
+
if (session && sessionTimeout > 0) {
|
|
9919
|
+
const now = Date.now();
|
|
9920
|
+
if (now - session.lastActiveAt > sessionTimeout) {
|
|
9921
|
+
sessions.delete(key);
|
|
9922
|
+
try {
|
|
9923
|
+
config.onSessionExpired?.(toPublicSession(session));
|
|
9924
|
+
} catch {}
|
|
9925
|
+
session = undefined;
|
|
9926
|
+
}
|
|
9927
|
+
}
|
|
9928
|
+
if (!session) {
|
|
9929
|
+
session = await createNewSession(key, options.channelName, options.userId, agent);
|
|
9930
|
+
}
|
|
9931
|
+
session.lastActiveAt = Date.now();
|
|
9932
|
+
return wrapThreadWithConcurrency(session);
|
|
9933
|
+
},
|
|
9934
|
+
getSession(channelName, userId) {
|
|
9935
|
+
const session = sessions.get(sessionKey(channelName, userId));
|
|
9936
|
+
return session ? toPublicSession(session) : null;
|
|
9937
|
+
},
|
|
9938
|
+
listSessions() {
|
|
9939
|
+
return [...sessions.values()].map(toPublicSession);
|
|
9940
|
+
},
|
|
9941
|
+
endSession(channelName, userId) {
|
|
9942
|
+
return sessions.delete(sessionKey(channelName, userId));
|
|
9943
|
+
},
|
|
9944
|
+
endAllSessions() {
|
|
9945
|
+
sessions.clear();
|
|
9946
|
+
if (cleanupTimer) {
|
|
9947
|
+
clearInterval(cleanupTimer);
|
|
9948
|
+
cleanupTimer = null;
|
|
9949
|
+
}
|
|
9950
|
+
}
|
|
9951
|
+
};
|
|
9952
|
+
}
|
|
9953
|
+
// ../agents/src/scheduler.ts
|
|
9954
|
+
function parseCronExpression(expression) {
|
|
9955
|
+
const parts = expression.trim().split(/\s+/);
|
|
9956
|
+
if (parts.length !== 5)
|
|
9957
|
+
return null;
|
|
9958
|
+
const minute = parseCronField(parts[0], 0, 59);
|
|
9959
|
+
const hour = parseCronField(parts[1], 0, 23);
|
|
9960
|
+
const dayOfMonth = parseCronField(parts[2], 1, 31);
|
|
9961
|
+
const month = parseCronField(parts[3], 1, 12);
|
|
9962
|
+
const dayOfWeek = parseCronField(parts[4], 0, 6);
|
|
9963
|
+
if (!minute || !hour || !dayOfMonth || !month || !dayOfWeek)
|
|
9964
|
+
return null;
|
|
9965
|
+
return { minute, hour, dayOfMonth, month, dayOfWeek };
|
|
9966
|
+
}
|
|
9967
|
+
function parseStepPart(match, min, max) {
|
|
9968
|
+
const step = Number.parseInt(match[2], 10);
|
|
9969
|
+
if (step <= 0)
|
|
9970
|
+
return null;
|
|
9971
|
+
let rangeStart = min;
|
|
9972
|
+
let rangeEnd = max;
|
|
9973
|
+
if (match[1] !== "*") {
|
|
9974
|
+
const rangeParts = match[1].split("-");
|
|
9975
|
+
rangeStart = Number.parseInt(rangeParts[0], 10);
|
|
9976
|
+
rangeEnd = rangeParts[1] ? Number.parseInt(rangeParts[1], 10) : max;
|
|
9977
|
+
}
|
|
9978
|
+
const values = [];
|
|
9979
|
+
for (let i = rangeStart;i <= rangeEnd; i += step) {
|
|
9980
|
+
if (i >= min && i <= max)
|
|
9981
|
+
values.push(i);
|
|
9982
|
+
}
|
|
9983
|
+
return values;
|
|
9984
|
+
}
|
|
9985
|
+
function parseRangePart(match, min, max) {
|
|
9986
|
+
const start = Number.parseInt(match[1], 10);
|
|
9987
|
+
const end = Number.parseInt(match[2], 10);
|
|
9988
|
+
if (start > end || start < min || end > max)
|
|
9989
|
+
return null;
|
|
9990
|
+
const values = [];
|
|
9991
|
+
for (let i = start;i <= end; i++) {
|
|
9992
|
+
values.push(i);
|
|
9993
|
+
}
|
|
9994
|
+
return values;
|
|
9995
|
+
}
|
|
9996
|
+
function parseSinglePart(part, min, max) {
|
|
9997
|
+
const stepMatch = part.match(/^(\*|\d+(?:-\d+)?)\/(\d+)$/);
|
|
9998
|
+
if (stepMatch)
|
|
9999
|
+
return parseStepPart(stepMatch, min, max);
|
|
10000
|
+
const rangeMatch = part.match(/^(\d+)-(\d+)$/);
|
|
10001
|
+
if (rangeMatch)
|
|
10002
|
+
return parseRangePart(rangeMatch, min, max);
|
|
10003
|
+
const num = Number.parseInt(part, 10);
|
|
10004
|
+
if (Number.isNaN(num) || num < min || num > max)
|
|
10005
|
+
return null;
|
|
10006
|
+
return [num];
|
|
10007
|
+
}
|
|
10008
|
+
function parseCronField(field, min, max) {
|
|
10009
|
+
if (field === "*") {
|
|
10010
|
+
return Array.from({ length: max - min + 1 }, (_, i) => min + i);
|
|
10011
|
+
}
|
|
10012
|
+
const values = [];
|
|
10013
|
+
for (const part of field.split(",")) {
|
|
10014
|
+
const result = parseSinglePart(part, min, max);
|
|
10015
|
+
if (!result)
|
|
10016
|
+
return null;
|
|
10017
|
+
values.push(...result);
|
|
10018
|
+
}
|
|
10019
|
+
return values.length > 0 ? values : null;
|
|
10020
|
+
}
|
|
10021
|
+
function cronMatchesDate(fields, date) {
|
|
10022
|
+
return fields.minute.includes(date.getMinutes()) && fields.hour.includes(date.getHours()) && fields.dayOfMonth.includes(date.getDate()) && fields.month.includes(date.getMonth() + 1) && fields.dayOfWeek.includes(date.getDay());
|
|
10023
|
+
}
|
|
10024
|
+
function getNextCronDate(fields, after) {
|
|
10025
|
+
const next = new Date(after.getTime());
|
|
10026
|
+
next.setSeconds(0, 0);
|
|
10027
|
+
next.setMinutes(next.getMinutes() + 1);
|
|
10028
|
+
const maxIterations = 525600;
|
|
10029
|
+
for (let i = 0;i < maxIterations; i++) {
|
|
10030
|
+
if (cronMatchesDate(fields, next))
|
|
10031
|
+
return next;
|
|
10032
|
+
next.setMinutes(next.getMinutes() + 1);
|
|
10033
|
+
}
|
|
10034
|
+
return next;
|
|
10035
|
+
}
|
|
10036
|
+
function createScheduler(config) {
|
|
10037
|
+
const tasks = new Map;
|
|
10038
|
+
let timer = null;
|
|
10039
|
+
const tickInterval = config.tickIntervalMs ?? 60000;
|
|
10040
|
+
function toPublicTask(task) {
|
|
10041
|
+
return {
|
|
10042
|
+
id: task.id,
|
|
10043
|
+
name: task.name,
|
|
10044
|
+
cronExpression: task.cronExpression,
|
|
10045
|
+
enabled: task.enabled,
|
|
10046
|
+
lastRunAt: task.lastRunAt,
|
|
10047
|
+
nextRunAt: task.nextRunAt,
|
|
10048
|
+
runCount: task.runCount
|
|
10049
|
+
};
|
|
10050
|
+
}
|
|
10051
|
+
function updateNextRun(task) {
|
|
10052
|
+
const fields = parseCronExpression(task.cronExpression);
|
|
10053
|
+
task.nextRunAt = fields ? getNextCronDate(fields, new Date).getTime() : null;
|
|
10054
|
+
}
|
|
10055
|
+
function handleTaskSuccess(task, result) {
|
|
10056
|
+
task.lastRunAt = Date.now();
|
|
10057
|
+
task.runCount++;
|
|
10058
|
+
task.running = false;
|
|
10059
|
+
if (task.maxRuns !== null && task.runCount >= task.maxRuns) {
|
|
10060
|
+
task.enabled = false;
|
|
10061
|
+
task.nextRunAt = null;
|
|
10062
|
+
} else {
|
|
10063
|
+
updateNextRun(task);
|
|
10064
|
+
}
|
|
10065
|
+
try {
|
|
10066
|
+
config.onComplete?.(toPublicTask(task), result);
|
|
10067
|
+
} catch {}
|
|
10068
|
+
}
|
|
10069
|
+
function handleTaskError(task, err2) {
|
|
10070
|
+
task.running = false;
|
|
10071
|
+
task.lastRunAt = Date.now();
|
|
10072
|
+
updateNextRun(task);
|
|
10073
|
+
const error = err2 instanceof Error ? err2 : new Error(String(err2));
|
|
10074
|
+
try {
|
|
10075
|
+
config.onError?.(toPublicTask(task), error);
|
|
10076
|
+
} catch {}
|
|
10077
|
+
}
|
|
10078
|
+
async function executeTask(task) {
|
|
10079
|
+
if (task.running)
|
|
10080
|
+
return;
|
|
10081
|
+
task.running = true;
|
|
10082
|
+
const agent = config.resolveAgent?.(toPublicTask(task)) ?? config.agent;
|
|
10083
|
+
try {
|
|
10084
|
+
const result = await agent.run(task.input);
|
|
10085
|
+
handleTaskSuccess(task, result);
|
|
10086
|
+
} catch (err2) {
|
|
10087
|
+
handleTaskError(task, err2);
|
|
10088
|
+
}
|
|
10089
|
+
}
|
|
10090
|
+
function tick() {
|
|
10091
|
+
const now = Date.now();
|
|
10092
|
+
for (const task of tasks.values()) {
|
|
10093
|
+
if (!task.enabled || task.running)
|
|
10094
|
+
continue;
|
|
10095
|
+
if (task.nextRunAt !== null && task.nextRunAt <= now) {
|
|
10096
|
+
executeTask(task);
|
|
10097
|
+
}
|
|
10098
|
+
}
|
|
10099
|
+
}
|
|
10100
|
+
return {
|
|
10101
|
+
schedule(cronExpression, input, options = {}) {
|
|
10102
|
+
const fields = parseCronExpression(cronExpression);
|
|
10103
|
+
if (!fields) {
|
|
10104
|
+
throw new Error(`Invalid cron expression: ${cronExpression}`);
|
|
10105
|
+
}
|
|
10106
|
+
const id = options.id ?? generateId("sched");
|
|
10107
|
+
const now = new Date;
|
|
10108
|
+
const nextRunAt = options.startImmediately ? Date.now() : getNextCronDate(fields, now).getTime();
|
|
10109
|
+
const task = {
|
|
10110
|
+
id,
|
|
10111
|
+
name: options.name ?? `task-${id}`,
|
|
10112
|
+
cronExpression,
|
|
10113
|
+
input,
|
|
10114
|
+
enabled: true,
|
|
10115
|
+
lastRunAt: null,
|
|
10116
|
+
nextRunAt,
|
|
10117
|
+
runCount: 0,
|
|
10118
|
+
maxRuns: options.maxRuns ?? null,
|
|
10119
|
+
metadata: options.metadata ?? {},
|
|
10120
|
+
running: false
|
|
10121
|
+
};
|
|
10122
|
+
tasks.set(id, task);
|
|
10123
|
+
if (options.startImmediately) {
|
|
10124
|
+
executeTask(task);
|
|
10125
|
+
}
|
|
10126
|
+
return toPublicTask(task);
|
|
10127
|
+
},
|
|
10128
|
+
unschedule(taskId) {
|
|
10129
|
+
return tasks.delete(taskId);
|
|
10130
|
+
},
|
|
10131
|
+
getTask(taskId) {
|
|
10132
|
+
const task = tasks.get(taskId);
|
|
10133
|
+
return task ? toPublicTask(task) : null;
|
|
10134
|
+
},
|
|
10135
|
+
listTasks() {
|
|
10136
|
+
return [...tasks.values()].map(toPublicTask);
|
|
10137
|
+
},
|
|
10138
|
+
pause(taskId) {
|
|
10139
|
+
const task = tasks.get(taskId);
|
|
10140
|
+
if (!task)
|
|
10141
|
+
return false;
|
|
10142
|
+
task.enabled = false;
|
|
10143
|
+
return true;
|
|
10144
|
+
},
|
|
10145
|
+
resume(taskId) {
|
|
10146
|
+
const task = tasks.get(taskId);
|
|
10147
|
+
if (!task)
|
|
10148
|
+
return false;
|
|
10149
|
+
task.enabled = true;
|
|
10150
|
+
const fields = parseCronExpression(task.cronExpression);
|
|
10151
|
+
task.nextRunAt = fields ? getNextCronDate(fields, new Date).getTime() : null;
|
|
10152
|
+
return true;
|
|
10153
|
+
},
|
|
10154
|
+
start() {
|
|
10155
|
+
if (timer)
|
|
10156
|
+
return;
|
|
10157
|
+
tick();
|
|
10158
|
+
timer = setInterval(tick, tickInterval);
|
|
10159
|
+
},
|
|
10160
|
+
stop() {
|
|
10161
|
+
if (timer) {
|
|
10162
|
+
clearInterval(timer);
|
|
10163
|
+
timer = null;
|
|
10164
|
+
}
|
|
10165
|
+
}
|
|
10166
|
+
};
|
|
10167
|
+
}
|
|
9638
10168
|
// ../rag/src/loaders.ts
|
|
9639
10169
|
function createDocument(content, metadata) {
|
|
9640
10170
|
return {
|
|
@@ -15735,6 +16265,7 @@ export {
|
|
|
15735
16265
|
redactSecrets,
|
|
15736
16266
|
rag,
|
|
15737
16267
|
parseTraceparent,
|
|
16268
|
+
parseCronExpression,
|
|
15738
16269
|
outputGuardrailMiddleware,
|
|
15739
16270
|
ok,
|
|
15740
16271
|
observe,
|
|
@@ -15750,6 +16281,7 @@ export {
|
|
|
15750
16281
|
httpFetchTool,
|
|
15751
16282
|
getProviderMetadata,
|
|
15752
16283
|
getProviderFactory,
|
|
16284
|
+
getNextCronDate,
|
|
15753
16285
|
generateTraceId,
|
|
15754
16286
|
generateId,
|
|
15755
16287
|
gateway,
|
|
@@ -15774,13 +16306,19 @@ export {
|
|
|
15774
16306
|
defineBranchWorkflow,
|
|
15775
16307
|
defineAgent,
|
|
15776
16308
|
currentTimeTool,
|
|
16309
|
+
cronMatchesDate,
|
|
16310
|
+
createWebhookChannel,
|
|
15777
16311
|
createToolkit,
|
|
15778
16312
|
createThread,
|
|
16313
|
+
createSummarizeFn,
|
|
15779
16314
|
createStream,
|
|
15780
16315
|
createSqliteMemoryStore,
|
|
15781
16316
|
createSpan,
|
|
15782
16317
|
createSnapshotStore,
|
|
16318
|
+
createSessionRouter,
|
|
15783
16319
|
createSemanticValidator,
|
|
16320
|
+
createScheduler,
|
|
16321
|
+
createRetrievalTool,
|
|
15784
16322
|
createReplayRecorder,
|
|
15785
16323
|
createReplayPlayer,
|
|
15786
16324
|
createRegressionSuite,
|
|
@@ -15809,6 +16347,7 @@ export {
|
|
|
15809
16347
|
createContextManager,
|
|
15810
16348
|
createConfidenceScorer,
|
|
15811
16349
|
createClient,
|
|
16350
|
+
createChannelGateway,
|
|
15812
16351
|
createBatch,
|
|
15813
16352
|
createAsyncAgent,
|
|
15814
16353
|
createApp,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elsium-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "ElsiumAI — A high-performance, TypeScript-first AI framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Eric Utrera <ebutrera9103@gmail.com>",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"build": "bun build ./src/index.ts --outdir ./dist --target node && bun x tsc -p tsconfig.build.json --emitDeclarationOnly"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@elsium-ai/core": "^0.
|
|
29
|
-
"@elsium-ai/gateway": "^0.
|
|
30
|
-
"@elsium-ai/agents": "^0.
|
|
31
|
-
"@elsium-ai/tools": "^0.
|
|
32
|
-
"@elsium-ai/rag": "^0.
|
|
33
|
-
"@elsium-ai/workflows": "^0.
|
|
34
|
-
"@elsium-ai/observe": "^0.
|
|
35
|
-
"@elsium-ai/app": "^0.
|
|
36
|
-
"@elsium-ai/testing": "^0.
|
|
37
|
-
"@elsium-ai/mcp": "^0.
|
|
38
|
-
"@elsium-ai/client": "^0.
|
|
28
|
+
"@elsium-ai/core": "^0.6.0",
|
|
29
|
+
"@elsium-ai/gateway": "^0.6.0",
|
|
30
|
+
"@elsium-ai/agents": "^0.6.0",
|
|
31
|
+
"@elsium-ai/tools": "^0.6.0",
|
|
32
|
+
"@elsium-ai/rag": "^0.6.0",
|
|
33
|
+
"@elsium-ai/workflows": "^0.6.0",
|
|
34
|
+
"@elsium-ai/observe": "^0.6.0",
|
|
35
|
+
"@elsium-ai/app": "^0.6.0",
|
|
36
|
+
"@elsium-ai/testing": "^0.6.0",
|
|
37
|
+
"@elsium-ai/mcp": "^0.6.0",
|
|
38
|
+
"@elsium-ai/client": "^0.6.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"typescript": "^5.7.0"
|