@microsoft/agents-copilotstudio-client
Version:
Microsoft Copilot Studio Client for JavaScript. Copilot Studio Client.
4 lines • 852 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../agents-telemetry/src/utils/attempt.ts", "../../../agents-telemetry/src/observability/constants.ts", "../../../../node_modules/ms/index.js", "../../../../node_modules/debug/src/common.js", "../../../../node_modules/debug/src/browser.js", "../../../agents-telemetry/src/utils/platform.ts", "../../../agents-telemetry/src/loggers/base.ts", "../../../agents-telemetry/src/loggers/debug.ts", "../../../agents-telemetry/src/utils/setting.ts", "../../../agents-telemetry/src/observability/category.ts", "../../../agents-telemetry/src/utils/noop.ts", "../../../agents-telemetry/src/observability/trace.ts", "../../../agents-telemetry/src/observability/metric.ts", "../../../agents-telemetry/src/loggers/otel.ts", "../../../agents-telemetry/src/index.ts", "../../../../node_modules/@opentelemetry/api/src/platform/browser/globalThis.ts", "../../../../node_modules/@opentelemetry/api/src/platform/browser/index.ts", "../../../../node_modules/@opentelemetry/api/src/version.ts", "../../../../node_modules/@opentelemetry/api/src/internal/semver.ts", "../../../../node_modules/@opentelemetry/api/src/internal/global-utils.ts", "../../../../node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts", "../../../../node_modules/@opentelemetry/api/src/diag/types.ts", "../../../../node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts", "../../../../node_modules/@opentelemetry/api/src/api/diag.ts", "../../../../node_modules/@opentelemetry/api/src/baggage/internal/baggage-impl.ts", "../../../../node_modules/@opentelemetry/api/src/baggage/internal/symbol.ts", "../../../../node_modules/@opentelemetry/api/src/baggage/utils.ts", "../../../../node_modules/@opentelemetry/api/src/context/context.ts", "../../../../node_modules/@opentelemetry/api/src/diag/consoleLogger.ts", "../../../../node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts", "../../../../node_modules/@opentelemetry/api/src/metrics/Metric.ts", "../../../../node_modules/@opentelemetry/api/src/propagation/TextMapPropagator.ts", "../../../../node_modules/@opentelemetry/api/src/context/NoopContextManager.ts", "../../../../node_modules/@opentelemetry/api/src/api/context.ts", "../../../../node_modules/@opentelemetry/api/src/trace/trace_flags.ts", "../../../../node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts", "../../../../node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts", "../../../../node_modules/@opentelemetry/api/src/trace/context-utils.ts", "../../../../node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts", "../../../../node_modules/@opentelemetry/api/src/trace/NoopTracer.ts", "../../../../node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts", "../../../../node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts", "../../../../node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts", "../../../../node_modules/@opentelemetry/api/src/trace/SamplingResult.ts", "../../../../node_modules/@opentelemetry/api/src/trace/span_kind.ts", "../../../../node_modules/@opentelemetry/api/src/trace/status.ts", "../../../../node_modules/@opentelemetry/api/src/trace/internal/tracestate-validators.ts", "../../../../node_modules/@opentelemetry/api/src/trace/internal/tracestate-impl.ts", "../../../../node_modules/@opentelemetry/api/src/trace/internal/utils.ts", "../../../../node_modules/@opentelemetry/api/src/context-api.ts", "../../../../node_modules/@opentelemetry/api/src/diag-api.ts", "../../../../node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts", "../../../../node_modules/@opentelemetry/api/src/api/metrics.ts", "../../../../node_modules/@opentelemetry/api/src/metrics-api.ts", "../../../../node_modules/@opentelemetry/api/src/propagation/NoopTextMapPropagator.ts", "../../../../node_modules/@opentelemetry/api/src/baggage/context-helpers.ts", "../../../../node_modules/@opentelemetry/api/src/api/propagation.ts", "../../../../node_modules/@opentelemetry/api/src/propagation-api.ts", "../../../../node_modules/@opentelemetry/api/src/api/trace.ts", "../../../../node_modules/@opentelemetry/api/src/trace-api.ts", "../../../../node_modules/@opentelemetry/api/src/index.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/types/LogRecord.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/NoopLogger.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/internal/global-utils.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/NoopLoggerProvider.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/ProxyLogger.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/ProxyLoggerProvider.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/api/logs.ts", "../../../agents-telemetry/node_modules/@opentelemetry/api-logs/src/index.ts", "../../../agents-telemetry/src/index.cts", "../../../../node_modules/zod/v3/helpers/util.cjs", "../../../../node_modules/zod/v3/ZodError.cjs", "../../../../node_modules/zod/v3/locales/en.cjs", "../../../../node_modules/zod/v3/errors.cjs", "../../../../node_modules/zod/v3/helpers/parseUtil.cjs", "../../../../node_modules/zod/v3/helpers/typeAliases.cjs", "../../../../node_modules/zod/v3/helpers/errorUtil.cjs", "../../../../node_modules/zod/v3/types.cjs", "../../../../node_modules/zod/v3/external.cjs", "../../../../node_modules/zod/index.cjs", "../../../agents-activity/src/action/actionTypes.ts", "../../../agents-activity/src/action/semanticActionStateTypes.ts", "../../../agents-activity/src/attachment/attachmentLayoutTypes.ts", "../../../agents-activity/src/conversation/channels.ts", "../../../agents-activity/src/conversation/endOfConversationCodes.ts", "../../../agents-activity/src/conversation/membershipSourceTypes.ts", "../../../agents-activity/src/conversation/membershipTypes.ts", "../../../agents-activity/src/conversation/roleTypes.ts", "../../../agents-activity/src/entity/AIEntity.ts", "../../../agents-activity/src/invoke/adaptiveCardInvokeAction.ts", "../../../../node_modules/uuid/dist/cjs-browser/max.js", "../../../../node_modules/uuid/dist/cjs-browser/nil.js", "../../../../node_modules/uuid/dist/cjs-browser/regex.js", "../../../../node_modules/uuid/dist/cjs-browser/validate.js", "../../../../node_modules/uuid/dist/cjs-browser/parse.js", "../../../../node_modules/uuid/dist/cjs-browser/stringify.js", "../../../../node_modules/uuid/dist/cjs-browser/rng.js", "../../../../node_modules/uuid/dist/cjs-browser/v1.js", "../../../../node_modules/uuid/dist/cjs-browser/v1ToV6.js", "../../../../node_modules/uuid/dist/cjs-browser/md5.js", "../../../../node_modules/uuid/dist/cjs-browser/v35.js", "../../../../node_modules/uuid/dist/cjs-browser/v3.js", "../../../../node_modules/uuid/dist/cjs-browser/native.js", "../../../../node_modules/uuid/dist/cjs-browser/v4.js", "../../../../node_modules/uuid/dist/cjs-browser/sha1.js", "../../../../node_modules/uuid/dist/cjs-browser/v5.js", "../../../../node_modules/uuid/dist/cjs-browser/v6.js", "../../../../node_modules/uuid/dist/cjs-browser/v6ToV1.js", "../../../../node_modules/uuid/dist/cjs-browser/v7.js", "../../../../node_modules/uuid/dist/cjs-browser/version.js", "../../../../node_modules/uuid/dist/cjs-browser/index.js", "../../../agents-activity/src/entity/entity.ts", "../../../agents-activity/src/action/semanticAction.ts", "../../../agents-activity/src/action/cardAction.ts", "../../../agents-activity/src/action/suggestedActions.ts", "../../../agents-activity/src/activityEventNames.ts", "../../../agents-activity/src/activityImportance.ts", "../../../agents-activity/src/activityTypes.ts", "../../../agents-activity/src/attachment/attachment.ts", "../../../agents-activity/src/entity/productInfo.ts", "../../../agents-activity/src/conversation/channelAccount.ts", "../../../agents-activity/src/conversation/conversationAccount.ts", "../../../agents-activity/src/conversation/conversationReference.ts", "../../../agents-activity/src/deliveryModes.ts", "../../../agents-activity/src/inputHints.ts", "../../../agents-activity/src/messageReactionTypes.ts", "../../../agents-activity/src/messageReaction.ts", "../../../agents-activity/src/textFormatTypes.ts", "../../../agents-activity/src/textHighlight.ts", "../../../agents-activity/src/exceptionHelper.ts", "../../../agents-activity/src/errorHelper.ts", "../../../agents-activity/src/activity.ts", "../../../agents-activity/src/activityTreatments.ts", "../../../agents-activity/src/index.ts", "../../src/agentType.ts", "../../src/powerPlatformCloud.ts", "../../src/connectionSettings.ts", "../../../../node_modules/eventsource-parser/src/errors.ts", "../../../../node_modules/eventsource-parser/src/parse.ts", "../../../../node_modules/eventsource-client/src/constants.ts", "../../../../node_modules/eventsource-client/src/client.ts", "../../../../node_modules/eventsource-client/src/default.ts", "../../src/powerPlatformEnvironment.ts", "../../src/strategies/prebuiltBotStrategy.ts", "../../src/strategies/publishedBotStrategy.ts", "../../src/copilotStudioClient.ts", "../../src/executeTurnRequest.ts", "../../package.json", "../../src/browser/os.ts", "../../src/userAgentHelper.ts", "../../src/scopeHelper.ts", "../../src/responses.ts", "../../src/observability/metrics.ts", "../../src/observability/traces.ts", "../../../../node_modules/uuid/dist/esm-browser/stringify.js", "../../../../node_modules/uuid/dist/esm-browser/rng.js", "../../../../node_modules/uuid/dist/esm-browser/native.js", "../../../../node_modules/uuid/dist/esm-browser/v4.js", "../../src/copilotStudioWebChat.ts", "../../../../node_modules/tslib/tslib.es6.mjs", "../../../../node_modules/rxjs/src/internal/util/isFunction.ts", "../../../../node_modules/rxjs/src/internal/util/createErrorClass.ts", "../../../../node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "../../../../node_modules/rxjs/src/internal/util/arrRemove.ts", "../../../../node_modules/rxjs/src/internal/Subscription.ts", "../../../../node_modules/rxjs/src/internal/config.ts", "../../../../node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "../../../../node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "../../../../node_modules/rxjs/src/internal/util/noop.ts", "../../../../node_modules/rxjs/src/internal/NotificationFactories.ts", "../../../../node_modules/rxjs/src/internal/util/errorContext.ts", "../../../../node_modules/rxjs/src/internal/Subscriber.ts", "../../../../node_modules/rxjs/src/internal/symbol/observable.ts", "../../../../node_modules/rxjs/src/internal/util/identity.ts", "../../../../node_modules/rxjs/src/internal/util/pipe.ts", "../../../../node_modules/rxjs/src/internal/Observable.ts", "../../../../node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "../../../../node_modules/rxjs/src/internal/Subject.ts", "../../../../node_modules/rxjs/src/internal/BehaviorSubject.ts", "../../src/startRequest.ts"],
"sourcesContent": ["/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { AttemptOptions } from '../types.js'\n\n/**\n * Detects promise-like values returned by internal loaders and callbacks.\n */\nexport function isPromise<T> (value: T | Promise<T>): value is Promise<T> {\n return (\n (typeof value === 'object' || typeof value === 'function') &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n )\n}\n\ntype SwallowingAttemptOptions<TResult> = AttemptOptions<TResult, void>\ntype RethrowingAttemptOptions<TResult> = AttemptOptions<TResult, never>\n\n/**\n * Runs a callback and normalizes sync and async error/finally handling.\n *\n * @remarks\n * - If try succeeds, its result is returned.\n * - If try fails and catch is omitted, the original error is propagated.\n * - If try fails and catch throws, that error is propagated.\n * - If try fails and catch completes normally, the failure is treated as swallowed\n * and attempt returns or resolves to undefined.\n * - catch is side-effect only; any value it returns is ignored.\n * - Type narrowing is based on whether catch is omitted or its declared return type:\n * omitted or never means the error is rethrown, void means the error may be swallowed.\n * - finally runs once for both sync and async paths.\n */\nexport function attempt<TResult> (options: RethrowingAttemptOptions<TResult>): TResult\nexport function attempt<TResult> (options: RethrowingAttemptOptions<Promise<TResult>>): Promise<TResult>\nexport function attempt<TResult> (options: SwallowingAttemptOptions<TResult>): TResult | undefined\nexport function attempt<TResult> (options: SwallowingAttemptOptions<Promise<TResult>>): Promise<TResult | undefined>\nexport function attempt<TResult> (options: AttemptOptions<TResult, void | never>) {\n // Note: order of overloads ensures correct typing.\n let isAsync = false\n try {\n const result = options.try()\n\n if (isPromise(result)) {\n isAsync = true\n return result\n .catch(error => {\n if (!options.catch) {\n throw error\n }\n const result = options.catch?.(error)\n if (isPromise(result)) {\n return result.then(() => undefined)\n }\n return undefined\n })\n .finally(options.finally)\n }\n\n return result\n } catch (error) {\n if (!options.catch) {\n throw error\n }\n options.catch(error)\n return undefined\n } finally {\n !isAsync && options.finally?.()\n }\n}\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Environment variable or configuration setting name for disabling spans by category in the Agents SDK telemetry. The value should be comma-separated or whitespace-separated list of span categories to disable. See `SpanCategories` for available categories.\n */\nexport const AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES = 'AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES'\n\n/**\n * Categories of spans used for telemetry in the Agents SDK. Spans can be disabled by category using the `AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES` environment variable or configuration setting.\n */\nexport const SpanCategories = {\n STORAGE: ['STORAGE_'],\n AUTHORIZATION: ['AUTHORIZATION_', 'USER_TOKEN_CLIENT_'],\n AUTHENTICATION: ['AUTHENTICATION_'],\n DIALOGS: ['DIALOGS_'],\n} as const\n\n/**\n * Span names used for telemetry in the Agents SDK.\n */\nexport const SpanNames = {\n // CloudAdapter / BaseAdapter\n ADAPTER_PROCESS: 'agents.adapter.process',\n ADAPTER_SEND_ACTIVITIES: 'agents.adapter.send_activities',\n ADAPTER_UPDATE_ACTIVITY: 'agents.adapter.update_activity',\n ADAPTER_DELETE_ACTIVITY: 'agents.adapter.delete_activity',\n ADAPTER_CONTINUE_CONVERSATION: 'agents.adapter.continue_conversation',\n ADAPTER_CREATE_CONNECTOR_CLIENT: 'agents.adapter.create_connector_client',\n ADAPTER_CREATE_USER_TOKEN_CLIENT: 'agents.adapter.create_user_token_client',\n\n // AgentApplication\n AGENTS_APP_RUN: 'agents.app.run',\n AGENTS_APP_ROUTE_HANDLER: 'agents.app.route_handler',\n AGENTS_APP_BEFORE_TURN: 'agents.app.before_turn',\n AGENTS_APP_AFTER_TURN: 'agents.app.after_turn',\n AGENTS_APP_DOWNLOAD_FILES: 'agents.app.download_files',\n\n // ConnectorClient\n CONNECTOR_SEND_TO_CONVERSATION: 'agents.connector.send_to_conversation',\n CONNECTOR_REPLY_TO_ACTIVITY: 'agents.connector.reply_to_activity',\n CONNECTOR_UPDATE_ACTIVITY: 'agents.connector.update_activity',\n CONNECTOR_DELETE_ACTIVITY: 'agents.connector.delete_activity',\n CONNECTOR_CREATE_CONVERSATION: 'agents.connector.create_conversation',\n CONNECTOR_GET_CONVERSATIONS: 'agents.connector.get_conversations',\n CONNECTOR_GET_CONVERSATION_MEMBER: 'agents.connector.get_conversation_member',\n CONNECTOR_UPLOAD_ATTACHMENT: 'agents.connector.upload_attachment',\n CONNECTOR_GET_ATTACHMENT: 'agents.connector.get_attachment',\n CONNECTOR_GET_ATTACHMENT_INFO: 'agents.connector.get_attachment_info',\n\n // Storage\n STORAGE_READ: 'agents.storage.read',\n STORAGE_WRITE: 'agents.storage.write',\n STORAGE_DELETE: 'agents.storage.delete',\n\n // AgentClient\n AGENT_CLIENT_POST_ACTIVITY: 'agents.agent_client.post_activity',\n\n // Authentication\n AUTHENTICATION_GET_ACCESS_TOKEN: 'agents.authentication.get_access_token',\n AUTHENTICATION_ACQUIRE_TOKEN_ON_BEHALF_OF: 'agents.authentication.acquire_token_on_behalf_of',\n AUTHENTICATION_GET_AGENTIC_INSTANCE_TOKEN: 'agents.authentication.get_agentic_instance_token',\n AUTHENTICATION_GET_AGENTIC_USER_TOKEN: 'agents.authentication.get_agentic_user_token',\n\n // Authorization\n AUTHORIZATION_AGENTIC_TOKEN: 'agents.authorization.agentic_token',\n AUTHORIZATION_AZURE_BOT_TOKEN: 'agents.authorization.azure_bot_token',\n AUTHORIZATION_AZURE_BOT_OBO_TOKEN: 'agents.authorization.azure_bot_obo_token',\n AUTHORIZATION_AZURE_BOT_SIGNIN: 'agents.authorization.azure_bot_signin',\n AUTHORIZATION_AZURE_BOT_SIGNOUT: 'agents.authorization.azure_bot_signout',\n\n // UserTokenClient\n USER_TOKEN_CLIENT_GET_USER_TOKEN: 'agents.user_token_client.get_user_token',\n USER_TOKEN_CLIENT_SIGN_OUT: 'agents.user_token_client.sign_out',\n USER_TOKEN_CLIENT_GET_SIGN_IN_RESOURCE: 'agents.user_token_client.get_sign_in_resource',\n USER_TOKEN_CLIENT_EXCHANGE_TOKEN: 'agents.user_token_client.exchange_token',\n USER_TOKEN_CLIENT_GET_TOKEN_OR_SIGN_IN_RESOURCE: 'agents.user_token_client.get_token_or_sign_in_resource',\n USER_TOKEN_CLIENT_GET_TOKEN_STATUS: 'agents.user_token_client.get_token_status',\n USER_TOKEN_CLIENT_GET_AAD_TOKENS: 'agents.user_token_client.get_aad_tokens',\n\n // Proactive\n PROACTIVE_STORE_CONVERSATION: 'agents.proactive.store_conversation',\n PROACTIVE_GET_CONVERSATION: 'agents.proactive.get_conversation',\n PROACTIVE_GET_CONVERSATION_OR_THROW: 'agents.proactive.get_conversation_or_throw',\n PROACTIVE_DELETE_CONVERSATION: 'agents.proactive.delete_conversation',\n PROACTIVE_SEND_ACTIVITY: 'agents.proactive.send_activity',\n PROACTIVE_CONTINUE_CONVERSATION: 'agents.proactive.continue_conversation',\n PROACTIVE_CREATE_CONVERSATION: 'agents.proactive.create_conversation',\n\n // TurnContext\n TURN_SEND_ACTIVITIES: 'agents.turn.send_activities',\n\n // Dialogs\n DIALOGS_RUN: 'agents.dialogs.run',\n DIALOGS_CONTEXT_BEGIN: 'agents.dialogs.context.begin',\n DIALOGS_CONTEXT_CONTINUE: 'agents.dialogs.context.continue',\n DIALOGS_CONTEXT_END: 'agents.dialogs.context.end',\n DIALOGS_CONTEXT_REPLACE: 'agents.dialogs.context.replace',\n DIALOGS_CONTEXT_CANCEL_ALL: 'agents.dialogs.context.cancel_all',\n\n // Copilot Studio Client\n COPILOT_START_CONVERSATION: 'agents.copilot_client.start_conversation',\n COPILOT_SEND_ACTIVITY: 'agents.copilot_client.send_activity',\n COPILOT_POST_REQUEST: 'agents.copilot_client.post_request',\n COPILOT_CREATE_CONNECTION: 'agents.copilot_client.webchat.create_connection',\n COPILOT_EXECUTE_STREAMING: 'agents.copilot_client.execute_streaming',\n COPILOT_SUBSCRIBE_ASYNC: 'agents.copilot_client.subscribe_async',\n} as const\n\n/**\n * Metric names used for telemetry in the Agents SDK.\n */\nexport const MetricNames = {\n // CloudAdapter\n ADAPTER_PROCESS_DURATION: 'agents.adapter.process.duration',\n\n // Hosting activity counters\n ACTIVITIES_RECEIVED: 'agents.activities.received',\n ACTIVITIES_SENT: 'agents.activities.sent',\n ACTIVITIES_UPDATED: 'agents.activities.updated',\n ACTIVITIES_DELETED: 'agents.activities.deleted',\n\n // Connector metrics\n CONNECTOR_REQUESTS: 'agents.connector.request.count',\n CONNECTOR_REQUEST_DURATION: 'agents.connector.request.duration',\n\n // AgentClient metrics\n AGENT_CLIENT_REQUESTS: 'agents.agent_client.request.count',\n AGENT_CLIENT_REQUEST_DURATION: 'agents.agent_client.request.duration',\n\n // Turn metrics\n TURNS_COUNT: 'agents.turn.count',\n TURNS_ERRORS: 'agents.turn.error.count',\n TURN_DURATION: 'agents.turn.duration',\n\n // Dialog metrics\n DIALOGS_CONTEXT_COUNT: 'agents.dialogs.context.count',\n DIALOGS_CONTEXT_DURATION: 'agents.dialogs.context.duration',\n\n // Storage metrics\n STORAGE_OPERATION_DURATION: 'agents.storage.operation.duration',\n\n // Authentication metrics\n AUTH_TOKEN_REQUEST_COUNT: 'agents.auth.token.request.count',\n AUTH_TOKEN_DURATION: 'agents.auth.token.duration',\n\n // UserTokenClient metrics\n USER_TOKEN_CLIENT_REQUESTS: 'agents.user_token_client.request.count',\n USER_TOKEN_CLIENT_REQUEST_DURATION: 'agents.user_token_client.request.duration',\n\n // Proactive\n PROACTIVE_OPERATION_COUNT: 'agents.proactive.operation.count',\n PROACTIVE_OPERATION_DURATION: 'agents.proactive.operation.duration',\n\n // Copilot Studio Client\n CSC_ACTIVITIES_RECEIVED: 'agents.copilot_client.activities.received',\n CSC_ACTIVITIES_SENT: 'agents.copilot_client.activities.sent',\n CSC_CONVERSATIONS_STARTED: 'agents.copilot_client.conversations.started',\n CSC_WEBCHAT_CONNECTIONS: 'agents.copilot_client.webchat.connection.count',\n CSC_REQUEST_COUNT: 'agents.copilot_client.request.count',\n CSC_REQUEST_ERRORS: 'agents.copilot_client.request.error.count',\n CSC_STREAM_DURATION: 'agents.copilot_client.stream.duration',\n CSC_REQUEST_DURATION: 'agents.copilot_client.request.duration',\n CSC_EXECUTE_STREAMING: 'agents.copilot_client.execute_streaming.count',\n CSC_SUBSCRIBE_ASYNC: 'agents.copilot_client.subscribe_async.count',\n CSC_SUBSCRIBE_EVENT: 'agents.copilot_client.subscribe_event.count',\n} as const\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Indicates whether the current runtime looks like a browser with DOM access.\n */\nexport const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Logger interface used by the Agents SDK telemetry surface.\n */\nexport interface Logger {\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n debug(message: string, ...args: any[]): void;\n}\n\n/**\n * Supported logger method names.\n */\nexport type LoggerLevel = keyof Logger\n\n/**\n * Ordered list of logger levels used when composing logger implementations.\n */\nexport const levels: LoggerLevel[] = ['info', 'warn', 'error', 'debug'] as const\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport createDebug from 'debug'\nimport { isBrowser } from '../utils/platform.js'\nimport { levels } from './base.js'\nimport type { LoggerLevel, Logger as BaseLogger } from './base.js'\n\ntype Logger = Record<LoggerLevel, createDebug.Debugger>\n\n/**\n * Creates a debug logger with the specified namespace and log levels. The logger will use different colors for each log level and will work in both Node.js and browser environments.\n */\nexport function createDebugLogger (namespace: string): Logger {\n return {\n info: createLogger(namespace, 'info'),\n warn: createLogger(namespace, 'warn'),\n error: createLogger(namespace, 'error'),\n debug: createLogger(namespace, 'debug'),\n }\n}\n\nconst colors = {\n node: {\n info: '2', // Green\n warn: '3', // Yellow\n error: '1', // Red\n debug: '4', // Blue\n },\n browser: {\n info: '#33CC99', // Green\n warn: '#CCCC33', // Yellow\n error: '#CC3366', // Red\n debug: '#0066FF', // Blue\n },\n\n}\n\nfunction createLogger (namespace: string, level: LoggerLevel): createDebug.Debugger {\n const logger = createDebug(`${namespace}:${level}`)\n\n if (isBrowser) {\n logger.color = colors.browser[level]\n } else {\n logger.color = colors.node[level]\n }\n\n return logger\n}\n\n/**\n * Links the debug logger with additional logger implementations.\n *\n * @remarks\n * - Linked loggers only receive messages when the corresponding debug namespace is enabled.\n */\nexport function link (debugLogger: Logger, ...loggers: BaseLogger[]): BaseLogger {\n return levels.reduce((acc, level) => {\n acc[level] = (message: string, ...args: any[]) => {\n if (!debugLogger[level].enabled) {\n return\n }\n debugLogger[level](message, ...args)\n for (const logger of loggers) {\n logger[level](message, ...args)\n }\n }\n return acc\n }, {} as BaseLogger)\n}\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { isBrowser } from './platform.js'\n\n/**\n * Reads a configuration setting from `localStorage` in the browser or `process.env` in Node.js.\n *\n * @remarks\n * - Browser storage access failures are ignored and treated as an empty value.\n */\nexport function getSetting (name:string) {\n if (isBrowser) {\n try {\n return window.localStorage.getItem(name) ?? ''\n } catch {\n // no-op\n }\n } else {\n return process.env[name] ?? ''\n }\n\n return ''\n}\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES, SpanCategories, SpanNames } from './constants.js'\nimport { createDebugLogger } from '../loggers/debug.js'\nimport type { SpanName } from '../types.js'\nimport { getSetting } from '../utils/setting.js'\n\nconst logger = createDebugLogger('agents:telemetry')\n\n/**\n * Resolves disabled spans once at module load time.\n *\n * @remarks\n * - Unknown categories are ignored and logged as warnings.\n * - Duplicate categories are de-duplicated by prefix before span names are expanded.\n */\nconst disabledSpans = (() => {\n const rawValue = getSetting(AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES).trim().toUpperCase()\n if (!rawValue) {\n return []\n }\n\n const envCategories = rawValue\n .split(/[\\s,]+/)\n .map((category) => category.trim())\n .filter(Boolean)\n\n const spanNames = Object.entries(SpanNames)\n\n const processed = new Set<string>()\n const result: SpanName[] = []\n for (const category of envCategories) {\n const prefixes = SpanCategories[category as keyof typeof SpanCategories]\n if (!prefixes) {\n logger.warn(`Invalid span category \"${category}\" in ${AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES}. Valid categories are: ${Object.keys(SpanCategories).join(', ')}`)\n continue\n }\n for (const prefix of prefixes) {\n if (processed.has(prefix)) {\n continue\n }\n processed.add(prefix)\n\n for (const [key, name] of spanNames) {\n if (key.startsWith(prefix)) {\n result.push(name)\n }\n }\n }\n }\n\n if (result.length > 0) {\n logger.debug('Disabled Span names:', result)\n }\n\n return result\n})()\n\n/**\n * Determines if a span is disabled based on its name and the `AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES` environment variable or configuration setting.\n * @param name The name of the span to check.\n * @returns A boolean indicating whether the span is disabled.\n */\nexport function isSpanDisabled (name: SpanName): boolean {\n if (disabledSpans.length === 0) {\n return false\n }\n\n const result = disabledSpans.includes(name)\n logger.debug(`Span \"${name}\" disabled:`, result)\n return result\n}\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { Metric, TraceCallback, TraceContext, TraceFunction, TraceManagedContext } from '../types.js'\n\nconst noopFn = () => {}\n\n/**\n * No-op trace implementation used when tracing is unavailable or disabled.\n */\nexport const noopTrace = function (target, callback) {\n return noopContext(callback)\n} as TraceFunction\n\nnoopTrace.define = definition => definition\n\n/**\n * No-op metric implementation used when the OTel metrics API is unavailable.\n */\nexport function noopMetric (): Metric {\n return {\n histogram: () => ({ record: noopFn }),\n counter: () => ({ add: noopFn }),\n }\n}\n\n/**\n * Creates a callback/manually-managed trace context that safely does nothing.\n */\nexport function noopContext<TRecord extends object, TActions extends object> (): TraceManagedContext<TRecord, TActions>\nexport function noopContext<TRecord extends object, TActions extends object, TReturn> (callback: TraceCallback<TRecord, TActions, TReturn>): TReturn\nexport function noopContext<TRecord extends object, TActions extends object, TReturn> (callback?: TraceCallback<TRecord, TActions, TReturn>): TraceManagedContext<TRecord, TActions> | TReturn {\n const actions = new Proxy({}, { get: () => noopFn }) as TActions\n const context: TraceContext<TRecord, TActions> = {\n record: noopFn,\n actions,\n }\n\n if (callback) {\n return callback(context)\n }\n\n const managedContext: TraceManagedContext<TRecord, TActions> = {\n record: context.record,\n actions: context.actions,\n end: noopFn,\n fail<T extends unknown> (error: T): T {\n return error\n },\n }\n\n return managedContext\n}\n", "/**\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type {\n Span,\n OTel,\n TraceDefinition,\n TraceFunction,\n TraceRecord,\n} from '../types.js'\nimport { attempt } from '../utils/attempt.js'\nimport { isSpanDisabled } from './category.js'\nimport { SpanNames } from './constants.js'\nimport { noopContext } from '../utils/noop.js'\n\n/**\n * Creates the trace helper bound to the package tracer.\n *\n * @remarks\n * - Only span names declared in `SpanNames` are accepted.\n * - Disabled span categories return a no-op context instead of creating a real span.\n */\nexport function traceFactory (otel: OTel) {\n const validSpanNames = new Set(Object.values(SpanNames))\n const tracer = otel.trace.getTracer('@microsoft/agents-telemetry')\n\n const trace = function trace (target, callback) {\n if (!target) {\n throw new Error('Trace definition is required')\n }\n\n if (!validSpanNames.has(target.name)) {\n throw new Error(`Unrecognized span name \"${target.name}\". See SpanNames constants.`)\n }\n\n if (isSpanDisabled(target.name)) {\n return noopContext(callback)\n }\n\n const record = createRecord(target)\n\n if (!callback) {\n // TODO: if parent/child span connections are needed, we could expose a 'child' function that internally connects them.\n const span = tracer.startSpan(target.name)\n const flow = start(otel, target, span, record)\n\n return {\n record: flow.record,\n actions: flow.actions,\n fail: flow.fail,\n end: flow.end\n }\n }\n\n return tracer.startActiveSpan(target.name, span => {\n const flow = start(otel, target, span, record)\n return attempt({\n try: () => callback({ record: flow.record, actions: flow.actions }),\n catch: (error) => { throw flow.fail(error) },\n finally: flow.end\n })\n })\n } as TraceFunction\n\n trace.define = definition => definition\n\n return trace\n}\n\n/**\n * Creates the mutable record stored for a trace execution.\n *\n * @remarks\n * - Updates use `Object.assign`, so nested objects are replaced rather than deeply merged.\n */\nfunction createRecord<TRecord extends object, TActions extends object> (target: TraceDefinition<TRecord, TActions>): TraceRecord<TRecord> {\n const state: Partial<TRecord> = target.record ? { ...target.record } : {}\n\n return {\n set (values) {\n // TODO: use deep-merge strategy for Object and Array\n Object.assign(state, values)\n },\n get () {\n return state as Readonly<TRecord>\n }\n }\n}\n\n/**\n * Initializes a trace execution and returns the action helpers plus end/fail controls.\n */\nfunction start<TRecord extends object, TActions extends object> (\n otel: OTel,\n target: TraceDefinition<TRecord, TActions>,\n span: Span,\n record: TraceRecord<TRecord>\n) {\n const start = performance.now()\n let ended = false\n let _error: unknown\n\n return {\n record: record.set,\n actions: target.actions?.({ span }) ?? {} as TActions,\n fail<T extends unknown>(error: T): T {\n _error = error\n return error\n },\n end () {\n if (ended || !otel) {\n