@amplitude/ai 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # AGENTS.md
2
2
 
3
- Package: `@amplitude/ai` v0.3.1
3
+ Package: `@amplitude/ai` v0.3.3
4
4
 
5
5
  ## Install
6
6
 
package/README.md CHANGED
@@ -413,7 +413,7 @@ const agent = ai.agent('support-bot', {
413
413
  });
414
414
  ```
415
415
 
416
- Child agents inherit context (including `description`) from their parent and automatically set `parentAgentId`:
416
+ Child agents inherit context from their parent and automatically set `parentAgentId` (note: `description` is agent-specific and is **not** inherited — pass it explicitly if needed):
417
417
 
418
418
  ```typescript
419
419
  const orchestrator = ai.agent('orchestrator', {
@@ -1 +1 @@
1
- {"version":3,"file":"bound-agent.d.ts","names":[],"sources":["../src/bound-agent.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"bound-agent.d.ts","names":[],"sources":["../src/bound-agent.ts"],"sourcesContent":[],"mappings":"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"}
@@ -48,7 +48,6 @@ var BoundAgent = class BoundAgent {
48
48
  env: this._defaults.env,
49
49
  customerOrgId: this._defaults.customerOrgId,
50
50
  agentVersion: this._defaults.agentVersion,
51
- description: this._defaults.description,
52
51
  sessionId: this._defaults.sessionId,
53
52
  traceId: this._defaults.traceId,
54
53
  groups: this._defaults.groups,
@@ -1 +1 @@
1
- {"version":3,"file":"bound-agent.js","names":["inherited: Record<string, unknown>"],"sources":["../src/bound-agent.ts"],"sourcesContent":["/**\n * BoundAgent — agent with pre-bound defaults for tracking context fields.\n *\n * Created via `ai.agent(agentId, opts)`. All tracking calls\n * automatically inherit agentId, userId, env, and other defaults.\n */\n\nimport type { AmplitudeAI } from './client.js';\nimport type { SessionEnrichments } from './core/enrichments.js';\nimport { PROP_SESSION_REPLAY_ID } from './core/tracking.js';\nimport { Session } from './session.js';\n\nexport type UserMessageOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackUserMessage']>[0], 'content'>\n>;\n\nexport type AiMessageOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackAiMessage']>[0],\n 'content' | 'model' | 'provider' | 'latencyMs'\n >\n>;\n\nexport type ToolCallOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackToolCall']>[0],\n 'toolName' | 'latencyMs' | 'success'\n >\n>;\n\nexport type EmbeddingOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackEmbedding']>[0],\n 'model' | 'provider' | 'latencyMs'\n >\n>;\n\nexport type SpanOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackSpan']>[0], 'spanName' | 'latencyMs'>\n>;\n\nexport type SessionEndOpts = Partial<\n Parameters<AmplitudeAI['trackSessionEnd']>[0]\n>;\n\nexport type SessionEnrichmentOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackSessionEnrichment']>[0], 'enrichments'>\n>;\n\nexport type ScoreOpts = Partial<\n Omit<Parameters<AmplitudeAI['score']>[0], 'name' | 'value' | 'targetId'>\n>;\n\nconst CONTEXT_FIELDS = [\n 'userId',\n 'agentId',\n 'parentAgentId',\n 'customerOrgId',\n 'agentVersion',\n 'description',\n 'context',\n 'env',\n 'sessionId',\n 'traceId',\n 'groups',\n] as const;\n\nexport interface AgentOptions {\n userId?: string | null;\n parentAgentId?: string | null;\n customerOrgId?: string | null;\n agentVersion?: string | null;\n description?: string | null;\n context?: Record<string, unknown> | null;\n env?: string | null;\n sessionId?: string | null;\n traceId?: string | null;\n groups?: Record<string, unknown> | null;\n deviceId?: string | null;\n browserSessionId?: string | null;\n}\n\nexport class BoundAgent {\n readonly _ai: AmplitudeAI;\n readonly _defaults: Record<string, unknown>;\n\n constructor(\n ai: AmplitudeAI,\n opts: AgentOptions & { agentId: string },\n ) {\n this._ai = ai;\n this._defaults = {\n userId: opts.userId ?? null,\n agentId: opts.agentId,\n parentAgentId: opts.parentAgentId ?? null,\n customerOrgId: opts.customerOrgId ?? null,\n agentVersion: opts.agentVersion ?? null,\n description: opts.description ?? null,\n context: opts.context ?? null,\n env: opts.env ?? null,\n sessionId: opts.sessionId ?? null,\n traceId: opts.traceId ?? null,\n groups: opts.groups ?? null,\n deviceId: opts.deviceId ?? null,\n browserSessionId: opts.browserSessionId ?? null,\n };\n }\n\n get agentId(): string {\n return String(this._defaults.agentId);\n }\n\n get ai(): AmplitudeAI {\n return this._ai;\n }\n\n child(agentId: string, overrides: AgentOptions = {}): BoundAgent {\n const inherited: Record<string, unknown> = {\n userId: this._defaults.userId,\n env: this._defaults.env,\n customerOrgId: this._defaults.customerOrgId,\n agentVersion: this._defaults.agentVersion,\n description: this._defaults.description,\n sessionId: this._defaults.sessionId,\n traceId: this._defaults.traceId,\n groups: this._defaults.groups,\n deviceId: this._defaults.deviceId,\n browserSessionId: this._defaults.browserSessionId,\n };\n\n const parentCtx = this._defaults.context as Record<string, unknown> | null;\n const childCtx = overrides.context ?? null;\n const overrideEntries = Object.entries(overrides).filter(\n ([k]) => k !== 'context',\n );\n if (parentCtx || childCtx) {\n const merged = { ...(parentCtx ?? {}) };\n if (childCtx) Object.assign(merged, childCtx);\n inherited.context = merged;\n }\n\n for (const [k, v] of overrideEntries) {\n if (v != null) inherited[k] = v;\n }\n\n const { parentAgentId: inheritedParentAgentId, ...inheritedWithoutParent } =\n inherited;\n const explicitParent =\n (inheritedParentAgentId as string | null) ??\n (this._defaults.agentId as string);\n\n return new BoundAgent(this._ai, {\n agentId,\n parentAgentId: explicitParent,\n ...(inheritedWithoutParent as Record<string, string | null>),\n });\n }\n\n private _merge<T extends Record<string, unknown>>(\n kwargs: T,\n fields: readonly string[] = CONTEXT_FIELDS,\n ): T {\n const merged = { ...kwargs } as Record<string, unknown>;\n for (const field of fields) {\n if (merged[field] == null && this._defaults[field] != null) {\n merged[field] = this._defaults[field];\n }\n }\n const deviceId = this._defaults.deviceId as string | null;\n const browserSessionId = this._defaults.browserSessionId as string | null;\n if (deviceId && browserSessionId) {\n const existingEp = merged.eventProperties as\n | Record<string, unknown>\n | undefined;\n const ep = existingEp != null ? { ...existingEp } : {};\n if (!(PROP_SESSION_REPLAY_ID in ep)) {\n ep[PROP_SESSION_REPLAY_ID] = `${deviceId}/${browserSessionId}`;\n merged.eventProperties = ep;\n }\n }\n return merged as T;\n }\n\n trackUserMessage(content: string, opts: UserMessageOpts = {}): string {\n return this._ai.trackUserMessage({\n ...this._merge(opts),\n content,\n } as Parameters<AmplitudeAI['trackUserMessage']>[0]);\n }\n\n trackAiMessage(\n content: string,\n model: string,\n provider: string,\n latencyMs: number,\n opts: AiMessageOpts = {},\n ): string {\n return this._ai.trackAiMessage({\n ...this._merge(opts),\n content,\n model,\n provider,\n latencyMs,\n } as Parameters<AmplitudeAI['trackAiMessage']>[0]);\n }\n\n trackToolCall(\n toolName: string,\n latencyMs: number,\n success: boolean,\n opts: ToolCallOpts = {},\n ): string {\n return this._ai.trackToolCall({\n ...this._merge(opts),\n toolName,\n latencyMs,\n success,\n } as Parameters<AmplitudeAI['trackToolCall']>[0]);\n }\n\n trackEmbedding(\n model: string,\n provider: string,\n latencyMs: number,\n opts: EmbeddingOpts = {},\n ): string {\n return this._ai.trackEmbedding({\n ...this._merge(opts),\n model,\n provider,\n latencyMs,\n } as Parameters<AmplitudeAI['trackEmbedding']>[0]);\n }\n\n trackSpan(spanName: string, latencyMs: number, opts: SpanOpts = {}): string {\n return this._ai.trackSpan({\n ...this._merge(opts),\n spanName,\n latencyMs,\n } as Parameters<AmplitudeAI['trackSpan']>[0]);\n }\n\n trackSessionEnd(opts: SessionEndOpts = {}): void {\n this._ai.trackSessionEnd(\n this._merge(opts) as Parameters<AmplitudeAI['trackSessionEnd']>[0],\n );\n }\n\n trackSessionEnrichment(\n enrichments: SessionEnrichments,\n opts: SessionEnrichmentOpts = {},\n ): void {\n this._ai.trackSessionEnrichment({\n ...this._merge(opts),\n enrichments,\n } as Parameters<AmplitudeAI['trackSessionEnrichment']>[0]);\n }\n\n score(\n name: string,\n value: number,\n targetId: string,\n opts: ScoreOpts = {},\n ): void {\n this._ai.score({\n ...this._merge(opts),\n name,\n value,\n targetId,\n } as Parameters<AmplitudeAI['score']>[0]);\n }\n\n session(\n opts: {\n sessionId?: string | null;\n idleTimeoutMinutes?: number | null;\n userId?: string | null;\n deviceId?: string | null;\n browserSessionId?: string | null;\n autoFlush?: boolean;\n } = {},\n ): Session {\n return new Session(this, opts);\n }\n\n flush(): unknown {\n return this._ai.flush();\n }\n\n shutdown(): void {\n this._ai.shutdown();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bound-agent.js","names":["inherited: Record<string, unknown>"],"sources":["../src/bound-agent.ts"],"sourcesContent":["/**\n * BoundAgent — agent with pre-bound defaults for tracking context fields.\n *\n * Created via `ai.agent(agentId, opts)`. All tracking calls\n * automatically inherit agentId, userId, env, and other defaults.\n */\n\nimport type { AmplitudeAI } from './client.js';\nimport type { SessionEnrichments } from './core/enrichments.js';\nimport { PROP_SESSION_REPLAY_ID } from './core/tracking.js';\nimport { Session } from './session.js';\n\nexport type UserMessageOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackUserMessage']>[0], 'content'>\n>;\n\nexport type AiMessageOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackAiMessage']>[0],\n 'content' | 'model' | 'provider' | 'latencyMs'\n >\n>;\n\nexport type ToolCallOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackToolCall']>[0],\n 'toolName' | 'latencyMs' | 'success'\n >\n>;\n\nexport type EmbeddingOpts = Partial<\n Omit<\n Parameters<AmplitudeAI['trackEmbedding']>[0],\n 'model' | 'provider' | 'latencyMs'\n >\n>;\n\nexport type SpanOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackSpan']>[0], 'spanName' | 'latencyMs'>\n>;\n\nexport type SessionEndOpts = Partial<\n Parameters<AmplitudeAI['trackSessionEnd']>[0]\n>;\n\nexport type SessionEnrichmentOpts = Partial<\n Omit<Parameters<AmplitudeAI['trackSessionEnrichment']>[0], 'enrichments'>\n>;\n\nexport type ScoreOpts = Partial<\n Omit<Parameters<AmplitudeAI['score']>[0], 'name' | 'value' | 'targetId'>\n>;\n\nconst CONTEXT_FIELDS = [\n 'userId',\n 'agentId',\n 'parentAgentId',\n 'customerOrgId',\n 'agentVersion',\n 'description',\n 'context',\n 'env',\n 'sessionId',\n 'traceId',\n 'groups',\n] as const;\n\nexport interface AgentOptions {\n userId?: string | null;\n parentAgentId?: string | null;\n customerOrgId?: string | null;\n agentVersion?: string | null;\n description?: string | null;\n context?: Record<string, unknown> | null;\n env?: string | null;\n sessionId?: string | null;\n traceId?: string | null;\n groups?: Record<string, unknown> | null;\n deviceId?: string | null;\n browserSessionId?: string | null;\n}\n\nexport class BoundAgent {\n readonly _ai: AmplitudeAI;\n readonly _defaults: Record<string, unknown>;\n\n constructor(\n ai: AmplitudeAI,\n opts: AgentOptions & { agentId: string },\n ) {\n this._ai = ai;\n this._defaults = {\n userId: opts.userId ?? null,\n agentId: opts.agentId,\n parentAgentId: opts.parentAgentId ?? null,\n customerOrgId: opts.customerOrgId ?? null,\n agentVersion: opts.agentVersion ?? null,\n description: opts.description ?? null,\n context: opts.context ?? null,\n env: opts.env ?? null,\n sessionId: opts.sessionId ?? null,\n traceId: opts.traceId ?? null,\n groups: opts.groups ?? null,\n deviceId: opts.deviceId ?? null,\n browserSessionId: opts.browserSessionId ?? null,\n };\n }\n\n get agentId(): string {\n return String(this._defaults.agentId);\n }\n\n get ai(): AmplitudeAI {\n return this._ai;\n }\n\n child(agentId: string, overrides: AgentOptions = {}): BoundAgent {\n const inherited: Record<string, unknown> = {\n userId: this._defaults.userId,\n env: this._defaults.env,\n customerOrgId: this._defaults.customerOrgId,\n agentVersion: this._defaults.agentVersion,\n sessionId: this._defaults.sessionId,\n traceId: this._defaults.traceId,\n groups: this._defaults.groups,\n deviceId: this._defaults.deviceId,\n browserSessionId: this._defaults.browserSessionId,\n };\n\n const parentCtx = this._defaults.context as Record<string, unknown> | null;\n const childCtx = overrides.context ?? null;\n const overrideEntries = Object.entries(overrides).filter(\n ([k]) => k !== 'context',\n );\n if (parentCtx || childCtx) {\n const merged = { ...(parentCtx ?? {}) };\n if (childCtx) Object.assign(merged, childCtx);\n inherited.context = merged;\n }\n\n for (const [k, v] of overrideEntries) {\n if (v != null) inherited[k] = v;\n }\n\n const { parentAgentId: inheritedParentAgentId, ...inheritedWithoutParent } =\n inherited;\n const explicitParent =\n (inheritedParentAgentId as string | null) ??\n (this._defaults.agentId as string);\n\n return new BoundAgent(this._ai, {\n agentId,\n parentAgentId: explicitParent,\n ...(inheritedWithoutParent as Record<string, string | null>),\n });\n }\n\n private _merge<T extends Record<string, unknown>>(\n kwargs: T,\n fields: readonly string[] = CONTEXT_FIELDS,\n ): T {\n const merged = { ...kwargs } as Record<string, unknown>;\n for (const field of fields) {\n if (merged[field] == null && this._defaults[field] != null) {\n merged[field] = this._defaults[field];\n }\n }\n const deviceId = this._defaults.deviceId as string | null;\n const browserSessionId = this._defaults.browserSessionId as string | null;\n if (deviceId && browserSessionId) {\n const existingEp = merged.eventProperties as\n | Record<string, unknown>\n | undefined;\n const ep = existingEp != null ? { ...existingEp } : {};\n if (!(PROP_SESSION_REPLAY_ID in ep)) {\n ep[PROP_SESSION_REPLAY_ID] = `${deviceId}/${browserSessionId}`;\n merged.eventProperties = ep;\n }\n }\n return merged as T;\n }\n\n trackUserMessage(content: string, opts: UserMessageOpts = {}): string {\n return this._ai.trackUserMessage({\n ...this._merge(opts),\n content,\n } as Parameters<AmplitudeAI['trackUserMessage']>[0]);\n }\n\n trackAiMessage(\n content: string,\n model: string,\n provider: string,\n latencyMs: number,\n opts: AiMessageOpts = {},\n ): string {\n return this._ai.trackAiMessage({\n ...this._merge(opts),\n content,\n model,\n provider,\n latencyMs,\n } as Parameters<AmplitudeAI['trackAiMessage']>[0]);\n }\n\n trackToolCall(\n toolName: string,\n latencyMs: number,\n success: boolean,\n opts: ToolCallOpts = {},\n ): string {\n return this._ai.trackToolCall({\n ...this._merge(opts),\n toolName,\n latencyMs,\n success,\n } as Parameters<AmplitudeAI['trackToolCall']>[0]);\n }\n\n trackEmbedding(\n model: string,\n provider: string,\n latencyMs: number,\n opts: EmbeddingOpts = {},\n ): string {\n return this._ai.trackEmbedding({\n ...this._merge(opts),\n model,\n provider,\n latencyMs,\n } as Parameters<AmplitudeAI['trackEmbedding']>[0]);\n }\n\n trackSpan(spanName: string, latencyMs: number, opts: SpanOpts = {}): string {\n return this._ai.trackSpan({\n ...this._merge(opts),\n spanName,\n latencyMs,\n } as Parameters<AmplitudeAI['trackSpan']>[0]);\n }\n\n trackSessionEnd(opts: SessionEndOpts = {}): void {\n this._ai.trackSessionEnd(\n this._merge(opts) as Parameters<AmplitudeAI['trackSessionEnd']>[0],\n );\n }\n\n trackSessionEnrichment(\n enrichments: SessionEnrichments,\n opts: SessionEnrichmentOpts = {},\n ): void {\n this._ai.trackSessionEnrichment({\n ...this._merge(opts),\n enrichments,\n } as Parameters<AmplitudeAI['trackSessionEnrichment']>[0]);\n }\n\n score(\n name: string,\n value: number,\n targetId: string,\n opts: ScoreOpts = {},\n ): void {\n this._ai.score({\n ...this._merge(opts),\n name,\n value,\n targetId,\n } as Parameters<AmplitudeAI['score']>[0]);\n }\n\n session(\n opts: {\n sessionId?: string | null;\n idleTimeoutMinutes?: number | null;\n userId?: string | null;\n deviceId?: string | null;\n browserSessionId?: string | null;\n autoFlush?: boolean;\n } = {},\n ): Session {\n return new Session(this, opts);\n }\n\n flush(): unknown {\n return this._ai.flush();\n }\n\n shutdown(): void {\n this._ai.shutdown();\n }\n}\n"],"mappings":"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"}
@@ -97,7 +97,7 @@ function addSessionWrapping(source, agentId, bootstrapImportPath) {
97
97
  const agentLine = `const agent = ai.agent('${agentId}');\n`;
98
98
  if (ROUTE_HANDLER_RE.test(result)) {
99
99
  const handlerMatch = result.match(/export\s+async\s+function\s+(?:POST|GET|PUT|DELETE)\s*\([^)]*\)\s*\{/);
100
- result = result.replace(/(export\s+async\s+function\s+(?:POST|GET|PUT|DELETE)\s*\([^)]*\)\s*\{)/, `$1\n ${agentLine.trim()}\n const { messages, userId, sessionId } = await req.json();\n const _response = await agent.session({ userId, sessionId }).run(async (s) => {`);
100
+ result = result.replace(/(export\s+async\s+function\s+(?:POST|GET|PUT|DELETE)\s*\([^)]*\)\s*\{)/, `$1\n ${agentLine.trim()}\n const { messages, userId, sessionId } = await req.json();\n // TODO(required): Ensure userId comes from auth, not the request body, to prevent spoofing.\n // sessionId is optional — omit it and the SDK auto-generates a unique UUID per request.\n const _response = await agent.session({ userId, ...(sessionId && { sessionId }) }).run(async (s) => {`);
101
101
  if (handlerMatch?.index != null) {
102
102
  const openBraceIdx = result.indexOf("{", handlerMatch.index);
103
103
  if (openBraceIdx >= 0) {
@@ -112,7 +112,7 @@ function addSessionWrapping(source, agentId, bootstrapImportPath) {
112
112
  result = `${result.slice(0, closingBraceIdx)} });\n await ai.flush();\n return _response;\n${result.slice(closingBraceIdx)}`;
113
113
  }
114
114
  }
115
- } else if (EXPRESS_HANDLER_RE.test(result) || HONO_HANDLER_RE.test(result)) result = result.replace(/((?:app|router)\.\s*(?:get|post|put|delete)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:async\s+)?\([^)]*\)\s*(?:=>)?\s*\{)/, `$1\n ${agentLine.trim()}\n const _response = await agent.session({ userId: 'todo-extract-user-id', sessionId: 'todo-extract-session-id' }).run(async (s) => {`);
115
+ } else if (EXPRESS_HANDLER_RE.test(result) || HONO_HANDLER_RE.test(result)) result = result.replace(/((?:app|router)\.\s*(?:get|post|put|delete)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:async\s+)?\([^)]*\)\s*(?:=>)?\s*\{)/, `$1\n // TODO(required): Replace with the real user ID from your auth/request context.\n // Without a real userId, per-user funnels, retention, and cohorts won't work.\n const _userId = 'anonymous'; // e.g. req.user.id, req.auth.sub, req.session.userId\n ${agentLine.trim()}\n const _response = await agent.session({ userId: _userId }).run(async (s) => {`);
116
116
  return result;
117
117
  }
118
118
  function addUserMessageTracking(source) {
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-file.js","names":["PROVIDER_IMPORT_MAP: Record<string, { module: string; defaultExport: string; namedExport: string }>","results: Array<{ start: number; end: number; fullMatch: string }>","namedImports: string[]"],"sources":["../../src/mcp/instrument-file.ts"],"sourcesContent":["export interface InstrumentFileOptions {\n source: string;\n filePath: string;\n tier: 'quick_start' | 'standard' | 'advanced';\n bootstrapImportPath: string;\n agentId: string;\n description?: string | null;\n providers: string[];\n}\n\nconst PROVIDER_IMPORT_MAP: Record<string, { module: string; defaultExport: string; namedExport: string }> = {\n openai: { module: 'openai', defaultExport: 'OpenAI', namedExport: 'openai' },\n '@anthropic-ai/sdk': { module: '@anthropic-ai/sdk', defaultExport: 'Anthropic', namedExport: 'anthropic' },\n '@google/generative-ai': { module: '@google/generative-ai', defaultExport: 'GoogleGenerativeAI', namedExport: 'gemini' },\n '@google/genai': { module: '@google/genai', defaultExport: 'GoogleGenAI', namedExport: 'genai' },\n '@mistralai/mistralai': { module: '@mistralai/mistralai', defaultExport: 'Mistral', namedExport: 'mistral' },\n '@azure/openai': { module: '@azure/openai', defaultExport: 'AzureOpenAI', namedExport: 'azureOpenai' },\n 'cohere-ai': { module: 'cohere-ai', defaultExport: 'CohereClient', namedExport: 'cohere' },\n};\n\n// Balanced-paren constructor matcher: handles nested parens like new OpenAI({ apiKey: getKey() })\nfunction matchConstructor(source: string, constructorName: string): Array<{ start: number; end: number; fullMatch: string }> {\n const results: Array<{ start: number; end: number; fullMatch: string }> = [];\n const re = new RegExp(`new\\\\s+${constructorName}\\\\s*\\\\(`, 'g');\n for (const m of source.matchAll(re)) {\n const openIdx = (m.index ?? 0) + m[0].length - 1;\n let depth = 1;\n let i = openIdx + 1;\n while (i < source.length && depth > 0) {\n if (source[i] === '(') depth++;\n else if (source[i] === ')') depth--;\n i++;\n }\n results.push({ start: m.index ?? 0, end: i, fullMatch: source.slice(m.index ?? 0, i) });\n }\n return results;\n}\n\nconst ROUTE_HANDLER_RE =\n /export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\b/;\nconst EXPRESS_HANDLER_RE =\n /(?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\(/;\nconst HONO_HANDLER_RE =\n /(?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\(\\s*c\\b/;\n\nfunction replaceProviderImports(\n source: string,\n providers: string[],\n bootstrapImportPath: string,\n): string {\n let result = source;\n const namedImports: string[] = [];\n\n for (const provider of providers) {\n const mapping = PROVIDER_IMPORT_MAP[provider];\n if (!mapping) continue;\n\n // Match default import: import OpenAI from 'openai'\n const defaultImportRe = new RegExp(\n `import\\\\s+${mapping.defaultExport}\\\\s+from\\\\s+['\"]${mapping.module}['\"];?`,\n );\n // Match named import (single or multi-line): import { OpenAI } from 'openai'\n // or: import {\\n OpenAI,\\n AsyncOpenAI,\\n} from 'openai'\n const escapedModule = mapping.module.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const namedImportRe = new RegExp(\n `import\\\\s*\\\\{[^}]*\\\\b${mapping.defaultExport}\\\\b[^}]*\\\\}\\\\s*from\\\\s+['\"]${escapedModule}['\"];?`,\n 's',\n );\n if (defaultImportRe.test(result)) {\n result = result.replace(defaultImportRe, '');\n namedImports.push(mapping.namedExport);\n } else if (namedImportRe.test(result)) {\n result = result.replace(namedImportRe, '');\n namedImports.push(mapping.namedExport);\n }\n\n // Replace constructors with pre-wrapped named imports using balanced-paren matching\n const matches = matchConstructor(result, mapping.defaultExport);\n for (let i = matches.length - 1; i >= 0; i--) {\n const match = matches[i];\n if (match) {\n result = result.slice(0, match.start) + mapping.namedExport + result.slice(match.end);\n }\n }\n }\n\n if (namedImports.length > 0) {\n const importLine = `import { ${namedImports.join(', ')} } from '${bootstrapImportPath}';\\n`;\n result = importLine + result;\n }\n\n return result;\n}\n\nfunction addSessionWrapping(\n source: string,\n agentId: string,\n bootstrapImportPath: string,\n): string {\n let result = source;\n\n const importFromPath = new RegExp(\n `import\\\\s*\\\\{([^}]*)\\\\}\\\\s*from\\\\s*['\"]${bootstrapImportPath.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}['\"]`,\n );\n const existingImportMatch = importFromPath.exec(result);\n if (existingImportMatch) {\n const existingNames = existingImportMatch[1] ?? '';\n const importedNames = existingNames.split(',').map(s => s.trim());\n if (!importedNames.includes('ai')) {\n const newNames = existingNames.trim() ? `ai, ${existingNames.trim()}` : 'ai';\n result = result.replace(existingImportMatch[0], `import { ${newNames} } from '${bootstrapImportPath}'`);\n }\n } else if (!result.includes(`from '${bootstrapImportPath}'`) &&\n !result.includes(`from \"${bootstrapImportPath}\"`)) {\n result = `import { ai } from '${bootstrapImportPath}';\\n${result}`;\n }\n\n const agentLine = `const agent = ai.agent('${agentId}');\\n`;\n\n // Wrap route handler body inside session.run(), with flush after session completes\n if (ROUTE_HANDLER_RE.test(result)) {\n const handlerMatch = result.match(\n /export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\s*\\([^)]*\\)\\s*\\{/,\n );\n result = result.replace(\n /(export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\s*\\([^)]*\\)\\s*\\{)/,\n `$1\\n ${agentLine.trim()}\\n const { messages, userId, sessionId } = await req.json();\\n const _response = await agent.session({ userId, sessionId }).run(async (s) => {`,\n );\n if (handlerMatch?.index != null) {\n const openBraceIdx = result.indexOf('{', handlerMatch.index);\n if (openBraceIdx >= 0) {\n let depth = 1;\n let i = openBraceIdx + 1;\n while (i < result.length && depth > 0) {\n if (result[i] === '{') depth++;\n else if (result[i] === '}') depth--;\n i++;\n }\n const closingBraceIdx = i - 1;\n result = `${result.slice(0, closingBraceIdx)} });\\n await ai.flush();\\n return _response;\\n${result.slice(closingBraceIdx)}`;\n }\n }\n } else if (EXPRESS_HANDLER_RE.test(result) || HONO_HANDLER_RE.test(result)) {\n result = result.replace(\n /((?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\([^)]*\\)\\s*(?:=>)?\\s*\\{)/,\n `$1\\n ${agentLine.trim()}\\n const _response = await agent.session({ userId: 'todo-extract-user-id', sessionId: 'todo-extract-session-id' }).run(async (s) => {`,\n );\n }\n\n return result;\n}\n\nfunction addUserMessageTracking(source: string): string {\n const requestBodyRe = /(const\\s+\\{[^}]*\\}\\s*=\\s*(?:await\\s+)?(?:req\\.body|request\\.json\\(\\)|await\\s+request\\.json\\(\\)))/;\n const match = requestBodyRe.exec(source);\n if (match) {\n return source.replace(\n match[0],\n `${match[0]};\\n // TODO: extract user message and call s.trackUserMessage(userMessage)`,\n );\n }\n return source;\n}\n\nexport function instrumentFile(opts: InstrumentFileOptions): string {\n if (opts.tier === 'quick_start') {\n return opts.source;\n }\n\n let result = opts.source;\n\n result = replaceProviderImports(result, opts.providers, opts.bootstrapImportPath);\n\n if (opts.tier === 'advanced') {\n result = addSessionWrapping(result, opts.agentId, opts.bootstrapImportPath);\n result = addUserMessageTracking(result);\n }\n\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"instrument-file.js","names":["PROVIDER_IMPORT_MAP: Record<string, { module: string; defaultExport: string; namedExport: string }>","results: Array<{ start: number; end: number; fullMatch: string }>","namedImports: string[]"],"sources":["../../src/mcp/instrument-file.ts"],"sourcesContent":["export interface InstrumentFileOptions {\n source: string;\n filePath: string;\n tier: 'quick_start' | 'standard' | 'advanced';\n bootstrapImportPath: string;\n agentId: string;\n description?: string | null;\n providers: string[];\n}\n\nconst PROVIDER_IMPORT_MAP: Record<string, { module: string; defaultExport: string; namedExport: string }> = {\n openai: { module: 'openai', defaultExport: 'OpenAI', namedExport: 'openai' },\n '@anthropic-ai/sdk': { module: '@anthropic-ai/sdk', defaultExport: 'Anthropic', namedExport: 'anthropic' },\n '@google/generative-ai': { module: '@google/generative-ai', defaultExport: 'GoogleGenerativeAI', namedExport: 'gemini' },\n '@google/genai': { module: '@google/genai', defaultExport: 'GoogleGenAI', namedExport: 'genai' },\n '@mistralai/mistralai': { module: '@mistralai/mistralai', defaultExport: 'Mistral', namedExport: 'mistral' },\n '@azure/openai': { module: '@azure/openai', defaultExport: 'AzureOpenAI', namedExport: 'azureOpenai' },\n 'cohere-ai': { module: 'cohere-ai', defaultExport: 'CohereClient', namedExport: 'cohere' },\n};\n\n// Balanced-paren constructor matcher: handles nested parens like new OpenAI({ apiKey: getKey() })\nfunction matchConstructor(source: string, constructorName: string): Array<{ start: number; end: number; fullMatch: string }> {\n const results: Array<{ start: number; end: number; fullMatch: string }> = [];\n const re = new RegExp(`new\\\\s+${constructorName}\\\\s*\\\\(`, 'g');\n for (const m of source.matchAll(re)) {\n const openIdx = (m.index ?? 0) + m[0].length - 1;\n let depth = 1;\n let i = openIdx + 1;\n while (i < source.length && depth > 0) {\n if (source[i] === '(') depth++;\n else if (source[i] === ')') depth--;\n i++;\n }\n results.push({ start: m.index ?? 0, end: i, fullMatch: source.slice(m.index ?? 0, i) });\n }\n return results;\n}\n\nconst ROUTE_HANDLER_RE =\n /export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\b/;\nconst EXPRESS_HANDLER_RE =\n /(?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\(/;\nconst HONO_HANDLER_RE =\n /(?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\(\\s*c\\b/;\n\nfunction replaceProviderImports(\n source: string,\n providers: string[],\n bootstrapImportPath: string,\n): string {\n let result = source;\n const namedImports: string[] = [];\n\n for (const provider of providers) {\n const mapping = PROVIDER_IMPORT_MAP[provider];\n if (!mapping) continue;\n\n // Match default import: import OpenAI from 'openai'\n const defaultImportRe = new RegExp(\n `import\\\\s+${mapping.defaultExport}\\\\s+from\\\\s+['\"]${mapping.module}['\"];?`,\n );\n // Match named import (single or multi-line): import { OpenAI } from 'openai'\n // or: import {\\n OpenAI,\\n AsyncOpenAI,\\n} from 'openai'\n const escapedModule = mapping.module.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const namedImportRe = new RegExp(\n `import\\\\s*\\\\{[^}]*\\\\b${mapping.defaultExport}\\\\b[^}]*\\\\}\\\\s*from\\\\s+['\"]${escapedModule}['\"];?`,\n 's',\n );\n if (defaultImportRe.test(result)) {\n result = result.replace(defaultImportRe, '');\n namedImports.push(mapping.namedExport);\n } else if (namedImportRe.test(result)) {\n result = result.replace(namedImportRe, '');\n namedImports.push(mapping.namedExport);\n }\n\n // Replace constructors with pre-wrapped named imports using balanced-paren matching\n const matches = matchConstructor(result, mapping.defaultExport);\n for (let i = matches.length - 1; i >= 0; i--) {\n const match = matches[i];\n if (match) {\n result = result.slice(0, match.start) + mapping.namedExport + result.slice(match.end);\n }\n }\n }\n\n if (namedImports.length > 0) {\n const importLine = `import { ${namedImports.join(', ')} } from '${bootstrapImportPath}';\\n`;\n result = importLine + result;\n }\n\n return result;\n}\n\nfunction addSessionWrapping(\n source: string,\n agentId: string,\n bootstrapImportPath: string,\n): string {\n let result = source;\n\n const importFromPath = new RegExp(\n `import\\\\s*\\\\{([^}]*)\\\\}\\\\s*from\\\\s*['\"]${bootstrapImportPath.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}['\"]`,\n );\n const existingImportMatch = importFromPath.exec(result);\n if (existingImportMatch) {\n const existingNames = existingImportMatch[1] ?? '';\n const importedNames = existingNames.split(',').map(s => s.trim());\n if (!importedNames.includes('ai')) {\n const newNames = existingNames.trim() ? `ai, ${existingNames.trim()}` : 'ai';\n result = result.replace(existingImportMatch[0], `import { ${newNames} } from '${bootstrapImportPath}'`);\n }\n } else if (!result.includes(`from '${bootstrapImportPath}'`) &&\n !result.includes(`from \"${bootstrapImportPath}\"`)) {\n result = `import { ai } from '${bootstrapImportPath}';\\n${result}`;\n }\n\n const agentLine = `const agent = ai.agent('${agentId}');\\n`;\n\n // Wrap route handler body inside session.run(), with flush after session completes\n if (ROUTE_HANDLER_RE.test(result)) {\n const handlerMatch = result.match(\n /export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\s*\\([^)]*\\)\\s*\\{/,\n );\n result = result.replace(\n /(export\\s+async\\s+function\\s+(?:POST|GET|PUT|DELETE)\\s*\\([^)]*\\)\\s*\\{)/,\n `$1\\n ${agentLine.trim()}\\n const { messages, userId, sessionId } = await req.json();\\n // TODO(required): Ensure userId comes from auth, not the request body, to prevent spoofing.\\n // sessionId is optional — omit it and the SDK auto-generates a unique UUID per request.\\n const _response = await agent.session({ userId, ...(sessionId && { sessionId }) }).run(async (s) => {`,\n );\n if (handlerMatch?.index != null) {\n const openBraceIdx = result.indexOf('{', handlerMatch.index);\n if (openBraceIdx >= 0) {\n let depth = 1;\n let i = openBraceIdx + 1;\n while (i < result.length && depth > 0) {\n if (result[i] === '{') depth++;\n else if (result[i] === '}') depth--;\n i++;\n }\n const closingBraceIdx = i - 1;\n result = `${result.slice(0, closingBraceIdx)} });\\n await ai.flush();\\n return _response;\\n${result.slice(closingBraceIdx)}`;\n }\n }\n } else if (EXPRESS_HANDLER_RE.test(result) || HONO_HANDLER_RE.test(result)) {\n result = result.replace(\n /((?:app|router)\\.\\s*(?:get|post|put|delete)\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*(?:async\\s+)?\\([^)]*\\)\\s*(?:=>)?\\s*\\{)/,\n `$1\\n // TODO(required): Replace with the real user ID from your auth/request context.\\n // Without a real userId, per-user funnels, retention, and cohorts won't work.\\n const _userId = 'anonymous'; // e.g. req.user.id, req.auth.sub, req.session.userId\\n ${agentLine.trim()}\\n const _response = await agent.session({ userId: _userId }).run(async (s) => {`,\n );\n }\n\n return result;\n}\n\nfunction addUserMessageTracking(source: string): string {\n const requestBodyRe = /(const\\s+\\{[^}]*\\}\\s*=\\s*(?:await\\s+)?(?:req\\.body|request\\.json\\(\\)|await\\s+request\\.json\\(\\)))/;\n const match = requestBodyRe.exec(source);\n if (match) {\n return source.replace(\n match[0],\n `${match[0]};\\n // TODO: extract user message and call s.trackUserMessage(userMessage)`,\n );\n }\n return source;\n}\n\nexport function instrumentFile(opts: InstrumentFileOptions): string {\n if (opts.tier === 'quick_start') {\n return opts.source;\n }\n\n let result = opts.source;\n\n result = replaceProviderImports(result, opts.providers, opts.bootstrapImportPath);\n\n if (opts.tier === 'advanced') {\n result = addSessionWrapping(result, opts.agentId, opts.bootstrapImportPath);\n result = addUserMessageTracking(result);\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","names":[],"sources":["../../src/mcp/server.ts"],"sourcesContent":[],"mappings":";;;KA0DK,WAAA;cAaC,iFAGS;AAvEqD,cAgJ9D,YAzFU,EAAA,GAAA,GAyFS,SAzFT;AAAA,cA0hBV,YA7gBA,EAAA,GAAA,GA6gByB,OArd9B,CAAA,IAAA,CArDc"}
1
+ {"version":3,"file":"server.d.ts","names":[],"sources":["../../src/mcp/server.ts"],"sourcesContent":[],"mappings":";;;KA0DK,WAAA;cAaC,iFAGS;AAvEqD,cAgJ9D,YAzFU,EAAA,GAAA,GAyFS,SAzFT;AAAA,cA0hBV,YA7gBA,EAAA,GAAA,GA6gByB,OArd9B,CAAA,IAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"patching.d.ts","names":[],"sources":["../src/patching.ts"],"sourcesContent":[],"mappings":";;;;AAoLgB,iBAjJA,gBAAA,CAAA,CAkJD,EAAW,MAAA,EAAA;AAuHV,iBApNA,WAAA,CAqND,OAAA,EAAW;EA6CV,WAAA,EAjQD,WAiQa;EAgGZ,gBAAK,CAAA,EAAA,OACN;EAiEC,MAAA,CAAA,EAAA,OAAO;AAUvB,CAAA,CAAA,EAAgB,IAAA;AAIA,iBA7ZA,cAAA,CA6ZgB,OAAA,EAAA;EAIhB,WAAA,EAhaD,WAgac;EAIb,MAAA,CAAA,EAAA,OAAA;AAIhB,CAAA,CAAA,EAAgB,IAAA;AAIA,iBAhYA,gBAAA,CAgYkB,OAAA,EAAA;eA/XnB;;;iBAyBC,WAAA;eACD;;;iBAuHC,YAAA;eACD;;;iBA6CC,YAAA;eACD;;;;;;;;;;;;;;;;;;iBA+FC,KAAA;eACD;YACH;;iBAgEI,OAAA,CAAA;iBAUA,aAAA,CAAA;iBAIA,gBAAA,CAAA;iBAIA,aAAA,CAAA;iBAIA,cAAA,CAAA;iBAIA,cAAA,CAAA;iBAIA,kBAAA,CAAA"}
1
+ {"version":3,"file":"patching.d.ts","names":[],"sources":["../src/patching.ts"],"sourcesContent":[],"mappings":";;;;AAoLgB,iBAjJA,gBAAA,CAAA,CAkJU,EAAA,MAAA,EAAA;AAuHV,iBApNA,WAAA,CAqND,OAAW,EAAA;EA6CV,WAAA,EAjQD,WAiQa;EAgGZ,gBAAK,CAAA,EAAA,OACN;EAiEC,MAAA,CAAA,EAAA,OAAO;AAUvB,CAAA,CAAA,EAAgB,IAAA;AAIA,iBA7ZA,cAAA,CA6ZgB,OAAA,EAAA;EAIhB,WAAA,EAhaD,WAgac;EAIb,MAAA,CAAA,EAAA,OAAA;AAIhB,CAAA,CAAA,EAAgB,IAAA;AAIA,iBAhYA,gBAAA,CAgYkB,OAAA,EAAA;eA/XnB;;;iBAyBC,WAAA;eACD;;;iBAuHC,YAAA;eACD;;;iBA6CC,YAAA;eACD;;;;;;;;;;;;;;;;;;iBA+FC,KAAA;eACD;YACH;;iBAgEI,OAAA,CAAA;iBAUA,aAAA,CAAA;iBAIA,gBAAA,CAAA;iBAIA,aAAA,CAAA;iBAIA,cAAA,CAAA;iBAIA,cAAA,CAAA;iBAIA,kBAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"propagation.d.ts","names":[],"sources":["../src/propagation.ts"],"sourcesContent":[],"mappings":";iBAKgB,0BAAA;AAAA,iBAIA,0BAAA,CAAA,CAJ0B,EAAA,OAAA;AAI1B,iBAIA,aAAA,CAJ0B,OAAA,CAAA,EAK9B,MAL8B,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAMvC,MANuC,CAAA,MAAA,EAAA,MAAA,CAAA;AAI1B,iBAoBA,cAAA,CAlBb,OAAM,EAmBE,MAnBF,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAoBN,MApBM,CAAA,MAAA,EAAA,MAAA,CAAA"}
1
+ {"version":3,"file":"propagation.d.ts","names":[],"sources":["../src/propagation.ts"],"sourcesContent":[],"mappings":";iBAKgB,0BAAA;AAAA,iBAIA,0BAAA,CAAA,CAJ0B,EAAA,OAAA;AAI1B,iBAIA,aAAA,CAJ0B,OAAA,CAAA,EAK9B,MAL8B,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAMvC,MANuC,CAAA,MAAA,EAAA,MAAA,CAAA;AAI1B,iBAoBA,cAAA,CAnBJ,OACT,EAmBQ,MAnBF,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAoBN,MApBM,CAAA,MAAA,EAAA,MAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","names":[],"sources":["../../src/providers/anthropic.ts"],"sourcesContent":[],"mappings":";;;;;;AAyBM,cADO,mBACW,EAAM,OAAA;AAI9B,cAJM,gBAI2B,EAJT,MAKX,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAOA,UAVD,gBAAA,CAUC;EAA0B,SAAA,EAT/B,aAS+B;EAGvB,MAAA,CAAA,EAAA,MAAA;EAGE,aAAA,CAAA,EAbL,aAaK,GAAA,IAAA;EAmCP,gBAAA,CAAA,EAAA,OAAA;EAxCN;EAAc,eAAA,CAAA,EAAA,OAAA;AA6CxB;AACa,cAhDA,SAgDA,CAAA,gBA/CK,MA+CL,CAAA,MAAA,EAAA,OAAA,CAAA,GA/C+B,MA+C/B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SA9CH,cAAA,CA8CG;EAQA,QAAA,OAAA;EACE,SAAA,QAAA,EArDM,eAqDN;EACI,QAAA,iBAAA;EAeP,WAAA,CAAA,OAAA,EAlEW,gBAkEX;EACa,IAAA,MAAA,CAAA,CAAA,EAhCT,OAgCS;;AACQ,cA5BpB,eAAA,CA4BoB;EAA5B,SAAA,EA3BQ,MA2BR,CAAA,MAAA,EAAA,OAAA,CAAA;EAAO,QAAA,QAAA;EAuSI,QAAA,UAAA;EAmBA,QAAA,cAAA;EACC,QAAA,iBAAA;EAAN,WAAA,CAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EA9UE,OA8UF,EAAA,SAAA,EA7UI,aA6UJ,EAAA,aAAA,EA5UQ,aA4UR,GAAA,IAAA,EAAA,gBAAA,EAAA,OAAA;EAIQ,MAAA,CAAA,MAAA,EAjUP,MAiUO,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,kBAAA,CAAA,EAhUM,oBAgUN,CAAA,EA/Td,OA+Tc,CA/TN,iBA+TM,GA/Tc,aA+Td,CAAA,OAAA,CAAA,CAAA;EAAN,QAAA,WAAA;EAAK,QAAA,mBAAA;;;iBAxBF,4BAAA;iBAmBA,uBAAA,UACL,MAAM;;;aAIJ,MAAM"}
1
+ {"version":3,"file":"anthropic.d.ts","names":[],"sources":["../../src/providers/anthropic.ts"],"sourcesContent":[],"mappings":";;;;;;AAyBM,cADO,mBACW,EAAA,OAAM;AAI9B,cAJM,gBAI2B,EAJT,MAKX,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAOA,UAVD,gBAAA,CAUC;EAA0B,SAAA,EAT/B,aAS+B;EAGvB,MAAA,CAAA,EAAA,MAAA;EAGE,aAAA,CAAA,EAbL,aAaK,GAAA,IAAA;EAmCP,gBAAA,CAAA,EAAA,OAAA;EAxCN;EAAc,eAAA,CAAA,EAAA,OAAA;AA6CxB;AACa,cAhDA,SAgDA,CAAA,gBA/CK,MA+CL,CAAA,MAAA,EAAA,OAAA,CAAA,GA/C+B,MA+C/B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SA9CH,cAAA,CA8CG;EAQA,QAAA,OAAA;EACE,SAAA,QAAA,EArDM,eAqDN;EACI,QAAA,iBAAA;EAeP,WAAA,CAAA,OAAA,EAlEW,gBAkEX;EACa,IAAA,MAAA,CAAA,CAAA,EAhCT,OAgCS;;AACQ,cA5BpB,eAAA,CA4BoB;EAA5B,SAAA,EA3BQ,MA2BR,CAAA,MAAA,EAAA,OAAA,CAAA;EAAO,QAAA,QAAA;EAuSI,QAAA,UAAA;EAmBA,QAAA,cAAA;EACC,QAAA,iBAAA;EAAN,WAAA,CAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EA9UE,OA8UF,EAAA,SAAA,EA7UI,aA6UJ,EAAA,aAAA,EA5UQ,aA4UR,GAAA,IAAA,EAAA,gBAAA,EAAA,OAAA;EAIQ,MAAA,CAAA,MAAA,EAjUP,MAiUO,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,kBAAA,CAAA,EAhUM,oBAgUN,CAAA,EA/Td,OA+Tc,CA/TN,iBA+TM,GA/Tc,aA+Td,CAAA,OAAA,CAAA,CAAA;EAAN,QAAA,WAAA;EAAK,QAAA,mBAAA;;;iBAxBF,4BAAA;iBAmBA,uBAAA,UACL,MAAM;;;aAIJ,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","names":[],"sources":["../../src/providers/gemini.ts"],"sourcesContent":[],"mappings":";;;;;;AAaM,cADO,gBACQ,EAAM,OAAA;AAI3B,cAJM,aAIwB,EAJT,MAKR,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAQK,UAXN,aAAA,CAWM;EAuBX,SAAA,EAjCC,aAiCD;EACP,MAAA,CAAA,EAAA,MAAA;EA0EO,aAAA,CAAA,EA1GM,aA0GN,GAAA,IAAA;EACP;EAtGuB,YAAA,CAAA,EAAA,OAAA;;AA0PZ,cA1PH,MAAA,SAAe,cAAA,CAgQV;;uBA7PK;yCAuBX,0BACP;+CA0EO,0BACP;;;;iBAoJW,qBAAA;;;;;;kBAME,MAAM"}
1
+ {"version":3,"file":"gemini.d.ts","names":[],"sources":["../../src/providers/gemini.ts"],"sourcesContent":[],"mappings":";;;;;;AAaM,cADO,gBACQ,EAAA,OAAM;AAI3B,cAJM,aAIwB,EAJT,MAKR,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAQK,UAXN,aAAA,CAWM;EAuBX,SAAA,EAjCC,aAiCD;EACP,MAAA,CAAA,EAAA,MAAA;EA0EO,aAAA,CAAA,EA1GM,aA0GN,GAAA,IAAA;EACP;EAtGuB,YAAA,CAAA,EAAA,OAAA;;AA0PZ,cA1PH,MAAA,SAAe,cAAA,CAgQV;;uBA7PK;yCAuBX,0BACP;+CA0EO,0BACP;;;;iBAoJW,qBAAA;;;;;;kBAME,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"mistral.d.ts","names":[],"sources":["../../src/providers/mistral.ts"],"sourcesContent":[],"mappings":";;;;;;AAaM,cADO,iBACS,EAAM,OAAA;AAI5B,cAJM,cAIyB,EAJT,MAKT,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAOD,UAVA,cAAA,CAUA;EAEM,SAAA,EAXV,aAWU;EAJM,MAAA,CAAA,EAAA,MAAA;EAAc,aAAA,CAAA,EALzB,aAKyB,GAAA,IAAA;EAoC9B;EAI2B,aAAA,CAAA,EAAA,OAAA;;AAQW,cAhDtC,OAAA,SAAgB,cAAA,CAgDsB;EAmF5B,QAAA,OAAA;EAA0B,SAAA,IAAA,EAjIhC,WAiIgC;EAAO,WAAA,CAAA,OAAA,EA/HjC,cA+HiC;;;cA/F3C,WAAA;;;wCAI2B;mBAQf,0BAA0B;iBAmF5B,0BAA0B"}
1
+ {"version":3,"file":"mistral.d.ts","names":[],"sources":["../../src/providers/mistral.ts"],"sourcesContent":[],"mappings":";;;;;;AAaM,cADO,iBACS,EAAA,OAAM;AAI5B,cAJM,cAIyB,EAJT,MAKT,CAAA,MAAA,EAAA,OAEK,CAAA,GAAA,IAAA;AAOD,UAVA,cAAA,CAUA;EAEM,SAAA,EAXV,aAWU;EAJM,MAAA,CAAA,EAAA,MAAA;EAAc,aAAA,CAAA,EALzB,aAKyB,GAAA,IAAA;EAoC9B;EAI2B,aAAA,CAAA,EAAA,OAAA;;AAQW,cAhDtC,OAAA,SAAgB,cAAA,CAgDsB;EAmF5B,QAAA,OAAA;EAA0B,SAAA,IAAA,EAjIhC,WAiIgC;EAAO,WAAA,CAAA,OAAA,EA/HjC,cA+HiC;;;cA/F3C,WAAA;;;wCAI2B;mBAQf,0BAA0B;iBAmF5B,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;AAkBA;;;;;AAeA;AAQA;AAeA;AAQA;AAKA;AA0BA;AAWA;AAciB,UAtGA,cAAA,CAsGsB;EAStB,UAAA,EAAA,MAAU;EAQV,OAAA,CAAA,EAAA,MAAA;EASA,SAAA,CAAA,EAAA,MAAA;EASA,UAAA,CAAA,EAAA,MAAA;EASA,gBAAA,CAAA,EA7II,MA6IJ,CAAA,MAAwB,EAAA,OAG7B,CAAA;EAOK,eAAA,CAAA,EAtJG,MAsJgB,CAAA,MAAA,EAAA,OAAA,CAAA;EAcnB,MAAA,CAAA,EAnKN,MAmKM,CAAA,MAAc,EAAA,OAIpB,CAAA;EAYM,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAe;AAahC;AAUA;AAYA;AAeA;;AAGkB,UAhOD,aAAA,CAgOC;EACH,KAAA,EAAA,CAAA,KAAA,EAhOE,cAgOF,EAAA,GAAA,IAAA;;AAMf;AASA;AASA;AAQA;AAYiB,UArQA,mBAAA,SAA4B,aAqQP,CAAA;EASrB,KAAA,EAAA,GAAA,GAAA,OAAA;EAqBA,QAAA,CAAA,EAAA,GAAA,GAAA,IAAiB;EAYjB,IAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAmB,EAAA,GAAA,OAAA;EASnB,aAAA,CAAA,EApTC,MAoTY,CAAA,MAAA,EAAA,OAAA,CAAA;AAQ9B;AAaA;AASA;AAkBA;AAUA;;;;;AA6BoC,UAhYnB,eAAA,CAgYmB;EAAtB,SAAA,SAAA,EA/XQ,mBA+XR;;;;;;KAxXF,aAAA,GAAgB,gBAAgB;;;;iBAK5B,gBAAA,QAAwB,gBAAgB;;;;;UA0BvC,WAAA;;;;eAIF;;;;;;UAOE,oBAAA;;YAEL;;;;;;;;;;;UAYK,sBAAA;;WAEN;UACD;;;;;UAMO,UAAA;;;iBACkC;;;;;;;UAOlC,gBAAA;;;;;;;;UASA,mBAAA;;qBAEI;;;;;;;;;UAOJ,+BAAA;;;;;;;;UASA,wBAAA;;;YAGL;;;;;;UAOK,mBAAA;;;;;;;;;;;;;UAcA,cAAA;;;;WAIN;UACD;;;;;;UAWO,eAAA;;;;;;;;;;;;UAaA,iBAAA;;WAEN;SACF;;;;;;UAOQ,YAAA;;;;;;;;;;;UAYA,mBAAA;;;;;;;;;;UAeA,cAAA;aACJ;;kBAEK;eACH;;;;;UAME,oBAAA;;kBAEC;eACH;;;;;UAME,mBAAA;;;;;;;;UASA,eAAA;;;YAEK;;;;;;UAML,UAAA;;;;UAEsB;;;;;;UAUtB,qBAAA;;;;;;;;UASA,uBAAA;;;gBAGD;;;;;;;;;;;;;;;UAkBC,iBAAA;;;;;;;;;;;UAYA,mBAAA;;YAEL;UACF;;;;;UAMO,aAAA;;;;;;;;;UAQA,iBAAA;;;;;;;;UAaA,aAAA;;;;;;;;UASA,UAAA;;;;;;;;;;;;;;;;;KAkBL,OAAA,UAAiB;;;;;;;;;UAUZ,gBAAA;;;;;;;;;;;;;;YAcL;;WAED;oBACS;;;;;;;;;;;;cAYN,MAAM,gBAAgB"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;AAkBA;;;;;AAeA;AAQA;AAeA;AAQA;AAKA;AA0BA;AAWA;AAciB,UAtGA,cAAA,CAsGsB;EAStB,UAAA,EAAA,MAAU;EAQV,OAAA,CAAA,EAAA,MAAA;EASA,SAAA,CAAA,EAAA,MAAA;EASA,UAAA,CAAA,EAAA,MAAA;EASA,gBAAA,CAAA,EA7II,MA6IJ,CAAA,MAAwB,EAAA,OAG7B,CAAA;EAOK,eAAA,CAAA,EAtJG,MAsJgB,CAAA,MAAA,EAAA,OAAA,CAAA;EAcnB,MAAA,CAAA,EAnKN,MAmKM,CAAA,MAAc,EAAA,OAIpB,CAAA;EAYM,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAe;AAahC;AAUA;AAYA;AAeA;;AAGkB,UAhOD,aAAA,CAgOC;EACH,KAAA,EAAA,CAAA,KAAA,EAhOE,cAgOF,EAAA,GAAA,IAAA;;AAMf;AASA;AASA;AAQA;AAYiB,UArQA,mBAAA,SAA4B,aAqQP,CAAA;EASrB,KAAA,EAAA,GAAA,GAAA,OAAA;EAqBA,QAAA,CAAA,EAAA,GAAA,GAAA,IAAiB;EAYjB,IAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAmB,EAAA,GAAA,OAExB;EAOK,aAAA,CAAA,EApTC,MAoTY,CAAA,MAAA,EAAA,OAAA,CAAA;AAQ9B;AAaA;AASA;AAkBA;AAUA;;;;;AA6BoC,UAhYnB,eAAA,CAgYmB;EAAtB,SAAA,SAAA,EA/XQ,mBA+XR;;;;;;KAxXF,aAAA,GAAgB,gBAAgB;;;;iBAK5B,gBAAA,QAAwB,gBAAgB;;;;;UA0BvC,WAAA;;;;eAIF;;;;;;UAOE,oBAAA;;YAEL;;;;;;;;;;;UAYK,sBAAA;;WAEN;UACD;;;;;UAMO,UAAA;;;iBACkC;;;;;;;UAOlC,gBAAA;;;;;;;;UASA,mBAAA;;qBAEI;;;;;;;;;UAOJ,+BAAA;;;;;;;;UASA,wBAAA;;;YAGL;;;;;;UAOK,mBAAA;;;;;;;;;;;;;UAcA,cAAA;;;;WAIN;UACD;;;;;;UAWO,eAAA;;;;;;;;;;;;UAaA,iBAAA;;WAEN;SACF;;;;;;UAOQ,YAAA;;;;;;;;;;;UAYA,mBAAA;;;;;;;;;;UAeA,cAAA;aACJ;;kBAEK;eACH;;;;;UAME,oBAAA;;kBAEC;eACH;;;;;UAME,mBAAA;;;;;;;;UASA,eAAA;;;YAEK;;;;;;UAML,UAAA;;;;UAEsB;;;;;;UAUtB,qBAAA;;;;;;;;UASA,uBAAA;;;gBAGD;;;;;;;;;;;;;;;UAkBC,iBAAA;;;;;;;;;;;UAYA,mBAAA;;YAEL;UACF;;;;;UAMO,aAAA;;;;;;;;;UAQA,iBAAA;;;;;;;;UAaA,aAAA;;;;;;;;UASA,UAAA;;;;;;;;;;;;;;;;;KAkBL,OAAA,UAAiB;;;;;;;;;UAUZ,gBAAA;;;;;;;;;;;;;;YAcL;;WAED;oBACS;;;;;;;;;;;;cAYN,MAAM,gBAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","names":[],"sources":["../../src/utils/logger.ts"],"sourcesContent":[],"mappings":";UAAiB,MAAA;EAAA,KAAA,CAAA,OAAM,EAAA,MAAA,CAAA,EAAA,IAAA;EAcP,KAAA,CAAA,OAAS,EAAA,MAAA,CAAA,EAAuB,IAAA;;;;iBAAhC,SAAA,uBAAgC"}
1
+ {"version":3,"file":"logger.d.ts","names":[],"sources":["../../src/utils/logger.ts"],"sourcesContent":[],"mappings":";UAAiB,MAAA;EAAA,KAAA,CAAA,OAAM,EAAA,MAAA,CAAA,EAAA,IAAA;EAcP,KAAA,CAAA,OAAS,EAAA,MAAA,CAAA,EAAA,IAAuB;;;;iBAAhC,SAAA,uBAAgC"}
package/llms-full.txt CHANGED
@@ -1,5 +1,5 @@
1
1
  # llms-full.txt
2
- # @amplitude/ai 0.3.1 — Complete API Reference for AI Coding Agents
2
+ # @amplitude/ai 0.3.3 — Complete API Reference for AI Coding Agents
3
3
  #
4
4
  # This file is the definitive guide for any coding agent instrumenting
5
5
  # a JavaScript/TypeScript AI application with @amplitude/ai.
package/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  <!-- GENERATED FILE: do not edit manually. Update scripts/generate-agent-docs.mjs instead. -->
2
2
  # llms.txt
3
3
  package=@amplitude/ai
4
- version=0.3.1
4
+ version=0.3.3
5
5
 
6
6
  [mcp.tools]
7
7
  get_event_schema
package/mcp.schema.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generated": true,
3
3
  "package": "@amplitude/ai",
4
- "version": "0.3.1",
4
+ "version": "0.3.3",
5
5
  "prompt": "instrument_app",
6
6
  "tools": [
7
7
  "get_event_schema",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/ai",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "private": false,
5
5
  "description": "Amplitude AI SDK - LLM usage tracking for Amplitude Analytics",
6
6
  "keywords": [