@relaycast/engine 10.6.5 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/adapters/node/delivery-maintenance.d.ts.map +1 -1
  2. package/dist/adapters/node/delivery-maintenance.js +5 -2
  3. package/dist/adapters/node/delivery-maintenance.js.map +1 -1
  4. package/dist/adapters/node/index.d.ts.map +1 -1
  5. package/dist/adapters/node/index.js +2 -1
  6. package/dist/adapters/node/index.js.map +1 -1
  7. package/dist/engine.d.ts.map +1 -1
  8. package/dist/engine.js +8 -7
  9. package/dist/engine.js.map +1 -1
  10. package/dist/env.d.ts +4 -0
  11. package/dist/env.d.ts.map +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/logger.d.ts +3 -9
  16. package/dist/lib/logger.d.ts.map +1 -1
  17. package/dist/lib/logger.js +10 -96
  18. package/dist/lib/logger.js.map +1 -1
  19. package/dist/lib/serverTelemetry.d.ts +6 -45
  20. package/dist/lib/serverTelemetry.d.ts.map +1 -1
  21. package/dist/lib/serverTelemetry.js +27 -125
  22. package/dist/lib/serverTelemetry.js.map +1 -1
  23. package/dist/middleware/auth.d.ts.map +1 -1
  24. package/dist/middleware/auth.js +14 -0
  25. package/dist/middleware/auth.js.map +1 -1
  26. package/dist/ports/index.d.ts +7 -11
  27. package/dist/ports/index.d.ts.map +1 -1
  28. package/dist/ports/index.js +1 -0
  29. package/dist/ports/index.js.map +1 -1
  30. package/dist/ports/logging.d.ts +10 -0
  31. package/dist/ports/logging.d.ts.map +1 -0
  32. package/dist/ports/logging.js +2 -0
  33. package/dist/ports/logging.js.map +1 -0
  34. package/dist/ports/telemetry.d.ts +95 -23
  35. package/dist/ports/telemetry.d.ts.map +1 -1
  36. package/dist/ports/telemetry.js +77 -1
  37. package/dist/ports/telemetry.js.map +1 -1
  38. package/dist/providers/noop-telemetry.d.ts +1 -7
  39. package/dist/providers/noop-telemetry.d.ts.map +1 -1
  40. package/dist/providers/noop-telemetry.js +1 -7
  41. package/dist/providers/noop-telemetry.js.map +1 -1
  42. package/dist/routes/action.js +3 -3
  43. package/dist/routes/action.js.map +1 -1
  44. package/dist/routes/agent.js +8 -8
  45. package/dist/routes/agent.js.map +1 -1
  46. package/dist/routes/channel.js +9 -9
  47. package/dist/routes/channel.js.map +1 -1
  48. package/dist/routes/directory.js +5 -5
  49. package/dist/routes/directory.js.map +1 -1
  50. package/dist/routes/dm.js +1 -1
  51. package/dist/routes/dm.js.map +1 -1
  52. package/dist/routes/eventSubscription.js +2 -2
  53. package/dist/routes/eventSubscription.js.map +1 -1
  54. package/dist/routes/file.js +2 -2
  55. package/dist/routes/file.js.map +1 -1
  56. package/dist/routes/groupDm.js +4 -4
  57. package/dist/routes/groupDm.js.map +1 -1
  58. package/dist/routes/inboundWebhook.js +5 -6
  59. package/dist/routes/inboundWebhook.js.map +1 -1
  60. package/dist/routes/message.js +1 -1
  61. package/dist/routes/message.js.map +1 -1
  62. package/dist/routes/node.js +1 -1
  63. package/dist/routes/node.js.map +1 -1
  64. package/dist/routes/presence.js +2 -2
  65. package/dist/routes/presence.js.map +1 -1
  66. package/dist/routes/reaction.js +2 -2
  67. package/dist/routes/reaction.js.map +1 -1
  68. package/dist/routes/receipt.js +1 -1
  69. package/dist/routes/receipt.js.map +1 -1
  70. package/dist/routes/relayfileInbound.d.ts.map +1 -1
  71. package/dist/routes/relayfileInbound.js +3 -4
  72. package/dist/routes/relayfileInbound.js.map +1 -1
  73. package/dist/routes/routing.js +3 -3
  74. package/dist/routes/routing.js.map +1 -1
  75. package/dist/routes/search.js +1 -1
  76. package/dist/routes/search.js.map +1 -1
  77. package/dist/routes/systemPrompt.js +2 -2
  78. package/dist/routes/systemPrompt.js.map +1 -1
  79. package/dist/routes/thread.js +1 -1
  80. package/dist/routes/thread.js.map +1 -1
  81. package/dist/routes/workspace.js +5 -5
  82. package/dist/routes/workspace.js.map +1 -1
  83. package/package.json +3 -3
@@ -1,7 +1,4 @@
1
- import { TELEMETRY_CLOUD_ID_MAX_LENGTH, } from "@relaycast/types";
2
- import { eq } from "drizzle-orm";
3
- import { workspaces } from "../db/schema.js";
4
- import { extractActorIdentity, extractAgentRelayDistinctId, extractOriginActor, requiredOriginInfo, UNKNOWN_ORIGIN_ACTOR, } from "./origin.js";
1
+ import { extractOriginActor, requiredOriginInfo, UNKNOWN_ORIGIN_ACTOR, } from "./origin.js";
5
2
  export function normalizeRoutePathForTelemetry(value) {
6
3
  const withoutQuery = value.split(/[?#]/)[0] ?? value;
7
4
  const compact = withoutQuery.replace(/\/+/g, "/").trim();
@@ -20,48 +17,6 @@ export function normalizeRoutePathForTelemetry(value) {
20
17
  });
21
18
  return `/${segments.join("/")}`;
22
19
  }
23
- /**
24
- * Load the workspace fields that carry its PostHog groups, for emitters that
25
- * run without an authenticated workspace in context (external webhooks, node
26
- * sockets). Groups are optional, so a failed lookup yields none rather than
27
- * dropping the event.
28
- */
29
- export async function loadTelemetryWorkspace(db, workspaceId) {
30
- try {
31
- const [workspace] = await db
32
- .select({ id: workspaces.id, metadata: workspaces.metadata })
33
- .from(workspaces)
34
- .where(eq(workspaces.id, workspaceId));
35
- return workspace;
36
- }
37
- catch (error) {
38
- console.warn('[telemetry] workspace lookup failed; event sent without groups', {
39
- workspace_id: workspaceId,
40
- error: error instanceof Error ? error.message : String(error),
41
- });
42
- return undefined;
43
- }
44
- }
45
- /** Sends whose first occurrence is stamped on the person via `$set_once`. */
46
- const SEND_EVENTS = new Set([
47
- "relaycast_server_message_created",
48
- "relaycast_server_thread_reply_created",
49
- "relaycast_server_dm_sent",
50
- "relaycast_server_group_dm_message_sent",
51
- ]);
52
- /** Distinct id for events with no person; a workspace is never a person. */
53
- export function workspaceTelemetryDistinctId(workspaceId) {
54
- return `relaycast-ws:${workspaceId}`;
55
- }
56
- function cloudId(metadata, key) {
57
- const value = metadata?.[key];
58
- if (typeof value !== "string")
59
- return undefined;
60
- const trimmed = value.trim();
61
- if (!trimmed || trimmed.length > TELEMETRY_CLOUD_ID_MAX_LENGTH)
62
- return undefined;
63
- return trimmed;
64
- }
65
20
  function senderType(type) {
66
21
  if (type === "human")
67
22
  return "human";
@@ -69,45 +24,6 @@ function senderType(type) {
69
24
  return "system";
70
25
  return "agent";
71
26
  }
72
- function senderProperties(actor, cloudUserId) {
73
- const type = senderType(actor.type);
74
- return {
75
- sender_type: type,
76
- agent_id: actor.id,
77
- agent_name: actor.name,
78
- ...(type !== "human" && cloudUserId ? { agent_owner_user_id: cloudUserId } : {}),
79
- };
80
- }
81
- function workspaceGroups(workspace) {
82
- const organization = cloudId(workspace?.metadata, "cloud_org_id");
83
- const cloudWorkspace = cloudId(workspace?.metadata, "cloud_workspace_id");
84
- if (!organization && !cloudWorkspace)
85
- return undefined;
86
- return {
87
- ...(organization ? { organization } : {}),
88
- ...(cloudWorkspace ? { workspace: cloudWorkspace } : {}),
89
- };
90
- }
91
- function firstSendSetOnce(sender) {
92
- const now = new Date().toISOString();
93
- if (sender.sender_type === "human")
94
- return { first_human_message_at: now };
95
- // An agent send counts toward a person only when an owner is known; system
96
- // actors are not the person's agents.
97
- return sender.sender_type === "agent" && sender.agent_owner_user_id
98
- ? { first_agent_message_at: now }
99
- : {};
100
- }
101
- /**
102
- * Emit a server-side product-telemetry event through the injected
103
- * {@link TelemetrySink}. Self-host's default sink is a no-op; cloud injects
104
- * PostHog. The sink owns batching/background-flush, so this returns immediately.
105
- *
106
- * The person is the acting agent's `metadata.cloud_user_id` (a human, or the
107
- * owner of an agent), else the caller-declared user/client id, else the
108
- * workspace with person processing off. The workspace's cloud org and
109
- * workspace ids become PostHog groups.
110
- */
111
27
  export function emitServerEvent(c, workspaceId, event, properties, attribution = {}) {
112
28
  const normalizedProperties = { ...properties };
113
29
  // The `workspaceId` argument is authoritative; a caller value must not
@@ -120,50 +36,36 @@ export function emitServerEvent(c, workspaceId, event, properties, attribution =
120
36
  // header directly so emitters that bypass middleware still get a sane value.
121
37
  const originActor = c.get("originActor") ?? extractOriginActor(c.req.raw) ?? UNKNOWN_ORIGIN_ACTOR;
122
38
  const origin = requiredOriginInfo(c.req.raw);
123
- const clientDistinctId = extractAgentRelayDistinctId(c.req.raw);
124
- // Caller-declared user/org. Analytics dimensions only — never authorization.
125
- const actor = extractActorIdentity(c.req.raw);
126
39
  // Context rows belong to the authenticated token; an event about another
127
40
  // workspace (e.g. one just created) must not inherit them.
128
41
  const contextAgent = c.get("agent");
129
- const contextWorkspace = c.get("workspace");
130
42
  const actingAgent = attribution.actor ??
131
43
  (contextAgent?.workspaceId === workspaceId ? contextAgent : undefined);
132
- const workspace = attribution.workspace ??
133
- (contextWorkspace?.id === workspaceId ? contextWorkspace : undefined);
134
- const cloudUserId = actingAgent
135
- ? cloudId(actingAgent.metadata, "cloud_user_id")
136
- : undefined;
137
- const sender = actingAgent
138
- ? senderProperties(actingAgent, cloudUserId)
139
- : undefined;
140
- // `client_distinct_id` is already the user id when the CLI is signed in; the
141
- // explicit user header covers callers that send only one of the two.
142
- const personId = cloudUserId ?? actor.actor_user_id ?? clientDistinctId;
143
- const groups = workspaceGroups(workspace);
144
- const setOnce = personId && sender && SEND_EVENTS.has(event)
145
- ? firstSendSetOnce(sender)
146
- : {};
147
- c.get("engine").telemetry.capture({
148
- name: event,
149
- distinctId: personId ?? workspaceTelemetryDistinctId(workspaceId),
150
- ...(personId ? {} : { processPersonProfile: false }),
151
- ...(groups ? { groups } : {}),
152
- ...(Object.keys(setOnce).length > 0 ? { setOnce } : {}),
153
- properties: {
154
- app: "relaycast-server",
155
- surface: "cloud",
156
- // Early, so the sink's 64-property cap can never truncate it away.
157
- workspace_id: workspaceId,
158
- ...(clientDistinctId ? { client_distinct_id: clientDistinctId } : {}),
159
- is_authenticated: Boolean(actor.actor_user_id),
160
- ...actor,
161
- ...sender,
162
- origin_actor: originActor,
163
- origin_client: origin.origin_client,
164
- origin_version: origin.origin_version,
165
- ...normalizedProperties,
166
- },
167
- });
44
+ const sender = actingAgent ? { id: actingAgent.id, name: actingAgent.name, type: senderType(actingAgent.type) } : undefined;
45
+ // Only the credential-authenticated agent can establish ownership. A node
46
+ // may name any workspace agent as `from`; loading that sender's row proves
47
+ // neither possession of its token nor any external ownership.
48
+ const scopedActor = contextAgent?.workspaceId === workspaceId ? contextAgent : undefined;
49
+ // Neither synchronous throws nor asynchronous rejections may change a domain outcome.
50
+ try {
51
+ const pending = c.get("engine").telemetry.capture({
52
+ kind: event,
53
+ occurredAt: new Date().toISOString(),
54
+ workspaceId,
55
+ ...(scopedActor ? { authenticatedActor: {
56
+ agentId: scopedActor.id,
57
+ credentialHash: c.get('agentCredentialHash'),
58
+ type: senderType(scopedActor.type),
59
+ } } : {}),
60
+ ...(sender ? { sender } : {}),
61
+ origin: { actor: originActor, client: origin.origin_client, version: origin.origin_version },
62
+ facts: normalizedProperties,
63
+ });
64
+ if (pending)
65
+ void Promise.resolve(pending).catch(() => { });
66
+ }
67
+ catch {
68
+ // Host observation is best effort.
69
+ }
168
70
  }
169
71
  //# sourceMappingURL=serverTelemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverTelemetry.js","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serverTelemetry.js","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxC,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAyC7C,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,EACvC,OAAO,GAAE,oBAAyB,kEAuDnC;AAED,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,gEAAkC,CAAC;AAEnE,wDAAwD;AACxD,eAAO,MAAM,WAAW,gEAA4B,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,aAAa,gEAA+B,CAAC;AAE1D,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,gEAA8B,CAAC;AAE7D,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,gEAA6B,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMxC,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAgD7C,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,EACvC,OAAO,GAAE,oBAAyB,kEAyDnC;AAED,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,gEAAkC,CAAC;AAEnE,wDAAwD;AACxD,eAAO,MAAM,WAAW,gEAA4B,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,aAAa,gEAA+B,CAAC;AAE1D,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,gEAA8B,CAAC;AAE7D,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,gEAA6B,CAAC"}
@@ -3,6 +3,7 @@ import { touchLastSeen } from '../engine/agent.js';
3
3
  import { getAuthTokenKind } from '../auth/tokenKind.js';
4
4
  import { authenticateUnexpired } from '../auth/workspaceExpiry.js';
5
5
  import { jsonError } from '../lib/httpResponse.js';
6
+ import { sha256Hex } from '../lib/crypto.js';
6
7
  import { hasAnyObserverScope, } from '../engine/observerToken.js';
7
8
  // Re-exported for the WS upgrade, which looks tokens up
8
9
  // directly. The active provider's `hashToken` is preferred at those call sites.
@@ -13,6 +14,16 @@ function extractToken(authHeader) {
13
14
  return null;
14
15
  return authHeader.slice(7);
15
16
  }
17
+ async function presentedCredentialHash(token) {
18
+ // AuthProvider.hashToken describes storage, and may return a raw token.
19
+ // Telemetry provenance always uses its own irreversible SHA-256 digest.
20
+ try {
21
+ return await sha256Hex(token);
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
16
27
  function makeAuthMiddleware(require) {
17
28
  return createMiddleware(async (c, next) => {
18
29
  const token = extractToken(c.req.header('Authorization'));
@@ -25,6 +36,7 @@ function makeAuthMiddleware(require) {
25
36
  return jsonError(c, result.code, result.message, result.status);
26
37
  }
27
38
  c.set('workspace', result.workspace);
39
+ c.set('agentCredentialHash', result.agent ? await presentedCredentialHash(token) : undefined);
28
40
  if (result.agent) {
29
41
  c.set('agent', result.agent);
30
42
  // Touch lastSeen (debounced, fire-and-forget)
@@ -69,6 +81,7 @@ export function requireWorkspaceRead(scopes, options = {}) {
69
81
  }
70
82
  c.set('workspace', result.workspace);
71
83
  c.set('agent', undefined);
84
+ c.set('agentCredentialHash', undefined);
72
85
  c.set('node', undefined);
73
86
  c.set('observerToken', result.observerToken);
74
87
  await next();
@@ -81,6 +94,7 @@ export function requireWorkspaceRead(scopes, options = {}) {
81
94
  return jsonError(c, 'forbidden', 'Node token cannot access this resource', 403);
82
95
  }
83
96
  c.set('workspace', result.workspace);
97
+ c.set('agentCredentialHash', result.agent ? await presentedCredentialHash(token) : undefined);
84
98
  if (result.agent) {
85
99
  c.set('agent', result.agent);
86
100
  if (Date.now() - result.agent.lastSeen.getTime() > LAST_SEEN_DEBOUNCE_MS) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,9 @@ export type { KeyValueStore } from './kv.js';
22
22
  export type { EventQueue, QueuedEvent } from './event-queue.js';
23
23
  export type { AuthProvider, AuthResult, AuthRequire, Workspace, Agent, } from './auth.js';
24
24
  export type { EntitlementsProvider, PlanLimits, UsageMetric, } from './entitlements.js';
25
- export type { TelemetrySink, TelemetryEvent } from './telemetry.js';
25
+ export { ENGINE_OBSERVATION_FACTS } from './telemetry.js';
26
+ export type { TelemetrySink, TelemetryEvent, EngineObservation, EngineObservationKind, EngineObservationFacts } from './telemetry.js';
27
+ export type { EngineLogRecord, EngineLogExport } from './logging.js';
26
28
  import type { EngineDb } from './database.js';
27
29
  import type { RealtimeBus, ConnectionRegistry, NodeConnectionRegistry } from './realtime.js';
28
30
  import type { PresenceTracker } from './presence.js';
@@ -33,6 +35,7 @@ import type { EventQueue } from './event-queue.js';
33
35
  import type { AuthProvider } from './auth.js';
34
36
  import type { EntitlementsProvider } from './entitlements.js';
35
37
  import type { TelemetrySink } from './telemetry.js';
38
+ import type { EngineLogExport } from './logging.js';
36
39
  /** Infrastructure ports the engine reads off the request context. */
37
40
  export interface EnginePorts {
38
41
  db: EngineDb;
@@ -49,7 +52,7 @@ export interface EnginePorts {
49
52
  export interface EngineProviders {
50
53
  auth: AuthProvider;
51
54
  entitlements: EntitlementsProvider;
52
- telemetry: TelemetrySink;
55
+ telemetry?: TelemetrySink;
53
56
  }
54
57
  /** Everything `createEngine` needs. */
55
58
  export interface EngineDeps extends EnginePorts, EngineProviders {
@@ -124,15 +127,8 @@ export interface EngineConfig {
124
127
  url?: string;
125
128
  secret?: string;
126
129
  };
127
- /**
128
- * When set, the structured logger exports prod logs to a PostHog OTLP endpoint
129
- * via plain fetch (no posthog-node dependency). Self-host leaves this unset and
130
- * logs to the console only; cloud wires it from its secrets.
131
- */
132
- logExport?: {
133
- posthogApiKey?: string;
134
- posthogHost?: string;
135
- };
130
+ /** Optional host-owned log transport. Console output remains enabled. */
131
+ logExport?: EngineLogExport;
136
132
  /**
137
133
  * Bounded durable mailbox tuning. Hosted adapters may provide workspace
138
134
  * overrides; self-host defaults to one hour TTL and 1000 in-flight deliveries
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,YAAY,EACV,QAAQ,EACR,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACtI,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,EAAE,sBAAsB,CAAC;IACxC,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,aAAa,CAAC;IAClB,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,oBAAoB,CAAC;IACnC,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAW,SAAQ,WAAW,EAAE,eAAe;IAC9D;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C;;;;;;;;;;OAUG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,yEAAyE;IACzE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC,CAAC;KACJ,CAAC;IACF;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,wBAAwB,EAAE,6BAA6B,CAAC;CACpF;AAED,YAAY,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { runAtomic, runAtomicWrites } from './database.js';
2
2
  export { isProviderAgentDeliveryReady } from './realtime.js';
3
+ export { ENGINE_OBSERVATION_FACTS } from './telemetry.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAS3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAS3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAkB7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** A structured log record emitted by the engine. */
2
+ export interface EngineLogRecord {
3
+ level: 'debug' | 'info' | 'warn' | 'error';
4
+ message: string;
5
+ fields: Record<string, unknown>;
6
+ occurredAt: string;
7
+ }
8
+ /** Optional host-owned transport for engine log records. */
9
+ export type EngineLogExport = (record: EngineLogRecord) => void | Promise<void>;
10
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/ports/logging.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/ports/logging.ts"],"names":[],"mappings":""}
@@ -1,27 +1,99 @@
1
- import type { TelemetryGroups, TelemetryPersonSetOnce } from '@relaycast/types';
2
- /**
3
- * Pluggable telemetry sink — the observability seam.
4
- *
5
- * Self-host uses `NoopTelemetrySink` (honors `DO_NOT_TRACK` / explicit disable).
6
- * The cloud product injects a PostHog-backed sink. All methods are
7
- * fire-and-forget from the engine's perspective; the sink decides batching and
8
- * background flushing.
9
- */
10
- export interface TelemetryEvent {
11
- /** Event name, e.g. `relaycast_server_message_posted`. */
12
- name: string;
13
- /** The person the event belongs to, or `relaycast-ws:<workspace_id>` when none is known. */
14
- distinctId: string;
15
- properties: Record<string, unknown>;
16
- /** PostHog groups (`$groups`); absent when the workspace carries no cloud ids. */
17
- groups?: TelemetryGroups;
18
- /** Person properties written once (`$set_once`). */
19
- setOnce?: TelemetryPersonSetOnce;
20
- /** `false` when `distinctId` is not a person (`$process_person_profile`). */
21
- processPersonProfile?: boolean;
1
+ /** Engine domain observations. Hosts decide whether and how to consume them. */
2
+ export declare const ENGINE_OBSERVATION_FACTS: {
3
+ readonly 'workspace.created': readonly [];
4
+ readonly 'workspace.updated': readonly [];
5
+ readonly 'workspace.deleted': readonly [];
6
+ readonly 'workspace.stream.updated': readonly ["stream_mode"];
7
+ readonly 'workspace.key.rotated': readonly ["grace_seconds"];
8
+ readonly 'agent.registered': readonly ["agent_id"];
9
+ readonly 'agent.updated': readonly ["agent_name"];
10
+ readonly 'legacy.identity.claimed': readonly ["agent_name"];
11
+ readonly 'agent.deleted': readonly ["agent_name"];
12
+ readonly 'agent.token.rotated': readonly ["agent_name"];
13
+ readonly 'agent.identity.taken.over': readonly ["agent_id", "agent_name", "audit_id"];
14
+ readonly 'agent.token.revoked': readonly ["agent_id", "agent_name", "audit_id"];
15
+ readonly 'channel.created': readonly ["channel_id", "channel_name"];
16
+ readonly 'channel.updated': readonly ["channel_id", "channel_name"];
17
+ readonly 'channel.topic.updated': readonly ["channel_id", "channel_name"];
18
+ readonly 'channel.archived': readonly ["channel_name"];
19
+ readonly 'channel.joined': readonly ["channel_name", "agent_id"];
20
+ readonly 'channel.left': readonly ["channel_name", "agent_id"];
21
+ readonly 'channel.invited': readonly ["channel_name", "invited_agent_name"];
22
+ readonly 'channel.muted': readonly ["channel_name", "agent_id"];
23
+ readonly 'channel.unmuted': readonly ["channel_name", "agent_id"];
24
+ readonly 'message.created': readonly ["channel_id", "message_id"];
25
+ readonly 'thread.reply.created': readonly ["message_id", "parent_message_id"];
26
+ readonly 'file.upload.requested': readonly ["file_id", "size_bytes"];
27
+ readonly 'file.upload.completed': readonly ["file_id", "size_bytes"];
28
+ readonly 'dm.sent': readonly ["conversation_id", "message_id"];
29
+ readonly 'group.dm.created': readonly ["conversation_id"];
30
+ readonly 'group.dm.message.sent': readonly ["conversation_id", "message_id"];
31
+ readonly 'group.dm.participant.added': readonly ["conversation_id", "agent_name"];
32
+ readonly 'group.dm.participant.removed': readonly ["conversation_id", "agent_id"];
33
+ readonly 'reaction.added': readonly ["message_id", "emoji"];
34
+ readonly 'reaction.removed': readonly ["message_id", "emoji"];
35
+ readonly 'search.executed': readonly ["query_length", "result_count"];
36
+ readonly 'command.registered': readonly ["command"];
37
+ readonly 'command.deleted': readonly ["command"];
38
+ readonly 'command.invoked': readonly ["command", "invocation_id"];
39
+ readonly 'subscription.created': readonly ["subscription_id"];
40
+ readonly 'subscription.deleted': readonly ["subscription_id"];
41
+ readonly 'inbound.webhook.created': readonly ["webhook_id"];
42
+ readonly 'inbound.webhook.deleted': readonly ["webhook_id"];
43
+ readonly 'inbound.webhook.triggered': readonly ["webhook_id"];
44
+ readonly 'message.read.marked': readonly ["message_id", "agent_id"];
45
+ readonly 'presence.heartbeat': readonly ["agent_id"];
46
+ readonly 'presence.disconnected': readonly ["agent_id"];
47
+ readonly 'system.prompt.updated': readonly ["operation"];
48
+ readonly 'ws.session.started': readonly ["session_scope"];
49
+ readonly 'ws.session.ended': readonly ["session_scope", "duration_ms"];
50
+ readonly 'action.registered': readonly ["action_name"];
51
+ readonly 'action.deleted': readonly ["action_name"];
52
+ readonly 'action.invoked': readonly ["action_name", "invocation_id"];
53
+ readonly 'directory.agent.created': readonly [];
54
+ readonly 'directory.agent.updated': readonly ["slug"];
55
+ readonly 'directory.agent.deleted': readonly ["slug"];
56
+ readonly 'directory.rating.upserted': readonly ["slug", "score"];
57
+ readonly 'directory.search.executed': readonly ["result_count"];
58
+ readonly 'route.resolved': readonly ["skill"];
59
+ readonly 'route.feedback.recorded': readonly ["agent_name", "success"];
60
+ readonly 'routing.config.updated': readonly [];
61
+ readonly 'relayfile.inbound.delivered': readonly ["provider"];
62
+ };
63
+ export type EngineObservationKind = keyof typeof ENGINE_OBSERVATION_FACTS;
64
+ export type EngineObservationFacts<K extends EngineObservationKind> = Record<string, unknown> & {
65
+ [F in (typeof ENGINE_OBSERVATION_FACTS)[K][number]]: string | number | boolean | null;
66
+ };
67
+ interface ObservationFor<K extends EngineObservationKind> {
68
+ kind: K;
69
+ occurredAt: string;
70
+ workspaceId: string;
71
+ /** Credential-authenticated principal only. Internal proof: never export this hash. */
72
+ authenticatedActor?: {
73
+ agentId: string;
74
+ credentialHash?: string;
75
+ type: 'human' | 'agent' | 'system';
76
+ };
77
+ /** Domain sender, which may differ from the authenticated principal (node posting as). */
78
+ sender?: {
79
+ id: string;
80
+ name: string;
81
+ type: 'human' | 'agent' | 'system';
82
+ };
83
+ origin: {
84
+ actor: string;
85
+ client: string;
86
+ version: string;
87
+ };
88
+ facts: EngineObservationFacts<K>;
22
89
  }
90
+ export type EngineObservation<K extends EngineObservationKind = EngineObservationKind> = K extends EngineObservationKind ? ObservationFor<K> : never;
91
+ export type TelemetryEvent = EngineObservation;
23
92
  export interface TelemetrySink {
24
- capture(event: TelemetryEvent): void;
25
- captureException(err: unknown, context?: Record<string, unknown>): void;
93
+ capture(event: EngineObservation): void | Promise<void>;
94
+ captureException(err: unknown, context?: Record<string, unknown>): void | Promise<void>;
26
95
  }
96
+ /** Isolate every host callback, including error reporting and maintenance paths. */
97
+ export declare function safeTelemetrySink(sink: TelemetrySink): TelemetrySink;
98
+ export {};
27
99
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/ports/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEhF;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,kFAAkF;IAClF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oDAAoD;IACpD,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACzE"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/ports/telemetry.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D3B,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAC1E,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;KAC7F,CAAC,IAAI,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;CACtF,CAAC;AACF,UAAU,cAAc,CAAC,CAAC,SAAS,qBAAqB;IACtD,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE,CAAC;IACtG,0FAA0F;IAC1F,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC1E,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAClC;AACD,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI,CAAC,SAAS,qBAAqB,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACrJ,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAC/C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAQpE"}
@@ -1,2 +1,78 @@
1
- export {};
1
+ /** Engine domain observations. Hosts decide whether and how to consume them. */
2
+ export const ENGINE_OBSERVATION_FACTS = {
3
+ 'workspace.created': [],
4
+ 'workspace.updated': [],
5
+ 'workspace.deleted': [],
6
+ 'workspace.stream.updated': ['stream_mode'],
7
+ 'workspace.key.rotated': ['grace_seconds'],
8
+ 'agent.registered': ['agent_id'],
9
+ 'agent.updated': ['agent_name'],
10
+ 'legacy.identity.claimed': ['agent_name'],
11
+ 'agent.deleted': ['agent_name'],
12
+ 'agent.token.rotated': ['agent_name'],
13
+ 'agent.identity.taken.over': ['agent_id', 'agent_name', 'audit_id'],
14
+ 'agent.token.revoked': ['agent_id', 'agent_name', 'audit_id'],
15
+ 'channel.created': ['channel_id', 'channel_name'],
16
+ 'channel.updated': ['channel_id', 'channel_name'],
17
+ 'channel.topic.updated': ['channel_id', 'channel_name'],
18
+ 'channel.archived': ['channel_name'],
19
+ 'channel.joined': ['channel_name', 'agent_id'],
20
+ 'channel.left': ['channel_name', 'agent_id'],
21
+ 'channel.invited': ['channel_name', 'invited_agent_name'],
22
+ 'channel.muted': ['channel_name', 'agent_id'],
23
+ 'channel.unmuted': ['channel_name', 'agent_id'],
24
+ 'message.created': ['channel_id', 'message_id'],
25
+ 'thread.reply.created': ['message_id', 'parent_message_id'],
26
+ 'file.upload.requested': ['file_id', 'size_bytes'],
27
+ 'file.upload.completed': ['file_id', 'size_bytes'],
28
+ 'dm.sent': ['conversation_id', 'message_id'],
29
+ 'group.dm.created': ['conversation_id'],
30
+ 'group.dm.message.sent': ['conversation_id', 'message_id'],
31
+ 'group.dm.participant.added': ['conversation_id', 'agent_name'],
32
+ 'group.dm.participant.removed': ['conversation_id', 'agent_id'],
33
+ 'reaction.added': ['message_id', 'emoji'],
34
+ 'reaction.removed': ['message_id', 'emoji'],
35
+ 'search.executed': ['query_length', 'result_count'],
36
+ 'command.registered': ['command'],
37
+ 'command.deleted': ['command'],
38
+ 'command.invoked': ['command', 'invocation_id'],
39
+ 'subscription.created': ['subscription_id'],
40
+ 'subscription.deleted': ['subscription_id'],
41
+ 'inbound.webhook.created': ['webhook_id'],
42
+ 'inbound.webhook.deleted': ['webhook_id'],
43
+ 'inbound.webhook.triggered': ['webhook_id'],
44
+ 'message.read.marked': ['message_id', 'agent_id'],
45
+ 'presence.heartbeat': ['agent_id'],
46
+ 'presence.disconnected': ['agent_id'],
47
+ 'system.prompt.updated': ['operation'],
48
+ 'ws.session.started': ['session_scope'],
49
+ 'ws.session.ended': ['session_scope', 'duration_ms'],
50
+ 'action.registered': ['action_name'],
51
+ 'action.deleted': ['action_name'],
52
+ 'action.invoked': ['action_name', 'invocation_id'],
53
+ 'directory.agent.created': [],
54
+ 'directory.agent.updated': ['slug'],
55
+ 'directory.agent.deleted': ['slug'],
56
+ 'directory.rating.upserted': ['slug', 'score'],
57
+ 'directory.search.executed': ['result_count'],
58
+ 'route.resolved': ['skill'],
59
+ 'route.feedback.recorded': ['agent_name', 'success'],
60
+ 'routing.config.updated': [],
61
+ 'relayfile.inbound.delivered': ['provider'],
62
+ };
63
+ /** Isolate every host callback, including error reporting and maintenance paths. */
64
+ export function safeTelemetrySink(sink) {
65
+ const invoke = (callback) => {
66
+ try {
67
+ const pending = callback();
68
+ if (pending)
69
+ void Promise.resolve(pending).catch(() => { });
70
+ }
71
+ catch { /* best effort */ }
72
+ };
73
+ return {
74
+ capture: (event) => invoke(() => sink.capture(event)),
75
+ captureException: (error, context) => invoke(() => sink.captureException(error, context)),
76
+ };
77
+ }
2
78
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/ports/telemetry.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/ports/telemetry.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,5 @@
1
1
  import type { TelemetrySink, TelemetryEvent } from '../ports/telemetry.js';
2
- /**
3
- * No-op telemetry — the self-host default. Captures nothing; honors the intent
4
- * of `DO_NOT_TRACK`. The cloud product injects a PostHog-backed sink.
5
- *
6
- * `captureException` still logs to the console so self-host operators see server
7
- * errors without any external service.
8
- */
2
+ /** Self-host default: no outbound observation transport. */
9
3
  export declare class NoopTelemetrySink implements TelemetrySink {
10
4
  capture(_event: TelemetryEvent): void;
11
5
  captureException(err: unknown, context?: Record<string, unknown>): void;