@amplitude/ai 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.claude/commands/instrument-with-amplitude-ai.md +12 -0
  2. package/.cursor/skills/instrument-with-amplitude-ai/SKILL.md +4 -42
  3. package/AGENTS.md +86 -28
  4. package/README.md +190 -111
  5. package/amplitude-ai.md +463 -0
  6. package/bin/amplitude-ai-doctor.mjs +0 -0
  7. package/bin/amplitude-ai-instrument.mjs +0 -0
  8. package/bin/amplitude-ai-mcp.mjs +0 -0
  9. package/bin/amplitude-ai-register-catalog.mjs +0 -0
  10. package/bin/amplitude-ai-status.mjs +0 -0
  11. package/bin/amplitude-ai.mjs +14 -5
  12. package/data/agent_event_catalog.json +52 -2
  13. package/dist/bound-agent.d.ts +18 -14
  14. package/dist/bound-agent.d.ts.map +1 -1
  15. package/dist/bound-agent.js +4 -1
  16. package/dist/bound-agent.js.map +1 -1
  17. package/dist/cli/status.d.ts.map +1 -1
  18. package/dist/cli/status.js +31 -19
  19. package/dist/cli/status.js.map +1 -1
  20. package/dist/client.d.ts +14 -14
  21. package/dist/client.d.ts.map +1 -1
  22. package/dist/client.js +38 -0
  23. package/dist/client.js.map +1 -1
  24. package/dist/context.d.ts +5 -0
  25. package/dist/context.d.ts.map +1 -1
  26. package/dist/context.js +4 -0
  27. package/dist/context.js.map +1 -1
  28. package/dist/core/constants.d.ts +3 -1
  29. package/dist/core/constants.d.ts.map +1 -1
  30. package/dist/core/constants.js +3 -1
  31. package/dist/core/constants.js.map +1 -1
  32. package/dist/core/tracking.d.ts +12 -2
  33. package/dist/core/tracking.d.ts.map +1 -1
  34. package/dist/core/tracking.js +13 -2
  35. package/dist/core/tracking.js.map +1 -1
  36. package/dist/decorators.d.ts +1 -1
  37. package/dist/decorators.d.ts.map +1 -1
  38. package/dist/decorators.js +4 -3
  39. package/dist/decorators.js.map +1 -1
  40. package/dist/index.d.ts +7 -4
  41. package/dist/index.js +5 -2
  42. package/dist/mcp/contract.d.ts +4 -0
  43. package/dist/mcp/contract.d.ts.map +1 -1
  44. package/dist/mcp/contract.js +6 -2
  45. package/dist/mcp/contract.js.map +1 -1
  46. package/dist/mcp/generate-verify-test.d.ts +7 -0
  47. package/dist/mcp/generate-verify-test.d.ts.map +1 -0
  48. package/dist/mcp/generate-verify-test.js +25 -0
  49. package/dist/mcp/generate-verify-test.js.map +1 -0
  50. package/dist/mcp/index.d.ts +2 -1
  51. package/dist/mcp/index.js +2 -1
  52. package/dist/mcp/instrument-file.d.ts +14 -0
  53. package/dist/mcp/instrument-file.d.ts.map +1 -0
  54. package/dist/mcp/instrument-file.js +139 -0
  55. package/dist/mcp/instrument-file.js.map +1 -0
  56. package/dist/mcp/scan-project.d.ts +52 -0
  57. package/dist/mcp/scan-project.d.ts.map +1 -0
  58. package/dist/mcp/scan-project.js +309 -0
  59. package/dist/mcp/scan-project.js.map +1 -0
  60. package/dist/mcp/server.d.ts.map +1 -1
  61. package/dist/mcp/server.js +79 -4
  62. package/dist/mcp/server.js.map +1 -1
  63. package/dist/mcp/validate-file.d.ts +4 -0
  64. package/dist/mcp/validate-file.d.ts.map +1 -1
  65. package/dist/mcp/validate-file.js +559 -11
  66. package/dist/mcp/validate-file.js.map +1 -1
  67. package/dist/middleware.js +2 -1
  68. package/dist/middleware.js.map +1 -1
  69. package/dist/node_modules/.pnpm/acorn-typescript@1.4.13_acorn@8.16.0/node_modules/acorn-typescript/lib/index.js +2389 -0
  70. package/dist/node_modules/.pnpm/acorn-typescript@1.4.13_acorn@8.16.0/node_modules/acorn-typescript/lib/index.js.map +1 -0
  71. package/dist/node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.js +5128 -0
  72. package/dist/node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.js.map +1 -0
  73. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +1 -1
  74. package/dist/providers/anthropic.d.ts.map +1 -1
  75. package/dist/providers/anthropic.js +1 -0
  76. package/dist/providers/anthropic.js.map +1 -1
  77. package/dist/providers/base.d.ts +2 -1
  78. package/dist/providers/base.d.ts.map +1 -1
  79. package/dist/providers/base.js +4 -0
  80. package/dist/providers/base.js.map +1 -1
  81. package/dist/providers/openai.d.ts.map +1 -1
  82. package/dist/providers/openai.js +2 -0
  83. package/dist/providers/openai.js.map +1 -1
  84. package/dist/serverless.d.ts +19 -0
  85. package/dist/serverless.d.ts.map +1 -0
  86. package/dist/serverless.js +35 -0
  87. package/dist/serverless.js.map +1 -0
  88. package/dist/session.d.ts +24 -8
  89. package/dist/session.d.ts.map +1 -1
  90. package/dist/session.js +20 -1
  91. package/dist/session.js.map +1 -1
  92. package/dist/types.d.ts +1 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/types.js.map +1 -1
  95. package/dist/utils/costs.d.ts.map +1 -1
  96. package/dist/utils/costs.js +5 -1
  97. package/dist/utils/costs.js.map +1 -1
  98. package/llms-full.txt +353 -69
  99. package/llms.txt +6 -2
  100. package/mcp.schema.json +7 -3
  101. package/package.json +10 -5
  102. package/bin/amplitude-ai-init.mjs +0 -27
  103. package/dist/cli/init.d.ts +0 -14
  104. package/dist/cli/init.d.ts.map +0 -1
  105. package/dist/cli/init.js +0 -40
  106. package/dist/cli/init.js.map +0 -1
@@ -12,26 +12,29 @@ type SpanOpts = Partial<Omit<Parameters<AmplitudeAI['trackSpan']>[0], 'spanName'
12
12
  type SessionEndOpts = Partial<Parameters<AmplitudeAI['trackSessionEnd']>[0]>;
13
13
  type SessionEnrichmentOpts = Partial<Omit<Parameters<AmplitudeAI['trackSessionEnrichment']>[0], 'enrichments'>>;
14
14
  type ScoreOpts = Partial<Omit<Parameters<AmplitudeAI['score']>[0], 'name' | 'value' | 'targetId'>>;
15
+ interface AgentOptions {
16
+ userId?: string | null;
17
+ parentAgentId?: string | null;
18
+ customerOrgId?: string | null;
19
+ agentVersion?: string | null;
20
+ description?: string | null;
21
+ context?: Record<string, unknown> | null;
22
+ env?: string | null;
23
+ sessionId?: string | null;
24
+ traceId?: string | null;
25
+ groups?: Record<string, unknown> | null;
26
+ deviceId?: string | null;
27
+ browserSessionId?: string | null;
28
+ }
15
29
  declare class BoundAgent {
16
30
  readonly _ai: AmplitudeAI;
17
31
  readonly _defaults: Record<string, unknown>;
18
- constructor(ai: AmplitudeAI, opts: {
32
+ constructor(ai: AmplitudeAI, opts: AgentOptions & {
19
33
  agentId: string;
20
- userId?: string | null;
21
- parentAgentId?: string | null;
22
- customerOrgId?: string | null;
23
- agentVersion?: string | null;
24
- context?: Record<string, unknown> | null;
25
- env?: string | null;
26
- sessionId?: string | null;
27
- traceId?: string | null;
28
- groups?: Record<string, unknown> | null;
29
- deviceId?: string | null;
30
- browserSessionId?: string | null;
31
34
  });
32
35
  get agentId(): string;
33
36
  get ai(): AmplitudeAI;
34
- child(agentId: string, overrides?: Record<string, unknown>): BoundAgent;
37
+ child(agentId: string, overrides?: AgentOptions): BoundAgent;
35
38
  private _merge;
36
39
  trackUserMessage(content: string, opts?: UserMessageOpts): string;
37
40
  trackAiMessage(content: string, model: string, provider: string, latencyMs: number, opts?: AiMessageOpts): string;
@@ -47,10 +50,11 @@ declare class BoundAgent {
47
50
  userId?: string | null;
48
51
  deviceId?: string | null;
49
52
  browserSessionId?: string | null;
53
+ autoFlush?: boolean;
50
54
  }): Session;
51
55
  flush(): unknown;
52
56
  shutdown(): void;
53
57
  }
54
58
  //#endregion
55
- export { AiMessageOpts, BoundAgent, EmbeddingOpts, ScoreOpts, SessionEndOpts, SessionEnrichmentOpts, SpanOpts, ToolCallOpts, UserMessageOpts };
59
+ export { AgentOptions, AiMessageOpts, BoundAgent, EmbeddingOpts, ScoreOpts, SessionEndOpts, SessionEnrichmentOpts, SpanOpts, ToolCallOpts, UserMessageOpts };
56
60
  //# sourceMappingURL=bound-agent.d.ts.map
@@ -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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"}
@@ -8,6 +8,7 @@ const CONTEXT_FIELDS = [
8
8
  "parentAgentId",
9
9
  "customerOrgId",
10
10
  "agentVersion",
11
+ "description",
11
12
  "context",
12
13
  "env",
13
14
  "sessionId",
@@ -25,6 +26,7 @@ var BoundAgent = class BoundAgent {
25
26
  parentAgentId: opts.parentAgentId ?? null,
26
27
  customerOrgId: opts.customerOrgId ?? null,
27
28
  agentVersion: opts.agentVersion ?? null,
29
+ description: opts.description ?? null,
28
30
  context: opts.context ?? null,
29
31
  env: opts.env ?? null,
30
32
  sessionId: opts.sessionId ?? null,
@@ -46,6 +48,7 @@ var BoundAgent = class BoundAgent {
46
48
  env: this._defaults.env,
47
49
  customerOrgId: this._defaults.customerOrgId,
48
50
  agentVersion: this._defaults.agentVersion,
51
+ description: this._defaults.description,
49
52
  sessionId: this._defaults.sessionId,
50
53
  traceId: this._defaults.traceId,
51
54
  groups: this._defaults.groups,
@@ -53,7 +56,7 @@ var BoundAgent = class BoundAgent {
53
56
  browserSessionId: this._defaults.browserSessionId
54
57
  };
55
58
  const parentCtx = this._defaults.context;
56
- const childCtx = overrides.context;
59
+ const childCtx = overrides.context ?? null;
57
60
  const overrideEntries = Object.entries(overrides).filter(([k]) => k !== "context");
58
61
  if (parentCtx || childCtx) {
59
62
  const merged = { ...parentCtx ?? {} };
@@ -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 'context',\n 'env',\n 'sessionId',\n 'traceId',\n 'groups',\n] as const;\n\nexport class BoundAgent {\n readonly _ai: AmplitudeAI;\n readonly _defaults: Record<string, unknown>;\n\n constructor(\n ai: AmplitudeAI,\n opts: {\n agentId: string;\n userId?: string | null;\n parentAgentId?: string | null;\n customerOrgId?: string | null;\n agentVersion?: 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 ) {\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 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: Record<string, unknown> = {}): 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 as\n | Record<string, unknown>\n | null\n | undefined;\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 } = {},\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 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 +1 @@
1
- {"version":3,"file":"status.d.ts","names":[],"sources":["../../src/cli/status.ts"],"sourcesContent":[],"mappings":";KAIK,YAAA;EAAA,OAAA,EAAA,MAAY;EAYX,SAAA,EAVO,KAkDZ,CAAA;;;;OAjDM;;;cASD,4BAA2B"}
1
+ {"version":3,"file":"status.d.ts","names":[],"sources":["../../src/cli/status.ts"],"sourcesContent":[],"mappings":";KAKK,YAAA;EAAA,OAAA,EAAA,MAAY;EAmCX,SAAA,EAjCO,KAwDZ,CAAA;;;;OAvDM;;;cAgCD,4BAA2B"}
@@ -1,34 +1,46 @@
1
1
  import { PROVIDER_ENTRIES } from "./providers.js";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
- import { join } from "node:path";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
4
5
 
5
6
  //#region src/cli/status.ts
6
7
  const isPackageInstalled = (cwd, pkg) => {
7
8
  return existsSync(join(cwd, "node_modules", ...pkg.split("/")));
8
9
  };
9
- const runStatus = (cwd) => {
10
- let version = "unknown";
10
+ function resolveVersion(cwd) {
11
+ try {
12
+ const nmPkgPath = join(cwd, "node_modules", "@amplitude", "ai", "package.json");
13
+ if (existsSync(nmPkgPath)) {
14
+ const pkg = JSON.parse(readFileSync(nmPkgPath, "utf8"));
15
+ if (pkg.version) return pkg.version;
16
+ }
17
+ } catch {}
11
18
  try {
12
- const pkgPath = join(cwd, "node_modules", "@amplitude", "ai", "package.json");
13
- if (existsSync(pkgPath)) version = JSON.parse(readFileSync(pkgPath, "utf8")).version ?? "unknown";
19
+ const selfPkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json");
20
+ if (existsSync(selfPkgPath)) {
21
+ const pkg = JSON.parse(readFileSync(selfPkgPath, "utf8"));
22
+ if (pkg.version) return pkg.version;
23
+ }
14
24
  } catch {}
25
+ return "unknown";
26
+ }
27
+ const runStatus = (cwd) => {
28
+ const version = resolveVersion(cwd);
15
29
  const installedCache = /* @__PURE__ */ new Map();
16
- const providers = PROVIDER_ENTRIES.map(({ name, npm }) => {
17
- if (!installedCache.has(npm)) installedCache.set(npm, isPackageInstalled(cwd, npm));
18
- return {
19
- name,
20
- installed: installedCache.get(npm) ?? false
21
- };
22
- });
23
- const env = {
24
- AMPLITUDE_AI_API_KEY: Boolean(process.env.AMPLITUDE_AI_API_KEY),
25
- AMPLITUDE_AI_CONTENT_MODE: Boolean(process.env.AMPLITUDE_AI_CONTENT_MODE),
26
- AMPLITUDE_AI_DEBUG: Boolean(process.env.AMPLITUDE_AI_DEBUG)
27
- };
28
30
  return {
29
31
  version,
30
- providers,
31
- env,
32
+ providers: PROVIDER_ENTRIES.map(({ name, npm }) => {
33
+ if (!installedCache.has(npm)) installedCache.set(npm, isPackageInstalled(cwd, npm));
34
+ return {
35
+ name,
36
+ installed: installedCache.get(npm) ?? false
37
+ };
38
+ }),
39
+ env: {
40
+ AMPLITUDE_AI_API_KEY: Boolean(process.env.AMPLITUDE_AI_API_KEY),
41
+ AMPLITUDE_AI_CONTENT_MODE: Boolean(process.env.AMPLITUDE_AI_CONTENT_MODE),
42
+ AMPLITUDE_AI_DEBUG: Boolean(process.env.AMPLITUDE_AI_DEBUG)
43
+ },
32
44
  patchActive: false
33
45
  };
34
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","names":["env: Record<string, boolean>"],"sources":["../../src/cli/status.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { PROVIDER_ENTRIES } from './providers.js';\n\ntype StatusResult = {\n version: string;\n providers: Array<{ name: string; installed: boolean }>;\n env: Record<string, boolean>;\n patchActive: boolean;\n};\n\nconst isPackageInstalled = (cwd: string, pkg: string): boolean => {\n const nmPath = join(cwd, 'node_modules', ...pkg.split('/'));\n return existsSync(nmPath);\n};\n\nconst runStatus = (cwd: string): StatusResult => {\n let version = 'unknown';\n try {\n const pkgPath = join(\n cwd,\n 'node_modules',\n '@amplitude',\n 'ai',\n 'package.json',\n );\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as {\n version?: string;\n };\n version = pkg.version ?? 'unknown';\n }\n } catch {\n // fall through\n }\n\n const installedCache = new Map<string, boolean>();\n const providers = PROVIDER_ENTRIES.map(({ name, npm }) => {\n if (!installedCache.has(npm)) {\n installedCache.set(npm, isPackageInstalled(cwd, npm));\n }\n return { name, installed: installedCache.get(npm) ?? false };\n });\n\n const env: Record<string, boolean> = {\n AMPLITUDE_AI_API_KEY: Boolean(process.env.AMPLITUDE_AI_API_KEY),\n AMPLITUDE_AI_CONTENT_MODE: Boolean(process.env.AMPLITUDE_AI_CONTENT_MODE),\n AMPLITUDE_AI_DEBUG: Boolean(process.env.AMPLITUDE_AI_DEBUG),\n };\n\n return {\n version,\n providers,\n env,\n patchActive: false,\n };\n};\n\nexport { runStatus, type StatusResult };\n"],"mappings":";;;;;AAWA,MAAM,sBAAsB,KAAa,QAAyB;AAEhE,QAAO,WADQ,KAAK,KAAK,gBAAgB,GAAG,IAAI,MAAM,IAAI,CAAC,CAClC;;AAG3B,MAAM,aAAa,QAA8B;CAC/C,IAAI,UAAU;AACd,KAAI;EACF,MAAM,UAAU,KACd,KACA,gBACA,cACA,MACA,eACD;AACD,MAAI,WAAW,QAAQ,CAIrB,WAHY,KAAK,MAAM,aAAa,SAAS,OAAO,CAAC,CAGvC,WAAW;SAErB;CAIR,MAAM,iCAAiB,IAAI,KAAsB;CACjD,MAAM,YAAY,iBAAiB,KAAK,EAAE,MAAM,UAAU;AACxD,MAAI,CAAC,eAAe,IAAI,IAAI,CAC1B,gBAAe,IAAI,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAEvD,SAAO;GAAE;GAAM,WAAW,eAAe,IAAI,IAAI,IAAI;GAAO;GAC5D;CAEF,MAAMA,MAA+B;EACnC,sBAAsB,QAAQ,QAAQ,IAAI,qBAAqB;EAC/D,2BAA2B,QAAQ,QAAQ,IAAI,0BAA0B;EACzE,oBAAoB,QAAQ,QAAQ,IAAI,mBAAmB;EAC5D;AAED,QAAO;EACL;EACA;EACA;EACA,aAAa;EACd"}
1
+ {"version":3,"file":"status.js","names":[],"sources":["../../src/cli/status.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { PROVIDER_ENTRIES } from './providers.js';\n\ntype StatusResult = {\n version: string;\n providers: Array<{ name: string; installed: boolean }>;\n env: Record<string, boolean>;\n patchActive: boolean;\n};\n\nconst isPackageInstalled = (cwd: string, pkg: string): boolean => {\n const nmPath = join(cwd, 'node_modules', ...pkg.split('/'));\n return existsSync(nmPath);\n};\n\nfunction resolveVersion(cwd: string): string {\n // First try the user's project node_modules\n try {\n const nmPkgPath = join(cwd, 'node_modules', '@amplitude', 'ai', 'package.json');\n if (existsSync(nmPkgPath)) {\n const pkg = JSON.parse(readFileSync(nmPkgPath, 'utf8')) as { version?: string };\n if (pkg.version) return pkg.version;\n }\n } catch { /* fall through */ }\n\n // Fallback: read our own package.json (works when running from the SDK repo)\n try {\n const selfDir = dirname(fileURLToPath(import.meta.url));\n const selfPkgPath = join(selfDir, '..', '..', 'package.json');\n if (existsSync(selfPkgPath)) {\n const pkg = JSON.parse(readFileSync(selfPkgPath, 'utf8')) as { version?: string };\n if (pkg.version) return pkg.version;\n }\n } catch { /* fall through */ }\n\n return 'unknown';\n}\n\nconst runStatus = (cwd: string): StatusResult => {\n const version = resolveVersion(cwd);\n\n const installedCache = new Map<string, boolean>();\n const providers = PROVIDER_ENTRIES.map(({ name, npm }) => {\n if (!installedCache.has(npm)) {\n installedCache.set(npm, isPackageInstalled(cwd, npm));\n }\n return { name, installed: installedCache.get(npm) ?? false };\n });\n\n const env: Record<string, boolean> = {\n AMPLITUDE_AI_API_KEY: Boolean(process.env.AMPLITUDE_AI_API_KEY),\n AMPLITUDE_AI_CONTENT_MODE: Boolean(process.env.AMPLITUDE_AI_CONTENT_MODE),\n AMPLITUDE_AI_DEBUG: Boolean(process.env.AMPLITUDE_AI_DEBUG),\n };\n\n return {\n version,\n providers,\n env,\n patchActive: false,\n };\n};\n\nexport { runStatus, type StatusResult };\n"],"mappings":";;;;;;AAYA,MAAM,sBAAsB,KAAa,QAAyB;AAEhE,QAAO,WADQ,KAAK,KAAK,gBAAgB,GAAG,IAAI,MAAM,IAAI,CAAC,CAClC;;AAG3B,SAAS,eAAe,KAAqB;AAE3C,KAAI;EACF,MAAM,YAAY,KAAK,KAAK,gBAAgB,cAAc,MAAM,eAAe;AAC/E,MAAI,WAAW,UAAU,EAAE;GACzB,MAAM,MAAM,KAAK,MAAM,aAAa,WAAW,OAAO,CAAC;AACvD,OAAI,IAAI,QAAS,QAAO,IAAI;;SAExB;AAGR,KAAI;EAEF,MAAM,cAAc,KADJ,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EACrB,MAAM,MAAM,eAAe;AAC7D,MAAI,WAAW,YAAY,EAAE;GAC3B,MAAM,MAAM,KAAK,MAAM,aAAa,aAAa,OAAO,CAAC;AACzD,OAAI,IAAI,QAAS,QAAO,IAAI;;SAExB;AAER,QAAO;;AAGT,MAAM,aAAa,QAA8B;CAC/C,MAAM,UAAU,eAAe,IAAI;CAEnC,MAAM,iCAAiB,IAAI,KAAsB;AAcjD,QAAO;EACL;EACA,WAfgB,iBAAiB,KAAK,EAAE,MAAM,UAAU;AACxD,OAAI,CAAC,eAAe,IAAI,IAAI,CAC1B,gBAAe,IAAI,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAEvD,UAAO;IAAE;IAAM,WAAW,eAAe,IAAI,IAAI,IAAI;IAAO;IAC5D;EAWA,KATmC;GACnC,sBAAsB,QAAQ,QAAQ,IAAI,qBAAqB;GAC/D,2BAA2B,QAAQ,QAAQ,IAAI,0BAA0B;GACzE,oBAAoB,QAAQ,QAAQ,IAAI,mBAAmB;GAC5D;EAMC,aAAa;EACd"}
package/dist/client.d.ts CHANGED
@@ -3,7 +3,7 @@ import { AIConfig } from "./config.js";
3
3
  import { MessageLabel, SessionEnrichments } from "./core/enrichments.js";
4
4
  import { TenantHandle } from "./tenant.js";
5
5
  import { AmplitudeClientLike, Attachment } from "./types.js";
6
- import { BoundAgent } from "./bound-agent.js";
6
+ import { AgentOptions, BoundAgent } from "./bound-agent.js";
7
7
 
8
8
  //#region src/client.d.ts
9
9
 
@@ -31,11 +31,14 @@ declare class AmplitudeAI {
31
31
  protected _config: AIConfig;
32
32
  protected _privacyConfig: PrivacyConfig;
33
33
  protected _sessionTurnCounters: Map<string, number>;
34
+ /** @internal Tracks events since last flush() — used by the exit warning. */
35
+ _trackCountSinceFlush: number;
34
36
  constructor(options: {
35
37
  amplitude?: AmplitudeClientLike;
36
38
  apiKey?: string;
37
39
  config?: AIConfig;
38
40
  });
41
+ private _installTrackCounter;
39
42
  private _installTrackHook;
40
43
  get amplitude(): AmplitudeClientLike;
41
44
  get config(): AIConfig;
@@ -47,10 +50,12 @@ declare class AmplitudeAI {
47
50
  traceId?: string | null;
48
51
  turnId?: number | null;
49
52
  messageId?: string | null;
53
+ messageSource?: string | null;
50
54
  agentId?: string | null;
51
55
  parentAgentId?: string | null;
52
56
  customerOrgId?: string | null;
53
57
  agentVersion?: string | null;
58
+ description?: string | null;
54
59
  context?: Record<string, unknown> | null;
55
60
  env?: string | null;
56
61
  isRegeneration?: boolean;
@@ -96,6 +101,7 @@ declare class AmplitudeAI {
96
101
  parentAgentId?: string | null;
97
102
  customerOrgId?: string | null;
98
103
  agentVersion?: string | null;
104
+ description?: string | null;
99
105
  context?: Record<string, unknown> | null;
100
106
  env?: string | null;
101
107
  isError?: boolean;
@@ -121,6 +127,7 @@ declare class AmplitudeAI {
121
127
  parentAgentId?: string | null;
122
128
  customerOrgId?: string | null;
123
129
  agentVersion?: string | null;
130
+ description?: string | null;
124
131
  context?: Record<string, unknown> | null;
125
132
  env?: string | null;
126
133
  errorMessage?: string | null;
@@ -142,6 +149,7 @@ declare class AmplitudeAI {
142
149
  parentAgentId?: string | null;
143
150
  customerOrgId?: string | null;
144
151
  agentVersion?: string | null;
152
+ description?: string | null;
145
153
  context?: Record<string, unknown> | null;
146
154
  env?: string | null;
147
155
  eventProperties?: Record<string, unknown> | null;
@@ -163,6 +171,7 @@ declare class AmplitudeAI {
163
171
  parentAgentId?: string | null;
164
172
  customerOrgId?: string | null;
165
173
  agentVersion?: string | null;
174
+ description?: string | null;
166
175
  context?: Record<string, unknown> | null;
167
176
  env?: string | null;
168
177
  eventProperties?: Record<string, unknown> | null;
@@ -178,6 +187,7 @@ declare class AmplitudeAI {
178
187
  parentAgentId?: string | null;
179
188
  customerOrgId?: string | null;
180
189
  agentVersion?: string | null;
190
+ description?: string | null;
181
191
  context?: Record<string, unknown> | null;
182
192
  env?: string | null;
183
193
  abandonmentTurn?: number | null;
@@ -195,6 +205,7 @@ declare class AmplitudeAI {
195
205
  parentAgentId?: string | null;
196
206
  customerOrgId?: string | null;
197
207
  agentVersion?: string | null;
208
+ description?: string | null;
198
209
  context?: Record<string, unknown> | null;
199
210
  env?: string | null;
200
211
  eventProperties?: Record<string, unknown> | null;
@@ -215,24 +226,13 @@ declare class AmplitudeAI {
215
226
  parentAgentId?: string | null;
216
227
  customerOrgId?: string | null;
217
228
  agentVersion?: string | null;
229
+ description?: string | null;
218
230
  context?: Record<string, unknown> | null;
219
231
  env?: string | null;
220
232
  eventProperties?: Record<string, unknown> | null;
221
233
  groups?: Record<string, unknown> | null;
222
234
  }): void;
223
- agent(agentId: string, opts?: {
224
- userId?: string | null;
225
- parentAgentId?: string | null;
226
- customerOrgId?: string | null;
227
- agentVersion?: string | null;
228
- context?: Record<string, unknown> | null;
229
- env?: string | null;
230
- sessionId?: string | null;
231
- traceId?: string | null;
232
- groups?: Record<string, unknown> | null;
233
- deviceId?: string | null;
234
- browserSessionId?: string | null;
235
- }): BoundAgent;
235
+ agent(agentId: string, opts?: AgentOptions): BoundAgent;
236
236
  tenant(customerOrgId: string, opts?: {
237
237
  groups?: Record<string, unknown> | null;
238
238
  env?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AA+CA;;;;;;;;;;;;;;;;AAsMkB,cAtML,WAAA,CAsMK;EACL,UAAA,UAAA,EAtMW,mBAsMX;EAQC,UAAA,WAAA,EAAA,OAAA;EAKQ,UAAA,OAAA,EAjND,QAiNC;EACT,UAAA,cAAA,EAjNe,aAiNf;EACO,UAAA,oBAAA,EAjNc,GAiNd,CAAA,MAAA,EAAA,MAAA,CAAA;EA4FN,WAAA,CAAA,OAAA,EAAA;IAGQ,SAAA,CAAA,EA7SN,mBA6SM;IACT,MAAA,CAAA,EAAA,MAAA;IA2CC,MAAA,CAAA,EAvVD,QAuVC;EAEQ,CAAA;EACT,QAAA,iBAAA;EA+BI,IAAA,SAAA,CAAA,CAAA,EAjSE,mBAiSF;EACC,IAAA,MAAA,CAAA,CAAA,EA9RF,QA8RE;EAUJ,WAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAEQ,gBAAA,CAAA,IAAA,EAAA;IACT,MAAA,EAAA,MAAA;IAkCK,OAAA,EAAA,MAAA;IAOJ,SAAA,EAAA,MAAA;IAIQ,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IACT,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IA2BI,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAOH,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAEQ,aAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IACT,aAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAwCC,YAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAEQ,OAAA,CAAA,EAtYR,MAsYQ,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,IAAA;IACT,GAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAqCG,cAAA,CAAA,EAAA,OAAA;IAID,MAAA,CAAA,EAAA,OAAA;IAIV,eAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAUgB,WAAA,CAAA,EAzbH,UAybG,EAAA,GAAA,IAAA;IAChB,MAAA,CAAA,EAzbQ,YAybR,EAAA,GAAA,IAAA;IAQO,eAAA,CAAA,EAhcU,MAgcV,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,IAAA;IAAM,MAAA,CAAA,EA/bL,MA+bK,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,IAAA;;;;;;;;;;;;;;;;;gBApZF,MAAM;;;;;;;;;;;kBAWJ;aACL;;;;;;;;cAQC;;;;;sBAKQ;aACT;oBACO;;;;;;;;;;;;;;;;;;cA4FN;;;sBAGQ;aACT;;;;;;;;;;;;;;;;;cA2CC;;sBAEQ;aACT;;;;;;;iBA+BI;kBACC;;;;;;;;;;cAUJ;;sBAEQ;aACT;;;;;kBAkCK;;;;;;;cAOJ;;;;sBAIQ;aACT;;;;;iBA2BI;;;;;;;cAOH;;sBAEQ;aACT;;;;;;;;;;;;;;;;;cAwCC;;sBAEQ;aACT;;;;;;;cAqCG;;;;aAID;;;MAIV;;aAUgB;;MAChB;YAQO"}
1
+ {"version":3,"file":"client.d.ts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAsEA;;;;;;;;;;;;;;;;AAwNkB,cAxNL,WAAA,CAwNK;EACL,UAAA,UAAA,EAxNW,mBAwNX;EASC,UAAA,WAAA,EAAA,OAAA;EAKQ,UAAA,OAAA,EApOD,QAoOC;EACT,UAAA,cAAA,EApOe,aAoOf;EACO,UAAA,oBAAA,EApOc,GAoOd,CAAA,MAAA,EAAA,MAAA,CAAA;EA8FN;EAGQ,qBAAA,EAAA,MAAA;EACT,WAAA,CAAA,OAAA,EAAA;IA6CC,SAAA,CAAA,EA9WE,mBA8WF;IAEQ,MAAA,CAAA,EAAA,MAAA;IACT,MAAA,CAAA,EA/WA,QA+WA;EAgCI,CAAA;EACC,QAAA,oBAAA;EAWJ,QAAA,iBAAA;EAEQ,IAAA,SAAA,CAAA,CAAA,EAzTH,mBAyTG;EACT,IAAA,MAAA,CAAA,CAAA,EAtTG,QAsTH;EAmCK,WAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAQJ,gBAAA,CAAA,IAAA,EAAA;IAIQ,MAAA,EAAA,MAAA;IACT,OAAA,EAAA,MAAA;IA4BI,SAAA,EAAA,MAAA;IAQH,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAEQ,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IACT,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IA0CC,aAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAEQ,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IACT,aAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IA+BkB,aAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAoB,YAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAU9B,WAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAChB,OAAA,CAAA,EAhcS,MAgcT,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,IAAA;IAQO,GAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAM,cAAA,CAAA,EAAA,OAAA;;;kBAncA;aACL;sBACS;aACT;;;;;;;;;;;;;;;;;gBA6CG,MAAM;;;;;;;;;;;kBAWJ;aACL;;;;;;;;;cASC;;;;;sBAKQ;aACT;oBACO;;;;;;;;;;;;;;;;;;;cA8FN;;;sBAGQ;aACT;;;;;;;;;;;;;;;;;;cA6CC;;sBAEQ;aACT;;;;;;;iBAgCI;kBACC;;;;;;;;;;;cAWJ;;sBAEQ;aACT;;;;;kBAmCK;;;;;;;;cAQJ;;;;sBAIQ;aACT;;;;;iBA4BI;;;;;;;;cAQH;;sBAEQ;aACT;;;;;;;;;;;;;;;;;;cA0CC;;sBAEQ;aACT;;gCA+BkB,eAAoB;;aAU9B;;MAChB;YAQO"}
package/dist/client.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { ConfigurationError } from "./exceptions.js";
2
2
  import { trackAiMessage, trackEmbedding, trackScore, trackSessionEnd, trackSessionEnrichment, trackSpan, trackToolCall, trackUserMessage } from "./core/tracking.js";
3
+ import { isServerless } from "./serverless.js";
3
4
  import { BoundAgent } from "./bound-agent.js";
4
5
  import { AIConfig } from "./config.js";
5
6
  import { setDefaultPropagateContext } from "./propagation.js";
@@ -11,6 +12,19 @@ import { formatDebugLine, formatDryRunLine } from "./utils/debug.js";
11
12
 
12
13
  //#region src/client.ts
13
14
  const _MAX_SESSION_TURN_COUNTERS = 1e4;
15
+ const _activeInstances = /* @__PURE__ */ new Set();
16
+ let _exitHookRegistered = false;
17
+ function _registerExitHook() {
18
+ if (_exitHookRegistered) return;
19
+ _exitHookRegistered = true;
20
+ process.on("beforeExit", () => {
21
+ if (!isServerless()) return;
22
+ for (const instance of _activeInstances) if (instance._trackCountSinceFlush > 0) {
23
+ console.warn(`⚠️ AmplitudeAI: ${instance._trackCountSinceFlush} event(s) were tracked but never flushed. In serverless environments, call \`await ai.flush()\` before your handler returns, or use session.run() which auto-flushes by default.`);
24
+ break;
25
+ }
26
+ });
27
+ }
14
28
  /**
15
29
  * Main Amplitude AI client for tracking LLM interactions.
16
30
  *
@@ -35,6 +49,8 @@ var AmplitudeAI = class {
35
49
  _config;
36
50
  _privacyConfig;
37
51
  _sessionTurnCounters = /* @__PURE__ */ new Map();
52
+ /** @internal Tracks events since last flush() — used by the exit warning. */
53
+ _trackCountSinceFlush = 0;
38
54
  constructor(options) {
39
55
  if (options.amplitude != null) {
40
56
  this._amplitude = options.amplitude;
@@ -50,6 +66,16 @@ var AmplitudeAI = class {
50
66
  this._privacyConfig = this._config.toPrivacyConfig();
51
67
  setDefaultPropagateContext(this._config.propagateContext);
52
68
  if (this._config.debug || this._config.dryRun || this._config.onEventCallback != null) this._installTrackHook();
69
+ this._installTrackCounter();
70
+ _activeInstances.add(this);
71
+ _registerExitHook();
72
+ }
73
+ _installTrackCounter() {
74
+ const originalTrack = this._amplitude.track.bind(this._amplitude);
75
+ this._amplitude.track = (event) => {
76
+ this._trackCountSinceFlush++;
77
+ return originalTrack(event);
78
+ };
53
79
  }
54
80
  _installTrackHook() {
55
81
  const originalTrack = this._amplitude.track.bind(this._amplitude);
@@ -107,10 +133,12 @@ var AmplitudeAI = class {
107
133
  traceId: opts.traceId,
108
134
  turnId: effectiveTurnId,
109
135
  messageId: opts.messageId,
136
+ messageSource: opts.messageSource ?? "user",
110
137
  agentId: opts.agentId,
111
138
  parentAgentId: opts.parentAgentId,
112
139
  customerOrgId: opts.customerOrgId,
113
140
  agentVersion: opts.agentVersion,
141
+ description: opts.description,
114
142
  context: opts.context,
115
143
  env: opts.env,
116
144
  isRegeneration: opts.isRegeneration,
@@ -173,6 +201,7 @@ var AmplitudeAI = class {
173
201
  parentAgentId: opts.parentAgentId,
174
202
  customerOrgId: opts.customerOrgId,
175
203
  agentVersion: opts.agentVersion,
204
+ description: opts.description,
176
205
  context: opts.context,
177
206
  env: opts.env,
178
207
  isError: opts.isError,
@@ -201,6 +230,7 @@ var AmplitudeAI = class {
201
230
  parentAgentId: opts.parentAgentId,
202
231
  customerOrgId: opts.customerOrgId,
203
232
  agentVersion: opts.agentVersion,
233
+ description: opts.description,
204
234
  context: opts.context,
205
235
  env: opts.env,
206
236
  errorMessage: opts.errorMessage,
@@ -226,6 +256,7 @@ var AmplitudeAI = class {
226
256
  parentAgentId: opts.parentAgentId,
227
257
  customerOrgId: opts.customerOrgId,
228
258
  agentVersion: opts.agentVersion,
259
+ description: opts.description,
229
260
  context: opts.context,
230
261
  env: opts.env,
231
262
  eventProperties: opts.eventProperties,
@@ -251,6 +282,7 @@ var AmplitudeAI = class {
251
282
  parentAgentId: opts.parentAgentId,
252
283
  customerOrgId: opts.customerOrgId,
253
284
  agentVersion: opts.agentVersion,
285
+ description: opts.description,
254
286
  context: opts.context,
255
287
  env: opts.env,
256
288
  eventProperties: opts.eventProperties,
@@ -270,6 +302,7 @@ var AmplitudeAI = class {
270
302
  parentAgentId: opts.parentAgentId,
271
303
  customerOrgId: opts.customerOrgId,
272
304
  agentVersion: opts.agentVersion,
305
+ description: opts.description,
273
306
  context: opts.context,
274
307
  env: opts.env,
275
308
  abandonmentTurn: opts.abandonmentTurn,
@@ -292,6 +325,7 @@ var AmplitudeAI = class {
292
325
  parentAgentId: opts.parentAgentId,
293
326
  customerOrgId: opts.customerOrgId,
294
327
  agentVersion: opts.agentVersion,
328
+ description: opts.description,
295
329
  context: opts.context,
296
330
  env: opts.env,
297
331
  eventProperties: opts.eventProperties,
@@ -316,6 +350,7 @@ var AmplitudeAI = class {
316
350
  parentAgentId: opts.parentAgentId,
317
351
  customerOrgId: opts.customerOrgId,
318
352
  agentVersion: opts.agentVersion,
353
+ description: opts.description,
319
354
  context: opts.context,
320
355
  env: opts.env,
321
356
  eventProperties: opts.eventProperties,
@@ -358,9 +393,12 @@ var AmplitudeAI = class {
358
393
  };
359
394
  }
360
395
  flush() {
396
+ this._trackCountSinceFlush = 0;
361
397
  return this._amplitude.flush();
362
398
  }
363
399
  shutdown() {
400
+ _activeInstances.delete(this);
401
+ this._trackCountSinceFlush = 0;
364
402
  if (this._ownsClient) this._amplitude.shutdown?.();
365
403
  }
366
404
  };