@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.
- package/.claude/commands/instrument-with-amplitude-ai.md +12 -0
- package/.cursor/skills/instrument-with-amplitude-ai/SKILL.md +4 -42
- package/AGENTS.md +86 -28
- package/README.md +190 -111
- package/amplitude-ai.md +463 -0
- package/bin/amplitude-ai-doctor.mjs +0 -0
- package/bin/amplitude-ai-instrument.mjs +0 -0
- package/bin/amplitude-ai-mcp.mjs +0 -0
- package/bin/amplitude-ai-register-catalog.mjs +0 -0
- package/bin/amplitude-ai-status.mjs +0 -0
- package/bin/amplitude-ai.mjs +14 -5
- package/data/agent_event_catalog.json +52 -2
- package/dist/bound-agent.d.ts +18 -14
- package/dist/bound-agent.d.ts.map +1 -1
- package/dist/bound-agent.js +4 -1
- package/dist/bound-agent.js.map +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +31 -19
- package/dist/cli/status.js.map +1 -1
- package/dist/client.d.ts +14 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +38 -0
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +5 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/core/constants.d.ts +3 -1
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +3 -1
- package/dist/core/constants.js.map +1 -1
- package/dist/core/tracking.d.ts +12 -2
- package/dist/core/tracking.d.ts.map +1 -1
- package/dist/core/tracking.js +13 -2
- package/dist/core/tracking.js.map +1 -1
- package/dist/decorators.d.ts +1 -1
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +4 -3
- package/dist/decorators.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +5 -2
- package/dist/mcp/contract.d.ts +4 -0
- package/dist/mcp/contract.d.ts.map +1 -1
- package/dist/mcp/contract.js +6 -2
- package/dist/mcp/contract.js.map +1 -1
- package/dist/mcp/generate-verify-test.d.ts +7 -0
- package/dist/mcp/generate-verify-test.d.ts.map +1 -0
- package/dist/mcp/generate-verify-test.js +25 -0
- package/dist/mcp/generate-verify-test.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/instrument-file.d.ts +14 -0
- package/dist/mcp/instrument-file.d.ts.map +1 -0
- package/dist/mcp/instrument-file.js +139 -0
- package/dist/mcp/instrument-file.js.map +1 -0
- package/dist/mcp/scan-project.d.ts +52 -0
- package/dist/mcp/scan-project.d.ts.map +1 -0
- package/dist/mcp/scan-project.js +309 -0
- package/dist/mcp/scan-project.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +79 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/validate-file.d.ts +4 -0
- package/dist/mcp/validate-file.d.ts.map +1 -1
- package/dist/mcp/validate-file.js +559 -11
- package/dist/mcp/validate-file.js.map +1 -1
- package/dist/middleware.js +2 -1
- package/dist/middleware.js.map +1 -1
- package/dist/node_modules/.pnpm/acorn-typescript@1.4.13_acorn@8.16.0/node_modules/acorn-typescript/lib/index.js +2389 -0
- package/dist/node_modules/.pnpm/acorn-typescript@1.4.13_acorn@8.16.0/node_modules/acorn-typescript/lib/index.js.map +1 -0
- package/dist/node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.js +5128 -0
- package/dist/node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +1 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/base.d.ts +2 -1
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +4 -0
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +2 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/serverless.d.ts +19 -0
- package/dist/serverless.d.ts.map +1 -0
- package/dist/serverless.js +35 -0
- package/dist/serverless.js.map +1 -0
- package/dist/session.d.ts +24 -8
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +20 -1
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/costs.d.ts.map +1 -1
- package/dist/utils/costs.js +5 -1
- package/dist/utils/costs.js.map +1 -1
- package/llms-full.txt +353 -69
- package/llms.txt +6 -2
- package/mcp.schema.json +7 -3
- package/package.json +10 -5
- package/bin/amplitude-ai-init.mjs +0 -27
- package/dist/cli/init.d.ts +0 -14
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -40
- package/dist/cli/init.js.map +0 -1
package/dist/bound-agent.d.ts
CHANGED
|
@@ -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?:
|
|
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":";;;;;;AAY8B,KAAlB,eAAA,GAAkB,OAAA,CAC5B,IAD4B,CACvB,UADuB,CACZ,WADY,CAAA,kBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA;AAAO,KAIzB,aAAA,GAAgB,OAJS,CAKnC,IALmC,CAMjC,UANiC,CAMtB,WANsB,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,GAAA,OAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CAAA;AAIzB,KAOA,YAAA,GAAe,OAPF,CAQvB,IARuB,CASrB,UATqB,CASV,WATU,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,GAAA,WAAA,GAAA,SAAA,CAAA,CAAA;AAEV,KAYH,aAAA,GAAgB,OAZb,CAab,IAba,CAcX,UAdW,CAcA,WAdA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,OAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CAAA;AAAX,KAmBQ,QAAA,GAAW,OAnBnB,CAoBF,IApBE,CAoBG,UApBH,CAoBc,WApBd,CAAA,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,UAAA,GAAA,WAAA,CAAA,CAAA;AADF,KAwBU,cAAA,GAAiB,OAxB3B,CAyBA,UAzBA,CAyBW,WAzBX,CAAA,iBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAD0B,KA6BhB,qBAAA,GAAwB,OA7BR,CA8B1B,IA9B0B,CA8BrB,UA9BqB,CA8BV,WA9BU,CAAA,wBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,aAAA,CAAA,CAAA;AAAO,KAiCvB,SAAA,GAAY,OAjCW,CAkCjC,IAlCiC,CAkC5B,UAlC4B,CAkCjB,WAlCiB,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,MAAA,GAAA,OAAA,GAAA,UAAA,CAAA,CAAA;AAOvB,
|
|
1
|
+
{"version":3,"file":"bound-agent.d.ts","names":[],"sources":["../src/bound-agent.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/bound-agent.js
CHANGED
|
@@ -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 ?? {} };
|
package/dist/bound-agent.js.map
CHANGED
|
@@ -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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"}
|
package/dist/cli/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","names":[],"sources":["../../src/cli/status.ts"],"sourcesContent":[],"mappings":";
|
|
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"}
|
package/dist/cli/status.js
CHANGED
|
@@ -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
|
-
|
|
10
|
-
|
|
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
|
|
13
|
-
if (existsSync(
|
|
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
|
-
|
|
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
|
};
|
package/dist/cli/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","names":[
|
|
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;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;
|
|
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
|
};
|