From c94efcc58e1d6cccc5ef6184d1918720045aa228 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 2 Feb 2026 16:52:58 -0800 Subject: [PATCH 01/14] updated to use cosmos db instead of mongo db --- .../src/context/commandHandlerContext.ts | 4 +- ts/packages/aiclient/src/promptLogger.ts | 4 +- .../src/context/commandHandlerContext.ts | 4 +- ts/packages/telemetry/package.json | 5 +- ts/packages/telemetry/src/indexNode.ts | 2 +- .../src/logger/cosmosDBLoggerSink.ts | 154 ++++++ .../telemetry/src/logger/mongoLoggerSink.ts | 116 ----- ts/pnpm-lock.yaml | 450 +++++++++--------- ts/tools/scripts/getKeys.config.json | 4 +- 9 files changed, 384 insertions(+), 359 deletions(-) create mode 100644 ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts delete mode 100644 ts/packages/telemetry/src/logger/mongoLoggerSink.ts diff --git a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts index fb8354ac79..beaea4ebd7 100644 --- a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts @@ -9,7 +9,7 @@ import { LoggerSink, MultiSinkLogger, createDebugLoggerSink, - createMongoDBLoggerSink, + createCosmosDBLoggerSink, Profiler, } from "telemetry"; import { AgentCache } from "agent-cache"; @@ -189,7 +189,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createMongoDBLoggerSink( + dbLoggerSink = createCosmosDBLoggerSink( "telemetrydb", "dispatcherlogs", isDbEnabled, diff --git a/ts/packages/aiclient/src/promptLogger.ts b/ts/packages/aiclient/src/promptLogger.ts index 43743f09c4..125b8999f5 100644 --- a/ts/packages/aiclient/src/promptLogger.ts +++ b/ts/packages/aiclient/src/promptLogger.ts @@ -4,7 +4,7 @@ import { LoggerSink, MultiSinkLogger, - createMongoDBLoggerSink, + createCosmosDBLoggerSink, createDebugLoggerSink, } from "telemetry"; @@ -38,7 +38,7 @@ export class PromptLogger { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createMongoDBLoggerSink("telemetrydb", "promptLogs"); + dbLoggerSink = createCosmosDBLoggerSink("telemetrydb", "promptLogs"); } catch (e) { debugPromptLogger(`DB logging disabled. ${e}`); } diff --git a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts index b48c24fd7a..768d5b76e1 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts @@ -12,7 +12,7 @@ import { LoggerSink, MultiSinkLogger, createDebugLoggerSink, - createMongoDBLoggerSink, + createCosmosDBLoggerSink, } from "telemetry"; import { AgentCache } from "agent-cache"; import { randomUUID } from "crypto"; @@ -291,7 +291,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createMongoDBLoggerSink( + dbLoggerSink = createCosmosDBLoggerSink( "telemetrydb", "dispatcherlogs", isDbEnabled, diff --git a/ts/packages/telemetry/package.json b/ts/packages/telemetry/package.json index 1013b7bc3f..5048ee6b69 100644 --- a/ts/packages/telemetry/package.json +++ b/ts/packages/telemetry/package.json @@ -32,11 +32,12 @@ "tsc": "tsc -b" }, "dependencies": { + "@azure/cosmos": "^4.2.1", + "@azure/identity": "^4.10.0", "chalk": "^5.4.1", "debug": "^4.4.0", "dotenv": "^16.3.1", - "find-config": "^1.0.0", - "mongodb": "^6.15.0" + "find-config": "^1.0.0" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/ts/packages/telemetry/src/indexNode.ts b/ts/packages/telemetry/src/indexNode.ts index c1aebb16fc..72ebcca1ff 100644 --- a/ts/packages/telemetry/src/indexNode.ts +++ b/ts/packages/telemetry/src/indexNode.ts @@ -8,7 +8,7 @@ export { MultiSinkLogger, LogEvent, } from "./logger/logger.js"; -export { createMongoDBLoggerSink } from "./logger/mongoLoggerSink.js"; +export { createCosmosDBLoggerSink } from "./logger/cosmosDBLoggerSink.js"; export { createDebugLoggerSink } from "./logger/debugLoggerSink.js"; export * from "./stopWatch.js"; diff --git a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts new file mode 100644 index 0000000000..404497f9a6 --- /dev/null +++ b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts @@ -0,0 +1,154 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { LoggerSink, LogEvent } from "./logger.js"; +import { CosmosClient, Container, BulkOperationResult, CosmosClientOptions, PartitionKeyBuilder } from "@azure/cosmos"; +import registerDebug from "debug"; +import { DefaultAzureCredential } from "@azure/identity"; +import { randomUUID } from "crypto"; + +const debugCosmos = registerDebug("typeagent:logger:cosmosdb"); + +const UPLOAD_DELAY = 1000; +const MAX_RETRY = 3; + +class CosmosDBLoggerSink implements LoggerSink { + private pendingEvents: LogEvent[] = []; + private timeout: NodeJS.Timeout | undefined; + private disabled = false; + private container: Container | undefined; + + constructor( + private readonly connectionString: string, + private readonly databaseName: string, + private readonly containerName: string, + private readonly isEnabled?: () => boolean, + private readonly onErrorDisable?: (error: string) => void, + ) {} + + public logEvent(event: LogEvent) { + if (this.connectionString && !this.disabled && this.isEnabled?.() !== false) { + this.pendingEvents.push(event); + if (this.timeout === undefined) { + this.timeout = setTimeout(() => this.upload(), UPLOAD_DELAY); + } + } + } + + private async upload() { + let attempt = 0; + while (attempt < MAX_RETRY) { + attempt++; + try { + await this.drain(); + break; + } catch (e: any) { + // TODO: add backoff/queuing logic for ENOTFOUND (no internet) + if ( + typeof e.message === "string" && + (e.message.includes("Invalid key") || + e.message.includes("Unauthorized") || + e.message.includes("authorization")) + ) { + // Disable + if (this.onErrorDisable) { + this.onErrorDisable( + `DB Logging disabled: ${e.toString()}`, + ); + } else { + console.error(`DB Logging disabled: ${e.toString()}`); + } + + this.disabled = true; + break; + } + + // Retry + debugCosmos(`ERROR: ${e}`); + } + } + // Clear the timeout so it can schedule after the next log event. + this.timeout = undefined; + } + + private async getContainer(): Promise { + if (!this.container) { + let options = {} as CosmosClientOptions; + options.endpoint = this.connectionString; + options.aadCredentials = new DefaultAzureCredential(); + const client = new CosmosClient(options); + const database = client.database(this.databaseName); + + // // Create database if it doesn't exist + // await client.databases.createIfNotExists({ id: this.databaseName }); + + // // Create container if it doesn't exist + // await database.containers.createIfNotExists({ + // id: this.containerName, + // partitionKey: { paths: ["/id"] } + // }); + + this.container = database.container(this.containerName); + } + return this.container; + } + + private async drain() { + const container = await this.getContainer(); + + while (true) { + const events = this.pendingEvents; + if (events.length === 0) { + // done + return; + } + this.pendingEvents = []; + + try { + // Azure Cosmos DB requires each document to have an 'id' field + // We'll add it if not present and use bulk operations + const operations = events.map((event: any) => { + const partitionKey = new PartitionKeyBuilder().addValue(event.id || randomUUID().toString()).build() + return { + operationType: "Create" as const, + partitionKey: partitionKey, + resourceBody: { + ...event, + id: partitionKey?.toString(), + }, + }; + }); + + const result: BulkOperationResult[] = await container.items.executeBulkOperations(operations); + debugCosmos(`Status: ${result[0].response?.statusCode}. ${operations.length} events uploaded`); + } catch (e: any) { + if (this.pendingEvents.length !== 0) { + events.push(...this.pendingEvents); + } + this.pendingEvents = events; + throw e; + } + } + } +} + +export function createCosmosDBLoggerSink( + databaseName: string, + containerName: string, + isEnabled?: () => boolean, + onErrorDisable?: (error: string) => void, +): LoggerSink | undefined { + const connectionString = process.env["COSMOSDB_CONNECTION_STRING"] ?? null; + if (connectionString === null || connectionString === "") { + throw new Error( + "COSMOSDB_CONNECTION_STRING environment variable not set", + ); + } + return new CosmosDBLoggerSink( + connectionString, + databaseName, + containerName, + isEnabled, + onErrorDisable, + ); +} diff --git a/ts/packages/telemetry/src/logger/mongoLoggerSink.ts b/ts/packages/telemetry/src/logger/mongoLoggerSink.ts deleted file mode 100644 index 68530a3ad8..0000000000 --- a/ts/packages/telemetry/src/logger/mongoLoggerSink.ts +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { LoggerSink, LogEvent } from "./logger.js"; -import { MongoClient } from "mongodb"; -import registerDebug from "debug"; - -const debugMongo = registerDebug("typeagent:logger:mongodb"); - -const UPLOAD_DELAY = 1000; -const MAX_RETRY = 3; -class MongoDBLoggerSink implements LoggerSink { - private pendingEvents: LogEvent[] = []; - private timeout: NodeJS.Timeout | undefined; - private disabled = false; - constructor( - private readonly dbUrl: string, - private readonly dbName: string, - private readonly collectionName: string, - private readonly isEnabled?: () => boolean, - private readonly onErrorDisable?: (error: string) => void, - ) {} - - public logEvent(event: LogEvent) { - if (this.dbUrl && !this.disabled && this.isEnabled?.() !== false) { - this.pendingEvents.push(event); - if (this.timeout === undefined) { - this.timeout = setTimeout(() => this.upload(), UPLOAD_DELAY); - } - } - } - - private async upload() { - let attempt = 0; - while (attempt < MAX_RETRY) { - attempt++; - try { - await this.drain(); - break; - } catch (e: any) { - // TODO: add backoff/queuing logic for ENOTFOUND (no internet) - if ( - typeof e.message === "string" && - e.message.includes("Invalid key") - ) { - // Disable - if (this.onErrorDisable) { - this.onErrorDisable( - `DB Logging disabled: ${e.toString()}`, - ); - } else { - console.error(`DB Logging disabled: ${e.toString()}`); - } - - this.disabled = true; - break; - } - - // Retry - debugMongo(`ERROR: ${e}`); - } - } - // Clear the timeout so it can schedule after the next log event. - this.timeout = undefined; - } - - private async drain() { - const client = await MongoClient.connect(this.dbUrl); - try { - const db = client.db(this.dbName); - const collection = db.collection(this.collectionName); - while (true) { - const events = this.pendingEvents; - if (events.length === 0) { - // done - return; - } - this.pendingEvents = []; - - try { - await collection.insertMany(events); - debugMongo(`${events.length} events uploaded`); - } catch (e: any) { - if (this.pendingEvents.length !== 0) { - events.push(...this.pendingEvents); - } - this.pendingEvents = events; - throw e; - } - } - } finally { - await client.close(); - } - } -} - -export function createMongoDBLoggerSink( - dbName: string, - collectionName: string, - isEnabled?: () => boolean, - onErrorDisable?: (error: string) => void, -): LoggerSink | undefined { - const dbUrl = process.env["MONGODB_CONNECTION_STRING"] ?? null; - if (dbUrl === null || dbUrl === "") { - throw new Error( - "MONGODB_CONNECTION_STRING environment variable not set", - ); - } - return new MongoDBLoggerSink( - dbUrl, - dbName, - collectionName, - isEnabled, - onErrorDisable, - ); -} diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 789303f433..04b8c710e4 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -540,7 +540,7 @@ importers: version: 23.11.1(typescript@5.4.5) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.30)(typescript@5.4.5) + version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -2743,7 +2743,7 @@ importers: version: 16.5.0 ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.30)(typescript@5.4.5) + version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2759,7 +2759,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3949,7 +3949,7 @@ importers: devDependencies: '@electron-toolkit/tsconfig': specifier: ^1.0.1 - version: 1.0.1(@types/node@20.19.30) + version: 1.0.1(@types/node@22.15.18) '@fontsource/lato': specifier: ^5.2.5 version: 5.2.5 @@ -3973,7 +3973,7 @@ importers: version: 26.3.1(electron-builder-squirrel-windows@26.3.1) electron-vite: specifier: ^4.0.1 - version: 4.0.1(vite@6.4.1(@types/node@20.19.30)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) + version: 4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) less: specifier: ^4.2.0 version: 4.3.0 @@ -3991,10 +3991,16 @@ importers: version: 5.4.5 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@20.19.30)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) + version: 6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) packages/telemetry: dependencies: + '@azure/cosmos': + specifier: ^4.2.1 + version: 4.9.1 + '@azure/identity': + specifier: ^4.10.0 + version: 4.10.0 chalk: specifier: ^5.4.1 version: 5.6.2 @@ -4007,9 +4013,6 @@ importers: find-config: specifier: ^1.0.0 version: 1.0.0 - mongodb: - specifier: ^6.15.0 - version: 6.16.0(socks@2.8.7) devDependencies: '@types/debug': specifier: ^4.1.12 @@ -4552,10 +4555,18 @@ packages: resolution: {integrity: sha512-GdiCA8IA1gO+qcCbFEPj+iLC4+3ByjfKzmeAnkP7MdlL84Yo30Huo/EwbZzwRjYybXYUBuFxGPBB+yeTT4Ebxg==} engines: {node: '>=14.0.0'} + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} + engines: {node: '>=20.0.0'} + '@azure/core-auth@1.9.0': resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} + '@azure/core-client@1.10.1': + resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} + engines: {node: '>=20.0.0'} + '@azure/core-client@1.9.2': resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} engines: {node: '>=18.0.0'} @@ -4564,6 +4575,10 @@ packages: resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} engines: {node: '>=18.0.0'} + '@azure/core-http-compat@2.3.1': + resolution: {integrity: sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==} + engines: {node: '>=20.0.0'} + '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} engines: {node: '>=18.0.0'} @@ -4580,6 +4595,10 @@ packages: resolution: {integrity: sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==} engines: {node: '>=18.0.0'} + '@azure/core-rest-pipeline@1.22.2': + resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} + engines: {node: '>=20.0.0'} + '@azure/core-sse@2.2.0': resolution: {integrity: sha512-6Xg/CeW0jRyMoWt+puw2x6Qqkml3tr76Cn/oA9goIcUXtsi3ngmTwCVbwqkUWfhsOfo4F+78LGgiswSxTHN0sg==} engines: {node: '>=18.0.0'} @@ -4588,14 +4607,26 @@ packages: resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} engines: {node: '>=18.0.0'} + '@azure/core-tracing@1.3.1': + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} + engines: {node: '>=20.0.0'} + '@azure/core-util@1.11.0': resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} + '@azure/core-util@1.13.1': + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} + engines: {node: '>=20.0.0'} + '@azure/core-xml@1.4.4': resolution: {integrity: sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ==} engines: {node: '>=18.0.0'} + '@azure/cosmos@4.9.1': + resolution: {integrity: sha512-fPnfL4JsmJJ/jEYUhlznKfrEr2pMvJwBncGVcUC2Xi7Nlj0MrUMRE+UOrptl/lRV2W7l68Br+b9Ikzm0KiZZHg==} + engines: {node: '>=20.0.0'} + '@azure/identity-cache-persistence@1.2.0': resolution: {integrity: sha512-ZYr6iiE6d/Tkt4jck0cQv9grZ1BR4u5LXJmB1vblU/WGIHspO6Bv3TJMvQat2sQSOG4Wz7busgg0pajP4gNJzA==} engines: {node: '>=18.0.0'} @@ -4604,10 +4635,22 @@ packages: resolution: {integrity: sha512-iT53Sre2NJK6wzMWnvpjNiR3md597LZ3uK/5kQD2TkrY9vqhrY5bt2KwELNjkOWQ9n8S/92knj/QEykTtjMNqQ==} engines: {node: '>=18.0.0'} + '@azure/keyvault-common@2.0.0': + resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-keys@4.10.0': + resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} + engines: {node: '>=18.0.0'} + '@azure/logger@1.2.0': resolution: {integrity: sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==} engines: {node: '>=18.0.0'} + '@azure/logger@1.3.0': + resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} + engines: {node: '>=20.0.0'} + '@azure/maps-common@1.0.0-beta.2': resolution: {integrity: sha512-PB9GlnfojcQ4nf9WXdQvWeAk7gm8P74o+Z5IHz5YLK/W+3vrNrmVVVuFpGOvCPrLjag50UinaZsMBtPtxoiobg==} engines: {node: '>=14.0.0'} @@ -7077,9 +7120,6 @@ packages: '@types/node@20.19.25': resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} - '@types/node@20.19.30': - resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} - '@types/node@22.15.18': resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} @@ -7201,6 +7241,10 @@ packages: resolution: {integrity: sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==} engines: {node: '>=18.0.0'} + '@typespec/ts-http-runtime@0.3.2': + resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} + engines: {node: '>=20.0.0'} + '@vscode/test-cli@0.0.8': resolution: {integrity: sha512-sBSMSDzJChiiDjmys2Q6uI4SIoUYf0t6oDsQO3ypaQ7udha9YD4e2On9e9VE5OBayZMpxbgJX+NudmCwJMdOIg==} hasBin: true @@ -11713,6 +11757,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + priorityqueuejs@2.0.0: + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -12271,6 +12318,10 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} + semaphore@1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -14267,11 +14318,11 @@ snapshots: dependencies: '@azure-rest/core-client': 2.4.0 '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 + '@azure/core-auth': 1.10.1 '@azure/core-lro': 2.7.2 - '@azure/core-rest-pipeline': 1.20.0 - '@azure/core-tracing': 1.2.0 - '@azure/logger': 1.2.0 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14399,12 +14450,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/core-auth@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/core-auth@1.9.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-util': 1.11.0 tslib: 2.8.1 + '@azure/core-client@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/core-client@1.9.2': dependencies: '@azure/abort-controller': 2.1.2 @@ -14425,11 +14496,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/core-http-compat@2.3.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + transitivePeerDependencies: + - supports-color + '@azure/core-lro@2.7.2': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.2.0 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14459,6 +14538,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/core-rest-pipeline@1.22.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/core-sse@2.2.0': dependencies: tslib: 2.8.1 @@ -14467,16 +14558,44 @@ snapshots: dependencies: tslib: 2.8.1 + '@azure/core-tracing@1.3.1': + dependencies: + tslib: 2.8.1 + '@azure/core-util@1.11.0': dependencies: '@azure/abort-controller': 2.1.2 tslib: 2.8.1 + '@azure/core-util@1.13.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/core-xml@1.4.4': dependencies: fast-xml-parser: 4.5.3 tslib: 2.8.1 + '@azure/cosmos@4.9.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-keys': 4.10.0 + '@azure/logger': 1.2.0 + fast-json-stable-stringify: 2.1.0 + priorityqueuejs: 2.0.0 + semaphore: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/identity-cache-persistence@1.2.0': dependencies: '@azure/core-auth': 1.9.0 @@ -14491,15 +14610,45 @@ snapshots: '@azure/identity@4.10.0': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.9.0 - '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.20.0 - '@azure/core-tracing': 1.2.0 - '@azure/core-util': 1.11.0 - '@azure/logger': 1.2.0 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 '@azure/msal-browser': 4.12.0 '@azure/msal-node': 3.5.3 - open: 10.1.0 + open: 10.1.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-common@2.0.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.10.0': + dependencies: + '@azure-rest/core-client': 2.4.0 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-http-compat': 2.3.1 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/keyvault-common': 2.0.0 + '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14511,13 +14660,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/logger@1.3.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/maps-common@1.0.0-beta.2': dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.9.0 - '@azure/core-client': 1.9.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 '@azure/core-lro': 2.7.2 - '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-rest-pipeline': 1.22.2 transitivePeerDependencies: - supports-color @@ -14543,8 +14699,8 @@ snapshots: '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.8': dependencies: - '@azure/core-tracing': 1.2.0 - '@azure/logger': 1.2.0 + '@azure/core-tracing': 1.3.1 + '@azure/logger': 1.3.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) @@ -15129,9 +15285,9 @@ snapshots: dependencies: electron: 37.4.0 - '@electron-toolkit/tsconfig@1.0.1(@types/node@20.19.30)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.15.18)': dependencies: - '@types/node': 20.19.30 + '@types/node': 22.15.18 '@electron/asar@3.4.1': dependencies: @@ -15191,7 +15347,7 @@ snapshots: node-gyp: 11.5.0 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -15400,7 +15556,7 @@ snapshots: '@oclif/plugin-commands': 4.1.21 '@oclif/plugin-help': 6.2.26 '@oclif/plugin-not-found': 3.2.65(@types/node@20.19.23) - semver: 7.7.2 + semver: 7.7.3 table: 6.9.0 transitivePeerDependencies: - '@types/node' @@ -15782,41 +15938,6 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 @@ -16608,7 +16729,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@oclif/core@4.5.2': dependencies: @@ -16774,7 +16895,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.13.2 require-in-the-middle: 7.5.2 - semver: 7.7.2 + semver: 7.7.3 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -16917,7 +17038,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.2 + semver: 7.7.3 tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -17921,10 +18042,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@20.19.30': - dependencies: - undici-types: 6.21.0 - '@types/node@22.15.18': dependencies: undici-types: 6.21.0 @@ -18048,6 +18165,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@typespec/ts-http-runtime@0.3.2': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@vscode/test-cli@0.0.8': dependencies: '@types/mocha': 10.0.10 @@ -19416,21 +19541,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 @@ -20041,7 +20151,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-vite@4.0.1(vite@6.4.1(@types/node@20.19.30)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)): + electron-vite@4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)): dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) @@ -20049,7 +20159,7 @@ snapshots: esbuild: 0.25.11 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.4.1(@types/node@20.19.30)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) + vite: 6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -20851,7 +20961,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.2 + semver: 7.7.3 serialize-error: 7.0.1 optional: true @@ -21567,7 +21677,7 @@ snapshots: '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -21687,25 +21797,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) @@ -21818,37 +21909,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)): - dependencies: - '@babel/core': 7.28.4 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.25 - ts-node: 10.9.2(@types/node@20.19.30)(typescript@5.4.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@babel/core': 7.28.4 @@ -21880,37 +21940,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)): - dependencies: - '@babel/core': 7.28.4 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.30 - ts-node: 10.9.2(@types/node@20.19.30)(typescript@5.4.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@babel/core': 7.28.4 @@ -22202,18 +22231,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.30)(ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) @@ -22365,7 +22382,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.7.3 jszip@3.10.1: dependencies: @@ -22699,7 +22716,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 make-error@1.3.6: {} @@ -23386,11 +23403,11 @@ snapshots: node-abi@3.77.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-abi@4.24.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-addon-api@1.7.2: optional: true @@ -23401,7 +23418,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-domexception@1.0.0: {} @@ -23435,7 +23452,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 tar: 7.5.2 tinyglobby: 0.2.15 which: 5.0.0 @@ -23473,7 +23490,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -23923,6 +23940,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.2.0 + priorityqueuejs@2.0.0: {} + prismjs@1.30.0: {} proc-log@5.0.0: {} @@ -24658,6 +24677,8 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.2 + semaphore@1.1.0: {} + semver-compare@1.0.0: optional: true @@ -24907,7 +24928,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 sisteransi@1.0.5: {} @@ -25542,24 +25563,6 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@20.19.30)(typescript@5.4.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.30 - acorn: 8.11.1 - acorn-walk: 8.3.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -25577,7 +25580,6 @@ snapshots: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - optional: true tslib@2.6.2: {} @@ -25862,22 +25864,6 @@ snapshots: terser: 5.39.2 yaml: 2.7.0 - vite@6.4.1(@types/node@20.19.30)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0): - dependencies: - esbuild: 0.25.11 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.5 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 20.19.30 - fsevents: 2.3.3 - jiti: 2.5.1 - less: 4.3.0 - terser: 5.39.2 - yaml: 2.7.0 - vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0): dependencies: esbuild: 0.25.11 @@ -26411,4 +26397,4 @@ snapshots: zod@4.1.13: {} - zwitch@2.0.4: {} \ No newline at end of file + zwitch@2.0.4: {} diff --git a/ts/tools/scripts/getKeys.config.json b/ts/tools/scripts/getKeys.config.json index 32cfc93c49..99ae9e1cc1 100644 --- a/ts/tools/scripts/getKeys.config.json +++ b/ts/tools/scripts/getKeys.config.json @@ -42,7 +42,7 @@ "SPEECH_SDK_ENDPOINT", "SPEECH_SDK_KEY", "SPEECH_SDK_REGION", - "MONGODB_CONNECTION_STRING", + "COSMOSDB_CONNECTION_STRING", "MSGRAPH_APP_CLIENTID", "MSGRAPH_APP_CLIENTSECRET", "MSGRAPH_APP_TENANTID", @@ -63,7 +63,7 @@ "WIKIPEDIA_CLIENT_ID" ], "private": ["SPOTIFY_APP_CLI", "SPOTIFY_APP_CLISEC", "SPOTIFY_APP_PORT"], - "delete": ["MSGRAPH_APP_PASSWD", "MSGRAPH_APP_USERNAME", "BING_API_KEY"] + "delete": ["MSGRAPH_APP_PASSWD", "MSGRAPH_APP_USERNAME", "BING_API_KEY", "MONGODB_CONNECTION_STRING"] }, "vault": { "shared": "aisystems" From b8b8160b8ed62dcb83fecee3c02a11dd6aecf981 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 2 Feb 2026 16:53:50 -0800 Subject: [PATCH 02/14] lint --- ts/package.json | 2 +- ts/packages/aiclient/src/promptLogger.ts | 5 ++- .../src/logger/cosmosDBLoggerSink.ts | 31 ++++++++++++++----- ts/tools/scripts/getKeys.config.json | 7 ++++- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/ts/package.json b/ts/package.json index 28fe6d2065..58d41c51c9 100644 --- a/ts/package.json +++ b/ts/package.json @@ -94,4 +94,4 @@ "eslint" ] } -} \ No newline at end of file +} diff --git a/ts/packages/aiclient/src/promptLogger.ts b/ts/packages/aiclient/src/promptLogger.ts index 125b8999f5..ee9ef7389b 100644 --- a/ts/packages/aiclient/src/promptLogger.ts +++ b/ts/packages/aiclient/src/promptLogger.ts @@ -38,7 +38,10 @@ export class PromptLogger { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createCosmosDBLoggerSink("telemetrydb", "promptLogs"); + dbLoggerSink = createCosmosDBLoggerSink( + "telemetrydb", + "promptLogs", + ); } catch (e) { debugPromptLogger(`DB logging disabled. ${e}`); } diff --git a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts index 404497f9a6..c548db1231 100644 --- a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts @@ -2,7 +2,13 @@ // Licensed under the MIT License. import { LoggerSink, LogEvent } from "./logger.js"; -import { CosmosClient, Container, BulkOperationResult, CosmosClientOptions, PartitionKeyBuilder } from "@azure/cosmos"; +import { + CosmosClient, + Container, + BulkOperationResult, + CosmosClientOptions, + PartitionKeyBuilder, +} from "@azure/cosmos"; import registerDebug from "debug"; import { DefaultAzureCredential } from "@azure/identity"; import { randomUUID } from "crypto"; @@ -27,7 +33,11 @@ class CosmosDBLoggerSink implements LoggerSink { ) {} public logEvent(event: LogEvent) { - if (this.connectionString && !this.disabled && this.isEnabled?.() !== false) { + if ( + this.connectionString && + !this.disabled && + this.isEnabled?.() !== false + ) { this.pendingEvents.push(event); if (this.timeout === undefined) { this.timeout = setTimeout(() => this.upload(), UPLOAD_DELAY); @@ -47,8 +57,8 @@ class CosmosDBLoggerSink implements LoggerSink { if ( typeof e.message === "string" && (e.message.includes("Invalid key") || - e.message.includes("Unauthorized") || - e.message.includes("authorization")) + e.message.includes("Unauthorized") || + e.message.includes("authorization")) ) { // Disable if (this.onErrorDisable) { @@ -106,9 +116,11 @@ class CosmosDBLoggerSink implements LoggerSink { try { // Azure Cosmos DB requires each document to have an 'id' field - // We'll add it if not present and use bulk operations + // We'll add it if not present and use bulk operations const operations = events.map((event: any) => { - const partitionKey = new PartitionKeyBuilder().addValue(event.id || randomUUID().toString()).build() + const partitionKey = new PartitionKeyBuilder() + .addValue(event.id || randomUUID().toString()) + .build(); return { operationType: "Create" as const, partitionKey: partitionKey, @@ -119,8 +131,11 @@ class CosmosDBLoggerSink implements LoggerSink { }; }); - const result: BulkOperationResult[] = await container.items.executeBulkOperations(operations); - debugCosmos(`Status: ${result[0].response?.statusCode}. ${operations.length} events uploaded`); + const result: BulkOperationResult[] = + await container.items.executeBulkOperations(operations); + debugCosmos( + `Status: ${result[0].response?.statusCode}. ${operations.length} events uploaded`, + ); } catch (e: any) { if (this.pendingEvents.length !== 0) { events.push(...this.pendingEvents); diff --git a/ts/tools/scripts/getKeys.config.json b/ts/tools/scripts/getKeys.config.json index 99ae9e1cc1..29986bb1a2 100644 --- a/ts/tools/scripts/getKeys.config.json +++ b/ts/tools/scripts/getKeys.config.json @@ -63,7 +63,12 @@ "WIKIPEDIA_CLIENT_ID" ], "private": ["SPOTIFY_APP_CLI", "SPOTIFY_APP_CLISEC", "SPOTIFY_APP_PORT"], - "delete": ["MSGRAPH_APP_PASSWD", "MSGRAPH_APP_USERNAME", "BING_API_KEY", "MONGODB_CONNECTION_STRING"] + "delete": [ + "MSGRAPH_APP_PASSWD", + "MSGRAPH_APP_USERNAME", + "BING_API_KEY", + "MONGODB_CONNECTION_STRING" + ] }, "vault": { "shared": "aisystems" From 30432c6fa2e5e37578e28fb1b3ff68b0739ca6f0 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 2 Feb 2026 17:06:35 -0800 Subject: [PATCH 03/14] can swap between mongo db and cosmos db --- .../src/context/commandHandlerContext.ts | 4 +- ts/packages/aiclient/src/promptLogger.ts | 4 +- .../src/context/commandHandlerContext.ts | 4 +- ts/packages/telemetry/package.json | 3 +- ts/packages/telemetry/src/indexNode.ts | 2 + .../src/logger/cosmosDBLoggerSink.ts | 1 + .../src/logger/databaseLoggerSink.ts | 70 +++++++++++ .../telemetry/src/logger/mongoLoggerSink.ts | 116 ++++++++++++++++++ ts/pnpm-lock.yaml | 3 + 9 files changed, 200 insertions(+), 7 deletions(-) create mode 100644 ts/packages/telemetry/src/logger/databaseLoggerSink.ts create mode 100644 ts/packages/telemetry/src/logger/mongoLoggerSink.ts diff --git a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts index beaea4ebd7..3af2a0370b 100644 --- a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts @@ -9,7 +9,7 @@ import { LoggerSink, MultiSinkLogger, createDebugLoggerSink, - createCosmosDBLoggerSink, + createDatabaseLoggerSink, Profiler, } from "telemetry"; import { AgentCache } from "agent-cache"; @@ -189,7 +189,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createCosmosDBLoggerSink( + dbLoggerSink = createDatabaseLoggerSink( "telemetrydb", "dispatcherlogs", isDbEnabled, diff --git a/ts/packages/aiclient/src/promptLogger.ts b/ts/packages/aiclient/src/promptLogger.ts index ee9ef7389b..441fd196af 100644 --- a/ts/packages/aiclient/src/promptLogger.ts +++ b/ts/packages/aiclient/src/promptLogger.ts @@ -4,7 +4,7 @@ import { LoggerSink, MultiSinkLogger, - createCosmosDBLoggerSink, + createDatabaseLoggerSink, createDebugLoggerSink, } from "telemetry"; @@ -38,7 +38,7 @@ export class PromptLogger { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createCosmosDBLoggerSink( + dbLoggerSink = createDatabaseLoggerSink( "telemetrydb", "promptLogs", ); diff --git a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts index 768d5b76e1..e939dea6ef 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts @@ -12,7 +12,7 @@ import { LoggerSink, MultiSinkLogger, createDebugLoggerSink, - createCosmosDBLoggerSink, + createDatabaseLoggerSink, } from "telemetry"; import { AgentCache } from "agent-cache"; import { randomUUID } from "crypto"; @@ -291,7 +291,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createCosmosDBLoggerSink( + dbLoggerSink = createDatabaseLoggerSink( "telemetrydb", "dispatcherlogs", isDbEnabled, diff --git a/ts/packages/telemetry/package.json b/ts/packages/telemetry/package.json index 5048ee6b69..b497ac6e27 100644 --- a/ts/packages/telemetry/package.json +++ b/ts/packages/telemetry/package.json @@ -37,7 +37,8 @@ "chalk": "^5.4.1", "debug": "^4.4.0", "dotenv": "^16.3.1", - "find-config": "^1.0.0" + "find-config": "^1.0.0", + "mongodb": "^6.15.0" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/ts/packages/telemetry/src/indexNode.ts b/ts/packages/telemetry/src/indexNode.ts index 72ebcca1ff..db6a39ff6f 100644 --- a/ts/packages/telemetry/src/indexNode.ts +++ b/ts/packages/telemetry/src/indexNode.ts @@ -8,7 +8,9 @@ export { MultiSinkLogger, LogEvent, } from "./logger/logger.js"; +export { createMongoDBLoggerSink } from "./logger/mongoLoggerSink.js"; export { createCosmosDBLoggerSink } from "./logger/cosmosDBLoggerSink.js"; +export { createDatabaseLoggerSink } from "./logger/databaseLoggerSink.js"; export { createDebugLoggerSink } from "./logger/debugLoggerSink.js"; export * from "./stopWatch.js"; diff --git a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts index c548db1231..5f3040d7ca 100644 --- a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts @@ -89,6 +89,7 @@ class CosmosDBLoggerSink implements LoggerSink { const client = new CosmosClient(options); const database = client.database(this.databaseName); + // with RBAC and AAD, we assume DB and Container already exist // // Create database if it doesn't exist // await client.databases.createIfNotExists({ id: this.databaseName }); diff --git a/ts/packages/telemetry/src/logger/databaseLoggerSink.ts b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts new file mode 100644 index 0000000000..b73436dc80 --- /dev/null +++ b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { LoggerSink } from "./logger.js"; +import { createMongoDBLoggerSink } from "./mongoLoggerSink.js"; +import { createCosmosDBLoggerSink } from "./cosmosDBLoggerSink.js"; +import registerDebug from "debug"; + +const debugDatabase = registerDebug("typeagent:logger:database"); + +/** + * Creates a database logger sink that automatically selects between MongoDB and Cosmos DB + * based on which environment variable is set. + * + * Priority order: + * 1. COSMOSDB_CONNECTION_STRING - Uses Azure Cosmos DB + * 2. MONGODB_CONNECTION_STRING - Uses MongoDB + * + * @param dbName - The name of the database + * @param collectionName - The name of the collection/container + * @param isEnabled - Optional function to check if logging is enabled + * @param onErrorDisable - Optional callback when logging is disabled due to error + * @returns A LoggerSink instance or undefined if no connection string is configured + */ +export function createDatabaseLoggerSink( + dbName: string, + collectionName: string, + isEnabled?: () => boolean, + onErrorDisable?: (error: string) => void, +): LoggerSink | undefined { + const cosmosConnectionString = process.env["COSMOSDB_CONNECTION_STRING"]; + const mongoConnectionString = process.env["MONGODB_CONNECTION_STRING"]; + + // Try Cosmos DB first + if (cosmosConnectionString && cosmosConnectionString !== "") { + try { + debugDatabase("Using Azure Cosmos DB for database logging"); + return createCosmosDBLoggerSink( + dbName, + collectionName, + isEnabled, + onErrorDisable, + ); + } catch (e) { + debugDatabase(`Failed to create Cosmos DB logger sink: ${e}`); + // Fall through to try MongoDB + } + } + + // Try MongoDB second + if (mongoConnectionString && mongoConnectionString !== "") { + try { + debugDatabase("Using MongoDB for database logging"); + return createMongoDBLoggerSink( + dbName, + collectionName, + isEnabled, + onErrorDisable, + ); + } catch (e) { + debugDatabase(`Failed to create MongoDB logger sink: ${e}`); + throw e; + } + } + + // No connection string found + throw new Error( + "No database connection string found. Set either COSMOSDB_CONNECTION_STRING or MONGODB_CONNECTION_STRING environment variable.", + ); +} diff --git a/ts/packages/telemetry/src/logger/mongoLoggerSink.ts b/ts/packages/telemetry/src/logger/mongoLoggerSink.ts new file mode 100644 index 0000000000..68530a3ad8 --- /dev/null +++ b/ts/packages/telemetry/src/logger/mongoLoggerSink.ts @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { LoggerSink, LogEvent } from "./logger.js"; +import { MongoClient } from "mongodb"; +import registerDebug from "debug"; + +const debugMongo = registerDebug("typeagent:logger:mongodb"); + +const UPLOAD_DELAY = 1000; +const MAX_RETRY = 3; +class MongoDBLoggerSink implements LoggerSink { + private pendingEvents: LogEvent[] = []; + private timeout: NodeJS.Timeout | undefined; + private disabled = false; + constructor( + private readonly dbUrl: string, + private readonly dbName: string, + private readonly collectionName: string, + private readonly isEnabled?: () => boolean, + private readonly onErrorDisable?: (error: string) => void, + ) {} + + public logEvent(event: LogEvent) { + if (this.dbUrl && !this.disabled && this.isEnabled?.() !== false) { + this.pendingEvents.push(event); + if (this.timeout === undefined) { + this.timeout = setTimeout(() => this.upload(), UPLOAD_DELAY); + } + } + } + + private async upload() { + let attempt = 0; + while (attempt < MAX_RETRY) { + attempt++; + try { + await this.drain(); + break; + } catch (e: any) { + // TODO: add backoff/queuing logic for ENOTFOUND (no internet) + if ( + typeof e.message === "string" && + e.message.includes("Invalid key") + ) { + // Disable + if (this.onErrorDisable) { + this.onErrorDisable( + `DB Logging disabled: ${e.toString()}`, + ); + } else { + console.error(`DB Logging disabled: ${e.toString()}`); + } + + this.disabled = true; + break; + } + + // Retry + debugMongo(`ERROR: ${e}`); + } + } + // Clear the timeout so it can schedule after the next log event. + this.timeout = undefined; + } + + private async drain() { + const client = await MongoClient.connect(this.dbUrl); + try { + const db = client.db(this.dbName); + const collection = db.collection(this.collectionName); + while (true) { + const events = this.pendingEvents; + if (events.length === 0) { + // done + return; + } + this.pendingEvents = []; + + try { + await collection.insertMany(events); + debugMongo(`${events.length} events uploaded`); + } catch (e: any) { + if (this.pendingEvents.length !== 0) { + events.push(...this.pendingEvents); + } + this.pendingEvents = events; + throw e; + } + } + } finally { + await client.close(); + } + } +} + +export function createMongoDBLoggerSink( + dbName: string, + collectionName: string, + isEnabled?: () => boolean, + onErrorDisable?: (error: string) => void, +): LoggerSink | undefined { + const dbUrl = process.env["MONGODB_CONNECTION_STRING"] ?? null; + if (dbUrl === null || dbUrl === "") { + throw new Error( + "MONGODB_CONNECTION_STRING environment variable not set", + ); + } + return new MongoDBLoggerSink( + dbUrl, + dbName, + collectionName, + isEnabled, + onErrorDisable, + ); +} diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 04b8c710e4..2045a3c0d6 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -4013,6 +4013,9 @@ importers: find-config: specifier: ^1.0.0 version: 1.0.0 + mongodb: + specifier: ^6.15.0 + version: 6.16.0(socks@2.8.7) devDependencies: '@types/debug': specifier: ^4.1.12 From 07664b7d44cf8ff841ec69e8a4b1c0b8c14cf2ce Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Tue, 3 Feb 2026 16:41:21 -0800 Subject: [PATCH 04/14] pnpm package upgrade --- ts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/package.json b/ts/package.json index 58d41c51c9..d6aa53b562 100644 --- a/ts/package.json +++ b/ts/package.json @@ -75,7 +75,7 @@ "exifreader", "keytar", "koffi", - "node-pty", + "protobufjs", "puppeteer", "sharp" ], From aa9597b4788740fac26901e58039c77a735a9247 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Tue, 3 Feb 2026 16:43:22 -0800 Subject: [PATCH 05/14] upgraded electron builder version # --- ts/packages/shell/package.json | 2 +- ts/pnpm-lock.yaml | 207 +++++++++++++++++++++++++++------ 2 files changed, 170 insertions(+), 39 deletions(-) diff --git a/ts/packages/shell/package.json b/ts/packages/shell/package.json index d6652ec07a..6ad7b657d6 100644 --- a/ts/packages/shell/package.json +++ b/ts/packages/shell/package.json @@ -87,7 +87,7 @@ "concurrently": "^9.1.2", "cross-env": "^7.0.3", "electron": "^37.4.0", - "electron-builder": "^26.3.1", + "electron-builder": "^26.7.0", "electron-vite": "^4.0.1", "less": "^4.2.0", "rimraf": "^6.0.1", diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 2508089132..3b36bde612 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -3973,8 +3973,8 @@ importers: specifier: ^37.4.0 version: 37.4.0 electron-builder: - specifier: ^26.3.1 - version: 26.3.1(electron-builder-squirrel-windows@26.3.1) + specifier: ^26.7.0 + version: 26.7.0(electron-builder-squirrel-windows@26.3.1) electron-vite: specifier: ^4.0.1 version: 4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) @@ -5069,6 +5069,10 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + '@electron/notarize@2.5.0': resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} @@ -5083,6 +5087,11 @@ packages: engines: {node: '>=22.12.0'} hasBin: true + '@electron/rebuild@4.0.3': + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} + engines: {node: '>=22.12.0'} + hasBin: true + '@electron/universal@2.0.3': resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} engines: {node: '>=16.4'} @@ -7607,6 +7616,13 @@ packages: dmg-builder: 26.3.1 electron-builder-squirrel-windows: 26.3.1 + app-builder-lib@26.7.0: + resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.7.0 + electron-builder-squirrel-windows: 26.7.0 + archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -7903,6 +7919,9 @@ packages: builder-util@26.3.1: resolution: {integrity: sha512-pplZEYBx1g15qvIOshpR1WTwjAwQM4ukhGgSNdYPnbuM6wLePq3+njy1sGfekCrJmUP+2xfuwuT9zEoUWfX5zQ==} + builder-util@26.4.1: + resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -8793,8 +8812,8 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@26.3.1: - resolution: {integrity: sha512-hYOlXCqmBxFXz8TZrAGm/Ym5ji+/Am5sgQaT+yZ/VULb9O+E7Lr1Z0HFnKk8GaaYfULV8PDVCYO4/bpQyb+BSg==} + dmg-builder@26.7.0: + resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -8878,14 +8897,17 @@ packages: electron-builder-squirrel-windows@26.3.1: resolution: {integrity: sha512-WY0INnhIqy1TaMPK7sC9bD8/kdwE//e5CYN783ZqVgUdrMb9QgC4MUu4adiSDQzc4Om9InQaN9v/jS4OlmeV5g==} - electron-builder@26.3.1: - resolution: {integrity: sha512-e8utkPlf+VF94KX1M6/qZqCXsQMLKEASg+DNO5JWLtPZeKkvXS9Oyac8hb6HelvlGzEP02N7IDX6UFGjmvV66g==} + electron-builder@26.7.0: + resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@26.3.1: resolution: {integrity: sha512-XYGYL/fpQULLW9slTVPelaUOGlKfOTmV2Uda3K+qzFzvNnkGJCj7L0nLVvMuj5cgxpAX+3BhO5HOUb4rv6jikA==} + electron-publish@26.6.0: + resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==} + electron-to-chromium@1.5.155: resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} @@ -9335,6 +9357,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -9366,10 +9392,6 @@ packages: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - fs-extra@11.3.3: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} @@ -12783,12 +12805,11 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - deprecated: Old versions of tar 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 exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar 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 - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} - deprecated: Old versions of tar 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 exhorbitant rates) by contacting i@izs.me temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -15322,6 +15343,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + '@electron/notarize@2.5.0': dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -15360,13 +15395,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/rebuild@4.0.3': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + detect-libc: 2.0.3 + got: 11.8.6 + graceful-fs: 4.2.11 + node-abi: 4.24.0 + node-api-version: 0.2.1 + node-gyp: 11.5.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.3 + tar: 7.5.7 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@electron/universal@2.0.3': dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) dir-compare: 4.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.3 minimatch: 9.0.5 plist: 3.1.0 transitivePeerDependencies: @@ -16253,7 +16306,7 @@ snapshots: dependencies: debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 - lodash: 4.17.21 + lodash: 4.17.23 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color @@ -18595,7 +18648,7 @@ snapshots: app-builder-bin@5.0.0-alpha.12: {} - app-builder-lib@26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1): + app-builder-lib@26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): dependencies: '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 @@ -18612,11 +18665,11 @@ snapshots: chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3(supports-color@8.1.1) - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) dotenv: 16.5.0 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.3.1) + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) electron-publish: 26.3.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -18636,6 +18689,49 @@ snapshots: transitivePeerDependencies: - supports-color + app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.0.3 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3(supports-color@8.1.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) + dotenv: 16.5.0 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) + electron-publish: 26.6.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.0 + jiti: 2.5.1 + js-yaml: 4.1.1 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.1.1 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.3 + tar: 7.5.7 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + archiver-utils@2.1.0: dependencies: glob: 7.2.3 @@ -19014,6 +19110,27 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util@26.4.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.12 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.1.1 + sanitize-filename: 1.6.3 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -19064,7 +19181,7 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 12.0.0 - tar: 7.5.2 + tar: 7.5.7 unique-filename: 4.0.0 cacheable-lookup@5.0.4: {} @@ -19991,10 +20108,10 @@ snapshots: dependencies: path-type: 4.0.0 - dmg-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + dmg-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.1 @@ -20105,23 +20222,23 @@ snapshots: dependencies: jake: 10.8.7 - electron-builder-squirrel-windows@26.3.1(dmg-builder@26.3.1): + electron-builder-squirrel-windows@26.3.1(dmg-builder@26.7.0): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) + app-builder-lib: 26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) builder-util: 26.3.1 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + electron-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 ci-info: 4.3.1 - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -20143,6 +20260,19 @@ snapshots: transitivePeerDependencies: - supports-color + electron-publish@26.6.0: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + form-data: 4.0.5 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.155: {} electron-updater@6.6.2: @@ -20760,6 +20890,14 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -20789,18 +20927,11 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 - optional: true fs-extra@7.0.1: dependencies: @@ -23460,7 +23591,7 @@ snapshots: nopt: 8.1.0 proc-log: 5.0.0 semver: 7.7.3 - tar: 7.5.2 + tar: 7.5.7 tinyglobby: 0.2.15 which: 5.0.0 transitivePeerDependencies: @@ -25285,7 +25416,7 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.5.2: + tar@7.5.7: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 From 76359ed1b18a4fe08cffa93bf4543ce7e0914186 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Wed, 4 Feb 2026 13:51:38 -0800 Subject: [PATCH 06/14] refactored promptlogger into telemetry to reduce dependency chain length for AI client. Updated all calls to retain existing logging logic. --- ts/examples/chat/package.json | 1 + ts/examples/chat/src/codeChat/codeChat.ts | 3 +- ts/examples/playground/package.json | 1 + ts/examples/playground/src/main.ts | 3 +- ts/examples/vscodeSchemaGen/package.json | 1 + ts/examples/vscodeSchemaGen/src/schemaGen.ts | 3 +- ts/packages/agents/code/package.json | 1 + ts/packages/agents/markdown/package.json | 1 + .../agents/markdown/src/agent/translator.ts | 3 +- ts/packages/aiclient/package.json | 1 - ts/packages/aiclient/src/models.ts | 2 + ts/packages/aiclient/src/openai.ts | 11 +- .../cache/src/explanation/v5/explanationV5.ts | 3 +- ts/packages/cli/package.json | 1 + ts/packages/cli/src/commands/prompt.ts | 3 +- ts/packages/telemetry/src/indexNode.ts | 1 + .../src/logger}/promptLogger.ts | 2 +- ts/packages/utils/typechatUtils/package.json | 1 + .../utils/typechatUtils/src/jsonTranslator.ts | 7 +- ts/pnpm-lock.yaml | 349 ++++++++++++++---- 20 files changed, 317 insertions(+), 81 deletions(-) rename ts/packages/{aiclient/src => telemetry/src/logger}/promptLogger.ts (94%) diff --git a/ts/examples/chat/package.json b/ts/examples/chat/package.json index 70abd255d1..06304ebb51 100644 --- a/ts/examples/chat/package.json +++ b/ts/examples/chat/package.json @@ -41,6 +41,7 @@ "knowpro-test": "workspace:*", "memory-providers": "workspace:*", "memory-storage": "workspace:*", + "telemetry": "workspace:*", "textpro": "workspace:*", "typeagent": "workspace:*", "typechat": "^0.1.1", diff --git a/ts/examples/chat/src/codeChat/codeChat.ts b/ts/examples/chat/src/codeChat/codeChat.ts index 86953a3ea4..bfdeaac548 100644 --- a/ts/examples/chat/src/codeChat/codeChat.ts +++ b/ts/examples/chat/src/codeChat/codeChat.ts @@ -38,6 +38,7 @@ import { sampleFiles, } from "./common.js"; import { createCommandTransformer } from "./commandTransformer.js"; +import { PromptLogger } from "telemetry"; export async function runCodeChat(): Promise { const model = openai.createChatModelDefault("codeChat"); @@ -381,7 +382,7 @@ export async function runCodeChat(): Promise { async function regex(args: string[], io: InteractiveIo): Promise { if (args.length > 0) { const prompt = `Return a Typescript regular expression for the following:\n ${args.join(" ")}`; - const result = await codeReviewer.model.complete(prompt); + const result = await codeReviewer.model.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); if (result.success) { io.writer.writeLine(result.data); } else { diff --git a/ts/examples/playground/package.json b/ts/examples/playground/package.json index 81868c7851..e5233eb5ce 100644 --- a/ts/examples/playground/package.json +++ b/ts/examples/playground/package.json @@ -25,6 +25,7 @@ "copyfiles": "^2.4.1", "dotenv": "^16.3.1", "interactive-app": "workspace:*", + "telemetry": "workspace:*", "typeagent": "workspace:*", "typechat": "^0.1.1", "typescript": "~5.4.5" diff --git a/ts/examples/playground/src/main.ts b/ts/examples/playground/src/main.ts index 1acdb919c0..bc3e270a28 100644 --- a/ts/examples/playground/src/main.ts +++ b/ts/examples/playground/src/main.ts @@ -25,6 +25,7 @@ import { } from "typeagent"; import { PromptSection } from "typechat"; import * as fs from "fs"; +import { PromptLogger } from "telemetry"; const envPath = new URL("../../../.env", import.meta.url); dotenv.config({ path: envPath }); @@ -188,7 +189,7 @@ async function runPlayground(): Promise { ), userMessage, ]; - const chatResponse = await chatModel.complete(context); + const chatResponse = await chatModel.complete(context, undefined, undefined, PromptLogger.getInstance().logModelRequest); if (chatResponse.success) { const responseText = chatResponse.data; io.writer.writeLine(responseText); diff --git a/ts/examples/vscodeSchemaGen/package.json b/ts/examples/vscodeSchemaGen/package.json index e94ac7a9a5..9819d239e0 100644 --- a/ts/examples/vscodeSchemaGen/package.json +++ b/ts/examples/vscodeSchemaGen/package.json @@ -28,6 +28,7 @@ "debug": "^4.4.0", "dotenv": "^16.3.1", "fastest-levenshtein": "^1.0.16", + "telemetry": "workspace:*", "typeagent": "workspace:*", "typechat": "^0.1.1" }, diff --git a/ts/examples/vscodeSchemaGen/src/schemaGen.ts b/ts/examples/vscodeSchemaGen/src/schemaGen.ts index 2b5e016e20..2ab8a8bd5f 100644 --- a/ts/examples/vscodeSchemaGen/src/schemaGen.ts +++ b/ts/examples/vscodeSchemaGen/src/schemaGen.ts @@ -5,6 +5,7 @@ import * as path from "path"; import dotenv from "dotenv"; import * as fs from "fs"; import { finished } from "stream/promises"; +import { PromptLogger } from "telemetry"; import { ChatModel, @@ -23,7 +24,7 @@ async function getModelCompletionResponse( prompt: string, jsonNode: any, ): Promise { - const chatResponse = await chatModel.complete(prompt); + const chatResponse = await chatModel.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); if (chatResponse.success) { const responseText = chatResponse.data; return responseText; diff --git a/ts/packages/agents/code/package.json b/ts/packages/agents/code/package.json index 30581b9560..6672a99938 100644 --- a/ts/packages/agents/code/package.json +++ b/ts/packages/agents/code/package.json @@ -28,6 +28,7 @@ "better-sqlite3": "12.2.0", "chalk": "^5.4.1", "debug": "^4.4.0", + "telemetry": "workspace:*", "websocket-utils": "workspace:*", "ws": "^8.17.1" }, diff --git a/ts/packages/agents/markdown/package.json b/ts/packages/agents/markdown/package.json index dc96b02bbf..24913e99f1 100644 --- a/ts/packages/agents/markdown/package.json +++ b/ts/packages/agents/markdown/package.json @@ -50,6 +50,7 @@ "prosemirror-model": "^1.19.0", "prosemirror-state": "^1.4.2", "prosemirror-view": "^1.31.0", + "telemetry": "workspace:*", "typechat": "^0.1.1", "unist-util-visit": "^4.1.2", "ws": "^8.14.2", diff --git a/ts/packages/agents/markdown/src/agent/translator.ts b/ts/packages/agents/markdown/src/agent/translator.ts index ed0d913b85..db725950c3 100644 --- a/ts/packages/agents/markdown/src/agent/translator.ts +++ b/ts/packages/agents/markdown/src/agent/translator.ts @@ -12,6 +12,7 @@ import fs from "node:fs"; import { fileURLToPath } from "node:url"; import path from "node:path"; import registerDebug from "debug"; +import { PromptLogger } from "telemetry"; import { MarkdownUpdateResult } from "./markdownOperationSchema.js"; @@ -174,7 +175,7 @@ export class MarkdownAgent { let accumulatedContent = ""; // Use the ChatModel's complete method with proper parameters - const response = await this.model.complete(streamingPrompt); + const response = await this.model.complete(streamingPrompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); // Extract content from response let content = ""; diff --git a/ts/packages/aiclient/package.json b/ts/packages/aiclient/package.json index 1ef27b9ee4..11d2dd0c3c 100644 --- a/ts/packages/aiclient/package.json +++ b/ts/packages/aiclient/package.json @@ -35,7 +35,6 @@ "@azure/identity": "^4.10.0", "async": "^3.2.5", "debug": "^4.4.0", - "telemetry": "workspace:*", "typechat": "^0.1.1" }, "devDependencies": { diff --git a/ts/packages/aiclient/src/models.ts b/ts/packages/aiclient/src/models.ts index b1c3bb53f9..ffb7adbc26 100644 --- a/ts/packages/aiclient/src/models.ts +++ b/ts/packages/aiclient/src/models.ts @@ -67,6 +67,7 @@ export interface ChatModel extends TypeChatLanguageModel { prompt: string | PromptSection[], usageCallback?: CompleteUsageStatsCallback, jsonSchema?: CompletionJsonSchema, + promptLogFn?: (msg: any) => void, ): Promise>; } @@ -80,6 +81,7 @@ export interface ChatModelWithStreaming extends ChatModel { prompt: string | PromptSection[], usageCallback?: CompleteUsageStatsCallback, jsonSchema?: CompletionJsonSchema, + promptLogFn?: (msg: any) => void, ): Promise>>; } diff --git a/ts/packages/aiclient/src/openai.ts b/ts/packages/aiclient/src/openai.ts index 89fb67c127..d09dfb2f08 100644 --- a/ts/packages/aiclient/src/openai.ts +++ b/ts/packages/aiclient/src/openai.ts @@ -29,7 +29,6 @@ import { readServerEventStream } from "./serverEvents.js"; import { priorityQueue } from "async"; import registerDebug from "debug"; import { TokenCounter } from "./tokenCounter.js"; -import { PromptLogger } from "./promptLogger.js"; import { createOllamaChatModel, OllamaApiSettings, @@ -485,6 +484,7 @@ function createAzureOpenAIChatModel( prompt: string | PromptSection[], usageCallback?: CompleteUsageStatsCallback, jsonSchema?: CompletionJsonSchema, + logFn?: (msg: any) => void, ): Promise> { verifyPromptLength(settings, prompt); @@ -521,9 +521,9 @@ function createAzureOpenAIChatModel( } try { - if (settings.enableModelRequestLogging) { + if (settings.enableModelRequestLogging && logFn) { // Log request - PromptLogger.getInstance().logModelRequest({ + logFn({ prompt: messages as PromptSection[], response: data.choices[0].message?.content ?? "", tokenUsage: data.usage, @@ -561,6 +561,7 @@ function createAzureOpenAIChatModel( prompt: string | PromptSection[], usageCallback?: CompleteUsageStatsCallback, jsonSchema?: CompletionJsonSchema, + logFn?: (msg: any) => void, ): Promise>> { verifyPromptLength(settings, prompt); @@ -612,9 +613,9 @@ function createAzureOpenAIChatModel( for await (const evt of readServerEventStream(result.data)) { if (evt.data === "[DONE]") { try { - if (settings.enableModelRequestLogging) { + if (settings.enableModelRequestLogging && logFn) { // Log request. - PromptLogger.getInstance().logModelRequest({ + logFn({ prompt: messages as PromptSection[], response: fullResponseText, tokenUsageData: tokenUsage, diff --git a/ts/packages/cache/src/explanation/v5/explanationV5.ts b/ts/packages/cache/src/explanation/v5/explanationV5.ts index 1913fb7bcf..766df1f0ed 100644 --- a/ts/packages/cache/src/explanation/v5/explanationV5.ts +++ b/ts/packages/cache/src/explanation/v5/explanationV5.ts @@ -81,6 +81,7 @@ import { PolitenessGeneralizer, } from "./politenessGeneralizationV5.js"; import { PolitenessGeneralization } from "./politenessGeneralizationSchemaV5.js"; +import { PromptLogger } from "telemetry"; type Explanation = PropertyExplanation & SubPhraseExplanation & @@ -334,7 +335,7 @@ variations: ParameterVariation[]; For every value V that is within the range of ${paramRange.min} to ${paramRange.max} by step ${paramRange.step}, generate a phrase P that only changes the phrase '${subPhrase}' enough to change the value to V. Emit the generated phrases and values as a JSON object of type ParameterVariationResult with 2 spaces of indentation and no properties with the value undefined: `; - const result = await model.complete(prompt); + const result = await model.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); if (result.success) { const generatedAlternatives = JSON.parse( result.data, diff --git a/ts/packages/cli/package.json b/ts/packages/cli/package.json index d8d3b648b2..ae4b9baf65 100644 --- a/ts/packages/cli/package.json +++ b/ts/packages/cli/package.json @@ -64,6 +64,7 @@ "marked": "^15.0.0", "marked-terminal": "^7.3.0", "open": "^10.1.0", + "telemetry": "workspace:*", "ts-node": "^10.9.1", "typechat": "^0.1.1", "typechat-utils": "workspace:*" diff --git a/ts/packages/cli/src/commands/prompt.ts b/ts/packages/cli/src/commands/prompt.ts index 2e8b6f8ca2..f835043152 100644 --- a/ts/packages/cli/src/commands/prompt.ts +++ b/ts/packages/cli/src/commands/prompt.ts @@ -5,6 +5,7 @@ import { Args, Command, Flags } from "@oclif/core"; import { openai, getChatModelNames } from "aiclient"; import fs from "node:fs"; import chalk from "chalk"; +import { PromptLogger } from "telemetry"; const modelNames = await getChatModelNames(); export default class Prompt extends Command { @@ -83,7 +84,7 @@ export default class Prompt extends Command { time = end - start; } else { const start = performance.now(); - const complete = await model.complete(request); + const complete = await model.complete(request, undefined, undefined, PromptLogger.getInstance().logModelRequest); const end = performance.now(); if (complete.success) { responseText = complete.data; diff --git a/ts/packages/telemetry/src/indexNode.ts b/ts/packages/telemetry/src/indexNode.ts index db6a39ff6f..d058494b23 100644 --- a/ts/packages/telemetry/src/indexNode.ts +++ b/ts/packages/telemetry/src/indexNode.ts @@ -12,6 +12,7 @@ export { createMongoDBLoggerSink } from "./logger/mongoLoggerSink.js"; export { createCosmosDBLoggerSink } from "./logger/cosmosDBLoggerSink.js"; export { createDatabaseLoggerSink } from "./logger/databaseLoggerSink.js"; export { createDebugLoggerSink } from "./logger/debugLoggerSink.js"; +export { PromptLogger } from "./logger/promptLogger.js"; export * from "./stopWatch.js"; diff --git a/ts/packages/aiclient/src/promptLogger.ts b/ts/packages/telemetry/src/logger/promptLogger.ts similarity index 94% rename from ts/packages/aiclient/src/promptLogger.ts rename to ts/packages/telemetry/src/logger/promptLogger.ts index 441fd196af..c75eb1fa7a 100644 --- a/ts/packages/aiclient/src/promptLogger.ts +++ b/ts/packages/telemetry/src/logger/promptLogger.ts @@ -10,7 +10,7 @@ import { import registerDebug from "debug"; -const debugPromptLogger = registerDebug("typeagent:promptLogger"); +const debugPromptLogger = registerDebug("typeagent:telemetry:promptLogger"); /** * Logger for LLM prompts. diff --git a/ts/packages/utils/typechatUtils/package.json b/ts/packages/utils/typechatUtils/package.json index 8acf7c4202..626c9d64be 100644 --- a/ts/packages/utils/typechatUtils/package.json +++ b/ts/packages/utils/typechatUtils/package.json @@ -37,6 +37,7 @@ "date-fns": "^4.1.0", "debug": "^4.4.0", "exifreader": "^4.30.1", + "telemetry": "workspace:*", "typechat": "^0.1.1" }, "devDependencies": { diff --git a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts index c009d7a770..bd675ff9f9 100644 --- a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts +++ b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts @@ -24,6 +24,7 @@ import { IncrementalJsonValueCallBack, } from "./incrementalJsonParser.js"; import { addImagePromptContent, CachedImageWithDetails } from "./image.js"; +import { PromptLogger } from "telemetry"; export type InlineTranslatorSchemaDef = { kind: "inline"; @@ -140,11 +141,11 @@ export function enableJsonTranslatorStreaming( model.complete = async (prompt: string | PromptSection[]) => { const modelParams = getModelParams(prompt); if (modelParams === undefined) { - return originalComplete(prompt); + return originalComplete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); } const { parser, usageCallback, actualPrompt } = modelParams; if (parser === undefined) { - return originalComplete(actualPrompt, usageCallback); + return originalComplete(actualPrompt, usageCallback, undefined, PromptLogger.getInstance().logModelRequest); } const chunks = []; const result = await model.completeStream(actualPrompt, usageCallback); @@ -274,7 +275,7 @@ export function createJsonTranslatorWithValidator( if (jsonSchema !== undefined) { debugJsonSchema(jsonSchema); } - return originalComplete(prompt, usageCallback, jsonSchema); + return originalComplete(prompt, usageCallback, jsonSchema, PromptLogger.getInstance().logModelRequest); }; if (ai.supportsStreaming(model)) { diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index cd4c89e752..424b03f2f7 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -139,7 +139,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -203,6 +203,9 @@ importers: memory-storage: specifier: workspace:* version: link:../../packages/memory/storage + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry textpro: specifier: workspace:* version: link:../../packages/textPro @@ -513,7 +516,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -575,6 +578,9 @@ importers: interactive-app: specifier: workspace:* version: link:../../packages/interactiveApp + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -726,7 +732,7 @@ importers: version: 12.0.2(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -772,6 +778,9 @@ importers: fastest-levenshtein: specifier: ^1.0.16 version: 1.0.16 + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -864,7 +873,7 @@ importers: version: 12.0.2(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -922,7 +931,7 @@ importers: version: 2.0.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -969,7 +978,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1013,7 +1022,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1041,7 +1050,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1280,7 +1289,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1513,10 +1522,10 @@ importers: version: 11.3.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.23) + version: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) jest-chrome: specifier: ^0.8.0 - version: 0.8.0(jest@29.7.0(@types/node@20.19.23)) + version: 0.8.0(jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5))) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -1528,7 +1537,7 @@ importers: version: 3.5.0 ts-jest: specifier: ^29.3.2 - version: 29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.11)(jest@29.7.0(@types/node@20.19.23))(typescript@5.4.5) + version: 29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.11)(jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)))(typescript@5.4.5) ts-loader: specifier: ^9.5.1 version: 9.5.2(typescript@5.4.5)(webpack@5.99.8(esbuild@0.25.11)) @@ -1642,6 +1651,9 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry websocket-utils: specifier: workspace:* version: link:../../utils/webSocketUtils @@ -1945,6 +1957,9 @@ importers: prosemirror-view: specifier: ^1.31.0 version: 1.40.0 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -1993,7 +2008,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2084,7 +2099,7 @@ importers: version: 12.0.2(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -2325,7 +2340,7 @@ importers: version: 12.0.2(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2406,9 +2421,6 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 - telemetry: - specifier: workspace:* - version: link:../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2427,7 +2439,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2512,7 +2524,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2573,7 +2585,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2634,7 +2646,7 @@ importers: version: 2.0.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2671,7 +2683,7 @@ importers: version: 5.6.3(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2756,6 +2768,9 @@ importers: open: specifier: ^10.1.0 version: 10.1.2 + telemetry: + specifier: workspace:* + version: link:../telemetry ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) @@ -2949,7 +2964,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -2958,7 +2973,7 @@ importers: version: 5.0.10 ts-jest: specifier: ^29.1.2 - version: 29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.15.18))(typescript@5.4.5) + version: 29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)))(typescript@5.4.5) typescript: specifier: ~5.4.5 version: 5.4.5 @@ -3118,7 +3133,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3254,7 +3269,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3294,7 +3309,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3400,7 +3415,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3495,7 +3510,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3535,7 +3550,7 @@ importers: version: 12.0.2(webpack@5.99.8) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3642,7 +3657,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3758,7 +3773,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -3849,7 +3864,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4050,7 +4065,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4081,7 +4096,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4149,7 +4164,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4177,7 +4192,7 @@ importers: version: 0.25.11 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4208,7 +4223,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4242,6 +4257,9 @@ importers: exifreader: specifier: ^4.30.1 version: 4.30.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -4254,7 +4272,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.18) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -14513,7 +14531,7 @@ snapshots: '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0) '@traceloop/instrumentation-langchain': 0.13.0(@opentelemetry/api@1.9.0) '@traceloop/instrumentation-openai': 0.13.0(@opentelemetry/api@1.9.0) - openai: 4.103.0(encoding@0.1.13)(ws@8.18.2)(zod@3.25.76) + openai: 4.103.0(ws@8.18.2)(zod@3.25.76) tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -16017,6 +16035,76 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.19.25 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.19.25 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 @@ -19671,13 +19759,28 @@ snapshots: dependencies: buffer: 5.7.1 - create-jest@29.7.0(@types/node@20.19.23): + create-jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.23) + jest-config: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -20274,7 +20377,7 @@ snapshots: builder-util: 26.3.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 - form-data: 4.0.4 + form-data: 4.0.5 fs-extra: 10.1.0 lazy-val: 1.0.5 mime: 2.6.0 @@ -21891,10 +21994,10 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-chrome@0.8.0(jest@29.7.0(@types/node@20.19.23)): + jest-chrome@0.8.0(jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5))): dependencies: '@types/chrome': 0.0.114 - jest: 29.7.0(@types/node@20.19.23) + jest: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) jest-circus@29.7.0: dependencies: @@ -21922,16 +22025,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.23): + jest-cli@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.23) + create-jest: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.23) + jest-config: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -21941,16 +22044,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.15.18): + jest-cli@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -21979,7 +22082,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.23): + jest-config@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)): dependencies: '@babel/core': 7.28.4 '@jest/test-sequencer': 29.7.0 @@ -22005,6 +22108,69 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.19.23 + ts-node: 10.9.2(@types/node@20.19.23)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)): + dependencies: + '@babel/core': 7.28.4 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.4) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.25 + ts-node: 10.9.2(@types/node@20.19.23)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)): + dependencies: + '@babel/core': 7.28.4 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.4) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.25 + ts-node: 10.9.2(@types/node@20.19.25)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -22307,24 +22473,24 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.23): + jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.23) + jest-cli: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.15.18): + jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.15.18) + jest-cli: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -23707,6 +23873,21 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.103.0(ws@8.18.2)(zod@3.25.76): + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + optionalDependencies: + ws: 8.18.2 + zod: 3.25.76 + transitivePeerDependencies: + - encoding + openai@4.103.0(ws@8.18.2)(zod@4.1.13): dependencies: '@types/node': 18.19.130 @@ -25600,12 +25781,12 @@ snapshots: ts-deepmerge@7.0.2: {} - ts-jest@29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.11)(jest@29.7.0(@types/node@20.19.23))(typescript@5.4.5): + ts-jest@29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.11)(jest@29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.19.23) + jest: 29.7.0(@types/node@20.19.23)(ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -25621,12 +25802,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.28.4) esbuild: 0.25.11 - ts-jest@29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.15.18))(typescript@5.4.5): + ts-jest@29.3.3(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.15.18) + jest: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -25661,6 +25842,44 @@ snapshots: typescript: 5.4.5 webpack: 5.99.8(webpack-cli@5.1.4) + ts-node@10.9.2(@types/node@20.19.23)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.19.23 + acorn: 8.11.1 + acorn-walk: 8.3.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + ts-node@10.9.2(@types/node@20.19.25)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.19.25 + acorn: 8.11.1 + acorn-walk: 8.3.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 From 8f174be939afcb88d0d8486481aadf28ba33e787 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Wed, 4 Feb 2026 13:59:37 -0800 Subject: [PATCH 07/14] lint --- ts/examples/chat/src/codeChat/codeChat.ts | 7 ++++++- ts/examples/playground/src/main.ts | 7 ++++++- ts/examples/vscodeSchemaGen/src/schemaGen.ts | 7 ++++++- .../agents/markdown/src/agent/translator.ts | 7 ++++++- .../cache/src/explanation/v5/explanationV5.ts | 7 ++++++- ts/packages/cli/src/commands/prompt.ts | 7 ++++++- .../utils/typechatUtils/src/jsonTranslator.ts | 21 ++++++++++++++++--- 7 files changed, 54 insertions(+), 9 deletions(-) diff --git a/ts/examples/chat/src/codeChat/codeChat.ts b/ts/examples/chat/src/codeChat/codeChat.ts index bfdeaac548..766e6e75ea 100644 --- a/ts/examples/chat/src/codeChat/codeChat.ts +++ b/ts/examples/chat/src/codeChat/codeChat.ts @@ -382,7 +382,12 @@ export async function runCodeChat(): Promise { async function regex(args: string[], io: InteractiveIo): Promise { if (args.length > 0) { const prompt = `Return a Typescript regular expression for the following:\n ${args.join(" ")}`; - const result = await codeReviewer.model.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const result = await codeReviewer.model.complete( + prompt, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); if (result.success) { io.writer.writeLine(result.data); } else { diff --git a/ts/examples/playground/src/main.ts b/ts/examples/playground/src/main.ts index bc3e270a28..872d507909 100644 --- a/ts/examples/playground/src/main.ts +++ b/ts/examples/playground/src/main.ts @@ -189,7 +189,12 @@ async function runPlayground(): Promise { ), userMessage, ]; - const chatResponse = await chatModel.complete(context, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const chatResponse = await chatModel.complete( + context, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); if (chatResponse.success) { const responseText = chatResponse.data; io.writer.writeLine(responseText); diff --git a/ts/examples/vscodeSchemaGen/src/schemaGen.ts b/ts/examples/vscodeSchemaGen/src/schemaGen.ts index 2ab8a8bd5f..9807cfcf85 100644 --- a/ts/examples/vscodeSchemaGen/src/schemaGen.ts +++ b/ts/examples/vscodeSchemaGen/src/schemaGen.ts @@ -24,7 +24,12 @@ async function getModelCompletionResponse( prompt: string, jsonNode: any, ): Promise { - const chatResponse = await chatModel.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const chatResponse = await chatModel.complete( + prompt, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); if (chatResponse.success) { const responseText = chatResponse.data; return responseText; diff --git a/ts/packages/agents/markdown/src/agent/translator.ts b/ts/packages/agents/markdown/src/agent/translator.ts index db725950c3..62122d216e 100644 --- a/ts/packages/agents/markdown/src/agent/translator.ts +++ b/ts/packages/agents/markdown/src/agent/translator.ts @@ -175,7 +175,12 @@ export class MarkdownAgent { let accumulatedContent = ""; // Use the ChatModel's complete method with proper parameters - const response = await this.model.complete(streamingPrompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const response = await this.model.complete( + streamingPrompt, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); // Extract content from response let content = ""; diff --git a/ts/packages/cache/src/explanation/v5/explanationV5.ts b/ts/packages/cache/src/explanation/v5/explanationV5.ts index 766df1f0ed..cc7b2c685f 100644 --- a/ts/packages/cache/src/explanation/v5/explanationV5.ts +++ b/ts/packages/cache/src/explanation/v5/explanationV5.ts @@ -335,7 +335,12 @@ variations: ParameterVariation[]; For every value V that is within the range of ${paramRange.min} to ${paramRange.max} by step ${paramRange.step}, generate a phrase P that only changes the phrase '${subPhrase}' enough to change the value to V. Emit the generated phrases and values as a JSON object of type ParameterVariationResult with 2 spaces of indentation and no properties with the value undefined: `; - const result = await model.complete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const result = await model.complete( + prompt, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); if (result.success) { const generatedAlternatives = JSON.parse( result.data, diff --git a/ts/packages/cli/src/commands/prompt.ts b/ts/packages/cli/src/commands/prompt.ts index f835043152..9723b8af6a 100644 --- a/ts/packages/cli/src/commands/prompt.ts +++ b/ts/packages/cli/src/commands/prompt.ts @@ -84,7 +84,12 @@ export default class Prompt extends Command { time = end - start; } else { const start = performance.now(); - const complete = await model.complete(request, undefined, undefined, PromptLogger.getInstance().logModelRequest); + const complete = await model.complete( + request, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); const end = performance.now(); if (complete.success) { responseText = complete.data; diff --git a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts index bd675ff9f9..f4fa483cfd 100644 --- a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts +++ b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts @@ -141,11 +141,21 @@ export function enableJsonTranslatorStreaming( model.complete = async (prompt: string | PromptSection[]) => { const modelParams = getModelParams(prompt); if (modelParams === undefined) { - return originalComplete(prompt, undefined, undefined, PromptLogger.getInstance().logModelRequest); + return originalComplete( + prompt, + undefined, + undefined, + PromptLogger.getInstance().logModelRequest, + ); } const { parser, usageCallback, actualPrompt } = modelParams; if (parser === undefined) { - return originalComplete(actualPrompt, usageCallback, undefined, PromptLogger.getInstance().logModelRequest); + return originalComplete( + actualPrompt, + usageCallback, + undefined, + PromptLogger.getInstance().logModelRequest, + ); } const chunks = []; const result = await model.completeStream(actualPrompt, usageCallback); @@ -275,7 +285,12 @@ export function createJsonTranslatorWithValidator( if (jsonSchema !== undefined) { debugJsonSchema(jsonSchema); } - return originalComplete(prompt, usageCallback, jsonSchema, PromptLogger.getInstance().logModelRequest); + return originalComplete( + prompt, + usageCallback, + jsonSchema, + PromptLogger.getInstance().logModelRequest, + ); }; if (ai.supportsStreaming(model)) { From f73eb8d3570f90bef8c676a06e16f27efc40f332 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Thu, 5 Feb 2026 12:34:47 -0800 Subject: [PATCH 08/14] small refactor --- dotnet/autoShell/{dotnet/autoShell => }/CoreAudioInterop.cs | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dotnet/autoShell/{dotnet/autoShell => }/CoreAudioInterop.cs (100%) diff --git a/dotnet/autoShell/dotnet/autoShell/CoreAudioInterop.cs b/dotnet/autoShell/CoreAudioInterop.cs similarity index 100% rename from dotnet/autoShell/dotnet/autoShell/CoreAudioInterop.cs rename to dotnet/autoShell/CoreAudioInterop.cs From 8ebc055cadd25a6d9de4ff2d792a54a9d72d7488 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Thu, 5 Feb 2026 13:36:29 -0800 Subject: [PATCH 09/14] updated lock file --- ts/pnpm-lock.yaml | 543 ++++++++++++++++++++++++++-------------------- 1 file changed, 302 insertions(+), 241 deletions(-) diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index c463549c33..564ca60f6f 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -203,6 +203,9 @@ importers: memory-storage: specifier: workspace:* version: link:../../packages/memory/storage + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry textpro: specifier: workspace:* version: link:../../packages/textPro @@ -540,7 +543,7 @@ importers: version: 23.11.1(typescript@5.4.5) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.31)(typescript@5.4.5) + version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -575,6 +578,9 @@ importers: interactive-app: specifier: workspace:* version: link:../../packages/interactiveApp + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -772,6 +778,9 @@ importers: fastest-levenshtein: specifier: ^1.0.16 version: 1.0.16 + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -1642,6 +1651,9 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry websocket-utils: specifier: workspace:* version: link:../../utils/webSocketUtils @@ -1945,6 +1957,9 @@ importers: prosemirror-view: specifier: ^1.31.0 version: 1.40.0 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2406,9 +2421,6 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 - telemetry: - specifier: workspace:* - version: link:../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2756,9 +2768,12 @@ importers: open: specifier: ^10.1.0 version: 10.1.2 + telemetry: + specifier: workspace:* + version: link:../telemetry ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.31)(typescript@5.4.5) + version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2777,7 +2792,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3971,7 +3986,7 @@ importers: devDependencies: '@electron-toolkit/tsconfig': specifier: ^1.0.1 - version: 1.0.1(@types/node@20.19.31) + version: 1.0.1(@types/node@22.15.18) '@fontsource/lato': specifier: ^5.2.5 version: 5.2.5 @@ -3991,11 +4006,11 @@ importers: specifier: ^37.4.0 version: 37.4.0 electron-builder: - specifier: ^26.3.1 - version: 26.3.1(electron-builder-squirrel-windows@26.3.1) + specifier: ^26.7.0 + version: 26.7.0(electron-builder-squirrel-windows@26.3.1) electron-vite: specifier: ^4.0.1 - version: 4.0.1(vite@6.4.1(@types/node@20.19.31)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) + version: 4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) less: specifier: ^4.2.0 version: 4.3.0 @@ -4013,10 +4028,16 @@ importers: version: 5.4.5 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@20.19.31)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) + version: 6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) packages/telemetry: dependencies: + '@azure/cosmos': + specifier: ^4.2.1 + version: 4.9.1(@azure/core-client@1.9.2) + '@azure/identity': + specifier: ^4.10.0 + version: 4.10.0 chalk: specifier: ^5.4.1 version: 5.6.2 @@ -4236,6 +4257,9 @@ importers: exifreader: specifier: ^4.30.1 version: 4.30.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -4586,6 +4610,13 @@ packages: resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} engines: {node: '>=18.0.0'} + '@azure/core-http-compat@2.3.2': + resolution: {integrity: sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 + '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} engines: {node: '>=18.0.0'} @@ -4618,6 +4649,10 @@ packages: resolution: {integrity: sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ==} engines: {node: '>=18.0.0'} + '@azure/cosmos@4.9.1': + resolution: {integrity: sha512-fPnfL4JsmJJ/jEYUhlznKfrEr2pMvJwBncGVcUC2Xi7Nlj0MrUMRE+UOrptl/lRV2W7l68Br+b9Ikzm0KiZZHg==} + engines: {node: '>=20.0.0'} + '@azure/identity-cache-persistence@1.2.0': resolution: {integrity: sha512-ZYr6iiE6d/Tkt4jck0cQv9grZ1BR4u5LXJmB1vblU/WGIHspO6Bv3TJMvQat2sQSOG4Wz7busgg0pajP4gNJzA==} engines: {node: '>=18.0.0'} @@ -4626,6 +4661,14 @@ packages: resolution: {integrity: sha512-iT53Sre2NJK6wzMWnvpjNiR3md597LZ3uK/5kQD2TkrY9vqhrY5bt2KwELNjkOWQ9n8S/92knj/QEykTtjMNqQ==} engines: {node: '>=18.0.0'} + '@azure/keyvault-common@2.0.0': + resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-keys@4.10.0': + resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} + engines: {node: '>=18.0.0'} + '@azure/logger@1.2.0': resolution: {integrity: sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==} engines: {node: '>=18.0.0'} @@ -5045,6 +5088,10 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + '@electron/notarize@2.5.0': resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} @@ -5059,6 +5106,11 @@ packages: engines: {node: '>=22.12.0'} hasBin: true + '@electron/rebuild@4.0.3': + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} + engines: {node: '>=22.12.0'} + hasBin: true + '@electron/universal@2.0.3': resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} engines: {node: '>=16.4'} @@ -7585,6 +7637,13 @@ packages: dmg-builder: 26.3.1 electron-builder-squirrel-windows: 26.3.1 + app-builder-lib@26.7.0: + resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.7.0 + electron-builder-squirrel-windows: 26.7.0 + archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -7881,6 +7940,9 @@ packages: builder-util@26.3.1: resolution: {integrity: sha512-pplZEYBx1g15qvIOshpR1WTwjAwQM4ukhGgSNdYPnbuM6wLePq3+njy1sGfekCrJmUP+2xfuwuT9zEoUWfX5zQ==} + builder-util@26.4.1: + resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -8784,8 +8846,8 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@26.3.1: - resolution: {integrity: sha512-hYOlXCqmBxFXz8TZrAGm/Ym5ji+/Am5sgQaT+yZ/VULb9O+E7Lr1Z0HFnKk8GaaYfULV8PDVCYO4/bpQyb+BSg==} + dmg-builder@26.7.0: + resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -8869,14 +8931,17 @@ packages: electron-builder-squirrel-windows@26.3.1: resolution: {integrity: sha512-WY0INnhIqy1TaMPK7sC9bD8/kdwE//e5CYN783ZqVgUdrMb9QgC4MUu4adiSDQzc4Om9InQaN9v/jS4OlmeV5g==} - electron-builder@26.3.1: - resolution: {integrity: sha512-e8utkPlf+VF94KX1M6/qZqCXsQMLKEASg+DNO5JWLtPZeKkvXS9Oyac8hb6HelvlGzEP02N7IDX6UFGjmvV66g==} + electron-builder@26.7.0: + resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@26.3.1: resolution: {integrity: sha512-XYGYL/fpQULLW9slTVPelaUOGlKfOTmV2Uda3K+qzFzvNnkGJCj7L0nLVvMuj5cgxpAX+3BhO5HOUb4rv6jikA==} + electron-publish@26.6.0: + resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==} + electron-to-chromium@1.5.155: resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} @@ -9329,6 +9394,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -9360,10 +9429,6 @@ packages: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - fs-extra@11.3.3: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} @@ -11795,6 +11860,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + priorityqueuejs@2.0.0: + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -12353,6 +12421,10 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} + semaphore@1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -12817,10 +12889,9 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar 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 - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} - deprecated: Old versions of tar 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 temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -14526,6 +14597,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/core-http-compat@2.3.2(@azure/core-client@1.9.2)(@azure/core-rest-pipeline@1.20.0)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-lro@2.7.2': dependencies: '@azure/abort-controller': 2.1.2 @@ -14578,6 +14655,23 @@ snapshots: fast-xml-parser: 4.5.3 tslib: 2.8.1 + '@azure/cosmos@4.9.1(@azure/core-client@1.9.2)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-keys': 4.10.0(@azure/core-client@1.9.2) + '@azure/logger': 1.2.0 + fast-json-stable-stringify: 2.1.0 + priorityqueuejs: 2.0.0 + semaphore: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@azure/identity-cache-persistence@1.2.0': dependencies: '@azure/core-auth': 1.9.0 @@ -14605,6 +14699,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/keyvault-common@2.0.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.10.0(@azure/core-client@1.9.2)': + dependencies: + '@azure-rest/core-client': 2.4.0 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-http-compat': 2.3.2(@azure/core-client@1.9.2)(@azure/core-rest-pipeline@1.20.0) + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-common': 2.0.0 + '@azure/logger': 1.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@azure/logger@1.2.0': dependencies: '@typespec/ts-http-runtime': 0.2.2 @@ -15233,9 +15358,9 @@ snapshots: dependencies: electron: 37.4.0 - '@electron-toolkit/tsconfig@1.0.1(@types/node@20.19.31)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.15.18)': dependencies: - '@types/node': 20.19.31 + '@types/node': 22.15.18 '@electron/asar@3.4.1': dependencies: @@ -15263,6 +15388,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + '@electron/notarize@2.5.0': dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -15295,19 +15434,37 @@ snapshots: node-gyp: 11.5.0 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color + '@electron/rebuild@4.0.3': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + detect-libc: 2.0.3 + got: 11.8.6 + graceful-fs: 4.2.11 + node-abi: 4.24.0 + node-api-version: 0.2.1 + node-gyp: 11.5.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.3 + tar: 7.5.7 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@electron/universal@2.0.3': dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) dir-compare: 4.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.3 minimatch: 9.0.5 plist: 3.1.0 transitivePeerDependencies: @@ -15886,41 +16043,6 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 @@ -16229,7 +16351,7 @@ snapshots: dependencies: debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 - lodash: 4.17.21 + lodash: 4.17.23 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color @@ -16711,7 +16833,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@oclif/core@4.5.2': dependencies: @@ -17558,7 +17680,7 @@ snapshots: chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) js-yaml: 3.14.2 - lodash: 4.17.21 + lodash: 4.17.23 pluralize: 2.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 @@ -17878,7 +18000,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.31 '@types/geojson@7946.0.16': {} @@ -18036,7 +18158,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.31 xmlbuilder: 15.1.1 optional: true @@ -18568,7 +18690,7 @@ snapshots: app-builder-bin@5.0.0-alpha.12: {} - app-builder-lib@26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1): + app-builder-lib@26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): dependencies: '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 @@ -18585,11 +18707,11 @@ snapshots: chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3(supports-color@8.1.1) - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) dotenv: 16.5.0 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.3.1) + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) electron-publish: 26.3.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -18609,6 +18731,49 @@ snapshots: transitivePeerDependencies: - supports-color + app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.0.3 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3(supports-color@8.1.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) + dotenv: 16.5.0 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) + electron-publish: 26.6.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.0 + jiti: 2.5.1 + js-yaml: 4.1.1 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.1.1 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.3 + tar: 7.5.7 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + archiver-utils@2.1.0: dependencies: glob: 7.2.3 @@ -18987,6 +19152,27 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util@26.4.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.12 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.1.1 + sanitize-filename: 1.6.3 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -19037,7 +19223,7 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 12.0.0 - tar: 7.5.2 + tar: 7.5.7 unique-filename: 4.0.0 cacheable-lookup@5.0.4: {} @@ -19541,21 +19727,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 @@ -19999,10 +20170,10 @@ snapshots: dependencies: path-type: 4.0.0 - dmg-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + dmg-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.1 @@ -20113,23 +20284,23 @@ snapshots: dependencies: jake: 10.8.7 - electron-builder-squirrel-windows@26.3.1(dmg-builder@26.3.1): + electron-builder-squirrel-windows@26.3.1(dmg-builder@26.7.0): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) + app-builder-lib: 26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) builder-util: 26.3.1 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + electron-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 ci-info: 4.3.1 - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -20151,6 +20322,19 @@ snapshots: transitivePeerDependencies: - supports-color + electron-publish@26.6.0: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + form-data: 4.0.5 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.155: {} electron-updater@6.6.2: @@ -20166,7 +20350,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-vite@4.0.1(vite@6.4.1(@types/node@20.19.31)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)): + electron-vite@4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)): dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) @@ -20174,7 +20358,7 @@ snapshots: esbuild: 0.25.11 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.4.1(@types/node@20.19.31)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) + vite: 6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -20771,6 +20955,14 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -20800,18 +20992,11 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 - optional: true fs-extra@7.0.1: dependencies: @@ -20979,7 +21164,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.2 + semver: 7.7.3 serialize-error: 7.0.1 optional: true @@ -21429,7 +21614,7 @@ snapshots: code-excerpt: 4.0.0 indent-string: 5.0.0 is-in-ci: 0.1.0 - lodash: 4.17.21 + lodash: 4.17.23 patch-console: 2.0.0 react: 18.3.1 react-reconciler: 0.29.2(react@18.3.1) @@ -21699,7 +21884,7 @@ snapshots: '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -21819,25 +22004,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) @@ -21950,37 +22116,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)): - dependencies: - '@babel/core': 7.28.4 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.25 - ts-node: 10.9.2(@types/node@20.19.31)(typescript@5.4.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@babel/core': 7.28.4 @@ -22012,37 +22147,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)): - dependencies: - '@babel/core': 7.28.4 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.31 - ts-node: 10.9.2(@types/node@20.19.31)(typescript@5.4.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@babel/core': 7.28.4 @@ -22334,18 +22438,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.31)(ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) @@ -23541,7 +23633,7 @@ snapshots: node-abi@4.24.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-addon-api@1.7.2: optional: true @@ -23552,7 +23644,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-domexception@1.0.0: {} @@ -23593,8 +23685,8 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 - tar: 7.5.2 + semver: 7.7.3 + tar: 7.5.7 tinyglobby: 0.2.15 which: 5.0.0 transitivePeerDependencies: @@ -23631,7 +23723,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -24089,6 +24181,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.2.0 + priorityqueuejs@2.0.0: {} + prismjs@1.30.0: {} proc-log@5.0.0: {} @@ -24824,6 +24918,8 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.2 + semaphore@1.1.0: {} + semver-compare@1.0.0: optional: true @@ -25073,7 +25169,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 sisteransi@1.0.5: {} @@ -25432,7 +25528,7 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.5.2: + tar@7.5.7: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -25725,24 +25821,6 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@20.19.31)(typescript@5.4.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.31 - acorn: 8.11.1 - acorn-walk: 8.3.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -25760,7 +25838,6 @@ snapshots: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - optional: true tslib@2.6.2: {} @@ -26047,22 +26124,6 @@ snapshots: terser: 5.39.2 yaml: 2.7.0 - vite@6.4.1(@types/node@20.19.31)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0): - dependencies: - esbuild: 0.25.11 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.5 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 20.19.31 - fsevents: 2.3.3 - jiti: 2.5.1 - less: 4.3.0 - terser: 5.39.2 - yaml: 2.7.0 - vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0): dependencies: esbuild: 0.25.11 From fa0fc80b6dfe96639de1392c5aa365cd078c3dd5 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Thu, 5 Feb 2026 17:25:55 -0800 Subject: [PATCH 10/14] fixed lock file. --- ts/pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 57d05bc813..6c8b3a5231 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -17745,7 +17745,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.19.25 + '@types/node': 20.19.32 '@types/responselike': 1.0.3 '@types/chrome@0.0.114': @@ -17969,7 +17969,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.19.31 + '@types/node': 20.19.32 '@types/geojson@7946.0.16': {} @@ -18048,7 +18048,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.32 '@types/linkify-it@5.0.0': {} @@ -18127,7 +18127,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.19.31 + '@types/node': 20.19.32 xmlbuilder: 15.1.1 optional: true @@ -18156,7 +18156,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.32 '@types/retry@0.12.2': {} @@ -20282,7 +20282,7 @@ snapshots: builder-util: 26.3.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 - form-data: 4.0.4 + form-data: 4.0.5 fs-extra: 10.1.0 lazy-val: 1.0.5 mime: 2.6.0 @@ -24246,7 +24246,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.25 + '@types/node': 20.19.32 long: 5.3.2 protocol-buffers-schema@3.6.0: {} From 3a84bc2dfa29aa7fac5ba2554b52b041fb2a6613 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Fri, 6 Feb 2026 11:23:55 -0800 Subject: [PATCH 11/14] abstracted cosmos dependencies into an interface and that gets called via a factory. --- .../src/context/commandHandlerContext.ts | 12 +-- .../dispatcher/dispatcher/package.json | 1 + .../src/context/commandHandlerContext.ts | 34 +++++-- ts/packages/telemetry/package.json | 2 - ts/packages/telemetry/src/indexNode.ts | 17 +++- .../src/logger/cosmosDBLoggerSink.ts | 94 +++++++++---------- .../src/logger/databaseLoggerSink.ts | 76 ++++++++++----- ts/packages/telemetry/src/logger/logger.ts | 40 ++++++++ .../telemetry/src/logger/promptLogger.ts | 8 +- ts/pnpm-lock.yaml | 9 +- 10 files changed, 196 insertions(+), 97 deletions(-) diff --git a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts index 3af2a0370b..e9d27be670 100644 --- a/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/agents/spelunker/evals/eval-1/source/dispatcher/src/context/commandHandlerContext.ts @@ -189,11 +189,11 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createDatabaseLoggerSink( - "telemetrydb", - "dispatcherlogs", - isDbEnabled, - (e: string) => { + dbLoggerSink = createDatabaseLoggerSink({ + dbName: "telemetrydb", + collectionName: "dispatcherlogs", + isEnabled: isDbEnabled, + onErrorDisable: (e: string) => { clientIO.notify( AppAgentEvent.Warning, undefined, @@ -201,7 +201,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { DispatcherName, ); }, - ); + }); } catch (e) { clientIO.notify( AppAgentEvent.Warning, diff --git a/ts/packages/dispatcher/dispatcher/package.json b/ts/packages/dispatcher/dispatcher/package.json index 7c53132d77..a2c78d75ea 100644 --- a/ts/packages/dispatcher/dispatcher/package.json +++ b/ts/packages/dispatcher/dispatcher/package.json @@ -41,6 +41,7 @@ "@anthropic-ai/claude-agent-sdk": "^0.2.12", "@azure/ai-agents": "^1.0.0-beta.3", "@azure/ai-projects": "^1.0.0-beta.8", + "@azure/cosmos": "^4.2.1", "@azure/identity": "^4.10.0", "@typeagent/action-schema": "workspace:*", "@typeagent/agent-rpc": "workspace:*", diff --git a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts index c12d736561..5c1541cdf2 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts @@ -13,6 +13,8 @@ import { MultiSinkLogger, createDebugLoggerSink, createDatabaseLoggerSink, + CosmosContainerClientFactory, + CosmosPartitionKeyBuilderFactory, } from "telemetry"; import { AgentCache } from "agent-cache"; import { randomUUID } from "crypto"; @@ -87,6 +89,9 @@ import { registerBuiltInEntities, } from "action-grammar"; import fs from "node:fs"; +import { CosmosClient, PartitionKeyBuilder } from "@azure/cosmos"; +import { CosmosPartitionKeyBuilder } from "telemetry"; +import { DefaultAzureCredential } from "@azure/identity"; const debug = registerDebug("typeagent:dispatcher:init"); const debugError = registerDebug("typeagent:dispatcher:init:error"); @@ -292,11 +297,26 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createDatabaseLoggerSink( - "telemetrydb", - "dispatcherlogs", - isDbEnabled, - (e: string) => { + + const cosmosConnectionString = process.env["COSMOSDB_CONNECTION_STRING"]; + let cosmosContainerFactory: CosmosContainerClientFactory | undefined; + let partitionKeyBuilderFactory: CosmosPartitionKeyBuilderFactory | undefined; + + if (cosmosConnectionString && cosmosConnectionString !== "") { + cosmosContainerFactory = async (endpoint, dbName, containerName) => { + const client = new CosmosClient({ endpoint, aadCredentials: new DefaultAzureCredential() }); + const container = client.database(dbName).container(containerName); + return { executeBulkOperations: (ops) => container.items.executeBulkOperations(ops as any) }; + }; + + partitionKeyBuilderFactory = () => new PartitionKeyBuilder() as unknown as CosmosPartitionKeyBuilder; + } + + dbLoggerSink = createDatabaseLoggerSink({ + dbName: "telemetrydb", + collectionName: "dispatcherlogs", + isEnabled: isDbEnabled, + onErrorDisable: (e: string) => { clientIO.notify( undefined, AppAgentEvent.Warning, @@ -304,7 +324,9 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { DispatcherName, ); }, - ); + cosmosContainerFactory: cosmosContainerFactory, + cosmosPartitionKeyBuilderFactory: partitionKeyBuilderFactory, + }); } catch (e) { clientIO.notify( undefined, diff --git a/ts/packages/telemetry/package.json b/ts/packages/telemetry/package.json index b497ac6e27..1013b7bc3f 100644 --- a/ts/packages/telemetry/package.json +++ b/ts/packages/telemetry/package.json @@ -32,8 +32,6 @@ "tsc": "tsc -b" }, "dependencies": { - "@azure/cosmos": "^4.2.1", - "@azure/identity": "^4.10.0", "chalk": "^5.4.1", "debug": "^4.4.0", "dotenv": "^16.3.1", diff --git a/ts/packages/telemetry/src/indexNode.ts b/ts/packages/telemetry/src/indexNode.ts index d058494b23..382907ce91 100644 --- a/ts/packages/telemetry/src/indexNode.ts +++ b/ts/packages/telemetry/src/indexNode.ts @@ -7,10 +7,23 @@ export { ChildLogger, MultiSinkLogger, LogEvent, + CosmosContainerClient, + CosmosContainerClientFactory, + CosmosPartitionKeyBuilder, + CosmosBulkOperation, + CosmosBulkOperationResult, + CosmosBulkOperationResponse, + CosmosPartitionKey, } from "./logger/logger.js"; export { createMongoDBLoggerSink } from "./logger/mongoLoggerSink.js"; -export { createCosmosDBLoggerSink } from "./logger/cosmosDBLoggerSink.js"; -export { createDatabaseLoggerSink } from "./logger/databaseLoggerSink.js"; +export { + createCosmosDBLoggerSink, + CosmosPartitionKeyBuilderFactory, +} from "./logger/cosmosDBLoggerSink.js"; +export { + createDatabaseLoggerSink, + DatabaseLoggerSinkOptions, +} from "./logger/databaseLoggerSink.js"; export { createDebugLoggerSink } from "./logger/debugLoggerSink.js"; export { PromptLogger } from "./logger/promptLogger.js"; diff --git a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts index 5f3040d7ca..0153331708 100644 --- a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { LoggerSink, LogEvent } from "./logger.js"; import { - CosmosClient, - Container, - BulkOperationResult, - CosmosClientOptions, - PartitionKeyBuilder, -} from "@azure/cosmos"; + LoggerSink, + LogEvent, + CosmosContainerClient, + CosmosContainerClientFactory, + CosmosPartitionKeyBuilder, + CosmosBulkOperation, +} from "./logger.js"; import registerDebug from "debug"; -import { DefaultAzureCredential } from "@azure/identity"; import { randomUUID } from "crypto"; const debugCosmos = registerDebug("typeagent:logger:cosmosdb"); @@ -18,23 +17,27 @@ const debugCosmos = registerDebug("typeagent:logger:cosmosdb"); const UPLOAD_DELAY = 1000; const MAX_RETRY = 3; +export type CosmosPartitionKeyBuilderFactory = () => CosmosPartitionKeyBuilder; + class CosmosDBLoggerSink implements LoggerSink { private pendingEvents: LogEvent[] = []; private timeout: NodeJS.Timeout | undefined; private disabled = false; - private container: Container | undefined; + private container: CosmosContainerClient | undefined; constructor( - private readonly connectionString: string, + private readonly endpoint: string, private readonly databaseName: string, private readonly containerName: string, + private readonly containerFactory: CosmosContainerClientFactory, + private readonly partitionKeyBuilderFactory: CosmosPartitionKeyBuilderFactory, private readonly isEnabled?: () => boolean, private readonly onErrorDisable?: (error: string) => void, ) {} public logEvent(event: LogEvent) { if ( - this.connectionString && + this.endpoint && !this.disabled && this.isEnabled?.() !== false ) { @@ -81,25 +84,13 @@ class CosmosDBLoggerSink implements LoggerSink { this.timeout = undefined; } - private async getContainer(): Promise { + private async getContainer(): Promise { if (!this.container) { - let options = {} as CosmosClientOptions; - options.endpoint = this.connectionString; - options.aadCredentials = new DefaultAzureCredential(); - const client = new CosmosClient(options); - const database = client.database(this.databaseName); - - // with RBAC and AAD, we assume DB and Container already exist - // // Create database if it doesn't exist - // await client.databases.createIfNotExists({ id: this.databaseName }); - - // // Create container if it doesn't exist - // await database.containers.createIfNotExists({ - // id: this.containerName, - // partitionKey: { paths: ["/id"] } - // }); - - this.container = database.container(this.containerName); + this.container = await this.containerFactory( + this.endpoint, + this.databaseName, + this.containerName, + ); } return this.container; } @@ -118,22 +109,23 @@ class CosmosDBLoggerSink implements LoggerSink { try { // Azure Cosmos DB requires each document to have an 'id' field // We'll add it if not present and use bulk operations - const operations = events.map((event: any) => { - const partitionKey = new PartitionKeyBuilder() - .addValue(event.id || randomUUID().toString()) - .build(); - return { - operationType: "Create" as const, - partitionKey: partitionKey, - resourceBody: { - ...event, - id: partitionKey?.toString(), - }, - }; - }); - - const result: BulkOperationResult[] = - await container.items.executeBulkOperations(operations); + const operations: CosmosBulkOperation[] = events.map( + (event: any) => { + const partitionKey = this.partitionKeyBuilderFactory() + .addValue(event.id || randomUUID().toString()) + .build(); + return { + operationType: "Create" as const, + partitionKey: partitionKey, + resourceBody: { + ...event, + id: partitionKey.toString(), + }, + }; + }, + ); + + const result = await container.executeBulkOperations(operations); debugCosmos( `Status: ${result[0].response?.statusCode}. ${operations.length} events uploaded`, ); @@ -151,19 +143,23 @@ class CosmosDBLoggerSink implements LoggerSink { export function createCosmosDBLoggerSink( databaseName: string, containerName: string, + containerFactory: CosmosContainerClientFactory, + partitionKeyBuilderFactory: CosmosPartitionKeyBuilderFactory, isEnabled?: () => boolean, onErrorDisable?: (error: string) => void, -): LoggerSink | undefined { - const connectionString = process.env["COSMOSDB_CONNECTION_STRING"] ?? null; - if (connectionString === null || connectionString === "") { +): LoggerSink { + const endpoint = process.env["COSMOSDB_CONNECTION_STRING"] ?? ""; + if (endpoint === "") { throw new Error( "COSMOSDB_CONNECTION_STRING environment variable not set", ); } return new CosmosDBLoggerSink( - connectionString, + endpoint, databaseName, containerName, + containerFactory, + partitionKeyBuilderFactory, isEnabled, onErrorDisable, ); diff --git a/ts/packages/telemetry/src/logger/databaseLoggerSink.ts b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts index b73436dc80..e967aa5beb 100644 --- a/ts/packages/telemetry/src/logger/databaseLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts @@ -1,49 +1,81 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { LoggerSink } from "./logger.js"; +import { + LoggerSink, + CosmosContainerClientFactory, +} from "./logger.js"; import { createMongoDBLoggerSink } from "./mongoLoggerSink.js"; -import { createCosmosDBLoggerSink } from "./cosmosDBLoggerSink.js"; +import { + createCosmosDBLoggerSink, + CosmosPartitionKeyBuilderFactory, +} from "./cosmosDBLoggerSink.js"; import registerDebug from "debug"; const debugDatabase = registerDebug("typeagent:logger:database"); +export interface DatabaseLoggerSinkOptions { + dbName: string; + collectionName: string; + isEnabled?: () => boolean; + onErrorDisable?: (error: string) => void; + /** + * Factory to create a Cosmos container client. Required if using Cosmos DB. + */ + cosmosContainerFactory?: CosmosContainerClientFactory | undefined; + /** + * Factory to create a Cosmos partition key builder. Required if using Cosmos DB. + */ + cosmosPartitionKeyBuilderFactory?: CosmosPartitionKeyBuilderFactory | undefined; +} + /** * Creates a database logger sink that automatically selects between MongoDB and Cosmos DB * based on which environment variable is set. * * Priority order: - * 1. COSMOSDB_CONNECTION_STRING - Uses Azure Cosmos DB + * 1. COSMOSDB_CONNECTION_STRING - Uses Azure Cosmos DB (requires cosmosContainerFactory and cosmosPartitionKeyBuilderFactory) * 2. MONGODB_CONNECTION_STRING - Uses MongoDB * - * @param dbName - The name of the database - * @param collectionName - The name of the collection/container - * @param isEnabled - Optional function to check if logging is enabled - * @param onErrorDisable - Optional callback when logging is disabled due to error + * @param options - Configuration options for the database logger sink * @returns A LoggerSink instance or undefined if no connection string is configured */ export function createDatabaseLoggerSink( - dbName: string, - collectionName: string, - isEnabled?: () => boolean, - onErrorDisable?: (error: string) => void, + options: DatabaseLoggerSinkOptions, ): LoggerSink | undefined { + const { + dbName, + collectionName, + isEnabled, + onErrorDisable, + cosmosContainerFactory, + cosmosPartitionKeyBuilderFactory, + } = options; + const cosmosConnectionString = process.env["COSMOSDB_CONNECTION_STRING"]; const mongoConnectionString = process.env["MONGODB_CONNECTION_STRING"]; - // Try Cosmos DB first + // Try Cosmos DB first (if factories are provided) if (cosmosConnectionString && cosmosConnectionString !== "") { - try { - debugDatabase("Using Azure Cosmos DB for database logging"); - return createCosmosDBLoggerSink( - dbName, - collectionName, - isEnabled, - onErrorDisable, + if (cosmosContainerFactory && cosmosPartitionKeyBuilderFactory) { + try { + debugDatabase("Using Azure Cosmos DB for database logging"); + return createCosmosDBLoggerSink( + dbName, + collectionName, + cosmosContainerFactory, + cosmosPartitionKeyBuilderFactory, + isEnabled, + onErrorDisable, + ); + } catch (e) { + debugDatabase(`Failed to create Cosmos DB logger sink: ${e}`); + // Fall through to try MongoDB + } + } else { + debugDatabase( + "Cosmos DB connection string found but no factories provided, falling back to MongoDB", ); - } catch (e) { - debugDatabase(`Failed to create Cosmos DB logger sink: ${e}`); - // Fall through to try MongoDB } } diff --git a/ts/packages/telemetry/src/logger/logger.ts b/ts/packages/telemetry/src/logger/logger.ts index d6ed7eee2a..abe21408e9 100644 --- a/ts/packages/telemetry/src/logger/logger.ts +++ b/ts/packages/telemetry/src/logger/logger.ts @@ -52,3 +52,43 @@ export class MultiSinkLogger implements Logger { } } } + +/** + * Cosmos DB abstractions to avoid direct dependency on @azure/cosmos and @azure/identity + */ + +export interface CosmosBulkOperationResponse { + statusCode?: number; +} + +export interface CosmosBulkOperationResult { + response?: CosmosBulkOperationResponse; +} + +export interface CosmosPartitionKey { + toString(): string; + length: number; +} + +export interface CosmosBulkOperation { + operationType: "Create"; + partitionKey: CosmosPartitionKey; + resourceBody: Record; +} + +export interface CosmosContainerClient { + executeBulkOperations( + operations: CosmosBulkOperation[], + ): Promise; +} + +export type CosmosContainerClientFactory = ( + endpoint: string, + databaseName: string, + containerName: string, +) => Promise; + +export interface CosmosPartitionKeyBuilder { + addValue(value: string): CosmosPartitionKeyBuilder; + build(): CosmosPartitionKey; +} diff --git a/ts/packages/telemetry/src/logger/promptLogger.ts b/ts/packages/telemetry/src/logger/promptLogger.ts index c75eb1fa7a..7dffd4e4ae 100644 --- a/ts/packages/telemetry/src/logger/promptLogger.ts +++ b/ts/packages/telemetry/src/logger/promptLogger.ts @@ -38,10 +38,10 @@ export class PromptLogger { let dbLoggerSink: LoggerSink | undefined; try { - dbLoggerSink = createDatabaseLoggerSink( - "telemetrydb", - "promptLogs", - ); + dbLoggerSink = createDatabaseLoggerSink({ + dbName: "telemetrydb", + collectionName: "promptLogs", + }); } catch (e) { debugPromptLogger(`DB logging disabled. ${e}`); } diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 81b6f89678..fc17fb5dcd 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -3155,6 +3155,9 @@ importers: '@azure/ai-projects': specifier: ^1.0.0-beta.8 version: 1.0.0-beta.8(ws@8.18.2)(zod@4.1.13) + '@azure/cosmos': + specifier: ^4.2.1 + version: 4.9.1(@azure/core-client@1.9.2) '@azure/identity': specifier: ^4.10.0 version: 4.10.0 @@ -4032,12 +4035,6 @@ importers: packages/telemetry: dependencies: - '@azure/cosmos': - specifier: ^4.2.1 - version: 4.9.1(@azure/core-client@1.9.2) - '@azure/identity': - specifier: ^4.10.0 - version: 4.10.0 chalk: specifier: ^5.4.1 version: 5.6.2 From 17179be3f7dfff9a954a94d6a5c039db7576eddf Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Sat, 7 Feb 2026 12:25:57 -0800 Subject: [PATCH 12/14] prompt logger now externalized. Prompt logger now part of the system context --- ts/examples/chat/src/codeChat/codeChat.ts | 6 +- ts/examples/playground/src/main.ts | 6 +- ts/examples/vscodeSchemaGen/src/schemaGen.ts | 6 +- .../agents/markdown/src/agent/translator.ts | 6 +- .../cache/src/explanation/v5/explanationV5.ts | 6 +- ts/packages/cli/src/commands/prompt.ts | 6 +- .../src/context/commandHandlerContext.ts | 58 ++++++++++++++----- .../src/context/dispatcher/dispatcherAgent.ts | 10 +++- .../src/translation/agentTranslators.ts | 12 +++- .../src/translation/translateRequest.ts | 3 + .../src/translation/unknownSwitcher.ts | 3 + ts/packages/telemetry/src/indexNode.ts | 6 +- .../telemetry/src/logger/promptLogger.ts | 45 +++++++++----- .../utils/typechatUtils/src/jsonTranslator.ts | 8 ++- 14 files changed, 131 insertions(+), 50 deletions(-) diff --git a/ts/examples/chat/src/codeChat/codeChat.ts b/ts/examples/chat/src/codeChat/codeChat.ts index 766e6e75ea..52af1e509e 100644 --- a/ts/examples/chat/src/codeChat/codeChat.ts +++ b/ts/examples/chat/src/codeChat/codeChat.ts @@ -38,7 +38,9 @@ import { sampleFiles, } from "./common.js"; import { createCommandTransformer } from "./commandTransformer.js"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); export async function runCodeChat(): Promise { const model = openai.createChatModelDefault("codeChat"); @@ -386,7 +388,7 @@ export async function runCodeChat(): Promise { prompt, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); if (result.success) { io.writer.writeLine(result.data); diff --git a/ts/examples/playground/src/main.ts b/ts/examples/playground/src/main.ts index 872d507909..97f4e03a30 100644 --- a/ts/examples/playground/src/main.ts +++ b/ts/examples/playground/src/main.ts @@ -25,7 +25,9 @@ import { } from "typeagent"; import { PromptSection } from "typechat"; import * as fs from "fs"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); const envPath = new URL("../../../.env", import.meta.url); dotenv.config({ path: envPath }); @@ -193,7 +195,7 @@ async function runPlayground(): Promise { context, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); if (chatResponse.success) { const responseText = chatResponse.data; diff --git a/ts/examples/vscodeSchemaGen/src/schemaGen.ts b/ts/examples/vscodeSchemaGen/src/schemaGen.ts index 9807cfcf85..c2d7ffb983 100644 --- a/ts/examples/vscodeSchemaGen/src/schemaGen.ts +++ b/ts/examples/vscodeSchemaGen/src/schemaGen.ts @@ -5,7 +5,9 @@ import * as path from "path"; import dotenv from "dotenv"; import * as fs from "fs"; import { finished } from "stream/promises"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); import { ChatModel, @@ -28,7 +30,7 @@ async function getModelCompletionResponse( prompt, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); if (chatResponse.success) { const responseText = chatResponse.data; diff --git a/ts/packages/agents/markdown/src/agent/translator.ts b/ts/packages/agents/markdown/src/agent/translator.ts index 62122d216e..b98b3adc8e 100644 --- a/ts/packages/agents/markdown/src/agent/translator.ts +++ b/ts/packages/agents/markdown/src/agent/translator.ts @@ -12,7 +12,9 @@ import fs from "node:fs"; import { fileURLToPath } from "node:url"; import path from "node:path"; import registerDebug from "debug"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); import { MarkdownUpdateResult } from "./markdownOperationSchema.js"; @@ -179,7 +181,7 @@ export class MarkdownAgent { streamingPrompt, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); // Extract content from response diff --git a/ts/packages/cache/src/explanation/v5/explanationV5.ts b/ts/packages/cache/src/explanation/v5/explanationV5.ts index cc7b2c685f..2f0adc43c8 100644 --- a/ts/packages/cache/src/explanation/v5/explanationV5.ts +++ b/ts/packages/cache/src/explanation/v5/explanationV5.ts @@ -81,7 +81,9 @@ import { PolitenessGeneralizer, } from "./politenessGeneralizationV5.js"; import { PolitenessGeneralization } from "./politenessGeneralizationSchemaV5.js"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); type Explanation = PropertyExplanation & SubPhraseExplanation & @@ -339,7 +341,7 @@ Emit the generated phrases and values as a JSON object of type ParameterVariatio prompt, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); if (result.success) { const generatedAlternatives = JSON.parse( diff --git a/ts/packages/cli/src/commands/prompt.ts b/ts/packages/cli/src/commands/prompt.ts index 9723b8af6a..f91ddb1c75 100644 --- a/ts/packages/cli/src/commands/prompt.ts +++ b/ts/packages/cli/src/commands/prompt.ts @@ -5,7 +5,9 @@ import { Args, Command, Flags } from "@oclif/core"; import { openai, getChatModelNames } from "aiclient"; import fs from "node:fs"; import chalk from "chalk"; -import { PromptLogger } from "telemetry"; +import { createPromptLogger } from "telemetry"; + +const promptLogger = createPromptLogger(); const modelNames = await getChatModelNames(); export default class Prompt extends Command { @@ -88,7 +90,7 @@ export default class Prompt extends Command { request, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger.logModelRequest, ); const end = performance.now(); if (complete.success) { diff --git a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts index 5c1541cdf2..1f6fda34ad 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts @@ -15,6 +15,9 @@ import { createDatabaseLoggerSink, CosmosContainerClientFactory, CosmosPartitionKeyBuilderFactory, + PromptLogger, + createPromptLogger, + PromptLoggerOptions, } from "telemetry"; import { AgentCache } from "agent-cache"; import { randomUUID } from "crypto"; @@ -160,6 +163,7 @@ export type CommandHandlerContext = { streamingActionContext?: ActionContextWithClose | undefined; metricsManager?: RequestMetricsManager | undefined; commandProfiler?: Profiler | undefined; + promptLogger?: PromptLogger | undefined; instanceDirLock: (() => Promise) | undefined; @@ -292,25 +296,50 @@ async function getSession( return session; } +function getCosmosFactories(): PromptLoggerOptions { + const cosmosConnectionString = process.env["COSMOSDB_CONNECTION_STRING"]; + let cosmosContainerFactory: CosmosContainerClientFactory | undefined; + let cosmosPartitionKeyBuilderFactory: + | CosmosPartitionKeyBuilderFactory + | undefined; + + if (cosmosConnectionString && cosmosConnectionString !== "") { + cosmosContainerFactory = async (endpoint, dbName, containerName) => { + const client = new CosmosClient({ + endpoint, + aadCredentials: new DefaultAzureCredential(), + }); + const container = client + .database(dbName) + .container(containerName); + return { + executeBulkOperations: (ops) => + container.items.executeBulkOperations(ops as any), + }; + }; + + cosmosPartitionKeyBuilderFactory = () => + new PartitionKeyBuilder() as unknown as CosmosPartitionKeyBuilder; + } + + const result: PromptLoggerOptions = {}; + if (cosmosContainerFactory !== undefined) { + result.cosmosContainerFactory = cosmosContainerFactory; + } + if (cosmosPartitionKeyBuilderFactory !== undefined) { + result.cosmosPartitionKeyBuilderFactory = cosmosPartitionKeyBuilderFactory; + } + return result; +} + function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { const debugLoggerSink = createDebugLoggerSink(); let dbLoggerSink: LoggerSink | undefined; try { - const cosmosConnectionString = process.env["COSMOSDB_CONNECTION_STRING"]; - let cosmosContainerFactory: CosmosContainerClientFactory | undefined; - let partitionKeyBuilderFactory: CosmosPartitionKeyBuilderFactory | undefined; - - if (cosmosConnectionString && cosmosConnectionString !== "") { - cosmosContainerFactory = async (endpoint, dbName, containerName) => { - const client = new CosmosClient({ endpoint, aadCredentials: new DefaultAzureCredential() }); - const container = client.database(dbName).container(containerName); - return { executeBulkOperations: (ops) => container.items.executeBulkOperations(ops as any) }; - }; - - partitionKeyBuilderFactory = () => new PartitionKeyBuilder() as unknown as CosmosPartitionKeyBuilder; - } + const { cosmosContainerFactory, cosmosPartitionKeyBuilderFactory } = + getCosmosFactories(); dbLoggerSink = createDatabaseLoggerSink({ dbName: "telemetrydb", @@ -325,7 +354,7 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { ); }, cosmosContainerFactory: cosmosContainerFactory, - cosmosPartitionKeyBuilderFactory: partitionKeyBuilderFactory, + cosmosPartitionKeyBuilderFactory: cosmosPartitionKeyBuilderFactory, }); } catch (e) { clientIO.notify( @@ -559,6 +588,7 @@ export async function initializeCommandHandlerContext( ), logger, metricsManager: metrics ? new RequestMetricsManager() : undefined, + promptLogger: createPromptLogger(getCosmosFactories()), batchMode: false, instanceDirLock, constructionProvider, diff --git a/ts/packages/dispatcher/dispatcher/src/context/dispatcher/dispatcherAgent.ts b/ts/packages/dispatcher/dispatcher/src/context/dispatcher/dispatcherAgent.ts index a63512f2a6..42b0c0cbed 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/dispatcher/dispatcherAgent.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/dispatcher/dispatcherAgent.ts @@ -172,7 +172,15 @@ async function clarifyWithLookup( agents.getActionConfig("dispatcher"), ]; // TODO: cache this? - const translator = loadAgentJsonTranslator(actionConfigs, [], agents); + const translator = loadAgentJsonTranslator( + actionConfigs, + [], + agents, + undefined, + undefined, + undefined, + systemContext.promptLogger, + ); const question = `What is ${action.parameters.reference}?`; const result = await translator.translate(question); diff --git a/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts b/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts index 557b095598..01c6e8a341 100644 --- a/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts +++ b/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts @@ -38,6 +38,7 @@ import { ActionConfig, getSchemaContent } from "./actionConfig.js"; import { ActionConfigProvider } from "./actionConfigProvider.js"; import { createTypeScriptJsonValidator } from "typechat/ts"; import { CompleteUsageStatsCallback } from "aiclient"; +import { PromptLogger } from "telemetry"; export function getAppAgentName(schemaName: string) { return schemaName.split(".")[0]; @@ -334,6 +335,7 @@ export function loadAgentJsonTranslator< options?: ComposeSchemaOptions, generateOptions?: GenerateSchemaOptions | null, // null means not generated model?: string, + promptLogger?: PromptLogger, ): TypeAgentTranslator { const validator = createTypeAgentValidator( actionConfigs, @@ -344,7 +346,7 @@ export function loadAgentJsonTranslator< ); // Collect schema name mapping. const schemaNameMap = collectSchemaName(actionConfigs, provider); - return createTypeAgentTranslator(validator, schemaNameMap, { model }); + return createTypeAgentTranslator(validator, schemaNameMap, { model, promptLogger }); } function createTypeAgentTranslator< @@ -359,7 +361,10 @@ function createTypeAgentTranslator< validator, options, ); - const streamingTranslator = enableJsonTranslatorStreaming(translator); + const streamingTranslator = enableJsonTranslatorStreaming( + translator, + options.promptLogger, + ); // the request prompt is already expanded by the override replacement below // So just return the request as is. @@ -430,6 +435,7 @@ export function createTypeAgentTranslatorForSelectedActions< provider: ActionConfigProvider, options?: ComposeSchemaOptions, model?: string, + promptLogger?: PromptLogger, ) { const validator = createActionSchemaJsonValidator( composeSelectedActionSchema( @@ -447,7 +453,7 @@ export function createTypeAgentTranslatorForSelectedActions< definitions, actionConfig, ); - return createTypeAgentTranslator(validator, schemaNameMap, { model }); + return createTypeAgentTranslator(validator, schemaNameMap, { model, promptLogger }); } // For CLI, replicate the behavior of loadAgentJsonTranslator to get the schema diff --git a/ts/packages/dispatcher/dispatcher/src/translation/translateRequest.ts b/ts/packages/dispatcher/dispatcher/src/translation/translateRequest.ts index 7bd65dbed0..e454f645eb 100644 --- a/ts/packages/dispatcher/dispatcher/src/translation/translateRequest.ts +++ b/ts/packages/dispatcher/dispatcher/src/translation/translateRequest.ts @@ -156,6 +156,7 @@ export function getTranslatorForSchema( }, generateOptions, config.model, + context.promptLogger, ); if (!activityContext) { context.translatorCache.set(translatorName, newTranslator); @@ -208,6 +209,7 @@ async function getTranslatorForSelectedActions( multiple: config.multiple, }, config.model, + context.promptLogger, ); } @@ -480,6 +482,7 @@ async function findAssistantForRequest( const selectTranslator = loadAssistantSelectionJsonTranslator( schemaNames, systemContext.agents, + systemContext.promptLogger, ); const result = await selectTranslator.translate(request); diff --git a/ts/packages/dispatcher/dispatcher/src/translation/unknownSwitcher.ts b/ts/packages/dispatcher/dispatcher/src/translation/unknownSwitcher.ts index 47294653eb..974fe63566 100644 --- a/ts/packages/dispatcher/dispatcher/src/translation/unknownSwitcher.ts +++ b/ts/packages/dispatcher/dispatcher/src/translation/unknownSwitcher.ts @@ -13,6 +13,7 @@ import { SchemaCreator as sc, } from "@typeagent/action-schema"; import { getCombinedActionSchemaTypeName } from "./agentTranslators.js"; +import { PromptLogger } from "telemetry"; const debugSwitchSearch = registerDebug("typeagent:switch:search"); function createSelectionActionTypeDefinition( @@ -132,6 +133,7 @@ const assistantSelectionLimit = 8192 * 3; export function loadAssistantSelectionJsonTranslator( schemaNames: Iterable, provider: ActionConfigProvider, + promptLogger?: PromptLogger, ) { const schemas = getAssistantSelectionSchemas(schemaNames, provider); @@ -170,6 +172,7 @@ export function loadAssistantSelectionJsonTranslator( "Select the assistant to handle the request", }, ], + promptLogger, }, ), }; diff --git a/ts/packages/telemetry/src/indexNode.ts b/ts/packages/telemetry/src/indexNode.ts index 382907ce91..42aef2f60d 100644 --- a/ts/packages/telemetry/src/indexNode.ts +++ b/ts/packages/telemetry/src/indexNode.ts @@ -25,7 +25,11 @@ export { DatabaseLoggerSinkOptions, } from "./logger/databaseLoggerSink.js"; export { createDebugLoggerSink } from "./logger/debugLoggerSink.js"; -export { PromptLogger } from "./logger/promptLogger.js"; +export { + PromptLogger, + PromptLoggerOptions, + createPromptLogger, +} from "./logger/promptLogger.js"; export * from "./stopWatch.js"; diff --git a/ts/packages/telemetry/src/logger/promptLogger.ts b/ts/packages/telemetry/src/logger/promptLogger.ts index 7dffd4e4ae..3b050ebec5 100644 --- a/ts/packages/telemetry/src/logger/promptLogger.ts +++ b/ts/packages/telemetry/src/logger/promptLogger.ts @@ -4,43 +4,50 @@ import { LoggerSink, MultiSinkLogger, + CosmosContainerClientFactory, createDatabaseLoggerSink, createDebugLoggerSink, } from "telemetry"; +import { CosmosPartitionKeyBuilderFactory } from "./cosmosDBLoggerSink.js"; import registerDebug from "debug"; const debugPromptLogger = registerDebug("typeagent:telemetry:promptLogger"); +export interface PromptLoggerOptions { + dbName?: string; + collectionName?: string; + cosmosContainerFactory?: CosmosContainerClientFactory; + cosmosPartitionKeyBuilderFactory?: CosmosPartitionKeyBuilderFactory; +} + /** - * Logger for LLM prompts. + * Logger for LLM prompts. */ export class PromptLogger { - private static instance: PromptLogger; private sinkLogger: MultiSinkLogger | undefined; - public static getInstance = (): PromptLogger => { - if (!PromptLogger.instance) { - PromptLogger.instance = new PromptLogger(); - PromptLogger.instance.sinkLogger = - PromptLogger.instance.createSinkLogger(); - } - - return PromptLogger.instance; - }; + constructor(options?: PromptLoggerOptions) { + this.sinkLogger = this.createSinkLogger(options); + } - logModelRequest(requestContent: any) { + logModelRequest = (requestContent: any) => { this.sinkLogger?.logEvent("modelRequest", { requestContent }); - } + }; - createSinkLogger(): MultiSinkLogger { + private createSinkLogger( + options?: PromptLoggerOptions, + ): MultiSinkLogger | undefined { const debugLoggerSink = createDebugLoggerSink(); let dbLoggerSink: LoggerSink | undefined; try { dbLoggerSink = createDatabaseLoggerSink({ - dbName: "telemetrydb", - collectionName: "promptLogs", + dbName: options?.dbName ?? "telemetrydb", + collectionName: options?.collectionName ?? "promptLogs", + cosmosContainerFactory: options?.cosmosContainerFactory, + cosmosPartitionKeyBuilderFactory: + options?.cosmosPartitionKeyBuilderFactory, }); } catch (e) { debugPromptLogger(`DB logging disabled. ${e}`); @@ -53,3 +60,9 @@ export class PromptLogger { ); } } + +export function createPromptLogger( + options?: PromptLoggerOptions, +): PromptLogger { + return new PromptLogger(options); +} diff --git a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts index f4fa483cfd..159105c3f2 100644 --- a/ts/packages/utils/typechatUtils/src/jsonTranslator.ts +++ b/ts/packages/utils/typechatUtils/src/jsonTranslator.ts @@ -131,6 +131,7 @@ function getModelParams( export function enableJsonTranslatorStreaming( translator: TypeChatJsonTranslator, + promptLogger?: PromptLogger, ): TypeChatJsonTranslatorWithStreaming { const model = translator.model; if (!ai.supportsStreaming(model)) { @@ -145,7 +146,7 @@ export function enableJsonTranslatorStreaming( prompt, undefined, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger?.logModelRequest, ); } const { parser, usageCallback, actualPrompt } = modelParams; @@ -154,7 +155,7 @@ export function enableJsonTranslatorStreaming( actualPrompt, usageCallback, undefined, - PromptLogger.getInstance().logModelRequest, + promptLogger?.logModelRequest, ); } const chunks = []; @@ -219,6 +220,7 @@ export type JsonTranslatorOptions = { validateInstance?: (instance: T) => Result; // Optional instructions?: PromptSection[] | undefined; // Instructions before the per request preamble model?: string | undefined; // optional + promptLogger?: PromptLogger | undefined; // optional prompt logger for model requests }; /** @@ -289,7 +291,7 @@ export function createJsonTranslatorWithValidator( prompt, usageCallback, jsonSchema, - PromptLogger.getInstance().logModelRequest, + options?.promptLogger?.logModelRequest, ); }; From 2d7277ed6d780863cd4823edbf1a0a844c869d16 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Sat, 7 Feb 2026 12:37:28 -0800 Subject: [PATCH 13/14] updated lock file --- ts/pnpm-lock.yaml | 363 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 297 insertions(+), 66 deletions(-) diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 15dc5efb0f..12c4a05b16 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -203,6 +203,9 @@ importers: memory-storage: specifier: workspace:* version: link:../../packages/memory/storage + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry textpro: specifier: workspace:* version: link:../../packages/textPro @@ -575,6 +578,9 @@ importers: interactive-app: specifier: workspace:* version: link:../../packages/interactiveApp + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -772,6 +778,9 @@ importers: fastest-levenshtein: specifier: ^1.0.16 version: 1.0.16 + telemetry: + specifier: workspace:* + version: link:../../packages/telemetry typeagent: specifier: workspace:* version: link:../../packages/typeagent @@ -1642,6 +1651,9 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry websocket-utils: specifier: workspace:* version: link:../../utils/webSocketUtils @@ -1954,6 +1966,9 @@ importers: prosemirror-view: specifier: ^1.31.0 version: 1.40.0 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2415,9 +2430,6 @@ importers: debug: specifier: ^4.4.0 version: 4.4.1 - telemetry: - specifier: workspace:* - version: link:../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -2765,6 +2777,9 @@ importers: open: specifier: ^10.1.0 version: 10.1.2 + telemetry: + specifier: workspace:* + version: link:../telemetry ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) @@ -3149,6 +3164,9 @@ importers: '@azure/ai-projects': specifier: ^1.0.0-beta.8 version: 1.0.0-beta.8(ws@8.18.2)(zod@4.1.13) + '@azure/cosmos': + specifier: ^4.2.1 + version: 4.9.1(@azure/core-client@1.9.2) '@azure/identity': specifier: ^4.10.0 version: 4.10.0 @@ -4000,8 +4018,8 @@ importers: specifier: ^37.4.0 version: 37.4.0 electron-builder: - specifier: ^26.3.1 - version: 26.3.1(electron-builder-squirrel-windows@26.3.1) + specifier: ^26.7.0 + version: 26.7.0(electron-builder-squirrel-windows@26.3.1) electron-vite: specifier: ^4.0.1 version: 4.0.1(vite@6.4.1(@types/node@22.15.18)(jiti@2.5.1)(less@4.3.0)(terser@5.39.2)(yaml@2.7.0)) @@ -4245,6 +4263,9 @@ importers: exifreader: specifier: ^4.30.1 version: 4.30.1 + telemetry: + specifier: workspace:* + version: link:../../telemetry typechat: specifier: ^0.1.1 version: 0.1.1(typescript@5.4.5)(zod@3.25.76) @@ -4595,6 +4616,13 @@ packages: resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} engines: {node: '>=18.0.0'} + '@azure/core-http-compat@2.3.2': + resolution: {integrity: sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@azure/core-client': ^1.10.0 + '@azure/core-rest-pipeline': ^1.22.0 + '@azure/core-lro@2.7.2': resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} engines: {node: '>=18.0.0'} @@ -4627,6 +4655,10 @@ packages: resolution: {integrity: sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ==} engines: {node: '>=18.0.0'} + '@azure/cosmos@4.9.1': + resolution: {integrity: sha512-fPnfL4JsmJJ/jEYUhlznKfrEr2pMvJwBncGVcUC2Xi7Nlj0MrUMRE+UOrptl/lRV2W7l68Br+b9Ikzm0KiZZHg==} + engines: {node: '>=20.0.0'} + '@azure/identity-cache-persistence@1.2.0': resolution: {integrity: sha512-ZYr6iiE6d/Tkt4jck0cQv9grZ1BR4u5LXJmB1vblU/WGIHspO6Bv3TJMvQat2sQSOG4Wz7busgg0pajP4gNJzA==} engines: {node: '>=18.0.0'} @@ -4635,6 +4667,14 @@ packages: resolution: {integrity: sha512-iT53Sre2NJK6wzMWnvpjNiR3md597LZ3uK/5kQD2TkrY9vqhrY5bt2KwELNjkOWQ9n8S/92knj/QEykTtjMNqQ==} engines: {node: '>=18.0.0'} + '@azure/keyvault-common@2.0.0': + resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-keys@4.10.0': + resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} + engines: {node: '>=18.0.0'} + '@azure/logger@1.2.0': resolution: {integrity: sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==} engines: {node: '>=18.0.0'} @@ -5054,6 +5094,10 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + '@electron/notarize@2.5.0': resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} @@ -5068,6 +5112,11 @@ packages: engines: {node: '>=22.12.0'} hasBin: true + '@electron/rebuild@4.0.3': + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} + engines: {node: '>=22.12.0'} + hasBin: true + '@electron/universal@2.0.3': resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} engines: {node: '>=16.4'} @@ -7594,6 +7643,13 @@ packages: dmg-builder: 26.3.1 electron-builder-squirrel-windows: 26.3.1 + app-builder-lib@26.7.0: + resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.7.0 + electron-builder-squirrel-windows: 26.7.0 + archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -7899,6 +7955,9 @@ packages: builder-util@26.3.1: resolution: {integrity: sha512-pplZEYBx1g15qvIOshpR1WTwjAwQM4ukhGgSNdYPnbuM6wLePq3+njy1sGfekCrJmUP+2xfuwuT9zEoUWfX5zQ==} + builder-util@26.4.1: + resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -8802,8 +8861,8 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@26.3.1: - resolution: {integrity: sha512-hYOlXCqmBxFXz8TZrAGm/Ym5ji+/Am5sgQaT+yZ/VULb9O+E7Lr1Z0HFnKk8GaaYfULV8PDVCYO4/bpQyb+BSg==} + dmg-builder@26.7.0: + resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -8887,14 +8946,17 @@ packages: electron-builder-squirrel-windows@26.3.1: resolution: {integrity: sha512-WY0INnhIqy1TaMPK7sC9bD8/kdwE//e5CYN783ZqVgUdrMb9QgC4MUu4adiSDQzc4Om9InQaN9v/jS4OlmeV5g==} - electron-builder@26.3.1: - resolution: {integrity: sha512-e8utkPlf+VF94KX1M6/qZqCXsQMLKEASg+DNO5JWLtPZeKkvXS9Oyac8hb6HelvlGzEP02N7IDX6UFGjmvV66g==} + electron-builder@26.7.0: + resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@26.3.1: resolution: {integrity: sha512-XYGYL/fpQULLW9slTVPelaUOGlKfOTmV2Uda3K+qzFzvNnkGJCj7L0nLVvMuj5cgxpAX+3BhO5HOUb4rv6jikA==} + electron-publish@26.6.0: + resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==} + electron-to-chromium@1.5.155: resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} @@ -9342,6 +9404,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -9373,10 +9439,6 @@ packages: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - fs-extra@11.3.3: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} @@ -9727,9 +9789,6 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -11799,6 +11858,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + priorityqueuejs@2.0.0: + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -12357,6 +12419,10 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} + semaphore@1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -12825,10 +12891,9 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar 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 - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} - deprecated: Old versions of tar 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 temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -14532,6 +14597,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/core-http-compat@2.3.2(@azure/core-client@1.9.2)(@azure/core-rest-pipeline@1.20.0)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-lro@2.7.2': dependencies: '@azure/abort-controller': 2.1.2 @@ -14584,6 +14655,23 @@ snapshots: fast-xml-parser: 4.5.3 tslib: 2.8.1 + '@azure/cosmos@4.9.1(@azure/core-client@1.9.2)': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-keys': 4.10.0(@azure/core-client@1.9.2) + '@azure/logger': 1.2.0 + fast-json-stable-stringify: 2.1.0 + priorityqueuejs: 2.0.0 + semaphore: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@azure/identity-cache-persistence@1.2.0': dependencies: '@azure/core-auth': 1.9.0 @@ -14611,6 +14699,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@azure/keyvault-common@2.0.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.10.0(@azure/core-client@1.9.2)': + dependencies: + '@azure-rest/core-client': 2.4.0 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-http-compat': 2.3.2(@azure/core-client@1.9.2)(@azure/core-rest-pipeline@1.20.0) + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-common': 2.0.0 + '@azure/logger': 1.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@azure/core-client' + - supports-color + '@azure/logger@1.2.0': dependencies: '@typespec/ts-http-runtime': 0.2.2 @@ -15269,6 +15388,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + '@electron/notarize@2.5.0': dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -15301,19 +15434,37 @@ snapshots: node-gyp: 11.5.0 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color + '@electron/rebuild@4.0.3': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + detect-libc: 2.0.3 + got: 11.8.6 + graceful-fs: 4.2.11 + node-abi: 4.24.0 + node-api-version: 0.2.1 + node-gyp: 11.5.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.3 + tar: 7.5.7 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@electron/universal@2.0.3': dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) dir-compare: 4.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.3 minimatch: 9.0.5 plist: 3.1.0 transitivePeerDependencies: @@ -15510,7 +15661,7 @@ snapshots: '@oclif/plugin-commands': 4.1.21 '@oclif/plugin-help': 6.2.26 '@oclif/plugin-not-found': 3.2.65(@types/node@20.19.23) - semver: 7.7.2 + semver: 7.7.3 table: 6.9.0 transitivePeerDependencies: - '@types/node' @@ -16200,7 +16351,7 @@ snapshots: dependencies: debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 - lodash: 4.17.21 + lodash: 4.17.23 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color @@ -16682,7 +16833,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@oclif/core@4.5.2': dependencies: @@ -16739,7 +16890,7 @@ snapshots: dependencies: '@oclif/core': 4.8.0 '@oclif/table': 0.4.6 - lodash: 4.17.21 + lodash: 4.17.23 object-treeify: 4.0.1 transitivePeerDependencies: - bufferutil @@ -16848,7 +16999,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.13.2 require-in-the-middle: 7.5.2 - semver: 7.7.2 + semver: 7.7.3 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -17529,7 +17680,7 @@ snapshots: chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) js-yaml: 3.14.2 - lodash: 4.17.21 + lodash: 4.17.23 pluralize: 2.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 @@ -18537,7 +18688,7 @@ snapshots: app-builder-bin@5.0.0-alpha.12: {} - app-builder-lib@26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1): + app-builder-lib@26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): dependencies: '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 @@ -18554,11 +18705,11 @@ snapshots: chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3(supports-color@8.1.1) - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) dotenv: 16.5.0 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.3.1) + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) electron-publish: 26.3.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -18578,6 +18729,49 @@ snapshots: transitivePeerDependencies: - supports-color + app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.0.3 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3(supports-color@8.1.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) + dotenv: 16.5.0 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.3.1(dmg-builder@26.7.0) + electron-publish: 26.6.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.0 + jiti: 2.5.1 + js-yaml: 4.1.1 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.1.1 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.3 + tar: 7.5.7 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + archiver-utils@2.1.0: dependencies: glob: 7.2.3 @@ -18680,7 +18874,7 @@ snapshots: async@2.6.4: dependencies: - lodash: 4.17.21 + lodash: 4.17.23 async@3.2.6: {} @@ -18966,6 +19160,27 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util@26.4.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.12 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.1.1 + sanitize-filename: 1.6.3 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -19016,7 +19231,7 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 12.0.0 - tar: 7.5.2 + tar: 7.5.7 unique-filename: 4.0.0 cacheable-lookup@5.0.4: {} @@ -19025,7 +19240,7 @@ snapshots: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 @@ -19963,10 +20178,10 @@ snapshots: dependencies: path-type: 4.0.0 - dmg-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + dmg-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.1 @@ -20077,23 +20292,23 @@ snapshots: dependencies: jake: 10.8.7 - electron-builder-squirrel-windows@26.3.1(dmg-builder@26.3.1): + electron-builder-squirrel-windows@26.3.1(dmg-builder@26.7.0): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) + app-builder-lib: 26.3.1(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) builder-util: 26.3.1 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.3.1(electron-builder-squirrel-windows@26.3.1): + electron-builder@26.7.0(electron-builder-squirrel-windows@26.3.1): dependencies: - app-builder-lib: 26.3.1(dmg-builder@26.3.1)(electron-builder-squirrel-windows@26.3.1) - builder-util: 26.3.1 + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.3.1) + builder-util: 26.4.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 ci-info: 4.3.1 - dmg-builder: 26.3.1(electron-builder-squirrel-windows@26.3.1) + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.3.1) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -20115,6 +20330,19 @@ snapshots: transitivePeerDependencies: - supports-color + electron-publish@26.6.0: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + form-data: 4.0.5 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.155: {} electron-to-chromium@1.5.286: {} @@ -20726,6 +20954,14 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -20755,18 +20991,11 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 - optional: true fs-extra@7.0.1: dependencies: @@ -20934,7 +21163,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.2 + semver: 7.7.3 serialize-error: 7.0.1 optional: true @@ -21194,8 +21423,6 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 - http-cache-semantics@4.1.1: {} - http-cache-semantics@4.2.0: {} http-deceiver@1.2.7: {} @@ -21384,7 +21611,7 @@ snapshots: code-excerpt: 4.0.0 indent-string: 5.0.0 is-in-ci: 0.1.0 - lodash: 4.17.21 + lodash: 4.17.23 patch-console: 2.0.0 react: 18.3.1 react-reconciler: 0.29.2(react@18.3.1) @@ -21654,7 +21881,7 @@ snapshots: '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -22138,7 +22365,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -22359,7 +22586,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.7.3 jszip@3.10.1: dependencies: @@ -22688,7 +22915,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 make-error@1.3.6: {} @@ -23394,11 +23621,11 @@ snapshots: node-abi@3.77.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-abi@4.24.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-addon-api@1.7.2: optional: true @@ -23409,7 +23636,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-domexception@1.0.0: {} @@ -23450,8 +23677,8 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 - tar: 7.5.2 + semver: 7.7.3 + tar: 7.5.7 tinyglobby: 0.2.15 which: 5.0.0 transitivePeerDependencies: @@ -23490,7 +23717,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -23937,6 +24164,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.2.0 + priorityqueuejs@2.0.0: {} + prismjs@1.30.0: {} proc-log@5.0.0: {} @@ -24422,7 +24651,7 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.21 + lodash: 4.17.23 strip-ansi: 6.0.1 require-directory@2.1.1: {} @@ -24672,6 +24901,8 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.2 + semaphore@1.1.0: {} + semver-compare@1.0.0: optional: true @@ -24921,7 +25152,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 sisteransi@1.0.5: {} @@ -25282,7 +25513,7 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.5.2: + tar@7.5.7: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 From 3c52c5c004a1109bc261577be111743c75b734c3 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Sat, 7 Feb 2026 12:45:43 -0800 Subject: [PATCH 14/14] ling --- .../dispatcher/src/context/commandHandlerContext.ts | 8 +++----- .../dispatcher/src/translation/agentTranslators.ts | 10 ++++++++-- ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts | 9 +++------ ts/packages/telemetry/src/logger/databaseLoggerSink.ts | 9 ++++----- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts index 1f6fda34ad..e0f55ca250 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/commandHandlerContext.ts @@ -309,9 +309,7 @@ function getCosmosFactories(): PromptLoggerOptions { endpoint, aadCredentials: new DefaultAzureCredential(), }); - const container = client - .database(dbName) - .container(containerName); + const container = client.database(dbName).container(containerName); return { executeBulkOperations: (ops) => container.items.executeBulkOperations(ops as any), @@ -327,7 +325,8 @@ function getCosmosFactories(): PromptLoggerOptions { result.cosmosContainerFactory = cosmosContainerFactory; } if (cosmosPartitionKeyBuilderFactory !== undefined) { - result.cosmosPartitionKeyBuilderFactory = cosmosPartitionKeyBuilderFactory; + result.cosmosPartitionKeyBuilderFactory = + cosmosPartitionKeyBuilderFactory; } return result; } @@ -337,7 +336,6 @@ function getLoggerSink(isDbEnabled: () => boolean, clientIO: ClientIO) { let dbLoggerSink: LoggerSink | undefined; try { - const { cosmosContainerFactory, cosmosPartitionKeyBuilderFactory } = getCosmosFactories(); diff --git a/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts b/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts index 01c6e8a341..de51199e74 100644 --- a/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts +++ b/ts/packages/dispatcher/dispatcher/src/translation/agentTranslators.ts @@ -346,7 +346,10 @@ export function loadAgentJsonTranslator< ); // Collect schema name mapping. const schemaNameMap = collectSchemaName(actionConfigs, provider); - return createTypeAgentTranslator(validator, schemaNameMap, { model, promptLogger }); + return createTypeAgentTranslator(validator, schemaNameMap, { + model, + promptLogger, + }); } function createTypeAgentTranslator< @@ -453,7 +456,10 @@ export function createTypeAgentTranslatorForSelectedActions< definitions, actionConfig, ); - return createTypeAgentTranslator(validator, schemaNameMap, { model, promptLogger }); + return createTypeAgentTranslator(validator, schemaNameMap, { + model, + promptLogger, + }); } // For CLI, replicate the behavior of loadAgentJsonTranslator to get the schema diff --git a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts index 0153331708..4cc41c609d 100644 --- a/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/cosmosDBLoggerSink.ts @@ -36,11 +36,7 @@ class CosmosDBLoggerSink implements LoggerSink { ) {} public logEvent(event: LogEvent) { - if ( - this.endpoint && - !this.disabled && - this.isEnabled?.() !== false - ) { + if (this.endpoint && !this.disabled && this.isEnabled?.() !== false) { this.pendingEvents.push(event); if (this.timeout === undefined) { this.timeout = setTimeout(() => this.upload(), UPLOAD_DELAY); @@ -125,7 +121,8 @@ class CosmosDBLoggerSink implements LoggerSink { }, ); - const result = await container.executeBulkOperations(operations); + const result = + await container.executeBulkOperations(operations); debugCosmos( `Status: ${result[0].response?.statusCode}. ${operations.length} events uploaded`, ); diff --git a/ts/packages/telemetry/src/logger/databaseLoggerSink.ts b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts index e967aa5beb..cba58c6d32 100644 --- a/ts/packages/telemetry/src/logger/databaseLoggerSink.ts +++ b/ts/packages/telemetry/src/logger/databaseLoggerSink.ts @@ -1,10 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { - LoggerSink, - CosmosContainerClientFactory, -} from "./logger.js"; +import { LoggerSink, CosmosContainerClientFactory } from "./logger.js"; import { createMongoDBLoggerSink } from "./mongoLoggerSink.js"; import { createCosmosDBLoggerSink, @@ -26,7 +23,9 @@ export interface DatabaseLoggerSinkOptions { /** * Factory to create a Cosmos partition key builder. Required if using Cosmos DB. */ - cosmosPartitionKeyBuilderFactory?: CosmosPartitionKeyBuilderFactory | undefined; + cosmosPartitionKeyBuilderFactory?: + | CosmosPartitionKeyBuilderFactory + | undefined; } /**