@posthog/agent 2.1.5 → 2.1.8
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-kRbaLUfe.d.ts → agent-LrKyX9KN.d.ts} +1 -4
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +7 -92
- package/dist/agent.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +62 -92
- package/dist/index.js.map +1 -1
- package/dist/server/agent-server.js +4 -82
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +4 -79
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +1 -1
- package/src/agent.ts +5 -18
- package/src/server/agent-server.ts +2 -6
- package/src/session-log-writer.test.ts +72 -101
- package/src/session-log-writer.ts +3 -34
|
@@ -40,16 +40,13 @@ declare class OtelLogWriter {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
interface SessionLogWriterOptions {
|
|
43
|
-
/**
|
|
44
|
-
otelConfig?: OtelLogConfig;
|
|
45
|
-
/** PostHog API client for S3 log persistence */
|
|
43
|
+
/** PostHog API client for log persistence */
|
|
46
44
|
posthogAPI?: PostHogAPIClient;
|
|
47
45
|
/** Logger instance */
|
|
48
46
|
logger?: Logger;
|
|
49
47
|
}
|
|
50
48
|
declare class SessionLogWriter {
|
|
51
49
|
private posthogAPI?;
|
|
52
|
-
private otelConfig?;
|
|
53
50
|
private pendingEntries;
|
|
54
51
|
private flushTimeouts;
|
|
55
52
|
private sessions;
|
package/dist/agent.d.ts
CHANGED
package/dist/agent.js
CHANGED
|
@@ -276,7 +276,7 @@ import { v7 as uuidv7 } from "uuid";
|
|
|
276
276
|
// package.json
|
|
277
277
|
var package_default = {
|
|
278
278
|
name: "@posthog/agent",
|
|
279
|
-
version: "2.1.
|
|
279
|
+
version: "2.1.8",
|
|
280
280
|
repository: "https://github.com/PostHog/twig",
|
|
281
281
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
282
282
|
exports: {
|
|
@@ -3371,72 +3371,15 @@ var PostHogAPIClient = class {
|
|
|
3371
3371
|
}
|
|
3372
3372
|
};
|
|
3373
3373
|
|
|
3374
|
-
// src/otel-log-writer.ts
|
|
3375
|
-
import { SeverityNumber } from "@opentelemetry/api-logs";
|
|
3376
|
-
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
3377
|
-
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
3378
|
-
import {
|
|
3379
|
-
BatchLogRecordProcessor,
|
|
3380
|
-
LoggerProvider
|
|
3381
|
-
} from "@opentelemetry/sdk-logs";
|
|
3382
|
-
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
|
|
3383
|
-
var OtelLogWriter = class {
|
|
3384
|
-
loggerProvider;
|
|
3385
|
-
logger;
|
|
3386
|
-
constructor(config, sessionContext, _debugLogger) {
|
|
3387
|
-
const logsPath = config.logsPath ?? "/i/v1/agent-logs";
|
|
3388
|
-
const exporter = new OTLPLogExporter({
|
|
3389
|
-
url: `${config.posthogHost}${logsPath}`,
|
|
3390
|
-
headers: { Authorization: `Bearer ${config.apiKey}` }
|
|
3391
|
-
});
|
|
3392
|
-
const processor = new BatchLogRecordProcessor(exporter, {
|
|
3393
|
-
scheduledDelayMillis: config.flushIntervalMs ?? 500
|
|
3394
|
-
});
|
|
3395
|
-
this.loggerProvider = new LoggerProvider({
|
|
3396
|
-
resource: resourceFromAttributes({
|
|
3397
|
-
[ATTR_SERVICE_NAME]: "twig-agent",
|
|
3398
|
-
run_id: sessionContext.runId,
|
|
3399
|
-
task_id: sessionContext.taskId,
|
|
3400
|
-
device_type: sessionContext.deviceType ?? "local"
|
|
3401
|
-
}),
|
|
3402
|
-
processors: [processor]
|
|
3403
|
-
});
|
|
3404
|
-
this.logger = this.loggerProvider.getLogger("agent-session");
|
|
3405
|
-
}
|
|
3406
|
-
/**
|
|
3407
|
-
* Emit an agent event to PostHog Logs via OTEL.
|
|
3408
|
-
*/
|
|
3409
|
-
emit(entry) {
|
|
3410
|
-
const { notification } = entry;
|
|
3411
|
-
const eventType = notification.notification.method;
|
|
3412
|
-
this.logger.emit({
|
|
3413
|
-
severityNumber: SeverityNumber.INFO,
|
|
3414
|
-
severityText: "INFO",
|
|
3415
|
-
body: JSON.stringify(notification),
|
|
3416
|
-
attributes: {
|
|
3417
|
-
event_type: eventType
|
|
3418
|
-
}
|
|
3419
|
-
});
|
|
3420
|
-
}
|
|
3421
|
-
async flush() {
|
|
3422
|
-
await this.loggerProvider.forceFlush();
|
|
3423
|
-
}
|
|
3424
|
-
async shutdown() {
|
|
3425
|
-
await this.loggerProvider.shutdown();
|
|
3426
|
-
}
|
|
3427
|
-
};
|
|
3428
|
-
|
|
3429
3374
|
// src/session-log-writer.ts
|
|
3430
3375
|
var SessionLogWriter = class {
|
|
3431
3376
|
posthogAPI;
|
|
3432
|
-
otelConfig;
|
|
3433
3377
|
pendingEntries = /* @__PURE__ */ new Map();
|
|
3434
3378
|
flushTimeouts = /* @__PURE__ */ new Map();
|
|
3435
3379
|
sessions = /* @__PURE__ */ new Map();
|
|
3436
3380
|
logger;
|
|
3437
3381
|
constructor(options = {}) {
|
|
3438
3382
|
this.posthogAPI = options.posthogAPI;
|
|
3439
|
-
this.otelConfig = options.otelConfig;
|
|
3440
3383
|
this.logger = options.logger ?? new Logger({ debug: false, prefix: "[SessionLogWriter]" });
|
|
3441
3384
|
}
|
|
3442
3385
|
async flushAll() {
|
|
@@ -3450,15 +3393,7 @@ var SessionLogWriter = class {
|
|
|
3450
3393
|
if (this.sessions.has(sessionId)) {
|
|
3451
3394
|
return;
|
|
3452
3395
|
}
|
|
3453
|
-
|
|
3454
|
-
if (this.otelConfig) {
|
|
3455
|
-
otelWriter = new OtelLogWriter(
|
|
3456
|
-
this.otelConfig,
|
|
3457
|
-
context,
|
|
3458
|
-
this.logger.child(`OtelWriter:${sessionId}`)
|
|
3459
|
-
);
|
|
3460
|
-
}
|
|
3461
|
-
this.sessions.set(sessionId, { context, otelWriter });
|
|
3396
|
+
this.sessions.set(sessionId, { context });
|
|
3462
3397
|
}
|
|
3463
3398
|
isRegistered(sessionId) {
|
|
3464
3399
|
return this.sessions.has(sessionId);
|
|
@@ -3488,9 +3423,6 @@ var SessionLogWriter = class {
|
|
|
3488
3423
|
timestamp,
|
|
3489
3424
|
notification: message
|
|
3490
3425
|
};
|
|
3491
|
-
if (session.otelWriter) {
|
|
3492
|
-
session.otelWriter.emit({ notification: entry });
|
|
3493
|
-
}
|
|
3494
3426
|
if (this.posthogAPI) {
|
|
3495
3427
|
const pending = this.pendingEntries.get(sessionId) ?? [];
|
|
3496
3428
|
pending.push(entry);
|
|
@@ -3508,9 +3440,6 @@ var SessionLogWriter = class {
|
|
|
3508
3440
|
const session = this.sessions.get(sessionId);
|
|
3509
3441
|
if (!session) return;
|
|
3510
3442
|
this.emitCoalescedMessage(sessionId, session);
|
|
3511
|
-
if (session.otelWriter) {
|
|
3512
|
-
await session.otelWriter.flush();
|
|
3513
|
-
}
|
|
3514
3443
|
const pending = this.pendingEntries.get(sessionId);
|
|
3515
3444
|
if (!this.posthogAPI || !pending?.length) return;
|
|
3516
3445
|
this.pendingEntries.delete(sessionId);
|
|
@@ -3562,9 +3491,6 @@ var SessionLogWriter = class {
|
|
|
3562
3491
|
}
|
|
3563
3492
|
}
|
|
3564
3493
|
};
|
|
3565
|
-
if (session.otelWriter) {
|
|
3566
|
-
session.otelWriter.emit({ notification: entry });
|
|
3567
|
-
}
|
|
3568
3494
|
if (this.posthogAPI) {
|
|
3569
3495
|
const pending = this.pendingEntries.get(sessionId) ?? [];
|
|
3570
3496
|
pending.push(entry);
|
|
@@ -3598,22 +3524,11 @@ var Agent = class {
|
|
|
3598
3524
|
if (config.posthog) {
|
|
3599
3525
|
this.posthogAPI = new PostHogAPIClient(config.posthog);
|
|
3600
3526
|
}
|
|
3601
|
-
if (!config.skipLogPersistence) {
|
|
3602
|
-
|
|
3603
|
-
this.
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
apiKey: config.otelTransport.apiKey,
|
|
3607
|
-
logsPath: config.otelTransport.logsPath
|
|
3608
|
-
},
|
|
3609
|
-
logger: this.logger.child("SessionLogWriter")
|
|
3610
|
-
});
|
|
3611
|
-
} else if (config.posthog) {
|
|
3612
|
-
this.sessionLogWriter = new SessionLogWriter({
|
|
3613
|
-
posthogAPI: this.posthogAPI,
|
|
3614
|
-
logger: this.logger.child("SessionLogWriter")
|
|
3615
|
-
});
|
|
3616
|
-
}
|
|
3527
|
+
if (config.posthog && !config.skipLogPersistence) {
|
|
3528
|
+
this.sessionLogWriter = new SessionLogWriter({
|
|
3529
|
+
posthogAPI: this.posthogAPI,
|
|
3530
|
+
logger: this.logger.child("SessionLogWriter")
|
|
3531
|
+
});
|
|
3617
3532
|
}
|
|
3618
3533
|
}
|
|
3619
3534
|
_configureLlmGateway(_adapter) {
|