managed-deepagents 0.9.5-dev.4 → 0.9.5-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/channels/http/http.d.ts.map +1 -1
  2. package/dist/channels/http/http.js +4 -4
  3. package/dist/channels/http/http.js.map +1 -1
  4. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  5. package/dist/channels/schedule-delivery.js +3 -3
  6. package/dist/channels/schedule-delivery.js.map +1 -1
  7. package/dist/channels/trigger/http.d.ts.map +1 -1
  8. package/dist/channels/trigger/http.js +10 -3
  9. package/dist/channels/trigger/http.js.map +1 -1
  10. package/dist/concurrency/batch-processor.d.ts +51 -0
  11. package/dist/concurrency/batch-processor.d.ts.map +1 -0
  12. package/dist/concurrency/batch-processor.js +99 -0
  13. package/dist/concurrency/batch-processor.js.map +1 -0
  14. package/dist/identity/loopback.d.ts +5 -0
  15. package/dist/identity/loopback.d.ts.map +1 -1
  16. package/dist/identity/loopback.js +9 -0
  17. package/dist/identity/loopback.js.map +1 -1
  18. package/dist/ingress/index.d.ts +8 -0
  19. package/dist/ingress/index.d.ts.map +1 -1
  20. package/dist/ingress/index.js +32 -2
  21. package/dist/ingress/index.js.map +1 -1
  22. package/dist/ingress/runs.d.ts.map +1 -1
  23. package/dist/ingress/runs.js +13 -0
  24. package/dist/ingress/runs.js.map +1 -1
  25. package/dist/resilience/retry.d.ts +21 -0
  26. package/dist/resilience/retry.d.ts.map +1 -0
  27. package/dist/resilience/retry.js +40 -0
  28. package/dist/resilience/retry.js.map +1 -0
  29. package/dist/runtime/http.d.ts +15 -0
  30. package/dist/runtime/http.d.ts.map +1 -1
  31. package/dist/runtime/http.js +37 -0
  32. package/dist/runtime/http.js.map +1 -1
  33. package/dist/runtime/identity-http.d.ts.map +1 -1
  34. package/dist/runtime/identity-http.js +5 -4
  35. package/dist/runtime/identity-http.js.map +1 -1
  36. package/dist/runtime/log.d.ts +8 -14
  37. package/dist/runtime/log.d.ts.map +1 -1
  38. package/dist/runtime/log.js +16 -7
  39. package/dist/runtime/log.js.map +1 -1
  40. package/dist/runtime/run-input.d.ts.map +1 -1
  41. package/dist/runtime/run-input.js +20 -2
  42. package/dist/runtime/run-input.js.map +1 -1
  43. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  44. package/dist/runtime/sandbox-manager.js +3 -5
  45. package/dist/runtime/sandbox-manager.js.map +1 -1
  46. package/dist/telemetry/lifecycle.d.ts +26 -0
  47. package/dist/telemetry/lifecycle.d.ts.map +1 -0
  48. package/dist/telemetry/lifecycle.js +49 -0
  49. package/dist/telemetry/lifecycle.js.map +1 -0
  50. package/dist/telemetry/otel/context.d.ts +57 -0
  51. package/dist/telemetry/otel/context.d.ts.map +1 -0
  52. package/dist/telemetry/otel/context.js +122 -0
  53. package/dist/telemetry/otel/context.js.map +1 -0
  54. package/dist/telemetry/otel/exporter.d.ts +53 -0
  55. package/dist/telemetry/otel/exporter.d.ts.map +1 -0
  56. package/dist/telemetry/otel/exporter.js +190 -0
  57. package/dist/telemetry/otel/exporter.js.map +1 -0
  58. package/dist/telemetry/otel/index.d.ts +6 -0
  59. package/dist/telemetry/otel/index.d.ts.map +1 -0
  60. package/dist/telemetry/otel/index.js +3 -0
  61. package/dist/telemetry/otel/index.js.map +1 -0
  62. package/dist/telemetry/otel/otlp.d.ts +44 -0
  63. package/dist/telemetry/otel/otlp.d.ts.map +1 -0
  64. package/dist/telemetry/otel/otlp.js +7 -0
  65. package/dist/telemetry/otel/otlp.js.map +1 -0
  66. package/dist/telemetry/otel/truncate.d.ts +10 -0
  67. package/dist/telemetry/otel/truncate.d.ts.map +1 -0
  68. package/dist/telemetry/otel/truncate.js +39 -0
  69. package/dist/telemetry/otel/truncate.js.map +1 -0
  70. package/dist/telemetry/run-listener.d.ts +1 -1
  71. package/dist/telemetry/run-listener.d.ts.map +1 -1
  72. package/dist/telemetry/run-listener.js +32 -2
  73. package/dist/telemetry/run-listener.js.map +1 -1
  74. package/dist/telemetry/transport/posthog.d.ts +13 -1
  75. package/dist/telemetry/transport/posthog.d.ts.map +1 -1
  76. package/dist/telemetry/transport/posthog.js +68 -30
  77. package/dist/telemetry/transport/posthog.js.map +1 -1
  78. package/package.json +7 -7
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Keeps a log value within the collection endpoint's per-value limit by
3
+ * cutting its middle, as the CLI does: the start says what failed, and the end
4
+ * of a stacktrace or a child's output usually says why.
5
+ */
6
+ /** The collection endpoint keeps up to this many bytes of a value. */
7
+ export const MAX_VALUE_BYTES = 32 << 10;
8
+ /** Kept from the start of a value that is too long; the rest keeps its end. */
9
+ const HEAD_BYTES = 1 << 10;
10
+ /** Room for the omission marker. */
11
+ const MARKER_BYTES = 48;
12
+ /** `value` within `maxBytes` of UTF-8: its start and end, with the cut size. */
13
+ export function truncateMiddle(value, maxBytes = MAX_VALUE_BYTES) {
14
+ // A UTF-16 code unit is at most 3 UTF-8 bytes.
15
+ if (value.length * 3 <= maxBytes)
16
+ return value;
17
+ const bytes = Buffer.from(value, "utf8");
18
+ if (bytes.length <= maxBytes)
19
+ return value;
20
+ const headEnd = floorBoundary(bytes, HEAD_BYTES);
21
+ const tailStart = ceilBoundary(bytes, bytes.length - (maxBytes - HEAD_BYTES - MARKER_BYTES));
22
+ return `${bytes.subarray(0, headEnd).toString("utf8")}\n… ${tailStart - headEnd} bytes omitted …\n${bytes.subarray(tailStart).toString("utf8")}`;
23
+ }
24
+ function isContinuation(byte) {
25
+ return byte !== undefined && (byte & 0xc0) === 0x80;
26
+ }
27
+ function floorBoundary(bytes, index) {
28
+ let at = index;
29
+ while (at > 0 && isContinuation(bytes[at]))
30
+ at--;
31
+ return at;
32
+ }
33
+ function ceilBoundary(bytes, index) {
34
+ let at = index;
35
+ while (at < bytes.length && isContinuation(bytes[at]))
36
+ at++;
37
+ return at;
38
+ }
39
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../../src/telemetry/otel/truncate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,CAAC;AACxC,+EAA+E;AAC/E,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC;AAC3B,oCAAoC;AACpC,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,QAAQ,GAAW,eAAe;IAElC,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,YAAY,CAC5B,KAAK,EACL,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC,CACtD,CAAC;IACF,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OACnD,SAAS,GAAG,OACd,qBAAqB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,IAAwB;IAC9C,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAa;IACjD,IAAI,EAAE,GAAG,KAAK,CAAC;IACf,OAAO,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAE,EAAE,EAAE,CAAC;IACjD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAChD,IAAI,EAAE,GAAG,KAAK,CAAC;IACf,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAE,EAAE,EAAE,CAAC;IAC5D,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -14,7 +14,7 @@ export declare class RunTelemetryListener extends GraphCallbackHandler {
14
14
  handleChainStart(_chain: unknown, _inputs: unknown, runId: string): void;
15
15
  handleInterrupt(event: GraphInterruptEvent): void;
16
16
  handleChainEnd(_outputs: unknown, runId: string): void;
17
- handleChainError(_error: unknown, runId: string): void;
17
+ handleChainError(error: unknown, runId: string): void;
18
18
  private report;
19
19
  }
20
20
  //# sourceMappingURL=run-listener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-listener.d.ts","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAY1E,8CAA8C;AAC9C,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,SAAS,GACvD,IAAI,CAEN;AAED,qBAAa,oBAAqB,SAAQ,oBAAoB;IAMhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,IAAI,SAA0B;IAC9B,aAAa,UAAQ;IACrB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B,YAA6B,OAAO,EAAE,UAAU,EAE/C;IAED,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGvE;IAED,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAIhD;IAED,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrD;IAED,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrD;IAED,OAAO,CAAC,MAAM;CAQf"}
1
+ {"version":3,"file":"run-listener.d.ts","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAY1E,8CAA8C;AAC9C,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,SAAS,GACvD,IAAI,CAEN;AAED,qBAAa,oBAAqB,SAAQ,oBAAoB;IAMhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,IAAI,SAA0B;IAC9B,aAAa,UAAQ;IACrB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B,YAA6B,OAAO,EAAE,UAAU,EAE/C;IAED,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGvE;IAED,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAIhD;IAED,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrD;IAED,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKpD;IAED,OAAO,CAAC,MAAM;CAYf"}
@@ -1,5 +1,6 @@
1
1
  import { GraphCallbackHandler } from "@langchain/langgraph";
2
2
  import { TelemetryClient } from "./client.js";
3
+ import { recordLog } from "./otel/index.js";
3
4
  import { isTelemetryDisabled } from "./gates.js";
4
5
  import { finishRun } from "./run.js";
5
6
  import { posthogTransport } from "./transport/posthog.js";
@@ -36,8 +37,9 @@ export class RunTelemetryListener extends GraphCallbackHandler {
36
37
  this.report(this.interrupted ? "interrupted" : "success");
37
38
  }
38
39
  }
39
- handleChainError(_error, runId) {
40
+ handleChainError(error, runId) {
40
41
  if (runId === this.rootRunId) {
42
+ recordLog("ERROR", "run failed", { error });
41
43
  this.report("failure");
42
44
  }
43
45
  }
@@ -45,10 +47,38 @@ export class RunTelemetryListener extends GraphCallbackHandler {
45
47
  if (this.pending.emitted)
46
48
  return;
47
49
  this.pending.emitted = true;
50
+ const event = finishRun(this.pending, outcome);
51
+ recordLog("INFO", "run completed", {
52
+ attributes: completionAttributes(event),
53
+ });
48
54
  // Delivery must not delay the run result.
49
55
  runClient()
50
- .record(finishRun(this.pending, outcome))
56
+ .record(event)
51
57
  .catch(() => { });
52
58
  }
53
59
  }
60
+ /**
61
+ * Event bookkeeping that says nothing about the run. `event_id` stays, so the
62
+ * record joins to its PostHog event.
63
+ */
64
+ const EVENT_ONLY_FIELDS = new Set([
65
+ "event_type",
66
+ "schema_version",
67
+ "created_at",
68
+ "distinct_id",
69
+ ]);
70
+ /** The `run_completed` fields as attributes of the completion log record. */
71
+ function completionAttributes(event) {
72
+ const attributes = {};
73
+ for (const [key, value] of Object.entries(event)) {
74
+ if (EVENT_ONLY_FIELDS.has(key))
75
+ continue;
76
+ if (typeof value === "string" ||
77
+ typeof value === "number" ||
78
+ typeof value === "boolean") {
79
+ attributes[key] = value;
80
+ }
81
+ }
82
+ return attributes;
83
+ }
54
84
  //# sourceMappingURL=run-listener.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-listener.js","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,IAAI,MAAsD,CAAC;AAE3D,SAAS,SAAS;IAChB,MAAM,KAAK,IAAI,eAAe,CAC5B,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAClE,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,6BAA6B,CAC3C,QAAwD;IAExD,MAAM,GAAG,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,oBAAqB,SAAQ,oBAAoB;IAM/B,OAAO;IALpC,IAAI,GAAG,sBAAsB,CAAC;IAC9B,aAAa,GAAG,IAAI,CAAC;IACb,SAAS,CAAU;IACnB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAA6B,OAAmB;QAC9C,KAAK,EAAE,CAAC;uBADmB,OAAO;IAEpC,CAAC;IAED,gBAAgB,CAAC,MAAe,EAAE,OAAgB,EAAE,KAAa;QAC/D,mEAAmE;QACnE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,KAA0B;QACxC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAiB,EAAE,KAAa;QAC7C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,MAAe,EAAE,KAAa;QAC7C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAmB;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,0CAA0C;QAC1C,SAAS,EAAE;aACR,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;aACxC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"run-listener.js","sourceRoot":"","sources":["../../src/telemetry/run-listener.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { RetryPolicy } from "../../resilience/retry.js";
1
2
  import type { TelemetryEvent } from "../event.js";
2
3
  import type { TelemetryTransport } from "./types.js";
3
4
  interface PosthogConfig {
@@ -10,13 +11,24 @@ export interface PosthogTransportOptions {
10
11
  host?: string;
11
12
  /** Fetch override for tests. */
12
13
  fetch?: typeof fetch;
14
+ /** Batch timing and retry overrides for tests. */
15
+ maxWaitMs?: number;
16
+ retry?: RetryPolicy;
13
17
  }
18
+ /**
19
+ * Sends events to PostHog in the background, in batches. `send` only queues
20
+ * the event, so delivery never delays a run.
21
+ */
14
22
  export declare class PosthogTransport implements TelemetryTransport {
15
23
  private readonly apiKey;
16
- private readonly captureUrl;
24
+ private readonly batchUrl;
17
25
  private readonly fetchImpl;
26
+ private readonly processor;
18
27
  constructor(options: PosthogTransportOptions);
19
28
  send(event: TelemetryEvent): Promise<void>;
29
+ /** Refuse new events and drain what is queued until `deadlineMs`. */
30
+ shutdown(deadlineMs: number): Promise<void>;
31
+ private post;
20
32
  }
21
33
  export declare function posthogTransport(env?: Record<string, string | undefined>): PosthogTransport | undefined;
22
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BrD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,WAAW,GAAE,MAAgC,GAC5C,aAAa,GAAG,SAAS,CAS3B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,YAAY,OAAO,EAAE,uBAAuB,EAO3C;IAEK,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/C;CACF;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,gBAAgB,GAAG,SAAS,CAW9B"}
1
+ {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAwCrD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,WAAW,GAAE,MAAgC,GAC5C,aAAa,GAAG,SAAS,CAS3B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,YAAY,OAAO,EAAE,uBAAuB,EAgB3C;IAEK,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;IAED,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;YAEa,IAAI;CAmCnB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,gBAAgB,GAAG,SAAS,CAgB9B"}
@@ -1,19 +1,34 @@
1
- import { fetchWithTimeout } from "../../runtime/http.js";
1
+ import { BatchProcessor } from "../../concurrency/batch-processor.js";
2
+ import { withRetry } from "../../resilience/retry.js";
3
+ import { fetchWithTimeout, HttpStatusError, isRetryable, requestedDelayMs, } from "../../runtime/http.js";
4
+ import { onShutdown } from "../lifecycle.js";
2
5
  const POSTHOG_API_KEY_ENV = "MDA_POSTHOG_API_KEY";
3
6
  const POSTHOG_HOST_ENV = "MDA_POSTHOG_HOST";
4
7
  const DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com";
5
- const POSTHOG_CAPTURE_PATH = "/i/v0/e/";
6
- /** A send is awaited at the end of a run, so it must not extend the wall clock. */
7
- const REQUEST_TIMEOUT_MS = 1_000;
8
+ const POSTHOG_BATCH_PATH = "/batch/";
9
+ /** Bounds one batch request; the OTel exporters' default. */
10
+ const REQUEST_TIMEOUT_MS = 10_000;
11
+ const MAX_BATCH_EVENTS = 100;
12
+ const BATCH_WAIT_MS = 1_000;
13
+ /** Events waiting to send; later ones are dropped. */
14
+ const MAX_QUEUED_EVENTS = 1_000;
15
+ /** 429 and 5xx (including timeouts and network failures) are tried again. */
16
+ const SEND_RETRY = {
17
+ maxAttempts: 5,
18
+ baseDelayMs: 1_000,
19
+ maxDelayMs: 30_000,
20
+ retryOn: isRetryable,
21
+ delayFor: requestedDelayMs,
22
+ };
8
23
  /** Public write-only key: submission only, and already in every released binary. */
9
24
  const DEFAULT_POSTHOG_API_KEY = "phc_C6RmkdQQ3kWHgj6o7kby3aP6dbewjpLzfanw9WcmU65V";
10
25
  function nonempty(value) {
11
26
  const trimmed = value?.trim();
12
27
  return trimmed ? trimmed : undefined;
13
28
  }
14
- /** `new URL` alone accepts `ftp:`/`file:`. Python's `capture_url` rejects them. */
15
- function captureUrl(host) {
16
- const url = new URL(`${host.replace(/\/+$/, "")}${POSTHOG_CAPTURE_PATH}`);
29
+ /** `new URL` alone accepts `ftp:`/`file:`. Python's `batch_url` rejects them. */
30
+ function batchUrl(host) {
31
+ const url = new URL(`${host.replace(/\/+$/, "")}${POSTHOG_BATCH_PATH}`);
17
32
  if (url.protocol !== "http:" && url.protocol !== "https:") {
18
33
  throw new Error("PostHog host must be a valid URL");
19
34
  }
@@ -29,45 +44,63 @@ export function resolvePosthogConfig(env, bakedApiKey = DEFAULT_POSTHOG_API_KEY)
29
44
  host: nonempty(env[POSTHOG_HOST_ENV]) ?? DEFAULT_POSTHOG_HOST,
30
45
  };
31
46
  }
47
+ /**
48
+ * Sends events to PostHog in the background, in batches. `send` only queues
49
+ * the event, so delivery never delays a run.
50
+ */
32
51
  export class PosthogTransport {
33
52
  apiKey;
34
- captureUrl;
53
+ batchUrl;
35
54
  fetchImpl;
55
+ processor;
36
56
  constructor(options) {
37
57
  if (!options.apiKey) {
38
58
  throw new Error("PostHog project ingestion key is required");
39
59
  }
40
60
  this.apiKey = options.apiKey;
41
- this.captureUrl = captureUrl(options.host ?? DEFAULT_POSTHOG_HOST);
61
+ this.batchUrl = batchUrl(options.host ?? DEFAULT_POSTHOG_HOST);
42
62
  this.fetchImpl = options.fetch ?? fetch;
63
+ this.processor = new BatchProcessor({
64
+ handle: withRetry((batch, signal) => this.post(batch, signal), options.retry ?? SEND_RETRY),
65
+ maxBatchSize: MAX_BATCH_EVENTS,
66
+ maxWaitMs: options.maxWaitMs ?? BATCH_WAIT_MS,
67
+ maxQueued: MAX_QUEUED_EVENTS,
68
+ });
43
69
  }
44
70
  async send(event) {
45
- const response = await fetchWithTimeout(this.captureUrl.toString(), {
71
+ this.processor.push(event);
72
+ }
73
+ /** Refuse new events and drain what is queued until `deadlineMs`. */
74
+ shutdown(deadlineMs) {
75
+ return this.processor.shutdown(deadlineMs);
76
+ }
77
+ async post(batch, signal) {
78
+ const response = await fetchWithTimeout(this.batchUrl.toString(), {
46
79
  method: "POST",
47
80
  headers: { "content-type": "application/json" },
48
81
  body: JSON.stringify({
49
82
  api_key: this.apiKey,
50
- event: event.event_type,
51
- distinct_id: event.distinct_id,
52
- timestamp: event.created_at,
53
- properties: {
54
- // The subject is an organization, and the request leaves our
55
- // infrastructure rather than the customer's, so a person profile
56
- // and a geoip lookup would both describe the wrong thing.
57
- $process_person_profile: false,
58
- $geoip_disable: true,
59
- ...event,
60
- },
83
+ batch: batch.map((event) => ({
84
+ // PostHog drops a retried event it already ingested by `uuid`.
85
+ uuid: event.event_id,
86
+ event: event.event_type,
87
+ distinct_id: event.distinct_id,
88
+ timestamp: event.created_at,
89
+ properties: {
90
+ // The subject is an organization, and the request leaves our
91
+ // infrastructure rather than the customer's, so a person profile
92
+ // and a geoip lookup would both describe the wrong thing.
93
+ $process_person_profile: false,
94
+ $geoip_disable: true,
95
+ ...event,
96
+ },
97
+ })),
61
98
  }),
99
+ signal,
62
100
  }, REQUEST_TIMEOUT_MS, this.fetchImpl);
63
- try {
64
- if (!response.ok) {
65
- throw new Error(`PostHog rejected analytics event: ${response.status}`);
66
- }
67
- }
68
- finally {
69
- await response.body?.cancel();
70
- }
101
+ await response.body?.cancel();
102
+ if (!response.ok)
103
+ throw HttpStatusError.from(response);
71
104
  }
72
105
  }
73
106
  export function posthogTransport(env = process.env) {
@@ -76,7 +109,12 @@ export function posthogTransport(env = process.env) {
76
109
  return undefined;
77
110
  }
78
111
  try {
79
- return new PosthogTransport({ apiKey: config.apiKey, host: config.host });
112
+ const transport = new PosthogTransport({
113
+ apiKey: config.apiKey,
114
+ host: config.host,
115
+ });
116
+ onShutdown((ms) => transport.shutdown(ms));
117
+ return transport;
80
118
  }
81
119
  catch {
82
120
  // A malformed host must not take the runtime down with it.
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/telemetry/transport/posthog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "managed-deepagents",
3
- "version": "0.9.5-dev.4",
3
+ "version": "0.9.5-dev.5",
4
4
  "description": "Managed Deep Agents — the `defineDeepAgent` authoring interface plus the CLI that compiles and deploys a code-first Deep Agent repository to a managed LangGraph runtime.",
5
5
  "keywords": [
6
6
  "langchain",
@@ -66,12 +66,12 @@
66
66
  "zod": "^4.6.2"
67
67
  },
68
68
  "optionalDependencies": {
69
- "@langchain/managed-deepagents-darwin-arm64": "0.9.5-dev.4",
70
- "@langchain/managed-deepagents-darwin-x64": "0.9.5-dev.4",
71
- "@langchain/managed-deepagents-linux-arm64": "0.9.5-dev.4",
72
- "@langchain/managed-deepagents-linux-x64": "0.9.5-dev.4",
73
- "@langchain/managed-deepagents-win32-arm64": "0.9.5-dev.4",
74
- "@langchain/managed-deepagents-win32-x64": "0.9.5-dev.4"
69
+ "@langchain/managed-deepagents-darwin-arm64": "0.9.5-dev.5",
70
+ "@langchain/managed-deepagents-darwin-x64": "0.9.5-dev.5",
71
+ "@langchain/managed-deepagents-linux-arm64": "0.9.5-dev.5",
72
+ "@langchain/managed-deepagents-linux-x64": "0.9.5-dev.5",
73
+ "@langchain/managed-deepagents-win32-arm64": "0.9.5-dev.5",
74
+ "@langchain/managed-deepagents-win32-x64": "0.9.5-dev.5"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/node": "^26.5.1",