@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.
- package/dist/adapters/node/delivery-maintenance.d.ts.map +1 -1
- package/dist/adapters/node/delivery-maintenance.js +5 -2
- package/dist/adapters/node/delivery-maintenance.js.map +1 -1
- package/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +2 -1
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +8 -7
- package/dist/engine.js.map +1 -1
- package/dist/env.d.ts +4 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/logger.d.ts +3 -9
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +10 -96
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/serverTelemetry.d.ts +6 -45
- package/dist/lib/serverTelemetry.d.ts.map +1 -1
- package/dist/lib/serverTelemetry.js +27 -125
- package/dist/lib/serverTelemetry.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +14 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/ports/index.d.ts +7 -11
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -0
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/logging.d.ts +10 -0
- package/dist/ports/logging.d.ts.map +1 -0
- package/dist/ports/logging.js +2 -0
- package/dist/ports/logging.js.map +1 -0
- package/dist/ports/telemetry.d.ts +95 -23
- package/dist/ports/telemetry.d.ts.map +1 -1
- package/dist/ports/telemetry.js +77 -1
- package/dist/ports/telemetry.js.map +1 -1
- package/dist/providers/noop-telemetry.d.ts +1 -7
- package/dist/providers/noop-telemetry.d.ts.map +1 -1
- package/dist/providers/noop-telemetry.js +1 -7
- package/dist/providers/noop-telemetry.js.map +1 -1
- package/dist/routes/action.js +3 -3
- package/dist/routes/action.js.map +1 -1
- package/dist/routes/agent.js +8 -8
- package/dist/routes/agent.js.map +1 -1
- package/dist/routes/channel.js +9 -9
- package/dist/routes/channel.js.map +1 -1
- package/dist/routes/directory.js +5 -5
- package/dist/routes/directory.js.map +1 -1
- package/dist/routes/dm.js +1 -1
- package/dist/routes/dm.js.map +1 -1
- package/dist/routes/eventSubscription.js +2 -2
- package/dist/routes/eventSubscription.js.map +1 -1
- package/dist/routes/file.js +2 -2
- package/dist/routes/file.js.map +1 -1
- package/dist/routes/groupDm.js +4 -4
- package/dist/routes/groupDm.js.map +1 -1
- package/dist/routes/inboundWebhook.js +5 -6
- package/dist/routes/inboundWebhook.js.map +1 -1
- package/dist/routes/message.js +1 -1
- package/dist/routes/message.js.map +1 -1
- package/dist/routes/node.js +1 -1
- package/dist/routes/node.js.map +1 -1
- package/dist/routes/presence.js +2 -2
- package/dist/routes/presence.js.map +1 -1
- package/dist/routes/reaction.js +2 -2
- package/dist/routes/reaction.js.map +1 -1
- package/dist/routes/receipt.js +1 -1
- package/dist/routes/receipt.js.map +1 -1
- package/dist/routes/relayfileInbound.d.ts.map +1 -1
- package/dist/routes/relayfileInbound.js +3 -4
- package/dist/routes/relayfileInbound.js.map +1 -1
- package/dist/routes/routing.js +3 -3
- package/dist/routes/routing.js.map +1 -1
- package/dist/routes/search.js +1 -1
- package/dist/routes/search.js.map +1 -1
- package/dist/routes/systemPrompt.js +2 -2
- package/dist/routes/systemPrompt.js.map +1 -1
- package/dist/routes/thread.js +1 -1
- package/dist/routes/thread.js.map +1 -1
- package/dist/routes/workspace.js +5 -5
- package/dist/routes/workspace.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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":"
|
|
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;
|
|
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"}
|
package/dist/middleware/auth.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,mBAAmB,GAEpB,MAAM,4BAA4B,CAAC;AAEpC,wDAAwD;AACxD,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,aAAa;AAEnD,SAAS,YAAY,CAAC,UAA8B;IAClD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoB;IAC9C,OAAO,gBAAgB,CAAS,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAChD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAA8B,CAAC,CAAC;QAC1F,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,8CAA8C;YAC9C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,qBAAqB,EAAE,CAAC;gBACzE,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAOD,SAAS,WAAW,CAAC,MAAuC;IAC1D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAuC,EACvC,UAAgC,EAAE;IAElC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAE5C,OAAO,gBAAgB,CAAS,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAChD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,OAAO,GAAgB,gBAAgB,CAAC,KAAK,CAAC,KAAK,UAAU;YACjE,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,IAAI,SAAS;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,WAAW,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAA8B,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC/D,OAAO,SAAS,CAAC,CAAC,EAAE,oBAAoB,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;YAC5F,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1B,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAClF,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,qBAAqB,EAAE,CAAC;gBACzE,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAEnE,wDAAwD;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE7D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/index.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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":"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,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/index.js
CHANGED
package/dist/ports/index.js.map
CHANGED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/ports/logging.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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:
|
|
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,
|
|
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"}
|
package/dist/ports/telemetry.js
CHANGED
|
@@ -1,2 +1,78 @@
|
|
|
1
|
-
|
|
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;
|