@contractspec/lib.ai-agent 1.62.0 → 2.1.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/dist/agent/agent-factory.d.ts +0 -1
- package/dist/agent/agent-factory.js +296 -41
- package/dist/agent/agent.test.d.ts +0 -1
- package/dist/agent/contract-spec-agent.d.ts +3 -2
- package/dist/agent/contract-spec-agent.js +296 -41
- package/dist/agent/index.d.ts +0 -1
- package/dist/agent/index.js +298 -43
- package/dist/agent/json-runner.d.ts +0 -1
- package/dist/agent/json-runner.js +297 -42
- package/dist/agent/json-runner.test.d.ts +0 -1
- package/dist/agent/unified-agent.d.ts +0 -1
- package/dist/agent/unified-agent.js +297 -42
- package/dist/approval/index.d.ts +0 -1
- package/dist/approval/index.js +31 -5
- package/dist/approval/workflow.d.ts +7 -2
- package/dist/approval/workflow.js +31 -5
- package/dist/exporters/claude-agent-exporter.d.ts +0 -1
- package/dist/exporters/claude-agent-exporter.js +4 -4
- package/dist/exporters/index.d.ts +0 -1
- package/dist/exporters/index.js +4 -4
- package/dist/exporters/opencode-exporter.d.ts +0 -1
- package/dist/exporters/opencode-exporter.js +4 -4
- package/dist/exporters/types.d.ts +0 -1
- package/dist/i18n/catalogs/en.d.ts +1 -2
- package/dist/i18n/catalogs/en.js +1 -1
- package/dist/i18n/catalogs/es.d.ts +1 -2
- package/dist/i18n/catalogs/es.js +1 -1
- package/dist/i18n/catalogs/fr.d.ts +1 -2
- package/dist/i18n/catalogs/fr.js +1 -1
- package/dist/i18n/catalogs/index.d.ts +0 -1
- package/dist/i18n/catalogs/index.js +3 -3
- package/dist/i18n/i18n.test.d.ts +0 -1
- package/dist/i18n/index.d.ts +0 -1
- package/dist/i18n/index.js +4 -4
- package/dist/i18n/keys.d.ts +0 -1
- package/dist/i18n/locale.d.ts +0 -1
- package/dist/i18n/messages.d.ts +1 -2
- package/dist/i18n/messages.js +4 -4
- package/dist/index.d.ts +0 -14
- package/dist/index.js +6 -3523
- package/dist/interop/index.d.ts +0 -1
- package/dist/interop/index.js +4 -4
- package/dist/interop/spec-consumer.d.ts +0 -1
- package/dist/interop/spec-consumer.js +4 -4
- package/dist/interop/tool-consumer.d.ts +0 -1
- package/dist/interop/tool-consumer.js +4 -4
- package/dist/interop/types.d.ts +0 -1
- package/dist/knowledge/index.d.ts +0 -1
- package/dist/knowledge/index.js +4 -4
- package/dist/knowledge/injector.d.ts +0 -1
- package/dist/knowledge/injector.js +4 -4
- package/dist/memory/in-memory.d.ts +0 -1
- package/dist/memory/index.d.ts +0 -1
- package/dist/memory/manager.d.ts +0 -1
- package/dist/memory/memory.test.d.ts +0 -1
- package/dist/node/agent/agent-factory.js +296 -41
- package/dist/node/agent/contract-spec-agent.js +296 -41
- package/dist/node/agent/index.js +298 -43
- package/dist/node/agent/json-runner.js +297 -42
- package/dist/node/agent/unified-agent.js +297 -42
- package/dist/node/approval/index.js +31 -5
- package/dist/node/approval/workflow.js +31 -5
- package/dist/node/exporters/claude-agent-exporter.js +4 -4
- package/dist/node/exporters/index.js +4 -4
- package/dist/node/exporters/opencode-exporter.js +4 -4
- package/dist/node/i18n/catalogs/en.js +1 -1
- package/dist/node/i18n/catalogs/es.js +1 -1
- package/dist/node/i18n/catalogs/fr.js +1 -1
- package/dist/node/i18n/catalogs/index.js +3 -3
- package/dist/node/i18n/index.js +4 -4
- package/dist/node/i18n/messages.js +4 -4
- package/dist/node/index.js +6 -3523
- package/dist/node/interop/index.js +4 -4
- package/dist/node/interop/spec-consumer.js +4 -4
- package/dist/node/interop/tool-consumer.js +4 -4
- package/dist/node/knowledge/index.js +4 -4
- package/dist/node/knowledge/injector.js +4 -4
- package/dist/node/providers/claude-agent-sdk/adapter.js +4 -4
- package/dist/node/providers/claude-agent-sdk/index.js +4 -4
- package/dist/node/providers/claude-agent-sdk/tool-bridge.js +4 -4
- package/dist/node/providers/index.js +4 -4
- package/dist/node/providers/opencode-sdk/adapter.js +4 -4
- package/dist/node/providers/opencode-sdk/agent-bridge.js +4 -4
- package/dist/node/providers/opencode-sdk/index.js +4 -4
- package/dist/node/providers/opencode-sdk/tool-bridge.js +4 -4
- package/dist/node/providers/registry.js +4 -4
- package/dist/node/session/index.js +37 -2
- package/dist/node/session/store.js +37 -2
- package/dist/node/spec/index.js +5 -5
- package/dist/node/spec/registry.js +5 -5
- package/dist/node/spec/spec.js +4 -4
- package/dist/node/telemetry/adapter.js +84 -4
- package/dist/node/telemetry/index.js +165 -15
- package/dist/node/telemetry/posthog.js +81 -11
- package/dist/node/tools/index.js +4 -4
- package/dist/node/tools/knowledge-tool.js +4 -4
- package/dist/node/tools/mcp-server.js +4 -4
- package/dist/node/tools/tool-adapter.js +4 -4
- package/dist/providers/claude-agent-sdk/adapter.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/adapter.js +4 -4
- package/dist/providers/claude-agent-sdk/index.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/index.js +4 -4
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.js +4 -4
- package/dist/providers/index.d.ts +0 -1
- package/dist/providers/index.js +4 -4
- package/dist/providers/opencode-sdk/adapter.d.ts +0 -1
- package/dist/providers/opencode-sdk/adapter.js +4 -4
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +0 -1
- package/dist/providers/opencode-sdk/agent-bridge.js +4 -4
- package/dist/providers/opencode-sdk/index.d.ts +0 -1
- package/dist/providers/opencode-sdk/index.js +4 -4
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +0 -1
- package/dist/providers/opencode-sdk/tool-bridge.js +4 -4
- package/dist/providers/registry.d.ts +0 -1
- package/dist/providers/registry.js +4 -4
- package/dist/providers/types.d.ts +0 -1
- package/dist/schema/index.d.ts +0 -1
- package/dist/schema/json-schema-to-zod.d.ts +0 -1
- package/dist/schema/schema-output.d.ts +0 -1
- package/dist/session/index.d.ts +0 -1
- package/dist/session/index.js +37 -2
- package/dist/session/store.d.ts +12 -2
- package/dist/session/store.js +37 -2
- package/dist/spec/index.d.ts +0 -1
- package/dist/spec/index.js +5 -5
- package/dist/spec/registry.d.ts +1 -2
- package/dist/spec/registry.js +5 -5
- package/dist/spec/spec.d.ts +3 -4
- package/dist/spec/spec.js +4 -4
- package/dist/telemetry/adapter.d.ts +10 -2
- package/dist/telemetry/adapter.js +84 -4
- package/dist/telemetry/adapter.test.d.ts +1 -0
- package/dist/telemetry/index.d.ts +0 -1
- package/dist/telemetry/index.js +165 -15
- package/dist/telemetry/posthog-types.d.ts +12 -1
- package/dist/telemetry/posthog.d.ts +0 -1
- package/dist/telemetry/posthog.js +81 -11
- package/dist/telemetry/posthog.test.d.ts +0 -1
- package/dist/tools/index.d.ts +0 -1
- package/dist/tools/index.js +4 -4
- package/dist/tools/knowledge-tool.d.ts +0 -1
- package/dist/tools/knowledge-tool.js +4 -4
- package/dist/tools/mcp-client.d.ts +0 -1
- package/dist/tools/mcp-server.d.ts +0 -1
- package/dist/tools/mcp-server.js +4 -4
- package/dist/tools/tool-adapter.d.ts +0 -1
- package/dist/tools/tool-adapter.js +4 -4
- package/dist/tools/tools.test.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/package.json +12 -12
- package/dist/agent/agent-factory.d.ts.map +0 -1
- package/dist/agent/agent.test.d.ts.map +0 -1
- package/dist/agent/contract-spec-agent.d.ts.map +0 -1
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/json-runner.d.ts.map +0 -1
- package/dist/agent/json-runner.test.d.ts.map +0 -1
- package/dist/agent/unified-agent.d.ts.map +0 -1
- package/dist/approval/index.d.ts.map +0 -1
- package/dist/approval/workflow.d.ts.map +0 -1
- package/dist/exporters/claude-agent-exporter.d.ts.map +0 -1
- package/dist/exporters/index.d.ts.map +0 -1
- package/dist/exporters/opencode-exporter.d.ts.map +0 -1
- package/dist/exporters/types.d.ts.map +0 -1
- package/dist/i18n/catalogs/en.d.ts.map +0 -1
- package/dist/i18n/catalogs/es.d.ts.map +0 -1
- package/dist/i18n/catalogs/fr.d.ts.map +0 -1
- package/dist/i18n/catalogs/index.d.ts.map +0 -1
- package/dist/i18n/i18n.test.d.ts.map +0 -1
- package/dist/i18n/index.d.ts.map +0 -1
- package/dist/i18n/keys.d.ts.map +0 -1
- package/dist/i18n/locale.d.ts.map +0 -1
- package/dist/i18n/messages.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interop/index.d.ts.map +0 -1
- package/dist/interop/spec-consumer.d.ts.map +0 -1
- package/dist/interop/tool-consumer.d.ts.map +0 -1
- package/dist/interop/types.d.ts.map +0 -1
- package/dist/knowledge/index.d.ts.map +0 -1
- package/dist/knowledge/injector.d.ts.map +0 -1
- package/dist/memory/in-memory.d.ts.map +0 -1
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/manager.d.ts.map +0 -1
- package/dist/memory/memory.test.d.ts.map +0 -1
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +0 -1
- package/dist/providers/claude-agent-sdk/index.d.ts.map +0 -1
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/opencode-sdk/adapter.d.ts.map +0 -1
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +0 -1
- package/dist/providers/opencode-sdk/index.d.ts.map +0 -1
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +0 -1
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/json-schema-to-zod.d.ts.map +0 -1
- package/dist/schema/schema-output.d.ts.map +0 -1
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/store.d.ts.map +0 -1
- package/dist/spec/index.d.ts.map +0 -1
- package/dist/spec/registry.d.ts.map +0 -1
- package/dist/spec/spec.d.ts.map +0 -1
- package/dist/telemetry/adapter.d.ts.map +0 -1
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/posthog-types.d.ts.map +0 -1
- package/dist/telemetry/posthog.d.ts.map +0 -1
- package/dist/telemetry/posthog.test.d.ts.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/knowledge-tool.d.ts.map +0 -1
- package/dist/tools/mcp-client.d.ts.map +0 -1
- package/dist/tools/mcp-server.d.ts.map +0 -1
- package/dist/tools/tool-adapter.d.ts.map +0 -1
- package/dist/tools/tools.test.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
package/dist/session/store.js
CHANGED
|
@@ -15,10 +15,19 @@ var __require = import.meta.require;
|
|
|
15
15
|
// src/session/store.ts
|
|
16
16
|
class InMemorySessionStore {
|
|
17
17
|
sessions = new Map;
|
|
18
|
+
maxSessions;
|
|
19
|
+
maxMessagesPerSession;
|
|
20
|
+
maxStepsPerSession;
|
|
21
|
+
constructor(options = {}) {
|
|
22
|
+
this.maxSessions = options.maxSessions ?? 500;
|
|
23
|
+
this.maxMessagesPerSession = options.maxMessagesPerSession ?? 200;
|
|
24
|
+
this.maxStepsPerSession = options.maxStepsPerSession ?? 200;
|
|
25
|
+
}
|
|
18
26
|
async get(sessionId) {
|
|
19
27
|
return this.sessions.get(sessionId) ?? null;
|
|
20
28
|
}
|
|
21
29
|
async create(session) {
|
|
30
|
+
this.evictIfNeeded();
|
|
22
31
|
const now = new Date;
|
|
23
32
|
const fullSession = {
|
|
24
33
|
...session,
|
|
@@ -32,6 +41,7 @@ class InMemorySessionStore {
|
|
|
32
41
|
const session = this.sessions.get(sessionId);
|
|
33
42
|
if (session) {
|
|
34
43
|
session.steps.push(step);
|
|
44
|
+
this.trimArray(session.steps, this.maxStepsPerSession);
|
|
35
45
|
session.updatedAt = new Date;
|
|
36
46
|
}
|
|
37
47
|
}
|
|
@@ -39,6 +49,7 @@ class InMemorySessionStore {
|
|
|
39
49
|
const session = this.sessions.get(sessionId);
|
|
40
50
|
if (session) {
|
|
41
51
|
session.messages.push(message);
|
|
52
|
+
this.trimArray(session.messages, this.maxMessagesPerSession);
|
|
42
53
|
session.updatedAt = new Date;
|
|
43
54
|
}
|
|
44
55
|
}
|
|
@@ -76,9 +87,33 @@ class InMemorySessionStore {
|
|
|
76
87
|
clear() {
|
|
77
88
|
this.sessions.clear();
|
|
78
89
|
}
|
|
90
|
+
evictIfNeeded() {
|
|
91
|
+
if (this.sessions.size < this.maxSessions) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let oldestSessionId = null;
|
|
95
|
+
let oldestUpdatedAt = Number.POSITIVE_INFINITY;
|
|
96
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
97
|
+
const updatedAt = session.updatedAt.getTime();
|
|
98
|
+
if (updatedAt < oldestUpdatedAt) {
|
|
99
|
+
oldestUpdatedAt = updatedAt;
|
|
100
|
+
oldestSessionId = sessionId;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (oldestSessionId) {
|
|
104
|
+
this.sessions.delete(oldestSessionId);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
trimArray(items, maxItems) {
|
|
108
|
+
if (items.length <= maxItems) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const overflow = items.length - maxItems;
|
|
112
|
+
items.splice(0, overflow);
|
|
113
|
+
}
|
|
79
114
|
}
|
|
80
|
-
function createInMemorySessionStore() {
|
|
81
|
-
return new InMemorySessionStore;
|
|
115
|
+
function createInMemorySessionStore(options) {
|
|
116
|
+
return new InMemorySessionStore(options);
|
|
82
117
|
}
|
|
83
118
|
function generateSessionId() {
|
|
84
119
|
return `sess_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
package/dist/spec/index.d.ts
CHANGED
package/dist/spec/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
13
13
|
var __require = import.meta.require;
|
|
14
14
|
|
|
15
15
|
// src/i18n/catalogs/en.ts
|
|
16
|
-
import { defineTranslation } from "@contractspec/lib.contracts/translations";
|
|
16
|
+
import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
|
|
17
17
|
var enMessages;
|
|
18
18
|
var init_en = __esm(() => {
|
|
19
19
|
enMessages = defineTranslation({
|
|
@@ -609,7 +609,7 @@ var init_en = __esm(() => {
|
|
|
609
609
|
});
|
|
610
610
|
|
|
611
611
|
// src/i18n/catalogs/fr.ts
|
|
612
|
-
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts/translations";
|
|
612
|
+
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
|
|
613
613
|
var frMessages;
|
|
614
614
|
var init_fr = __esm(() => {
|
|
615
615
|
frMessages = defineTranslation2({
|
|
@@ -1220,7 +1220,7 @@ var init_fr = __esm(() => {
|
|
|
1220
1220
|
});
|
|
1221
1221
|
|
|
1222
1222
|
// src/i18n/catalogs/es.ts
|
|
1223
|
-
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts/translations";
|
|
1223
|
+
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
|
|
1224
1224
|
var esMessages;
|
|
1225
1225
|
var init_es = __esm(() => {
|
|
1226
1226
|
esMessages = defineTranslation3({
|
|
@@ -1885,7 +1885,7 @@ var init_locale = __esm(() => {
|
|
|
1885
1885
|
});
|
|
1886
1886
|
|
|
1887
1887
|
// src/i18n/messages.ts
|
|
1888
|
-
import { TranslationRegistry } from "@contractspec/lib.contracts/translations";
|
|
1888
|
+
import { TranslationRegistry } from "@contractspec/lib.contracts-spec/translations";
|
|
1889
1889
|
function getRegistry() {
|
|
1890
1890
|
if (!sharedRegistry) {
|
|
1891
1891
|
sharedRegistry = new TranslationRegistry([
|
|
@@ -2140,7 +2140,7 @@ var init_spec = __esm(() => {
|
|
|
2140
2140
|
// src/spec/registry.ts
|
|
2141
2141
|
init_i18n();
|
|
2142
2142
|
import { compareVersions } from "compare-versions";
|
|
2143
|
-
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
2143
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
|
|
2144
2144
|
|
|
2145
2145
|
class AgentRegistry extends SpecContractRegistry {
|
|
2146
2146
|
constructor(items) {
|
package/dist/spec/registry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentSpec } from './spec';
|
|
2
|
-
import { SpecContractRegistry } from '@contractspec/lib.contracts/registry';
|
|
2
|
+
import { SpecContractRegistry } from '@contractspec/lib.contracts-spec/registry';
|
|
3
3
|
/**
|
|
4
4
|
* Registry for managing agent specifications.
|
|
5
5
|
*
|
|
@@ -39,4 +39,3 @@ export declare class AgentRegistry extends SpecContractRegistry<'agent', AgentSp
|
|
|
39
39
|
* Create a new agent registry.
|
|
40
40
|
*/
|
|
41
41
|
export declare function createAgentRegistry(): AgentRegistry;
|
|
42
|
-
//# sourceMappingURL=registry.d.ts.map
|
package/dist/spec/registry.js
CHANGED
|
@@ -13,7 +13,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
13
13
|
var __require = import.meta.require;
|
|
14
14
|
|
|
15
15
|
// src/i18n/catalogs/en.ts
|
|
16
|
-
import { defineTranslation } from "@contractspec/lib.contracts/translations";
|
|
16
|
+
import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
|
|
17
17
|
var enMessages;
|
|
18
18
|
var init_en = __esm(() => {
|
|
19
19
|
enMessages = defineTranslation({
|
|
@@ -609,7 +609,7 @@ var init_en = __esm(() => {
|
|
|
609
609
|
});
|
|
610
610
|
|
|
611
611
|
// src/i18n/catalogs/fr.ts
|
|
612
|
-
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts/translations";
|
|
612
|
+
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
|
|
613
613
|
var frMessages;
|
|
614
614
|
var init_fr = __esm(() => {
|
|
615
615
|
frMessages = defineTranslation2({
|
|
@@ -1220,7 +1220,7 @@ var init_fr = __esm(() => {
|
|
|
1220
1220
|
});
|
|
1221
1221
|
|
|
1222
1222
|
// src/i18n/catalogs/es.ts
|
|
1223
|
-
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts/translations";
|
|
1223
|
+
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
|
|
1224
1224
|
var esMessages;
|
|
1225
1225
|
var init_es = __esm(() => {
|
|
1226
1226
|
esMessages = defineTranslation3({
|
|
@@ -1885,7 +1885,7 @@ var init_locale = __esm(() => {
|
|
|
1885
1885
|
});
|
|
1886
1886
|
|
|
1887
1887
|
// src/i18n/messages.ts
|
|
1888
|
-
import { TranslationRegistry } from "@contractspec/lib.contracts/translations";
|
|
1888
|
+
import { TranslationRegistry } from "@contractspec/lib.contracts-spec/translations";
|
|
1889
1889
|
function getRegistry() {
|
|
1890
1890
|
if (!sharedRegistry) {
|
|
1891
1891
|
sharedRegistry = new TranslationRegistry([
|
|
@@ -2106,7 +2106,7 @@ var init_i18n = __esm(() => {
|
|
|
2106
2106
|
// src/spec/registry.ts
|
|
2107
2107
|
init_i18n();
|
|
2108
2108
|
import { compareVersions } from "compare-versions";
|
|
2109
|
-
import { SpecContractRegistry } from "@contractspec/lib.contracts/registry";
|
|
2109
|
+
import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
|
|
2110
2110
|
|
|
2111
2111
|
class AgentRegistry extends SpecContractRegistry {
|
|
2112
2112
|
constructor(items) {
|
package/dist/spec/spec.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { OwnerShipMeta } from '@contractspec/lib.contracts/ownership';
|
|
2
|
-
import type { KnowledgeCategory } from '@contractspec/lib.contracts/knowledge/spec';
|
|
3
|
-
import type { PolicyRef } from '@contractspec/lib.contracts/policy/spec';
|
|
1
|
+
import type { OwnerShipMeta } from '@contractspec/lib.contracts-spec/ownership';
|
|
2
|
+
import type { KnowledgeCategory } from '@contractspec/lib.contracts-spec/knowledge/spec';
|
|
3
|
+
import type { PolicyRef } from '@contractspec/lib.contracts-spec/policy/spec';
|
|
4
4
|
/**
|
|
5
5
|
* Metadata for an agent specification.
|
|
6
6
|
*/
|
|
@@ -121,4 +121,3 @@ export declare function defineAgent(spec: AgentSpec): AgentSpec;
|
|
|
121
121
|
* Generate a unique key for an agent spec.
|
|
122
122
|
*/
|
|
123
123
|
export declare function agentKey(meta: AgentMeta): string;
|
|
124
|
-
//# sourceMappingURL=spec.d.ts.map
|
package/dist/spec/spec.js
CHANGED
|
@@ -13,7 +13,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
13
13
|
var __require = import.meta.require;
|
|
14
14
|
|
|
15
15
|
// src/i18n/catalogs/en.ts
|
|
16
|
-
import { defineTranslation } from "@contractspec/lib.contracts/translations";
|
|
16
|
+
import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
|
|
17
17
|
var enMessages;
|
|
18
18
|
var init_en = __esm(() => {
|
|
19
19
|
enMessages = defineTranslation({
|
|
@@ -609,7 +609,7 @@ var init_en = __esm(() => {
|
|
|
609
609
|
});
|
|
610
610
|
|
|
611
611
|
// src/i18n/catalogs/fr.ts
|
|
612
|
-
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts/translations";
|
|
612
|
+
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
|
|
613
613
|
var frMessages;
|
|
614
614
|
var init_fr = __esm(() => {
|
|
615
615
|
frMessages = defineTranslation2({
|
|
@@ -1220,7 +1220,7 @@ var init_fr = __esm(() => {
|
|
|
1220
1220
|
});
|
|
1221
1221
|
|
|
1222
1222
|
// src/i18n/catalogs/es.ts
|
|
1223
|
-
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts/translations";
|
|
1223
|
+
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
|
|
1224
1224
|
var esMessages;
|
|
1225
1225
|
var init_es = __esm(() => {
|
|
1226
1226
|
esMessages = defineTranslation3({
|
|
@@ -1885,7 +1885,7 @@ var init_locale = __esm(() => {
|
|
|
1885
1885
|
});
|
|
1886
1886
|
|
|
1887
1887
|
// src/i18n/messages.ts
|
|
1888
|
-
import { TranslationRegistry } from "@contractspec/lib.contracts/translations";
|
|
1888
|
+
import { TranslationRegistry } from "@contractspec/lib.contracts-spec/translations";
|
|
1889
1889
|
function getRegistry() {
|
|
1890
1890
|
if (!sharedRegistry) {
|
|
1891
1891
|
sharedRegistry = new TranslationRegistry([
|
|
@@ -26,6 +26,14 @@ export interface TelemetryCollector {
|
|
|
26
26
|
*/
|
|
27
27
|
collect(sample: OperationMetricSample): Promise<void>;
|
|
28
28
|
}
|
|
29
|
+
interface TrackAgentStepContext {
|
|
30
|
+
sessionId?: string;
|
|
31
|
+
tenantId?: string;
|
|
32
|
+
actorId?: string;
|
|
33
|
+
traceId?: string;
|
|
34
|
+
stepIndex?: number;
|
|
35
|
+
stepStartedAt?: Date;
|
|
36
|
+
}
|
|
29
37
|
/**
|
|
30
38
|
* Track an agent step for telemetry.
|
|
31
39
|
*
|
|
@@ -37,7 +45,7 @@ export interface TelemetryCollector {
|
|
|
37
45
|
* @param step - AI SDK step result
|
|
38
46
|
* @param durationMs - Optional step duration in milliseconds
|
|
39
47
|
*/
|
|
40
|
-
export declare function trackAgentStep(collector: TelemetryCollector, agentId: string, step: StepResult<ToolSet>, durationMs?: number): Promise<void>;
|
|
48
|
+
export declare function trackAgentStep(collector: TelemetryCollector, agentId: string, step: StepResult<ToolSet>, durationMs?: number, context?: TrackAgentStepContext): Promise<void>;
|
|
41
49
|
/**
|
|
42
50
|
* In-memory telemetry collector for testing.
|
|
43
51
|
*/
|
|
@@ -65,4 +73,4 @@ export declare function createInMemoryTelemetryCollector(): InMemoryTelemetryCol
|
|
|
65
73
|
* No-op telemetry collector that discards all metrics.
|
|
66
74
|
*/
|
|
67
75
|
export declare const noopTelemetryCollector: TelemetryCollector;
|
|
68
|
-
|
|
76
|
+
export {};
|
|
@@ -14,24 +14,78 @@ var __require = import.meta.require;
|
|
|
14
14
|
|
|
15
15
|
// src/telemetry/adapter.ts
|
|
16
16
|
function parseAgentId(agentId) {
|
|
17
|
-
const match = agentId.match(/^(.+)\.v(\
|
|
17
|
+
const match = agentId.match(/^(.+)\.v(\d+)$/);
|
|
18
18
|
if (match) {
|
|
19
19
|
return { name: match[1], version: match[2] };
|
|
20
20
|
}
|
|
21
21
|
return { name: agentId, version: "1.0.0" };
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
function getRecord(value) {
|
|
24
|
+
return value && typeof value === "object" ? value : undefined;
|
|
25
|
+
}
|
|
26
|
+
function getStepResponse(step) {
|
|
27
|
+
const response = getRecord(step.response);
|
|
28
|
+
if (!response)
|
|
29
|
+
return;
|
|
30
|
+
return {
|
|
31
|
+
id: response["id"],
|
|
32
|
+
modelId: response["modelId"],
|
|
33
|
+
timestamp: response["timestamp"],
|
|
34
|
+
headers: response["headers"],
|
|
35
|
+
body: response["body"],
|
|
36
|
+
messages: response["messages"]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function getRequestBodyValue(request, key) {
|
|
40
|
+
const body = request?.["body"];
|
|
41
|
+
if (!body)
|
|
42
|
+
return;
|
|
43
|
+
if (typeof body === "string") {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(body);
|
|
46
|
+
return typeof parsed[key] === "string" ? parsed[key] : undefined;
|
|
47
|
+
} catch {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const record = getRecord(body);
|
|
52
|
+
return typeof record?.[key] === "string" ? record[key] : undefined;
|
|
53
|
+
}
|
|
54
|
+
async function trackAgentStep(collector, agentId, step, durationMs, context) {
|
|
24
55
|
const { name, version } = parseAgentId(agentId);
|
|
56
|
+
const response = getStepResponse(step);
|
|
57
|
+
const providerMetadata = step.providerMetadata;
|
|
58
|
+
const warnings = step.warnings;
|
|
59
|
+
const rawFinishReason = step.rawFinishReason;
|
|
60
|
+
const request = getRecord(step.request);
|
|
61
|
+
const traceId = context?.traceId ?? getRequestBodyValue(request, "$ai_trace_id");
|
|
62
|
+
const sessionId = context?.sessionId ?? getRequestBodyValue(request, "$ai_session_id");
|
|
63
|
+
const parentSpanId = response?.id;
|
|
25
64
|
for (const toolCall of step.toolCalls ?? []) {
|
|
65
|
+
const toolResult = step.toolResults?.find((r) => r.toolCallId === toolCall.toolCallId);
|
|
66
|
+
const toolError = getRecord(toolResult?.output)?.["error"];
|
|
26
67
|
const toolSample = {
|
|
27
68
|
operation: { name: `${name}.${toolCall.toolName}`, version },
|
|
28
69
|
durationMs: durationMs ?? 0,
|
|
29
70
|
success: step.toolResults?.some((r) => r.toolCallId === toolCall.toolCallId && r.output !== undefined) ?? false,
|
|
30
71
|
timestamp: new Date,
|
|
31
72
|
metadata: {
|
|
73
|
+
telemetryEvent: "span",
|
|
74
|
+
traceId,
|
|
75
|
+
sessionId,
|
|
76
|
+
spanId: toolCall.toolCallId,
|
|
77
|
+
parentSpanId,
|
|
78
|
+
spanName: `tool.${toolCall.toolName}`,
|
|
32
79
|
agentId,
|
|
80
|
+
actorId: context?.actorId,
|
|
81
|
+
tenantId: context?.tenantId,
|
|
82
|
+
stepIndex: context?.stepIndex,
|
|
33
83
|
toolName: toolCall.toolName,
|
|
34
|
-
|
|
84
|
+
toolCallArgs: toolCall.input,
|
|
85
|
+
toolResultOutput: toolResult?.output,
|
|
86
|
+
errorMessage: typeof toolError === "string" ? toolError : typeof toolResult?.output === "string" ? toolResult.output : undefined,
|
|
87
|
+
finishReason: step.finishReason,
|
|
88
|
+
rawFinishReason
|
|
35
89
|
}
|
|
36
90
|
};
|
|
37
91
|
await collector.collect(toolSample);
|
|
@@ -42,10 +96,36 @@ async function trackAgentStep(collector, agentId, step, durationMs) {
|
|
|
42
96
|
success: step.finishReason !== "error",
|
|
43
97
|
timestamp: new Date,
|
|
44
98
|
metadata: {
|
|
99
|
+
telemetryEvent: "generation",
|
|
100
|
+
traceId,
|
|
101
|
+
sessionId,
|
|
102
|
+
spanId: response?.id,
|
|
103
|
+
spanName: `agent.${name}.step`,
|
|
45
104
|
agentId,
|
|
105
|
+
actorId: context?.actorId,
|
|
106
|
+
tenantId: context?.tenantId,
|
|
107
|
+
stepIndex: context?.stepIndex,
|
|
108
|
+
stepStartedAt: context?.stepStartedAt,
|
|
46
109
|
finishReason: step.finishReason,
|
|
110
|
+
rawFinishReason,
|
|
47
111
|
tokenUsage: step.usage,
|
|
48
|
-
|
|
112
|
+
totalUsage: step.totalUsage,
|
|
113
|
+
providerMetadata,
|
|
114
|
+
warnings,
|
|
115
|
+
stepText: step.text,
|
|
116
|
+
stepReasoningText: step.reasoningText,
|
|
117
|
+
responseId: response?.id,
|
|
118
|
+
responseModelId: response?.modelId,
|
|
119
|
+
responseTimestamp: response?.timestamp,
|
|
120
|
+
responseHeaders: response?.headers,
|
|
121
|
+
responseBody: response?.body,
|
|
122
|
+
responseMessages: response?.messages,
|
|
123
|
+
requestBody: request?.["body"],
|
|
124
|
+
requestHeaders: request?.["headers"],
|
|
125
|
+
toolCallCount: step.toolCalls?.length ?? 0,
|
|
126
|
+
toolCalls: step.toolCalls,
|
|
127
|
+
toolResults: step.toolResults,
|
|
128
|
+
errorMessage: step.finishReason === "error" ? step.text : undefined
|
|
49
129
|
}
|
|
50
130
|
};
|
|
51
131
|
await collector.collect(stepSample);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/telemetry/index.js
CHANGED
|
@@ -14,24 +14,78 @@ var __require = import.meta.require;
|
|
|
14
14
|
|
|
15
15
|
// src/telemetry/adapter.ts
|
|
16
16
|
function parseAgentId(agentId) {
|
|
17
|
-
const match = agentId.match(/^(.+)\.v(\
|
|
17
|
+
const match = agentId.match(/^(.+)\.v(\d+)$/);
|
|
18
18
|
if (match) {
|
|
19
19
|
return { name: match[1], version: match[2] };
|
|
20
20
|
}
|
|
21
21
|
return { name: agentId, version: "1.0.0" };
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
function getRecord(value) {
|
|
24
|
+
return value && typeof value === "object" ? value : undefined;
|
|
25
|
+
}
|
|
26
|
+
function getStepResponse(step) {
|
|
27
|
+
const response = getRecord(step.response);
|
|
28
|
+
if (!response)
|
|
29
|
+
return;
|
|
30
|
+
return {
|
|
31
|
+
id: response["id"],
|
|
32
|
+
modelId: response["modelId"],
|
|
33
|
+
timestamp: response["timestamp"],
|
|
34
|
+
headers: response["headers"],
|
|
35
|
+
body: response["body"],
|
|
36
|
+
messages: response["messages"]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function getRequestBodyValue(request, key) {
|
|
40
|
+
const body = request?.["body"];
|
|
41
|
+
if (!body)
|
|
42
|
+
return;
|
|
43
|
+
if (typeof body === "string") {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(body);
|
|
46
|
+
return typeof parsed[key] === "string" ? parsed[key] : undefined;
|
|
47
|
+
} catch {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const record = getRecord(body);
|
|
52
|
+
return typeof record?.[key] === "string" ? record[key] : undefined;
|
|
53
|
+
}
|
|
54
|
+
async function trackAgentStep(collector, agentId, step, durationMs, context) {
|
|
24
55
|
const { name, version } = parseAgentId(agentId);
|
|
56
|
+
const response = getStepResponse(step);
|
|
57
|
+
const providerMetadata = step.providerMetadata;
|
|
58
|
+
const warnings = step.warnings;
|
|
59
|
+
const rawFinishReason = step.rawFinishReason;
|
|
60
|
+
const request = getRecord(step.request);
|
|
61
|
+
const traceId = context?.traceId ?? getRequestBodyValue(request, "$ai_trace_id");
|
|
62
|
+
const sessionId = context?.sessionId ?? getRequestBodyValue(request, "$ai_session_id");
|
|
63
|
+
const parentSpanId = response?.id;
|
|
25
64
|
for (const toolCall of step.toolCalls ?? []) {
|
|
65
|
+
const toolResult = step.toolResults?.find((r) => r.toolCallId === toolCall.toolCallId);
|
|
66
|
+
const toolError = getRecord(toolResult?.output)?.["error"];
|
|
26
67
|
const toolSample = {
|
|
27
68
|
operation: { name: `${name}.${toolCall.toolName}`, version },
|
|
28
69
|
durationMs: durationMs ?? 0,
|
|
29
70
|
success: step.toolResults?.some((r) => r.toolCallId === toolCall.toolCallId && r.output !== undefined) ?? false,
|
|
30
71
|
timestamp: new Date,
|
|
31
72
|
metadata: {
|
|
73
|
+
telemetryEvent: "span",
|
|
74
|
+
traceId,
|
|
75
|
+
sessionId,
|
|
76
|
+
spanId: toolCall.toolCallId,
|
|
77
|
+
parentSpanId,
|
|
78
|
+
spanName: `tool.${toolCall.toolName}`,
|
|
32
79
|
agentId,
|
|
80
|
+
actorId: context?.actorId,
|
|
81
|
+
tenantId: context?.tenantId,
|
|
82
|
+
stepIndex: context?.stepIndex,
|
|
33
83
|
toolName: toolCall.toolName,
|
|
34
|
-
|
|
84
|
+
toolCallArgs: toolCall.input,
|
|
85
|
+
toolResultOutput: toolResult?.output,
|
|
86
|
+
errorMessage: typeof toolError === "string" ? toolError : typeof toolResult?.output === "string" ? toolResult.output : undefined,
|
|
87
|
+
finishReason: step.finishReason,
|
|
88
|
+
rawFinishReason
|
|
35
89
|
}
|
|
36
90
|
};
|
|
37
91
|
await collector.collect(toolSample);
|
|
@@ -42,10 +96,36 @@ async function trackAgentStep(collector, agentId, step, durationMs) {
|
|
|
42
96
|
success: step.finishReason !== "error",
|
|
43
97
|
timestamp: new Date,
|
|
44
98
|
metadata: {
|
|
99
|
+
telemetryEvent: "generation",
|
|
100
|
+
traceId,
|
|
101
|
+
sessionId,
|
|
102
|
+
spanId: response?.id,
|
|
103
|
+
spanName: `agent.${name}.step`,
|
|
45
104
|
agentId,
|
|
105
|
+
actorId: context?.actorId,
|
|
106
|
+
tenantId: context?.tenantId,
|
|
107
|
+
stepIndex: context?.stepIndex,
|
|
108
|
+
stepStartedAt: context?.stepStartedAt,
|
|
46
109
|
finishReason: step.finishReason,
|
|
110
|
+
rawFinishReason,
|
|
47
111
|
tokenUsage: step.usage,
|
|
48
|
-
|
|
112
|
+
totalUsage: step.totalUsage,
|
|
113
|
+
providerMetadata,
|
|
114
|
+
warnings,
|
|
115
|
+
stepText: step.text,
|
|
116
|
+
stepReasoningText: step.reasoningText,
|
|
117
|
+
responseId: response?.id,
|
|
118
|
+
responseModelId: response?.modelId,
|
|
119
|
+
responseTimestamp: response?.timestamp,
|
|
120
|
+
responseHeaders: response?.headers,
|
|
121
|
+
responseBody: response?.body,
|
|
122
|
+
responseMessages: response?.messages,
|
|
123
|
+
requestBody: request?.["body"],
|
|
124
|
+
requestHeaders: request?.["headers"],
|
|
125
|
+
toolCallCount: step.toolCalls?.length ?? 0,
|
|
126
|
+
toolCalls: step.toolCalls,
|
|
127
|
+
toolResults: step.toolResults,
|
|
128
|
+
errorMessage: step.finishReason === "error" ? step.text : undefined
|
|
49
129
|
}
|
|
50
130
|
};
|
|
51
131
|
await collector.collect(stepSample);
|
|
@@ -105,23 +185,60 @@ class PostHogTelemetryCollector {
|
|
|
105
185
|
}
|
|
106
186
|
async collect(sample) {
|
|
107
187
|
const client = await this.getClient();
|
|
108
|
-
const
|
|
188
|
+
const metadata = asRecord(sample.metadata);
|
|
189
|
+
const distinctId = this.config.defaults?.posthogDistinctId ?? asString(metadata["actorId"]) ?? "system";
|
|
190
|
+
const traceId = asString(metadata["traceId"]) ?? this.config.defaults?.posthogTraceId;
|
|
191
|
+
const sessionId = asString(metadata["sessionId"]);
|
|
192
|
+
const telemetryEvent = asString(metadata["telemetryEvent"]);
|
|
193
|
+
const event = telemetryEvent === "span" ? "$ai_span" : "$ai_generation";
|
|
194
|
+
const tokenUsage = metadata["tokenUsage"];
|
|
195
|
+
const totalUsage = metadata["totalUsage"];
|
|
196
|
+
const errorMessage = asString(metadata["errorMessage"]);
|
|
109
197
|
client.capture({
|
|
110
198
|
distinctId,
|
|
111
|
-
event
|
|
199
|
+
event,
|
|
112
200
|
properties: {
|
|
113
|
-
$ai_model: sample.operation.name,
|
|
114
|
-
$ai_provider: "contractspec",
|
|
201
|
+
$ai_model: asString(metadata["responseModelId"]) ?? sample.operation.name,
|
|
202
|
+
$ai_provider: asString(metadata["provider"]) ?? "contractspec",
|
|
115
203
|
$ai_latency: sample.durationMs / 1000,
|
|
116
204
|
$ai_is_error: !sample.success,
|
|
117
|
-
$
|
|
118
|
-
|
|
205
|
+
$ai_error: !sample.success ? errorMessage : undefined,
|
|
206
|
+
$ai_trace_id: traceId,
|
|
207
|
+
$ai_session_id: sessionId,
|
|
208
|
+
$ai_span_id: asString(metadata["spanId"]),
|
|
209
|
+
$ai_parent_id: asString(metadata["parentSpanId"]),
|
|
210
|
+
$ai_span_name: asString(metadata["spanName"]) ?? sample.operation.name,
|
|
211
|
+
...tokenUsage ? mapTokenUsage(tokenUsage) : {},
|
|
212
|
+
...totalUsage ? mapTotalUsage(totalUsage) : {},
|
|
213
|
+
$ai_http_status: asNumber(metadata["httpStatus"]),
|
|
214
|
+
$ai_request_url: asString(metadata["requestUrl"]),
|
|
215
|
+
$ai_base_url: asString(metadata["baseUrl"]),
|
|
119
216
|
...this.config.defaults?.posthogProperties,
|
|
120
217
|
contractspec_operation: sample.operation.name,
|
|
121
218
|
contractspec_version: sample.operation.version,
|
|
122
|
-
contractspec_agent_id:
|
|
123
|
-
|
|
124
|
-
|
|
219
|
+
contractspec_agent_id: asString(metadata["agentId"]),
|
|
220
|
+
contractspec_tenant_id: asString(metadata["tenantId"]),
|
|
221
|
+
contractspec_actor_id: asString(metadata["actorId"]),
|
|
222
|
+
contractspec_step_index: asNumber(metadata["stepIndex"]),
|
|
223
|
+
contractspec_step_started_at: asDateIso(metadata["stepStartedAt"]),
|
|
224
|
+
contractspec_finish_reason: asString(metadata["finishReason"]),
|
|
225
|
+
contractspec_finish_reason_raw: asString(metadata["rawFinishReason"]),
|
|
226
|
+
contractspec_tool_count: asNumber(metadata["toolCallCount"]),
|
|
227
|
+
contractspec_tool_name: asString(metadata["toolName"]),
|
|
228
|
+
contractspec_tool_call_args: metadata["toolCallArgs"],
|
|
229
|
+
contractspec_tool_result_output: metadata["toolResultOutput"],
|
|
230
|
+
contractspec_provider_metadata: metadata["providerMetadata"],
|
|
231
|
+
contractspec_step_warnings: metadata["warnings"],
|
|
232
|
+
contractspec_response_id: asString(metadata["responseId"]),
|
|
233
|
+
contractspec_response_model_id: asString(metadata["responseModelId"]),
|
|
234
|
+
contractspec_response_timestamp: asDateIso(metadata["responseTimestamp"]),
|
|
235
|
+
contractspec_response_headers: metadata["responseHeaders"],
|
|
236
|
+
contractspec_response_body: this.config.defaults?.posthogPrivacyMode ? undefined : metadata["responseBody"],
|
|
237
|
+
contractspec_response_messages: this.config.defaults?.posthogPrivacyMode ? undefined : metadata["responseMessages"],
|
|
238
|
+
contractspec_request_headers: metadata["requestHeaders"],
|
|
239
|
+
contractspec_request_body: this.config.defaults?.posthogPrivacyMode ? undefined : metadata["requestBody"],
|
|
240
|
+
contractspec_step_text: this.config.defaults?.posthogPrivacyMode ? undefined : metadata["stepText"],
|
|
241
|
+
contractspec_step_reasoning_text: this.config.defaults?.posthogPrivacyMode ? undefined : metadata["stepReasoningText"]
|
|
125
242
|
},
|
|
126
243
|
groups: this.config.defaults?.posthogGroups
|
|
127
244
|
});
|
|
@@ -182,11 +299,44 @@ async function resolvePostHogClient(config) {
|
|
|
182
299
|
}
|
|
183
300
|
}
|
|
184
301
|
function mapTokenUsage(usage) {
|
|
302
|
+
const usageRecord = asRecord(usage);
|
|
303
|
+
const inputTokenDetails = asRecord(usageRecord["inputTokenDetails"]);
|
|
304
|
+
const outputTokenDetails = asRecord(usageRecord["outputTokenDetails"]);
|
|
185
305
|
return {
|
|
186
|
-
$ai_input_tokens:
|
|
187
|
-
$ai_output_tokens:
|
|
306
|
+
$ai_input_tokens: asNumber(usageRecord["inputTokens"]) ?? asNumber(usageRecord["promptTokens"]),
|
|
307
|
+
$ai_output_tokens: asNumber(usageRecord["outputTokens"]) ?? asNumber(usageRecord["completionTokens"]),
|
|
308
|
+
$ai_reasoning_tokens: asNumber(outputTokenDetails["reasoningTokens"]) ?? asNumber(usageRecord["reasoningTokens"]),
|
|
309
|
+
$ai_cache_read_input_tokens: asNumber(inputTokenDetails["cacheReadTokens"]) ?? asNumber(usageRecord["cachedInputTokens"]),
|
|
310
|
+
$ai_cache_creation_input_tokens: asNumber(inputTokenDetails["cacheWriteTokens"]),
|
|
311
|
+
$ai_usage: maybeRecord(usageRecord["raw"]) ?? usageRecord
|
|
188
312
|
};
|
|
189
313
|
}
|
|
314
|
+
function mapTotalUsage(usage) {
|
|
315
|
+
const usageRecord = asRecord(usage);
|
|
316
|
+
return {
|
|
317
|
+
contractspec_total_input_tokens: asNumber(usageRecord["inputTokens"]),
|
|
318
|
+
contractspec_total_output_tokens: asNumber(usageRecord["outputTokens"]),
|
|
319
|
+
contractspec_total_tokens: asNumber(usageRecord["totalTokens"]),
|
|
320
|
+
contractspec_total_usage_raw: maybeRecord(usageRecord["raw"]) ?? usageRecord
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
function asRecord(value) {
|
|
324
|
+
return value && typeof value === "object" ? value : {};
|
|
325
|
+
}
|
|
326
|
+
function maybeRecord(value) {
|
|
327
|
+
return value && typeof value === "object" ? value : undefined;
|
|
328
|
+
}
|
|
329
|
+
function asString(value) {
|
|
330
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
331
|
+
}
|
|
332
|
+
function asNumber(value) {
|
|
333
|
+
return typeof value === "number" ? value : undefined;
|
|
334
|
+
}
|
|
335
|
+
function asDateIso(value) {
|
|
336
|
+
if (value instanceof Date)
|
|
337
|
+
return value.toISOString();
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
190
340
|
// src/telemetry/index.ts
|
|
191
341
|
init_adapter();
|
|
192
342
|
export {
|
|
@@ -15,12 +15,24 @@ export interface PostHogTracingOptions {
|
|
|
15
15
|
posthogDistinctId?: string;
|
|
16
16
|
/** Trace ID for grouping related generations */
|
|
17
17
|
posthogTraceId?: string;
|
|
18
|
+
/** Optional model id override */
|
|
19
|
+
posthogModelOverride?: string;
|
|
20
|
+
/** Optional provider override */
|
|
21
|
+
posthogProviderOverride?: string;
|
|
22
|
+
/** Optional explicit token pricing override */
|
|
23
|
+
posthogCostOverride?: PostHogCostOverride;
|
|
18
24
|
/** Custom properties attached to every generation event */
|
|
19
25
|
posthogProperties?: Record<string, unknown>;
|
|
20
26
|
/** When true, input/output content is redacted */
|
|
21
27
|
posthogPrivacyMode?: boolean;
|
|
22
28
|
/** Group analytics (e.g., { company: "companyId" }) */
|
|
23
29
|
posthogGroups?: Record<string, string>;
|
|
30
|
+
/** Sends events immediately (useful for short-lived/serverless contexts) */
|
|
31
|
+
posthogCaptureImmediate?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface PostHogCostOverride {
|
|
34
|
+
inputCost: number;
|
|
35
|
+
outputCost: number;
|
|
24
36
|
}
|
|
25
37
|
/**
|
|
26
38
|
* Minimal interface for posthog-node PostHog client.
|
|
@@ -57,4 +69,3 @@ export interface PostHogLLMConfig {
|
|
|
57
69
|
/** Default tracing options applied to all wrapped models */
|
|
58
70
|
defaults?: PostHogTracingOptions;
|
|
59
71
|
}
|
|
60
|
-
//# sourceMappingURL=posthog-types.d.ts.map
|
|
@@ -78,4 +78,3 @@ export declare class CompositeTelemetryCollector implements TelemetryCollector {
|
|
|
78
78
|
}
|
|
79
79
|
/** Create a composite telemetry collector. */
|
|
80
80
|
export declare function createCompositeTelemetryCollector(collectors: TelemetryCollector[]): CompositeTelemetryCollector;
|
|
81
|
-
//# sourceMappingURL=posthog.d.ts.map
|