diff --git a/.env.construct.example b/.env.construct.example index 94662a9..816d9d9 100644 --- a/.env.construct.example +++ b/.env.construct.example @@ -43,3 +43,10 @@ TELEGRAM_BOT_TOKEN=123456:ABC-DEF... # Extension secrets — any EXT_* vars are synced to the secrets table on startup #EXT_OPENWEATHERMAP_API_KEY=abc123 + +# ── Laminar tracing (optional) ──────────────────────────────────────────────── +# Self-host: git clone https://github.com/lmnr-ai/lmnr && docker compose up -d +# Dashboard: http://localhost:5667 SDK endpoint: http://localhost:8000 +# Omit LAMINAR_API_KEY to disable tracing entirely. +#LAMINAR_API_KEY= +#LAMINAR_BASE_URL=http://localhost:8000 diff --git a/apps/construct/package.json b/apps/construct/package.json index 5c6105b..59cff73 100644 --- a/apps/construct/package.json +++ b/apps/construct/package.json @@ -9,6 +9,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@lmnr-ai/lmnr": "^0.8.16", "@mariozechner/pi-agent-core": "^0.54.2", "@mariozechner/pi-ai": "^0.54.2", "@repo/cairn": "workspace:*", diff --git a/apps/construct/src/agent.ts b/apps/construct/src/agent.ts index 5cb6e5c..7917541 100644 --- a/apps/construct/src/agent.ts +++ b/apps/construct/src/agent.ts @@ -5,6 +5,7 @@ import type { Kysely } from "kysely"; import { env } from "./env.js"; import { getSystemPrompt, buildContextPreamble } from "./system-prompt.js"; +import { startActiveSpan } from "./tracing.js"; import { agentLog, toolLog } from "./logger.js"; import type { Database } from "./db/schema.js"; import type { TelegramContext } from "./telegram/types.js"; @@ -82,6 +83,7 @@ export interface ProcessMessageOpts { telegram?: TelegramContext; replyContext?: string; incomingTelegramMessageId?: number; + scheduleId?: string; } export const isDev = env.NODE_ENV === "development"; @@ -101,457 +103,520 @@ export async function processMessage( ): Promise { agentLog.info`Processing message from ${opts.source}${opts.chatId ? ` (chat ${opts.chatId})` : ""}`; - // 1. Get or create conversation - const conversationId = await getOrCreateConversation(db, opts.source, opts.externalId); - - // 2. Create MemoryManager for this conversation - const workerConfig: WorkerModelConfig | null = env.MEMORY_WORKER_MODEL - ? { - apiKey: env.OPENROUTER_API_KEY, - model: env.MEMORY_WORKER_MODEL, - extraBody: { reasoning: { max_tokens: 1 } }, - } - : null; - const memoryManager = new ConstructMemoryManager(db, { - workerConfig, - embeddingModel: env.EMBEDDING_MODEL, - apiKey: env.OPENROUTER_API_KEY, - observerPrompt: CONSTRUCT_OBSERVER_PROMPT, - reflectorPrompt: CONSTRUCT_REFLECTOR_PROMPT, + const tags = [opts.source, ...(opts.scheduleId ? ["scheduler"] : [])]; + const rootSpan = startActiveSpan({ + name: "process_message", + spanType: "EXECUTOR", + input: { message, source: opts.source, chatId: opts.chatId ?? opts.externalId }, + tags, }); - // 3. Load context: observations (stable prefix) + un-observed messages (active suffix) - // Falls back to last 20 messages if no observations exist yet - const { observationsText, activeMessages, hasObservations, evictedObservations } = - await memoryManager.buildContext(conversationId); - - let historyMessages: typeof activeMessages; - if (hasObservations) { - // Use only un-observed messages — observations cover the rest - historyMessages = activeMessages; - agentLog.debug`Context: ${observationsText.split("\n").length} observations, ${activeMessages.length} active messages${evictedObservations > 0 ? `, ${evictedObservations} evicted` : ""}`; - } else { - // No observations yet — fall back to recent messages (current behavior) - historyMessages = await getRecentMessages(db, conversationId, 20); - agentLog.debug`Loaded ${historyMessages.length} history messages (no observations)`; - } - - // 4. Load memories for context injection - const recentMemoriesRaw = await getRecentMemories(db, 10); - - // Try to find semantically relevant memories for this specific message - // queryEmbedding is also reused for tool pack selection below - let queryEmbedding: number[] | undefined; - let recentMemories: typeof recentMemoriesRaw = []; - let relevantMemories: Array<{ - content: string; - category: string; - score?: number; - matchType?: string; - }> = []; try { - queryEmbedding = await generateEmbedding(env.OPENROUTER_API_KEY, message, env.EMBEDDING_MODEL); - - // Filter recent memories by minimum similarity to the current message. - // Prevents injecting unrelated memories that the model may volunteer unprompted. - // Note: memories without an embedding are skipped — embeddings are generated async - // after memory_store, so a just-stored memory may not appear here until the next turn. - recentMemories = recentMemoriesRaw.filter((m) => { - if (!m.embedding) return false; - try { - const sim = cosineSimilarity(queryEmbedding!, JSON.parse(m.embedding.toString())); - return sim >= SIMILARITY.RECENT_MEMORY_MIN; - } catch { - return false; - } + // 1. Get or create conversation + const conversationId = await getOrCreateConversation(db, opts.source, opts.externalId); + rootSpan.setAttribute("conversation_id", conversationId); + if (opts.scheduleId) rootSpan.setAttribute("schedule_id", opts.scheduleId); + + const contextSpan = startActiveSpan({ name: "context_assembly" }); + + // 2. Create MemoryManager for this conversation + const workerConfig: WorkerModelConfig | null = env.MEMORY_WORKER_MODEL + ? { + apiKey: env.OPENROUTER_API_KEY, + model: env.MEMORY_WORKER_MODEL, + extraBody: { reasoning: { max_tokens: 1 } }, + } + : null; + const memoryManager = new ConstructMemoryManager(db, { + workerConfig, + embeddingModel: env.EMBEDDING_MODEL, + apiKey: env.OPENROUTER_API_KEY, + observerPrompt: CONSTRUCT_OBSERVER_PROMPT, + reflectorPrompt: CONSTRUCT_REFLECTOR_PROMPT, }); - const results = await recallMemories(db, message, { - limit: 5, - queryEmbedding, - similarityThreshold: SIMILARITY.RECALL_STRICT, - }); - // Filter out any that are already in recent memories - const recentIds = new Set(recentMemories.map((m) => m.id)); - relevantMemories = results - .filter((m) => !recentIds.has(m.id)) - .map((m) => ({ - content: m.content, - category: m.category, - score: m.score, - matchType: m.matchType, - })); - } catch { - // Embedding call failed — fall back to unfiltered recent memories - // queryEmbedding stays undefined → all tool packs will load (graceful fallback) - recentMemories = recentMemoriesRaw; - } + // 3. Load context: observations (stable prefix) + un-observed messages (active suffix) + // Falls back to last 20 messages if no observations exist yet + const { observationsText, activeMessages, hasObservations, evictedObservations } = + await memoryManager.buildContext(conversationId); + + let historyMessages: typeof activeMessages; + if (hasObservations) { + // Use only un-observed messages — observations cover the rest + historyMessages = activeMessages; + agentLog.debug`Context: ${observationsText.split("\n").length} observations, ${activeMessages.length} active messages${evictedObservations > 0 ? `, ${evictedObservations} evicted` : ""}`; + } else { + // No observations yet — fall back to recent messages (current behavior) + historyMessages = await getRecentMessages(db, conversationId, 20); + agentLog.debug`Loaded ${historyMessages.length} history messages (no observations)`; + } - agentLog.debug`Context: ${recentMemories.length} recent memories, ${relevantMemories.length} relevant memories`; + // 4. Load memories for context injection + const recentMemoriesRaw = await getRecentMemories(db, 10); + + // Try to find semantically relevant memories for this specific message + // queryEmbedding is also reused for tool pack selection below + let queryEmbedding: number[] | undefined; + let recentMemories: typeof recentMemoriesRaw = []; + let relevantMemories: Array<{ + content: string; + category: string; + score?: number; + matchType?: string; + }> = []; + try { + queryEmbedding = await generateEmbedding( + env.OPENROUTER_API_KEY, + message, + env.EMBEDDING_MODEL, + ); + + // Filter recent memories by minimum similarity to the current message. + // Prevents injecting unrelated memories that the model may volunteer unprompted. + // Note: memories without an embedding are skipped — embeddings are generated async + // after memory_store, so a just-stored memory may not appear here until the next turn. + recentMemories = recentMemoriesRaw.filter((m) => { + if (!m.embedding) return false; + try { + const sim = cosineSimilarity(queryEmbedding!, JSON.parse(m.embedding.toString())); + return sim >= SIMILARITY.RECENT_MEMORY_MIN; + } catch { + return false; + } + }); - // 5. Select relevant skill instructions based on query embedding - const { formatted: selectedInstructions, instructionIds: selectedInstructionIds } = - await selectAndRetrieveSkillInstructions(queryEmbedding); + const results = await recallMemories(db, message, { + limit: 5, + queryEmbedding, + similarityThreshold: SIMILARITY.RECALL_STRICT, + }); + // Filter out any that are already in recent memories + const recentIds = new Set(recentMemories.map((m) => m.id)); + relevantMemories = results + .filter((m) => !recentIds.has(m.id)) + .map((m) => ({ + content: m.content, + category: m.category, + score: m.score, + matchType: m.matchType, + })); + } catch { + // Embedding call failed — fall back to unfiltered recent memories + // queryEmbedding stays undefined → all tool packs will load (graceful fallback) + recentMemories = recentMemoriesRaw; + } - // 5a. Validate instructions for conflicts - if (selectedInstructions.length > 1) { - try { - const conflicts = await detectConflicts(db, env.OPENROUTER_API_KEY, env.EMBEDDING_MODEL); - if (conflicts.length > 0) { - agentLog.warning`Conflicting instructions detected in this context: ${conflicts.length} conflict(s)`; - for (const conflict of conflicts) { - agentLog.warning`- ${conflict.conflictType}: "${conflict.instructionA.text}" vs "${conflict.instructionB.text}"`; + agentLog.debug`Context: ${recentMemories.length} recent memories, ${relevantMemories.length} relevant memories`; + + // 5. Select relevant skill instructions based on query embedding + const { formatted: selectedInstructions, instructionIds: selectedInstructionIds } = + await selectAndRetrieveSkillInstructions(queryEmbedding); + + // 5a. Validate instructions for conflicts + if (selectedInstructions.length > 1) { + try { + const conflicts = await detectConflicts(db, env.OPENROUTER_API_KEY, env.EMBEDDING_MODEL); + if (conflicts.length > 0) { + agentLog.warning`Conflicting instructions detected in this context: ${conflicts.length} conflict(s)`; + for (const conflict of conflicts) { + agentLog.warning`- ${conflict.conflictType}: "${conflict.instructionA.text}" vs "${conflict.instructionB.text}"`; + } + // TODO: Could warn user or prefer one skill over the other } - // TODO: Could warn user or prefer one skill over the other + } catch (err) { + agentLog.debug`Failed to check for instruction conflicts: ${err}`; } - } catch (err) { - agentLog.debug`Failed to check for instruction conflicts: ${err}`; } - } - // 6. Build context preamble (dynamic, prepended to user message) - const preamble = buildContextPreamble({ - timezone: env.TIMEZONE, - source: opts.source, - dev: isDev, - observations: observationsText || undefined, - recentMemories: recentMemories.map((m) => ({ - content: m.content, - category: m.category, - created_at: m.created_at, - })), - relevantMemories, - skillInstructions: selectedInstructions, - replyContext: opts.replyContext, - }); + contextSpan.setAttributes({ + has_observations: hasObservations, + active_messages: activeMessages.length, + recent_memories: recentMemories.length, + relevant_memories: relevantMemories.length, + skill_instructions: selectedInstructions.length, + }); + contextSpan.end(); - // 7. Create agent with system prompt (base + identity files) - const { identity } = getExtensionRegistry(); - const model = getModel("openrouter", env.OPENROUTER_MODEL as Parameters[1]); - const agent = new Agent({ - initialState: { - systemPrompt: getSystemPrompt(identity), - model, - }, - }); + // 6. Build context preamble (dynamic, prepended to user message) + const preamble = buildContextPreamble({ + timezone: env.TIMEZONE, + source: opts.source, + dev: isDev, + observations: observationsText || undefined, + recentMemories: recentMemories.map((m) => ({ + content: m.content, + category: m.category, + created_at: m.created_at, + })), + relevantMemories, + skillInstructions: selectedInstructions, + replyContext: opts.replyContext, + }); - agent.setModel(model); - - // 8. Select tool packs based on message embedding and create tools - const chatId = opts.chatId ?? opts.externalId ?? "unknown"; - const toolCtx = { - db, - chatId, - apiKey: env.OPENROUTER_API_KEY, - projectRoot: env.PROJECT_ROOT, - dbPath: env.DATABASE_URL, - timezone: env.TIMEZONE, - tavilyApiKey: env.TAVILY_API_KEY, - logFile: env.LOG_FILE, - isDev, - extensionsDir: env.EXTENSIONS_DIR, - telegram: opts.telegram, - memoryManager, - embeddingModel: env.EMBEDDING_MODEL, - }; - const builtinTools = selectAndCreateTools(queryEmbedding, toolCtx); - const dynamicTools = selectAndCreateDynamicTools(queryEmbedding, toolCtx); - const tools = [...builtinTools, ...dynamicTools]; - agent.setTools(tools.map((t) => createPiTool(t))); - - // 9. Replay conversation history so the agent has multi-turn context - for (const msg of historyMessages) { - const tgPrefix = msg.telegram_message_id ? `[tg:${msg.telegram_message_id}] ` : ""; - const timeStr = msg.created_at ? `[${msg.created_at.slice(0, 16).replace("T", " ")}] ` : ""; - if (msg.role === "user") { - agent.appendMessage({ - role: "user", - content: timeStr + tgPrefix + msg.content, - timestamp: Date.now(), - }); - } else if (msg.role === "assistant") { - agent.appendMessage({ - role: "assistant", - content: [{ type: "text", text: msg.content }], - api: "openrouter", - provider: "openrouter", - model: env.OPENROUTER_MODEL, - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }, - }, - stopReason: "stop", - timestamp: Date.now(), - }); + // 7. Create agent with system prompt (base + identity files) + const { identity } = getExtensionRegistry(); + const model = getModel("openrouter", env.OPENROUTER_MODEL as Parameters[1]); + const agent = new Agent({ + initialState: { + systemPrompt: getSystemPrompt(identity), + model, + }, + }); + + agent.setModel(model); + + // 8. Select tool packs based on message embedding and create tools + const chatId = opts.chatId ?? opts.externalId ?? "unknown"; + const toolCtx = { + db, + chatId, + apiKey: env.OPENROUTER_API_KEY, + projectRoot: env.PROJECT_ROOT, + dbPath: env.DATABASE_URL, + timezone: env.TIMEZONE, + tavilyApiKey: env.TAVILY_API_KEY, + logFile: env.LOG_FILE, + isDev, + extensionsDir: env.EXTENSIONS_DIR, + telegram: opts.telegram, + memoryManager, + embeddingModel: env.EMBEDDING_MODEL, + }; + const builtinTools = selectAndCreateTools(queryEmbedding, toolCtx); + const dynamicTools = selectAndCreateDynamicTools(queryEmbedding, toolCtx); + const tools = [...builtinTools, ...dynamicTools]; + agent.setTools(tools.map((t) => createPiTool(t))); + + // 9. Replay conversation history so the agent has multi-turn context + for (const msg of historyMessages) { + const tgPrefix = msg.telegram_message_id ? `[tg:${msg.telegram_message_id}] ` : ""; + const timeStr = msg.created_at ? `[${msg.created_at.slice(0, 16).replace("T", " ")}] ` : ""; + if (msg.role === "user") { + agent.appendMessage({ + role: "user", + content: timeStr + tgPrefix + msg.content, + timestamp: Date.now(), + }); + } else if (msg.role === "assistant") { + agent.appendMessage({ + role: "assistant", + content: [{ type: "text", text: msg.content }], + api: "openrouter", + provider: "openrouter", + model: env.OPENROUTER_MODEL, + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }, + }, + stopReason: "stop", + timestamp: Date.now(), + }); + } } - } - // 10. Track tool calls, response text, and usage - let responseText = ""; - const toolCalls: AgentResponse["toolCalls"] = []; - const totalUsage = { input: 0, output: 0, cost: 0 }; - let hasUsage = false; + // 10. Track tool calls, response text, and usage + let responseText = ""; + const toolCalls: AgentResponse["toolCalls"] = []; + const totalUsage = { input: 0, output: 0, cost: 0 }; + let hasUsage = false; - const toolErrors: Array<{ toolName: string; result: string }> = []; - let toolSuccesses = 0; + const toolErrors: Array<{ toolName: string; result: string }> = []; + let toolSuccesses = 0; - agent.subscribe((event) => { - if (event.type === "message_update") { - if (event.assistantMessageEvent.type === "text_delta") { - responseText += event.assistantMessageEvent.delta; + agent.subscribe((event) => { + if (event.type === "message_update") { + if (event.assistantMessageEvent.type === "text_delta") { + responseText += event.assistantMessageEvent.delta; + } } - } - if (event.type === "message_end") { - const msg = event.message; - if ("usage" in msg) { - const u = msg.usage as Usage; - totalUsage.input += u.input; - totalUsage.output += u.output; - totalUsage.cost += u.cost.total; - hasUsage = true; + if (event.type === "message_end") { + const msg = event.message; + if ("usage" in msg) { + const u = msg.usage as Usage; + totalUsage.input += u.input; + totalUsage.output += u.output; + totalUsage.cost += u.cost.total; + hasUsage = true; + } } - } - if (event.type === "tool_execution_end") { - toolCalls.push({ - name: event.toolName, - args: undefined, - result: String(event.result), - }); - - // Track tool errors for failed_on edges (processed after agent finishes) - if (event.isError) { - toolErrors.push({ toolName: event.toolName, result: String(event.result) }); - } else { - toolSuccesses++; + if (event.type === "tool_execution_end") { + toolCalls.push({ + name: event.toolName, + args: undefined, + result: String(event.result), + }); + + // Track tool errors for failed_on edges (processed after agent finishes) + if (event.isError) { + toolErrors.push({ toolName: event.toolName, result: String(event.result) }); + } else { + toolSuccesses++; + } } - } - }); - - // 11. Save user message - await saveMessage(db, { - conversation_id: conversationId, - role: "user", - content: message, - telegram_message_id: opts.incomingTelegramMessageId ?? null, - }); + }); - // 12. Log context breakdown for auditing - const systemPromptText = getSystemPrompt(identity); - const systemTokens = estimateTokens(systemPromptText); - const observationTokens = observationsText ? estimateTokens(observationsText) : 0; - const recentMemTokens = recentMemories.reduce((sum, m) => sum + estimateTokens(m.content), 0); - const relevantMemTokens = relevantMemories.reduce((sum, m) => sum + estimateTokens(m.content), 0); - const instructionTokens = selectedInstructions.reduce( - (sum, instr) => sum + estimateTokens(instr), - 0, - ); - const historyTokens = historyMessages.reduce((sum, m) => sum + estimateTokens(m.content), 0); - const toolCount = tools.length; - const preambleTokens = estimateTokens(preamble); - const totalContextTokens = systemTokens + preambleTokens + historyTokens; - agentLog.info`Context breakdown: system=${systemTokens} observations=${observationTokens} recentMem=${recentMemTokens}(${recentMemories.length}) relevantMem=${relevantMemTokens}(${relevantMemories.length}) instructions=${instructionTokens}(${selectedInstructions.length}) history=${historyTokens}(${historyMessages.length}msgs) tools=${toolCount} preamble=${preambleTokens} total=${totalContextTokens}`; - - // 12a. Log injected skill instructions at debug level for diagnosing bad context - if (selectedInstructions.length > 0) { - agentLog.debug`Injected skill instructions:\n${selectedInstructions.join("\n")}`; - } + // 11. Save user message + await saveMessage(db, { + conversation_id: conversationId, + role: "user", + content: message, + telegram_message_id: opts.incomingTelegramMessageId ?? null, + }); - // 12b. Log relevant memories at debug level - if (relevantMemories.length > 0) { - const memSummary = relevantMemories - .map((m) => { - const match = m.matchType ?? "unknown"; - const score = m.score !== undefined ? ` score=${m.score.toFixed(2)}` : ""; - return ` [${match}${score}] (${m.category}) ${m.content.slice(0, 100)}${m.content.length > 100 ? "..." : ""}`; - }) - .join("\n"); - agentLog.debug`Relevant memories:\n${memSummary}`; - } + // 12. Log context breakdown for auditing + const systemPromptText = getSystemPrompt(identity); + const systemTokens = estimateTokens(systemPromptText); + const observationTokens = observationsText ? estimateTokens(observationsText) : 0; + const recentMemTokens = recentMemories.reduce((sum, m) => sum + estimateTokens(m.content), 0); + const relevantMemTokens = relevantMemories.reduce( + (sum, m) => sum + estimateTokens(m.content), + 0, + ); + const instructionTokens = selectedInstructions.reduce( + (sum, instr) => sum + estimateTokens(instr), + 0, + ); + const historyTokens = historyMessages.reduce((sum, m) => sum + estimateTokens(m.content), 0); + const toolCount = tools.length; + const preambleTokens = estimateTokens(preamble); + const totalContextTokens = systemTokens + preambleTokens + historyTokens; + agentLog.info`Context breakdown: system=${systemTokens} observations=${observationTokens} recentMem=${recentMemTokens}(${recentMemories.length}) relevantMem=${relevantMemTokens}(${relevantMemories.length}) instructions=${instructionTokens}(${selectedInstructions.length}) history=${historyTokens}(${historyMessages.length}msgs) tools=${toolCount} preamble=${preambleTokens} total=${totalContextTokens}`; + + // 12a. Log injected skill instructions at debug level for diagnosing bad context + if (selectedInstructions.length > 0) { + agentLog.debug`Injected skill instructions:\n${selectedInstructions.join("\n")}`; + } - // 13. Run agent — prepend context preamble to first message - // (subsequent steps renumbered: save=14, usage=15, observer=16) - agentLog.debug`Prompting agent`; - await agent.prompt(preamble + message); - await agent.waitForIdle(); - agentLog.info`Agent finished. Response length: ${responseText.length}, tool calls: ${toolCalls.length}`; - - // Strip leaked [tg:ID] and timestamp prefixes from response (LLM sometimes echoes them from history) - responseText = responseText.replace(/\[tg:\d+\]\s*/g, ""); - responseText = responseText.replace(/^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}\]\s*/gm, ""); - - // 13. Save assistant response - const assistantMessageId = await saveMessage(db, { - conversation_id: conversationId, - role: "assistant", - content: responseText, - tool_calls: toolCalls.length > 0 ? JSON.stringify(toolCalls) : null, - }); + // 12b. Log relevant memories at debug level + if (relevantMemories.length > 0) { + const memSummary = relevantMemories + .map((m) => { + const match = m.matchType ?? "unknown"; + const score = m.score !== undefined ? ` score=${m.score.toFixed(2)}` : ""; + return ` [${match}${score}] (${m.category}) ${m.content.slice(0, 100)}${m.content.length > 100 ? "..." : ""}`; + }) + .join("\n"); + agentLog.debug`Relevant memories:\n${memSummary}`; + } - // 14. Track usage - if (hasUsage) { - agentLog.info`Usage: ${totalUsage.input} in / ${totalUsage.output} out / $${totalUsage.cost.toFixed(4)}`; - await trackUsage(db, { - model: env.OPENROUTER_MODEL, + // 13. Run agent — prepend context preamble to first message + // (subsequent steps renumbered: save=14, usage=15, observer=16) + agentLog.debug`Prompting agent`; + const llmSpan = startActiveSpan({ + name: "llm_call", + spanType: "LLM", + input: { prompt: preamble + message, model: env.OPENROUTER_MODEL }, + }); + await agent.prompt(preamble + message); + await agent.waitForIdle(); + llmSpan.setAttributes({ + output: responseText, input_tokens: totalUsage.input, output_tokens: totalUsage.output, cost_usd: totalUsage.cost, - source: opts.source, + tool_call_count: toolCalls.length, + }); + llmSpan.end(); + agentLog.info`Agent finished. Response length: ${responseText.length}, tool calls: ${toolCalls.length}`; + + // Strip leaked [tg:ID] and timestamp prefixes from response (LLM sometimes echoes them from history) + responseText = responseText.replace(/\[tg:\d+\]\s*/g, ""); + responseText = responseText.replace(/^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}\]\s*/gm, ""); + + // 13. Save assistant response + const assistantMessageId = await saveMessage(db, { + conversation_id: conversationId, + role: "assistant", + content: responseText, + tool_calls: toolCalls.length > 0 ? JSON.stringify(toolCalls) : null, }); - } - // 15. Create skill instruction graph edges (fire-and-forget) - if (selectedInstructionIds.length > 0 && toolCalls.length > 0) { - (async () => { - try { - // Create a conversation event node - const eventNodeName = `conv:${conversationId}:${assistantMessageId}`; - const eventNode = await upsertNode(db, { name: eventNodeName, type: "conversation_event" }); - - // Resolve instruction DB IDs → graph node IDs - const instrNodeIds = new Map(); - for (const instrId of selectedInstructionIds) { - const node = await upsertNode(db, { name: instrId, type: "skill_instruction" }); - instrNodeIds.set(instrId, node.id); - } + // 14. Track usage + if (hasUsage) { + agentLog.info`Usage: ${totalUsage.input} in / ${totalUsage.output} out / $${totalUsage.cost.toFixed(4)}`; + await trackUsage(db, { + model: env.OPENROUTER_MODEL, + input_tokens: totalUsage.input, + output_tokens: totalUsage.output, + cost_usd: totalUsage.cost, + source: opts.source, + }); + } - if (toolErrors.length === 0 && toolSuccesses > 0) { - // All tools succeeded — create applied_in edges from each instruction - for (const graphNodeId of instrNodeIds.values()) { - await upsertEdge(db, { - source_id: graphNodeId, - target_id: eventNode.id, - relation: "applied_in", - }); + // 15. Create skill instruction graph edges (fire-and-forget) + if (selectedInstructionIds.length > 0 && toolCalls.length > 0) { + (async () => { + try { + // Create a conversation event node + const eventNodeName = `conv:${conversationId}:${assistantMessageId}`; + const eventNode = await upsertNode(db, { + name: eventNodeName, + type: "conversation_event", + }); + + // Resolve instruction DB IDs → graph node IDs + const instrNodeIds = new Map(); + for (const instrId of selectedInstructionIds) { + const node = await upsertNode(db, { name: instrId, type: "skill_instruction" }); + instrNodeIds.set(instrId, node.id); } - agentLog.debug`Created applied_in edges: ${instrNodeIds.size} instructions → ${eventNodeName}`; - } - if (toolErrors.length > 0) { - // Tool errors — check for implicated instructions in skill_executions - const executions = await db - .selectFrom("skill_executions") - .where("conversation_id", "=", conversationId) - .where("implicated_instruction_id", "is not", null) - .where("had_tool_errors", "=", 1) - .select("implicated_instruction_id") - .execute(); - - const implicatedIds = new Set( - executions - .map((e) => e.implicated_instruction_id) - .filter((id): id is string => id != null), - ); - - // Use implicated instructions if available, otherwise all selected - const failedIds = - implicatedIds.size > 0 ? implicatedIds : new Set(selectedInstructionIds); - const errorSummary = toolErrors - .map((e) => `${e.toolName}: ${e.result.slice(0, 100)}`) - .join("; "); - - for (const instrId of failedIds) { - const graphNodeId = instrNodeIds.get(instrId); - if (graphNodeId) { + if (toolErrors.length === 0 && toolSuccesses > 0) { + // All tools succeeded — create applied_in edges from each instruction + for (const graphNodeId of instrNodeIds.values()) { await upsertEdge(db, { source_id: graphNodeId, target_id: eventNode.id, - relation: "failed_on", - properties: { errors: errorSummary }, + relation: "applied_in", }); } + agentLog.debug`Created applied_in edges: ${instrNodeIds.size} instructions → ${eventNodeName}`; } - agentLog.debug`Created failed_on edges: ${failedIds.size} instructions → ${eventNodeName}`; + + if (toolErrors.length > 0) { + // Tool errors — check for implicated instructions in skill_executions + const executions = await db + .selectFrom("skill_executions") + .where("conversation_id", "=", conversationId) + .where("implicated_instruction_id", "is not", null) + .where("had_tool_errors", "=", 1) + .select("implicated_instruction_id") + .execute(); + + const implicatedIds = new Set( + executions + .map((e) => e.implicated_instruction_id) + .filter((id): id is string => id != null), + ); + + // Use implicated instructions if available, otherwise all selected + const failedIds = + implicatedIds.size > 0 ? implicatedIds : new Set(selectedInstructionIds); + const errorSummary = toolErrors + .map((e) => `${e.toolName}: ${e.result.slice(0, 100)}`) + .join("; "); + + for (const instrId of failedIds) { + const graphNodeId = instrNodeIds.get(instrId); + if (graphNodeId) { + await upsertEdge(db, { + source_id: graphNodeId, + target_id: eventNode.id, + relation: "failed_on", + properties: { errors: errorSummary }, + }); + } + } + agentLog.debug`Created failed_on edges: ${failedIds.size} instructions → ${eventNodeName}`; + } + } catch (err) { + agentLog.warning`Failed to create skill instruction graph edges: ${err}`; } - } catch (err) { - agentLog.warning`Failed to create skill instruction graph edges: ${err}`; - } - })(); - } + })(); + } - // 16. Run observer async after response (next turn benefits) - // Non-blocking — fires and forgets. Observer only runs if un-observed - // messages exceed the token threshold. - memoryManager - .runObserver(conversationId) - .then(async (ran: boolean) => { - if (ran) { - // Promote novel observations to searchable memories before reflector condenses them - await memoryManager.promoteObservations(conversationId); - - // 15a. Extract emergent skills from observations - try { - const activeObs = await memoryManager.getActiveObservations(conversationId); - const extracted = await extractSkillsFromObservations( - activeObs, - env.OPENROUTER_API_KEY, - env.EMBEDDING_MODEL, - ); - - if (extracted.length > 0) { - agentLog.info`Extracted ${extracted.length} potential skill(s) from observations`; - - // Only nudge on Telegram — proactive messaging requires bot - if (opts.source === "telegram" && opts.chatId && opts.chatId !== "unknown") { - try { - const candidate = extracted - .filter((s) => s.confidence >= 0.7) - .toSorted((a, b) => b.confidence - a.confidence)[0]; - - if (candidate) { - // Name-based dedup: skip if skill already exists - const exists = await db - .selectFrom("skills") - .select("id") - .where("name", "=", candidate.name) - .executeTakeFirst(); - - if (!exists) { - const normalizedName = candidate.name.toLowerCase().replace(/[^a-z0-9]/g, "-"); - const ignoredAt = await getSetting(db, `ignored_skill:${normalizedName}`); - const stillIgnored = - ignoredAt && - Date.now() - new Date(ignoredAt).getTime() < 7 * 24 * 60 * 60 * 1000; - - const lastNudge = await getSetting(db, `skill_nudge_cooldown:${opts.chatId}`); - const onCooldown = - lastNudge && Date.now() - new Date(lastNudge).getTime() < 24 * 60 * 60 * 1000; - - if (!stillIgnored && !onCooldown) { - const payload = JSON.stringify({ - name: candidate.name, - description: candidate.description, - body: candidate.body, - }); - await setSetting(db, `skill_nudge:${opts.chatId}`, payload); - await setSetting( - db, - `skill_nudge_cooldown:${opts.chatId}`, - new Date().toISOString(), - ); - agentLog.info`Queued skill nudge for chat ${opts.chatId}: "${candidate.name}"`; + // 16. Run observer async after response (next turn benefits) + // Non-blocking — fires and forgets. Observer only runs if un-observed + // messages exceed the token threshold. + memoryManager + .runObserver(conversationId) + .then(async (ran: boolean) => { + if (ran) { + // Promote novel observations to searchable memories before reflector condenses them + await memoryManager.promoteObservations(conversationId); + + // 15a. Extract emergent skills from observations + try { + const activeObs = await memoryManager.getActiveObservations(conversationId); + const extracted = await extractSkillsFromObservations( + activeObs, + env.OPENROUTER_API_KEY, + env.EMBEDDING_MODEL, + ); + + if (extracted.length > 0) { + agentLog.info`Extracted ${extracted.length} potential skill(s) from observations`; + + // Only nudge on Telegram — proactive messaging requires bot + if (opts.source === "telegram" && opts.chatId && opts.chatId !== "unknown") { + try { + const candidate = extracted + .filter((s) => s.confidence >= 0.7) + .toSorted((a, b) => b.confidence - a.confidence)[0]; + + if (candidate) { + // Name-based dedup: skip if skill already exists + const exists = await db + .selectFrom("skills") + .select("id") + .where("name", "=", candidate.name) + .executeTakeFirst(); + + if (!exists) { + const normalizedName = candidate.name + .toLowerCase() + .replace(/[^a-z0-9]/g, "-"); + const ignoredAt = await getSetting(db, `ignored_skill:${normalizedName}`); + const stillIgnored = + ignoredAt && + Date.now() - new Date(ignoredAt).getTime() < 7 * 24 * 60 * 60 * 1000; + + const lastNudge = await getSetting(db, `skill_nudge_cooldown:${opts.chatId}`); + const onCooldown = + lastNudge && + Date.now() - new Date(lastNudge).getTime() < 24 * 60 * 60 * 1000; + + if (!stillIgnored && !onCooldown) { + const payload = JSON.stringify({ + name: candidate.name, + description: candidate.description, + body: candidate.body, + }); + await setSetting(db, `skill_nudge:${opts.chatId}`, payload); + await setSetting( + db, + `skill_nudge_cooldown:${opts.chatId}`, + new Date().toISOString(), + ); + agentLog.info`Queued skill nudge for chat ${opts.chatId}: "${candidate.name}"`; + } } } + } catch (err) { + agentLog.warning`Failed to queue skill nudge: ${err}`; } - } catch (err) { - agentLog.warning`Failed to queue skill nudge: ${err}`; } } + } catch (err) { + agentLog.warning`Failed to extract skills from observations: ${err}`; } - } catch (err) { - agentLog.warning`Failed to extract skills from observations: ${err}`; - } - - // Then check if reflector should condense - return memoryManager.runReflector(conversationId); - } - }) - .catch((err: unknown) => agentLog.error`Post-response observation failed: ${err}`); - const usage = hasUsage ? totalUsage : undefined; + // Then check if reflector should condense + return memoryManager.runReflector(conversationId); + } + }) + .catch((err: unknown) => agentLog.error`Post-response observation failed: ${err}`); + + const usage = hasUsage ? totalUsage : undefined; + + rootSpan.setAttributes({ + output: responseText, + tool_call_count: toolCalls.length, + ...(hasUsage + ? { + input_tokens: totalUsage.input, + output_tokens: totalUsage.output, + cost_usd: totalUsage.cost, + } + : {}), + }); - return { text: responseText, toolCalls, usage, messageId: assistantMessageId }; + return { text: responseText, toolCalls, usage, messageId: assistantMessageId }; + } finally { + rootSpan.end(); + } } diff --git a/apps/construct/src/env.ts b/apps/construct/src/env.ts index 893bae9..390db2c 100644 --- a/apps/construct/src/env.ts +++ b/apps/construct/src/env.ts @@ -32,6 +32,8 @@ const envSchema = z.object({ .transform((p) => resolve(p)), EMBEDDING_MODEL: z.string().default("qwen/qwen3-embedding-8b"), MEMORY_WORKER_MODEL: z.string().optional(), + LAMINAR_API_KEY: z.string().optional(), + LAMINAR_BASE_URL: z.string().optional(), }); export const env = envSchema.parse(process.env); diff --git a/apps/construct/src/main.ts b/apps/construct/src/main.ts index e8914da..507503e 100644 --- a/apps/construct/src/main.ts +++ b/apps/construct/src/main.ts @@ -1,5 +1,6 @@ import { env } from "./env.js"; import { setupLogging, log } from "./logger.js"; +import { initTracing } from "./tracing.js"; import { createDb } from "@repo/db"; import type { Database } from "./db/schema.js"; import { runMigrations } from "./db/migrate.js"; @@ -11,6 +12,7 @@ import { initExtensions } from "./extensions/index.js"; async function main() { await setupLogging(env.LOG_LEVEL, env.LOG_FILE); + initTracing(env.LAMINAR_API_KEY, env.LAMINAR_BASE_URL); log.info`Starting Construct`; log.info`Model: ${env.OPENROUTER_MODEL}`; diff --git a/apps/construct/src/scheduler/index.ts b/apps/construct/src/scheduler/index.ts index d076a25..8e9e259 100644 --- a/apps/construct/src/scheduler/index.ts +++ b/apps/construct/src/scheduler/index.ts @@ -79,6 +79,7 @@ async function fireAgentSchedule(db: Kysely, bot: Bot, schedule: Sched source: "telegram", externalId: schedule.chat_id, chatId: schedule.chat_id, + scheduleId: schedule.id, }); await markScheduleRun(db, schedule.id); diff --git a/apps/construct/src/tracing.ts b/apps/construct/src/tracing.ts new file mode 100644 index 0000000..3bc37c2 --- /dev/null +++ b/apps/construct/src/tracing.ts @@ -0,0 +1,49 @@ +import { Laminar } from "@lmnr-ai/lmnr"; + +let enabled = false; + +export function initTracing(apiKey: string | undefined, baseUrl: string | undefined): void { + if (!apiKey) return; + Laminar.initialize({ projectApiKey: apiKey, baseUrl }); + enabled = true; +} + +export interface TracingSpan { + setAttribute(key: string, value: string | number | boolean): void; + setAttributes(attrs: Record): void; + end(): void; +} + +const noopSpan: TracingSpan = { + setAttribute() {}, + setAttributes() {}, + end() {}, +}; + +export interface SpanOptions { + name: string; + input?: unknown; + spanType?: "DEFAULT" | "LLM" | "TOOL" | "EXECUTOR" | "EVALUATOR"; + tags?: string[]; + sessionId?: string; + userId?: string; + metadata?: Record; +} + +export function startActiveSpan(opts: SpanOptions): TracingSpan { + if (!enabled) return noopSpan; + const span = Laminar.startActiveSpan(opts); + return { + setAttribute(key, value) { + span.setAttribute(key, value); + }, + setAttributes(attrs) { + for (const [k, v] of Object.entries(attrs)) { + span.setAttribute(k, v); + } + }, + end() { + span.end(); + }, + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd88514..f01c48f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: apps/construct: dependencies: + '@lmnr-ai/lmnr': + specifier: ^0.8.16 + version: 0.8.16 '@mariozechner/pi-agent-core': specifier: ^0.54.2 version: 0.54.2(ws@8.19.0)(zod@4.3.6) @@ -80,7 +83,7 @@ importers: devDependencies: vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.1)(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) apps/cortex: dependencies: @@ -229,7 +232,7 @@ importers: devDependencies: vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.1)(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/cairn: dependencies: @@ -245,7 +248,7 @@ importers: devDependencies: vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.1)(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/db: dependencies: @@ -544,6 +547,10 @@ packages: resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} engines: {node: '>=18'} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@ctrl/tinycolor@4.2.0': resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} engines: {node: '>=14'} @@ -887,6 +894,15 @@ packages: '@grammyjs/types@3.24.0': resolution: {integrity: sha512-qQIEs4lN5WqUdr4aT8MeU6UFpMbGYAvcvYSW1A4OO1PABGJQHz/KLON6qvpf+5RxaNDQBxiY2k2otIhg/AG7RQ==} + '@grpc/grpc-js@1.14.3': + resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + engines: {node: '>=6'} + hasBin: true + '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} @@ -923,89 +939,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1050,6 +1082,59 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@lmnr-ai/claude-code-proxy-darwin-arm64@0.1.17': + resolution: {integrity: sha512-mbNf6sndS55mcWTcA2MTgbI8qayXiplqz/wWilneDqqvYrjNAXivoXphZFsAi0OYj/JiI5NS3cWdTOvV3q9tVA==} + engines: {node: '>=18.0.0'} + cpu: [arm64] + os: [darwin] + + '@lmnr-ai/claude-code-proxy-darwin-x64@0.1.17': + resolution: {integrity: sha512-LpuXfIDhcZZhn30mqn1Z/KP8IemQU7twmKSeo71U4uG3Bkl++CYZGSNVU3H9+N5DNMHqtt5G9caFiPrKepd3uA==} + engines: {node: '>=18.0.0'} + cpu: [x64] + os: [darwin] + + '@lmnr-ai/claude-code-proxy-linux-arm64-gnu@0.1.17': + resolution: {integrity: sha512-/b+zCCrSVSNa1gVHQgiWxHC6AtCa5foU4AouOchYcBdsM+K0gu8qQFiK/mgFAQjWWjDJc1clTfCd594hYZQhfw==} + engines: {node: '>=18.0.0'} + cpu: [arm64] + os: [linux] + + '@lmnr-ai/claude-code-proxy-linux-arm64-musl@0.1.17': + resolution: {integrity: sha512-V6fmc/rifM1JcyA7PbAdxFxDQWPATDw6yaUCdjJ95KmNrWuPV3xumxak+n84o7spH7Y4/7qXqs/zhW+p9fuNyw==} + engines: {node: '>=18.0.0'} + cpu: [arm64] + os: [linux] + + '@lmnr-ai/claude-code-proxy-linux-x64-gnu@0.1.17': + resolution: {integrity: sha512-yYhWRYyqlyqu3GsPzYHh/9ZPbiwjgMdFGajmuhJCIvALPRU8f7tCdwFfobNLl9APm+FbFo4c8GfFkzelMNieHA==} + engines: {node: '>=18.0.0'} + cpu: [x64] + os: [linux] + + '@lmnr-ai/claude-code-proxy-linux-x64-musl@0.1.17': + resolution: {integrity: sha512-QteM8Z6STimW2hlKgLeAHZjCoNzZCbbWfV3d3Xc4fDk9SnLe84epqfhP0aL1l5LIFv33zlQg3Ay1Pmt70FckoQ==} + engines: {node: '>=18.0.0'} + cpu: [x64] + os: [linux] + + '@lmnr-ai/claude-code-proxy-win32-x64-msvc@0.1.17': + resolution: {integrity: sha512-TH92W5bX/e7uzKn+Kvo9M8VbZLrboVsrTV1EpE5W0IqjJSsDRZlSkHIcevnU+DYDTZhr3bJTjMMm19FL51a+Dw==} + engines: {node: '>=18.0.0'} + cpu: [x64] + os: [win32] + + '@lmnr-ai/claude-code-proxy@0.1.17': + resolution: {integrity: sha512-V1jB7E7KuUVbzVBgGpM7RpYWQcW7q1Im3okuYbIiw2eZgPwufmGcYQ/va0sjQ0Ot4ksw7a/l42mkGTuTcz3ozw==} + engines: {node: '>=18.0.0'} + + '@lmnr-ai/lmnr@0.8.16': + resolution: {integrity: sha512-ZojvlU6t0zhWo7x1bH/lE7vKVVwc8qO+N68e3Er66HuqjZL3Iy/+VLs5+/hCK9XALh6SThhXGFaCfaW4OzMneA==} + hasBin: true + '@logtape/logtape@2.0.4': resolution: {integrity: sha512-Z4COeAMdedcBFuFkXaPFvDPOVuHoEom1hwNnPCIkSyojyikuNguplwPoSG+kZthWrS7GiOJo1USQyjWwIFfTKA==} @@ -1068,6 +1153,270 @@ packages: '@mistralai/mistralai@1.10.0': resolution: {integrity: sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg==} + '@opentelemetry/api-logs@0.200.0': + resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.214.0': + resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.56.0': + resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@2.0.0': + resolution: {integrity: sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/context-async-hooks@2.6.1': + resolution: {integrity: sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.0.0': + resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.6.1': + resolution: {integrity: sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.200.0': + resolution: {integrity: sha512-+3MDfa5YQPGM3WXxW9kqGD85Q7s9wlEMVNhXXG7tYFLnIeaseUt9YtCeFhEDFzfEktacdFpOtXmJuNW8cHbU5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.200.0': + resolution: {integrity: sha512-KfWw49htbGGp9s8N4KI8EQ9XuqKJ0VG+yVYVYFiCYSjEV32qpQ5qZ9UZBzOZ6xRb+E16SXOSCT3RkqBVSABZ+g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.200.0': + resolution: {integrity: sha512-GmahpUU/55hxfH4TP77ChOfftADsCq/nuri73I/AVLe2s4NIglvTsaACkFVZAVmnXXyPS00Fk3x27WS3yO07zA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.200.0': + resolution: {integrity: sha512-uHawPRvKIrhqH09GloTuYeq2BjyieYHIpiklOvxm9zhrCL2eRsnI/6g9v2BZTVtGp8tEgIa7rCQ6Ltxw6NBgew==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.200.0': + resolution: {integrity: sha512-5BiR6i8yHc9+qW7F6LqkuUnIzVNA7lt0qRxIKcKT+gq3eGUPHZ3DY29sfxI3tkvnwMgtnHDMNze5DdxW39HsAw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.200.0': + resolution: {integrity: sha512-E+uPj0yyvz81U9pvLZp3oHtFrEzNSqKGVkIViTQY1rH3TOobeJPSpLnTVXACnCwkPR5XeTvPnK3pZ2Kni8AFMg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-prometheus@0.200.0': + resolution: {integrity: sha512-ZYdlU9r0USuuYppiDyU2VFRA0kFl855ylnb3N/2aOlXrbA4PMCznen7gmPbetGQu7pz8Jbaf4fwvrDnVdQQXSw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.200.0': + resolution: {integrity: sha512-hmeZrUkFl1YMsgukSuHCFPYeF9df0hHoKeHUthRKFCxiURs+GwF1VuabuHmBMZnjTbsuvNjOB+JSs37Csem/5Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.214.0': + resolution: {integrity: sha512-FWRZ7AWoTryYhthralHkfXUuyO3l7cRsnr49WcDio1orl2a7KxT8aDZdwQtV1adzoUvZ9Gfo+IstElghCS4zfw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.200.0': + resolution: {integrity: sha512-Goi//m/7ZHeUedxTGVmEzH19NgqJY+Bzr6zXo1Rni1+hwqaksEyJ44gdlEMREu6dzX1DlAaH/qSykSVzdrdafA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.200.0': + resolution: {integrity: sha512-V9TDSD3PjK1OREw2iT9TUTzNYEVWJk4Nhodzhp9eiz4onDMYmPy3LaGbPv81yIR6dUb/hNp/SIhpiCHwFUq2Vg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.214.0': + resolution: {integrity: sha512-ON0spYWb2yAdQ9b+ItNyK0c6qdtcs+0eVR4YFJkhJL7agfT8sHFg0e5EesauSRiTHPZHiDobI92k77q0lwAmqg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-zipkin@2.0.0': + resolution: {integrity: sha512-icxaKZ+jZL/NHXX8Aru4HGsrdhK0MLcuRXkX5G5IRmCgoRLw+Br6I/nMVozX2xjGGwV7hw2g+4Slj8K7s4HbVg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation@0.200.0': + resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.214.0': + resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.56.0': + resolution: {integrity: sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.200.0': + resolution: {integrity: sha512-IxJgA3FD7q4V6gGq4bnmQM5nTIyMDkoGFGrBrrDjB6onEiq1pafma55V+bHvGYLWvcqbBbRfezr1GED88lacEQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.214.0': + resolution: {integrity: sha512-u1Gdv0/E9wP+apqWf7Wv2npXmgJtxsW2XL0TEv9FZloTZRuMBKmu8cYVXwS4Hm3q/f/3FuCnPTgiwYvIqRSpRg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.200.0': + resolution: {integrity: sha512-CK2S+bFgOZ66Bsu5hlDeOX6cvW5FVtVjFFbWuaJP0ELxJKBB6HlbLZQ2phqz/uLj1cWap5xJr/PsR3iGoB7Vqw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.214.0': + resolution: {integrity: sha512-IDP6zcyA24RhNZ289MP6eToIZcinlmirHjX8v3zKCQ2ZhPpt5cGwkN91tCth337lqHIgWcTy90uKRiX/SzALDw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.200.0': + resolution: {integrity: sha512-+9YDZbYybOnv7sWzebWOeK6gKyt2XE7iarSyBFkwwnP559pEevKOUD8NyDHhRjCSp13ybh9iVXlMfcj/DwF/yw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.214.0': + resolution: {integrity: sha512-DSaYcuBRh6uozfsWN3R8HsN0yDhCuWP7tOFdkUOVaWD1KVJg8m4qiLUsg/tNhTLS9HUYUcwNpwL2eroLtsZZ/w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagator-b3@2.0.0': + resolution: {integrity: sha512-blx9S2EI49Ycuw6VZq+bkpaIoiJFhsDuvFGhBIoH3vJ5oYjJ2U0s3fAM5jYft99xVIAv6HqoPtlP9gpVA2IZtA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@2.0.0': + resolution: {integrity: sha512-Mbm/LSFyAtQKP0AQah4AfGgsD+vsZcyreZoQ5okFBk33hU7AquU4TltgyL9dvaO8/Zkoud8/0gEvwfOZ5d7EPA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@2.0.0': + resolution: {integrity: sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/resources@2.6.1': + resolution: {integrity: sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.200.0': + resolution: {integrity: sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.214.0': + resolution: {integrity: sha512-zf6acnScjhsaBUU22zXZ/sLWim1dfhUAbGXdMmHmNG3LfBnQ3DKsOCITb2IZwoUsNNMTogqFKBnlIPPftUgGwA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.0.0': + resolution: {integrity: sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.6.1': + resolution: {integrity: sha512-9t9hJHX15meBy2NmTJxL+NJfXmnausR2xUDvE19XQce0Qi/GBtDGamU8nS1RMbdgDmhgpm3VaOu2+fiS/SfTpQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-node@0.200.0': + resolution: {integrity: sha512-S/YSy9GIswnhYoDor1RusNkmRughipvTCOQrlF1dzI70yQaf68qgf5WMnzUxdlCl3/et/pvaO75xfPfuEmCK5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.0.0': + resolution: {integrity: sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.6.1': + resolution: {integrity: sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.0.0': + resolution: {integrity: sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.6.1': + resolution: {integrity: sha512-Hh2i4FwHWRFhnO2Q/p6svMxy8MPsNCG0uuzUY3glqm0rwM0nQvbTO1dXSp9OqQoTKXcQzaz9q1f65fsurmOhNw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.40.0': + resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} + engines: {node: '>=14'} + '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} @@ -1118,48 +1467,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.37.0': resolution: {integrity: sha512-EZj3TurW1iLbq+7tBr++wsxwFyD+pvjMrTNRuSynDrs8J7w46cu/ZIzU/lFw7OG1/tDRDZ9nrKXxwbvIKXo2zA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.37.0': resolution: {integrity: sha512-ELXrDe1xRj+f7VpzJO2j54izMbi+Hov+kdqusXO3T1BwVEbA5sWgZrVMqkwEsj4k6Lw/obJK1SLUeNulR1D//g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.37.0': resolution: {integrity: sha512-79gMZgLD62dGmo5Xl4gaMc6NHRFj3GuxPrchHBlW54tcRSXTtb3gLh/J6Bl8nbbzSFRQGR7dkNQ8yYadXt6txQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.37.0': resolution: {integrity: sha512-QFdi9OhyWxnh975jeG490atcINXZwZb7epyNASPaT4wcodOTuDitrDgSPT8CFl8BcGOFTGZ6c3P/s8Afeg1Ngg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.37.0': resolution: {integrity: sha512-qweAj7+pLFQXfe3UU7EZiOmo+/2SWjzVZjyyTDcrZAT0E92zEKJBvYpHinUAOqipfo2Xlp8GIfq0FSb5Tmqd8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.37.0': resolution: {integrity: sha512-Lqc/0vS20qzZLw1ThpWn1hQgRqj4rM+E7PuBzrqp+wLH5lYFqieAiontGpl2pMPvJ0QrmQYav9mslHlAB5kOSQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.37.0': resolution: {integrity: sha512-TnJm22+1cEcpYXzbcXS5Z9+9c+R0ronFdx5bG4OTdOL/wSpQQKzc2izgAXJ03QkP3tq7aAPhlhhxasvH3xgoUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxfmt/binding-openharmony-arm64@0.37.0': resolution: {integrity: sha512-YLq27qMur3hPUponvV3Zr0oHxowox71j3+nc+/oCc1O+M0zFafhd6AoAoCiRrSYRW+asWhz3/UMPh0bYpimcMw==} @@ -1232,48 +1589,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.52.0': resolution: {integrity: sha512-54wxvb1Pztz0GMgTLUG9HsH8uhZSL4UbG7n4PDxWIRT9TygTVYKfD6D7iasYdKg6ZpWB5Y86VMxgjSJpR/Y7bQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.52.0': resolution: {integrity: sha512-A82Zks1lJyLclrj8n2tJPHOw2ieZXCaBctnCarS1BRlPQMC1Y98vWCLqgvg9ssWy5ZAja0IjUHN1cYsp53mrqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.52.0': resolution: {integrity: sha512-ci89Ou+u9vnA0r4eQqGm/KPEkpea+QEtZCLKkrOAD/K5ZBwjS8ToID6aMgsDbIOJUNBGufsmX0iCC7EWrNKQFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.52.0': resolution: {integrity: sha512-3/+DVDWajFSu69TaYnKkoUgMEcHR3puO8TcBu3fPCKRhbLjgwDiYIVRdvQX0QaSjkNPJARmpYq7vlPHWNo2cUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.52.0': resolution: {integrity: sha512-BU7CbceOh00NDmY1IYr72qZoj4sJVHB9DCL2tIq2vyNllNJIpZWTxqlzdqmC4FViXWMy8kZNkOa+SdauH+EcoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.52.0': resolution: {integrity: sha512-JUVZ6TKYl1yArS3xGsNLQlZxgVpjNKtZFja6VxSTDy2ToN7H58PiDRcxWoN2XoIcWlHSvK7pkIPFNOyzdEJ23A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-musl@1.52.0': resolution: {integrity: sha512-IatLKG6UUbIbTBjBZ9SIAYp4SIvOpYIXPXn9cMLqWxh9HrHsu0fLNL+VQ67y4vdlIleYLeuIHkAp3M6saIN1RQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxlint/binding-openharmony-arm64@1.52.0': resolution: {integrity: sha512-CWgJ6FepHryuc/lgQWStFf3lcvEkbFLSa9zqO0D0QLVfrdg43I4XItKpL/bnfm4n7obzwgG8j8sBggdoxJQKfw==} @@ -1412,66 +1777,79 @@ packages: resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.59.0': resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.59.0': resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.59.0': resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.59.0': resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.59.0': resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.59.0': resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.59.0': resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.59.0': resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} @@ -1725,6 +2103,58 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@traceloop/ai-semantic-conventions@0.12.0': + resolution: {integrity: sha512-wbdXK+q+gU6ciREe/0vdEz4cG0uyYC3WNZ2oOKFfU5o+60uIpVsc7A99Iu1iPvhPQAZXnniwih6qXo1SeCAE3A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-anthropic@0.12.0': + resolution: {integrity: sha512-LDlwpbuZ0n5M0uwX4RxxsgrifozJn/ULzOCzD7x2Idhsp1kus1lSAHquTL2htmd/BALMvI1As1INaWsYXXre8A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-azure@0.12.0': + resolution: {integrity: sha512-NYxqxOjDB/Xo/LdNC0cfozsXTtyTUou5Qta6wgtW4+cPeVBPMIrlhM4WD88pdwGGOQ9R+A4w9jlHbtRSHYjXug==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-bedrock@0.12.0': + resolution: {integrity: sha512-RqV81Cg2rcZ2GzeGf+IHVQhB6FrLrROD+YFWMTYmMofg8VlDnx4Qc98XGbnxqnhKNTXyXGU5uVReniMbRx4g+A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-chromadb@0.12.0': + resolution: {integrity: sha512-Pb11sARD3Fus0pYQHoOFQ2LCDoKmXc+q286+hqVayImfLQee1T8I7vSJ/lQNfmwpcusUe3QFtocYkboyB4tbkg==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-cohere@0.12.0': + resolution: {integrity: sha512-wp5yUgZ2Wos8AbuywOb4mQ2Izaomd9l7AA60hfk8WDLS0xh71E3P9HbuwRxOzp2uyRiAekdNRrZxzQ0WEX//XQ==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-langchain@0.12.0': + resolution: {integrity: sha512-lKsBkokmZXFsB8jF3tAFs2YMMuNFQR3EhR+LVZyq4rjynDU5UqPYjdqGfKIEmcyvnWjvtMe3jLKy8H57/y/Vow==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-llamaindex@0.12.0': + resolution: {integrity: sha512-NdffQUxDQprgZvSV6cOynYXI9QslpVJEjMHn67hMc5rabZPSdqKXWpSW1QtNsh4aWRhzQ861wD9OadZzM89eVg==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-openai@0.12.0': + resolution: {integrity: sha512-q3+PQCE3CmRDwlkEbTJ5FwpaJV93pTsXs39QRzOAW7nInOIMh7hCB4BsKiaX7sf/2UaAdBXpf7LcjciDs4oRng==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-pinecone@0.12.0': + resolution: {integrity: sha512-+rG5Nn1qu9EpgnGkxRgae1CXBBBOau+5aVVjZpGqnhZZ7I6EHuFN401IaRKPxaXagB12ZOBcpWI0LgSLgdwmlw==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-qdrant@0.12.0': + resolution: {integrity: sha512-733kNyO2aHz7juIw19RqElXnMJf3O16K9QY0UQ020vjNYF6koKUoxEeqzfcWMv0oTlzJr1C4H8iBybK9KGAw2A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-together@0.12.1': + resolution: {integrity: sha512-8IZzd3RFHT2zmYlbtoZGynm5Aiw/sHloq7zMG0irqcexbbAbCCjwhyeb0wtmkm98OfZpEcpsjRQ5+EFIsIXuWQ==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-vertexai@0.12.0': + resolution: {integrity: sha512-p9/orFV2uYtqOQOKvi3zA9j+xG7qlra3RfyDcD81k5sO+Znm9kYJrJ7608zelqdEdzr/sUeXme1gPV2oYOZJhA==} + engines: {node: '>=14'} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1799,6 +2229,9 @@ packages: '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1847,6 +2280,11 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1930,6 +2368,10 @@ packages: engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -1940,6 +2382,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} @@ -1977,6 +2423,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2034,10 +2484,24 @@ packages: citty@0.2.1: resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2056,6 +2520,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2063,6 +2530,10 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -2122,6 +2593,11 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csv-parser@3.2.0: + resolution: {integrity: sha512-fgKbp+AJbn1h2dcAHKIdKNSSjfp43BZZykXsCjzALjKy80VXQNHPFJ6T9Afwdzoj24aMkq8GwDS7KGcDPpejrA==} + engines: {node: '>= 10'} + hasBin: true + d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} @@ -2146,6 +2622,9 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2210,6 +2689,10 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dotenv@17.4.0: + resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==} + engines: {node: '>=12'} + dset@3.1.4: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} @@ -2232,6 +2715,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2316,19 +2802,33 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + export-to-csv@1.4.0: + resolution: {integrity: sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==} + engines: {node: ^v12.20.0 || >=v14.13.0} + expressive-code@0.41.7: resolution: {integrity: sha512-2wZjC8OQ3TaVEMcBtYY4Va3lo6J+Ai9jf3d4dbhURMJcU4Pbqe6EcHe424MIZI0VHUA1bR6xdpoHYi3yxokWqA==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-copy@4.0.2: + resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} @@ -2377,6 +2877,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gaxios@7.1.3: resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} engines: {node: '>=18'} @@ -2412,6 +2915,10 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + google-auth-library@10.6.1: resolution: {integrity: sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==} engines: {node: '>=18'} @@ -2431,6 +2938,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} @@ -2494,6 +3005,9 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hono@4.12.3: resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} engines: {node: '>=16.9.0'} @@ -2521,6 +3035,13 @@ packages: i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + + import-in-the-middle@3.0.0: + resolution: {integrity: sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg==} + engines: {node: '>=18'} + import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -2540,6 +3061,10 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -2582,6 +3107,13 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tiktoken@1.0.21: + resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2681,6 +3213,21 @@ packages: resolution: {integrity: sha512-2W8PP/EGCvyS/x+Xza0Lgvn/EM3FKnr6m6xkfzpl6RKHl8TwPvs9iYZFQL99CnWTTvO+1mtQvIxGE/bD05038Q==} hasBin: true + lmnr-cli@0.1.8: + resolution: {integrity: sha512-pe1LLX/PR3xuGl7nbQ7rqigiLGinhdQsPcMJd1mIA9sYWxo7e8kXp7VntiGu7zaN264KOA0w/Aq2WYEcks4spQ==} + hasBin: true + peerDependencies: + '@lmnr-ai/lmnr': '*' + peerDependenciesMeta: + '@lmnr-ai/lmnr': + optional: true + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -2886,14 +3433,24 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -2965,6 +3522,13 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -3048,10 +3612,17 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3069,6 +3640,23 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-pretty@13.1.3: + resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + hasBin: true + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@9.12.0: + resolution: {integrity: sha512-0Gd0OezGvqtqMwgYxpL7P0pSHHzTJ0Lx992h+mNlMtRVfNnqweWmf0JmRWk5gJzHalyd2mxTzKjhiNbGS2Ztfw==} + hasBin: true + postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} @@ -3087,6 +3675,9 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3105,6 +3696,12 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -3125,6 +3722,10 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -3205,9 +3806,22 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -3239,6 +3853,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + sax@1.5.0: resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} engines: {node: '>=11.0.0'} @@ -3246,6 +3864,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3274,6 +3895,9 @@ packages: shiki@3.23.0: resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3289,6 +3913,9 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} hasBin: true + slow-redact@0.3.2: + resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -3305,6 +3932,9 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3320,6 +3950,10 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -3359,6 +3993,10 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + strnum@2.1.2: resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} @@ -3376,11 +4014,18 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + svgo@4.0.1: resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} engines: {node: '>=16'} hasBin: true + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -3579,6 +4224,14 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@13.0.0: + resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + hasBin: true + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -3753,6 +4406,9 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -4459,6 +5115,9 @@ snapshots: dependencies: fontkitten: 1.0.3 + '@colors/colors@1.5.0': + optional: true + '@ctrl/tinycolor@4.2.0': {} '@emnapi/runtime@1.8.1': @@ -4660,6 +5319,18 @@ snapshots: '@grammyjs/types@3.24.0': {} + '@grpc/grpc-js@1.14.3': + dependencies: + '@grpc/proto-loader': 0.8.0 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.8.0': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + '@hono/node-server@1.19.9(hono@4.12.3)': dependencies: hono: 4.12.3 @@ -4789,12 +5460,92 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@logtape/logtape@2.0.4': {} + '@js-sdsl/ordered-map@4.4.2': {} - '@mariozechner/pi-agent-core@0.54.2(ws@8.19.0)(zod@4.3.6)': - dependencies: - '@mariozechner/pi-ai': 0.54.2(ws@8.19.0)(zod@4.3.6) - transitivePeerDependencies: + '@lmnr-ai/claude-code-proxy-darwin-arm64@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-darwin-x64@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-linux-arm64-gnu@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-linux-arm64-musl@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-linux-x64-gnu@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-linux-x64-musl@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy-win32-x64-msvc@0.1.17': + optional: true + + '@lmnr-ai/claude-code-proxy@0.1.17': + optionalDependencies: + '@lmnr-ai/claude-code-proxy-darwin-arm64': 0.1.17 + '@lmnr-ai/claude-code-proxy-darwin-x64': 0.1.17 + '@lmnr-ai/claude-code-proxy-linux-arm64-gnu': 0.1.17 + '@lmnr-ai/claude-code-proxy-linux-arm64-musl': 0.1.17 + '@lmnr-ai/claude-code-proxy-linux-x64-gnu': 0.1.17 + '@lmnr-ai/claude-code-proxy-linux-x64-musl': 0.1.17 + '@lmnr-ai/claude-code-proxy-win32-x64-msvc': 0.1.17 + + '@lmnr-ai/lmnr@0.8.16': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@lmnr-ai/claude-code-proxy': 0.1.17 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-grpc': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-proto': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-node': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/instrumentation-anthropic': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-azure': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-bedrock': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-chromadb': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-cohere': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-langchain': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-llamaindex': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-openai': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-pinecone': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-qdrant': 0.12.0(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-together': 0.12.1(@opentelemetry/api@1.9.1) + '@traceloop/instrumentation-vertexai': 0.12.0(@opentelemetry/api@1.9.1) + chokidar: 5.0.0 + cli-progress: 3.12.0 + commander: 14.0.3 + csv-parser: 3.2.0 + dotenv: 17.4.0 + esbuild: 0.25.12 + eventsource-parser: 3.0.6 + export-to-csv: 1.4.0 + glob: 13.0.6 + lmnr-cli: 0.1.8(@lmnr-ai/lmnr@0.8.16) + pino: 9.12.0 + pino-pretty: 13.1.3 + uuid: 11.1.0 + zod: 4.3.6 + zod-to-json-schema: 3.25.1(zod@4.3.6) + transitivePeerDependencies: + - supports-color + + '@logtape/logtape@2.0.4': {} + + '@mariozechner/pi-agent-core@0.54.2(ws@8.19.0)(zod@4.3.6)': + dependencies: + '@mariozechner/pi-ai': 0.54.2(ws@8.19.0)(zod@4.3.6) + transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt - bufferutil @@ -4862,6 +5613,359 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.25.1(zod@3.25.76) + '@opentelemetry/api-logs@0.200.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.214.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.56.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/context-async-hooks@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-logs-otlp-http@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-logs-otlp-proto@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-metrics-otlp-http@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-metrics-otlp-proto@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-prometheus@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-trace-otlp-grpc@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-trace-otlp-grpc@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-trace-otlp-http@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-trace-otlp-proto@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-trace-otlp-proto@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/exporter-zipkin@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + import-in-the-middle: 3.0.0 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.56.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + semver: 7.7.4 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-exporter-base@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-exporter-base@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.214.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-grpc-exporter-base@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-grpc-exporter-base@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.214.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-transformer@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + protobufjs: 7.5.4 + + '@opentelemetry/otlp-transformer@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) + protobufjs: 7.5.4 + + '@opentelemetry/propagator-b3@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/propagator-jaeger@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/resources@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-logs@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-logs@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-metrics@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-metrics@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-node@0.200.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-http': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-proto': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-proto': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-prometheus': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-http': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-proto': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-zipkin': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-b3': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-jaeger': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/sdk-trace-base@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-trace-node@2.0.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-trace-node@2.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.40.0': {} + '@oslojs/encoding@1.1.0': {} '@oxfmt/binding-android-arm-eabi@0.37.0': @@ -5452,6 +6556,144 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} + '@traceloop/ai-semantic-conventions@0.12.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@traceloop/instrumentation-anthropic@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-azure@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-bedrock@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-chromadb@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-cohere@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-langchain@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-llamaindex@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + lodash: 4.18.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-openai@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + js-tiktoken: 1.0.21 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-pinecone@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-qdrant@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-together@0.12.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + js-tiktoken: 1.0.21 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-vertexai@0.12.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@traceloop/ai-semantic-conventions': 0.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.0 @@ -5536,6 +6778,8 @@ snapshots: dependencies: '@types/node': 25.3.2 + '@types/shimmer@1.2.0': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -5597,6 +6841,10 @@ snapshots: dependencies: event-target-shim: 5.0.1 + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -5758,12 +7006,16 @@ snapshots: - uploadthing - yaml + atomic-sleep@1.0.0: {} + axobject-query@4.1.0: {} bail@2.0.2: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base-64@1.0.0: {} base64-js@1.5.1: {} @@ -5801,6 +7053,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -5846,8 +7102,22 @@ snapshots: citty@0.2.1: {} + cjs-module-lexer@1.4.3: {} + + cjs-module-lexer@2.2.0: {} + cli-boxes@3.0.0: {} + cli-progress@3.12.0: + dependencies: + string-width: 4.2.3 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -5864,10 +7134,14 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} commander@11.1.0: {} + commander@14.0.3: {} + common-ancestor-path@1.0.1: {} concurrently@9.2.1: @@ -5927,6 +7201,8 @@ snapshots: csstype@3.2.3: {} + csv-parser@3.2.0: {} + d3-dispatch@3.0.1: {} d3-force@3.0.0: @@ -5943,6 +7219,8 @@ snapshots: data-uri-to-buffer@6.0.2: {} + dateformat@4.6.3: {} + debug@4.4.3: dependencies: ms: 2.1.3 @@ -6000,6 +7278,8 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dotenv@17.4.0: {} + dset@3.1.4: {} eastasianwidth@0.2.0: {} @@ -6016,6 +7296,10 @@ snapshots: emoji-regex@9.2.2: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} entities@6.0.1: {} @@ -6151,8 +7435,12 @@ snapshots: eventemitter3@5.0.4: {} + eventsource-parser@3.0.6: {} + expect-type@1.3.0: {} + export-to-csv@1.4.0: {} + expressive-code@0.41.7: dependencies: '@expressive-code/core': 0.41.7 @@ -6162,8 +7450,12 @@ snapshots: extend@3.0.2: {} + fast-copy@4.0.2: {} + fast-deep-equal@3.1.3: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.0: {} fast-xml-parser@5.3.6: @@ -6205,6 +7497,8 @@ snapshots: fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + gaxios@7.1.3: dependencies: extend: 3.0.2 @@ -6251,6 +7545,12 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@13.0.6: + dependencies: + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + google-auth-library@10.6.1: dependencies: base64-js: 1.5.1 @@ -6288,6 +7588,10 @@ snapshots: has-flag@4.0.0: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + hast-util-embedded@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -6494,6 +7798,8 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 + help-me@5.0.0: {} + hono@4.12.3: {} html-escaper@3.0.3: {} @@ -6522,6 +7828,20 @@ snapshots: dependencies: '@babel/runtime': 7.28.6 + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + + import-in-the-middle@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + import-meta-resolve@4.2.0: {} inline-style-parser@0.2.7: {} @@ -6537,6 +7857,10 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-decimal@2.0.1: {} is-docker@3.0.0: {} @@ -6567,6 +7891,12 @@ snapshots: jiti@2.6.1: {} + joycon@3.1.1: {} + + js-tiktoken@1.0.21: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-yaml@4.1.1: @@ -6648,6 +7978,24 @@ snapshots: lefthook-windows-arm64: 2.1.3 lefthook-windows-x64: 2.1.3 + lmnr-cli@0.1.8(@lmnr-ai/lmnr@0.8.16): + dependencies: + chokidar: 5.0.0 + cli-table3: 0.6.5 + commander: 14.0.3 + csv-parser: 3.2.0 + eventsource-parser: 3.0.6 + export-to-csv: 1.4.0 + pino: 9.12.0 + pino-pretty: 13.1.3 + uuid: 13.0.0 + optionalDependencies: + '@lmnr-ai/lmnr': 0.8.16 + + lodash.camelcase@4.3.0: {} + + lodash@4.18.1: {} + long@5.3.2: {} longest-streak@3.1.0: {} @@ -7142,12 +8490,20 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@9.0.9: dependencies: brace-expansion: 2.0.2 + minimist@1.2.8: {} + minipass@7.1.3: {} + module-details-from-path@1.0.4: {} + mrmime@2.0.1: {} ms@2.1.3: {} @@ -7198,6 +8554,12 @@ snapshots: ohash@2.0.11: {} + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.4: @@ -7331,11 +8693,18 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.3 + path-scurry@2.0.2: + dependencies: + lru-cache: 11.2.6 + minipass: 7.1.3 + pathe@2.0.3: {} piccolore@0.1.3: {} @@ -7346,6 +8715,46 @@ snapshots: picomatch@4.0.3: {} + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@13.1.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 4.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pump: 3.0.4 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + + pino-std-serializers@7.1.0: {} + + pino@9.12.0: + dependencies: + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + slow-redact: 0.3.2 + sonic-boom: 4.2.1 + thread-stream: 3.1.0 + postcss-nested@6.2.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -7364,6 +8773,8 @@ snapshots: prismjs@1.30.0: {} + process-warning@5.0.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -7401,6 +8812,13 @@ snapshots: proxy-from-env@1.1.0: {} + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + quick-format-unescaped@4.0.4: {} + radix3@1.1.2: {} react-dom@19.2.4(react@19.2.4): @@ -7414,6 +8832,8 @@ snapshots: readdirp@5.0.0: {} + real-require@0.2.0: {} + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -7569,8 +8989,29 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@7.5.2: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + resolve-pkg-maps@1.0.0: {} + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -7639,10 +9080,14 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + sax@1.5.0: {} scheduler@0.27.0: {} + secure-json-parse@4.1.0: {} + semver@6.3.1: {} semver@7.7.4: {} @@ -7698,6 +9143,8 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shimmer@1.2.1: {} + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -7711,6 +9158,8 @@ snapshots: arg: 5.0.2 sax: 1.5.0 + slow-redact@0.3.2: {} + smart-buffer@4.2.0: {} smol-toml@1.6.0: {} @@ -7728,6 +9177,10 @@ snapshots: ip-address: 10.1.0 smart-buffer: 4.2.0 + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.1: {} source-map@0.6.1: @@ -7737,6 +9190,8 @@ snapshots: space-separated-tokens@2.0.2: {} + split2@4.2.0: {} + stackback@0.0.2: {} starlight-llms-txt@0.7.0(@astrojs/starlight@0.35.3(astro@5.18.0(@types/node@25.3.2)(jiti@2.6.1)(rollup@4.59.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.18.0(@types/node@25.3.2)(jiti@2.6.1)(rollup@4.59.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): @@ -7793,6 +9248,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-json-comments@5.0.3: {} + strnum@2.1.2: {} style-to-js@1.1.21: @@ -7811,6 +9268,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + svgo@4.0.1: dependencies: commander: 11.1.0 @@ -7821,6 +9280,10 @@ snapshots: picocolors: 1.1.1 sax: 1.5.0 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + tiny-inflate@1.0.3: {} tinybench@2.9.0: {} @@ -7966,6 +9429,10 @@ snapshots: util-deprecate@1.0.2: {} + uuid@11.1.0: {} + + uuid@13.0.0: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -8015,7 +9482,7 @@ snapshots: optionalDependencies: vite: 6.4.1(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.1)(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) @@ -8038,6 +9505,7 @@ snapshots: vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.1 '@types/node': 25.3.2 transitivePeerDependencies: - jiti @@ -8096,6 +9564,8 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + wrappy@1.0.2: {} + ws@8.19.0: {} xxhash-wasm@1.1.0: {}