@automagik/omni 2.260529.2 → 2.260529.3
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/index.js +256 -32
- package/dist/server/index.js +280 -56
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -35857,6 +35857,82 @@ function buildProviderRequestContext(context) {
|
|
|
35857
35857
|
}
|
|
35858
35858
|
var OMNI_EXECUTION_CONTEXT_EXTENSION_URI = "https://omni.dev/extensions/execution-context/v1";
|
|
35859
35859
|
|
|
35860
|
+
// ../core/src/providers/trace-context.ts
|
|
35861
|
+
import { createHash as createHash3 } from "crypto";
|
|
35862
|
+
function isNonZeroHex(value) {
|
|
35863
|
+
return value.length > 0 && !/^0+$/.test(value);
|
|
35864
|
+
}
|
|
35865
|
+
function hashHex(value, length) {
|
|
35866
|
+
return createHash3("sha256").update(value).digest("hex").slice(0, length);
|
|
35867
|
+
}
|
|
35868
|
+
function normalizeTraceId(value) {
|
|
35869
|
+
const lower = value.toLowerCase();
|
|
35870
|
+
if (W3C_TRACE_ID.test(lower) && isNonZeroHex(lower)) {
|
|
35871
|
+
return lower;
|
|
35872
|
+
}
|
|
35873
|
+
return hashHex(lower, 32);
|
|
35874
|
+
}
|
|
35875
|
+
function normalizeSpanId(value) {
|
|
35876
|
+
const lower = value.toLowerCase();
|
|
35877
|
+
if (W3C_SPAN_ID.test(lower) && isNonZeroHex(lower)) {
|
|
35878
|
+
return lower;
|
|
35879
|
+
}
|
|
35880
|
+
return hashHex(lower, 16);
|
|
35881
|
+
}
|
|
35882
|
+
function createTraceContextFromTraceId(traceId, spanSeed = "provider") {
|
|
35883
|
+
if (!traceId)
|
|
35884
|
+
return;
|
|
35885
|
+
return {
|
|
35886
|
+
traceId: normalizeTraceId(traceId),
|
|
35887
|
+
spanId: normalizeSpanId(`${traceId}:${spanSeed}`),
|
|
35888
|
+
traceFlags: 1
|
|
35889
|
+
};
|
|
35890
|
+
}
|
|
35891
|
+
function formatTraceparent(ctx) {
|
|
35892
|
+
const traceFlags = (ctx.traceFlags ?? 1) & 255;
|
|
35893
|
+
const paddedFlagsHex = traceFlags.toString(16).padStart(2, "0");
|
|
35894
|
+
return `00-${normalizeTraceId(ctx.traceId)}-${normalizeSpanId(ctx.spanId)}-${paddedFlagsHex}`;
|
|
35895
|
+
}
|
|
35896
|
+
function buildTraceHeaders2(ctx, khal) {
|
|
35897
|
+
const traceHeaders = {};
|
|
35898
|
+
if (ctx) {
|
|
35899
|
+
traceHeaders.traceparent = formatTraceparent(ctx);
|
|
35900
|
+
traceHeaders["x-trace-id"] = normalizeTraceId(ctx.traceId);
|
|
35901
|
+
traceHeaders["x-span-id"] = normalizeSpanId(ctx.spanId);
|
|
35902
|
+
const tracestate = ctx.tracestate ?? ctx.traceState;
|
|
35903
|
+
if (tracestate) {
|
|
35904
|
+
traceHeaders.tracestate = tracestate;
|
|
35905
|
+
}
|
|
35906
|
+
if (ctx.parentSpanId) {
|
|
35907
|
+
traceHeaders["x-parent-span-id"] = normalizeSpanId(ctx.parentSpanId);
|
|
35908
|
+
}
|
|
35909
|
+
}
|
|
35910
|
+
if (khal?.khalSessionId) {
|
|
35911
|
+
traceHeaders["x-khal-session-id"] = khal.khalSessionId;
|
|
35912
|
+
}
|
|
35913
|
+
if (khal?.userId) {
|
|
35914
|
+
traceHeaders["x-khal-user-id"] = khal.userId;
|
|
35915
|
+
}
|
|
35916
|
+
if (khal?.messageId) {
|
|
35917
|
+
traceHeaders["x-khal-message-id"] = khal.messageId;
|
|
35918
|
+
}
|
|
35919
|
+
if (khal?.omni?.instanceId) {
|
|
35920
|
+
traceHeaders["x-omni-instance-id"] = khal.omni.instanceId;
|
|
35921
|
+
}
|
|
35922
|
+
if (khal?.omni?.chatId) {
|
|
35923
|
+
traceHeaders["x-omni-chat-id"] = khal.omni.chatId;
|
|
35924
|
+
}
|
|
35925
|
+
if (khal?.omni?.channel) {
|
|
35926
|
+
traceHeaders["x-omni-channel"] = khal.omni.channel;
|
|
35927
|
+
}
|
|
35928
|
+
return traceHeaders;
|
|
35929
|
+
}
|
|
35930
|
+
var W3C_TRACE_ID, W3C_SPAN_ID;
|
|
35931
|
+
var init_trace_context = __esm(() => {
|
|
35932
|
+
W3C_TRACE_ID = /^[0-9a-f]{32}$/i;
|
|
35933
|
+
W3C_SPAN_ID = /^[0-9a-f]{16}$/i;
|
|
35934
|
+
});
|
|
35935
|
+
|
|
35860
35936
|
// ../core/src/providers/agno-client.ts
|
|
35861
35937
|
class AgnoClient {
|
|
35862
35938
|
baseUrl;
|
|
@@ -35985,12 +36061,14 @@ class AgnoClient {
|
|
|
35985
36061
|
const formData = new FormData;
|
|
35986
36062
|
formData.append("message", request.message);
|
|
35987
36063
|
formData.append("stream", String(stream));
|
|
35988
|
-
|
|
35989
|
-
|
|
36064
|
+
const sessionId = request.khalSessionId ?? request.sessionId;
|
|
36065
|
+
if (sessionId) {
|
|
36066
|
+
formData.append("session_id", sessionId);
|
|
35990
36067
|
}
|
|
35991
36068
|
if (request.userId) {
|
|
35992
36069
|
formData.append("user_id", request.userId);
|
|
35993
36070
|
}
|
|
36071
|
+
this.appendStructuredMetadata(formData, request);
|
|
35994
36072
|
if (request.files?.length) {
|
|
35995
36073
|
for (const file of request.files) {
|
|
35996
36074
|
try {
|
|
@@ -36008,6 +36086,28 @@ class AgnoClient {
|
|
|
36008
36086
|
}
|
|
36009
36087
|
return formData;
|
|
36010
36088
|
}
|
|
36089
|
+
appendStructuredMetadata(formData, request) {
|
|
36090
|
+
const appendJson = (key, value) => {
|
|
36091
|
+
if (value !== undefined) {
|
|
36092
|
+
formData.append(key, JSON.stringify(value));
|
|
36093
|
+
}
|
|
36094
|
+
};
|
|
36095
|
+
if (request.khalSessionId) {
|
|
36096
|
+
formData.append("khal_session_id", request.khalSessionId);
|
|
36097
|
+
}
|
|
36098
|
+
if (request.messageId) {
|
|
36099
|
+
formData.append("message_id", request.messageId);
|
|
36100
|
+
}
|
|
36101
|
+
if (request.replyToMessageId) {
|
|
36102
|
+
formData.append("reply_to_message_id", request.replyToMessageId);
|
|
36103
|
+
}
|
|
36104
|
+
appendJson("platform", request.platform);
|
|
36105
|
+
appendJson("sender", request.sender);
|
|
36106
|
+
appendJson("chat", request.chat);
|
|
36107
|
+
appendJson("mcp_url_params", request.mcpUrlParams);
|
|
36108
|
+
appendJson("env", request.env);
|
|
36109
|
+
appendJson("omni", request.omni);
|
|
36110
|
+
}
|
|
36011
36111
|
async runAgent(agentId, request) {
|
|
36012
36112
|
return this.runEndpoint("agents", agentId, request);
|
|
36013
36113
|
}
|
|
@@ -36023,7 +36123,15 @@ class AgnoClient {
|
|
|
36023
36123
|
const timeoutMs = request.timeoutMs ?? this.defaultTimeoutMs;
|
|
36024
36124
|
const response = await this.fetchWithTimeout(url, {
|
|
36025
36125
|
method: "POST",
|
|
36026
|
-
headers:
|
|
36126
|
+
headers: {
|
|
36127
|
+
...this.getHeaders(),
|
|
36128
|
+
...buildTraceHeaders2(request.traceContext, {
|
|
36129
|
+
khalSessionId: request.khalSessionId ?? request.sessionId,
|
|
36130
|
+
userId: request.userId,
|
|
36131
|
+
messageId: request.omni?.messageId,
|
|
36132
|
+
omni: request.omni
|
|
36133
|
+
})
|
|
36134
|
+
},
|
|
36027
36135
|
body: formData
|
|
36028
36136
|
}, timeoutMs);
|
|
36029
36137
|
if (!response.ok) {
|
|
@@ -36057,7 +36165,15 @@ class AgnoClient {
|
|
|
36057
36165
|
const timeoutMs = request.timeoutMs ?? this.defaultTimeoutMs;
|
|
36058
36166
|
const response = await this.fetchWithTimeout(url, {
|
|
36059
36167
|
method: "POST",
|
|
36060
|
-
headers:
|
|
36168
|
+
headers: {
|
|
36169
|
+
...this.getHeaders(),
|
|
36170
|
+
...buildTraceHeaders2(request.traceContext, {
|
|
36171
|
+
khalSessionId: request.khalSessionId ?? request.sessionId,
|
|
36172
|
+
userId: request.userId,
|
|
36173
|
+
messageId: request.omni?.messageId,
|
|
36174
|
+
omni: request.omni
|
|
36175
|
+
})
|
|
36176
|
+
},
|
|
36061
36177
|
body: formData
|
|
36062
36178
|
}, timeoutMs);
|
|
36063
36179
|
if (!response.ok) {
|
|
@@ -36197,6 +36313,7 @@ function createAgnoClient(config2) {
|
|
|
36197
36313
|
}
|
|
36198
36314
|
var DEFAULT_TIMEOUT_MS = 60000;
|
|
36199
36315
|
var init_agno_client = __esm(() => {
|
|
36316
|
+
init_trace_context();
|
|
36200
36317
|
init_types6();
|
|
36201
36318
|
});
|
|
36202
36319
|
|
|
@@ -60251,12 +60368,7 @@ class AgnoAgentProvider {
|
|
|
60251
60368
|
}
|
|
60252
60369
|
async trigger(context) {
|
|
60253
60370
|
const startTime = Date.now();
|
|
60254
|
-
|
|
60255
|
-
if (context.content.text) {
|
|
60256
|
-
message2 = context.content.text;
|
|
60257
|
-
} else if (context.content.emoji) {
|
|
60258
|
-
message2 = `[Reaction: ${context.content.emoji} on message ${context.content.referencedMessageId ?? context.source.messageId}]`;
|
|
60259
|
-
}
|
|
60371
|
+
const message2 = this.buildMessage(context);
|
|
60260
60372
|
if (!message2) {
|
|
60261
60373
|
log8.debug("No content to send to agent", { traceId: context.traceId });
|
|
60262
60374
|
return {
|
|
@@ -60268,17 +60380,7 @@ class AgnoAgentProvider {
|
|
|
60268
60380
|
}
|
|
60269
60381
|
};
|
|
60270
60382
|
}
|
|
60271
|
-
|
|
60272
|
-
message2 = `[${context.sender.displayName}]: ${message2}`;
|
|
60273
|
-
}
|
|
60274
|
-
const request = {
|
|
60275
|
-
...buildProviderRequestContext(context),
|
|
60276
|
-
message: message2,
|
|
60277
|
-
agentId: this.config.agentId,
|
|
60278
|
-
agentType: this.config.agentType,
|
|
60279
|
-
stream: false,
|
|
60280
|
-
timeoutMs: this.config.timeoutMs ?? 60000
|
|
60281
|
-
};
|
|
60383
|
+
const request = this.buildRequest(context, message2, false);
|
|
60282
60384
|
log8.info("Triggering Agno agent", {
|
|
60283
60385
|
agentId: this.config.agentId,
|
|
60284
60386
|
agentType: this.config.agentType,
|
|
@@ -60310,13 +60412,79 @@ class AgnoAgentProvider {
|
|
|
60310
60412
|
}
|
|
60311
60413
|
};
|
|
60312
60414
|
}
|
|
60415
|
+
async* triggerStream(context) {
|
|
60416
|
+
const message2 = this.buildMessage(context);
|
|
60417
|
+
if (!message2) {
|
|
60418
|
+
log8.debug("No content to send to Agno agent (stream)", { traceId: context.traceId });
|
|
60419
|
+
return;
|
|
60420
|
+
}
|
|
60421
|
+
const request = this.buildRequest(context, message2, true);
|
|
60422
|
+
log8.info("Streaming Agno agent", {
|
|
60423
|
+
agentId: this.config.agentId,
|
|
60424
|
+
agentType: this.config.agentType,
|
|
60425
|
+
triggerType: context.type,
|
|
60426
|
+
traceId: context.traceId
|
|
60427
|
+
});
|
|
60428
|
+
try {
|
|
60429
|
+
for await (const chunk of this.client.stream(request)) {
|
|
60430
|
+
if (chunk.content) {
|
|
60431
|
+
yield { phase: "content", content: chunk.content };
|
|
60432
|
+
}
|
|
60433
|
+
if (chunk.isComplete) {
|
|
60434
|
+
yield { phase: "final", content: chunk.fullContent ?? chunk.content ?? "" };
|
|
60435
|
+
}
|
|
60436
|
+
}
|
|
60437
|
+
} catch (error2) {
|
|
60438
|
+
const message3 = error2 instanceof Error ? error2.message : String(error2);
|
|
60439
|
+
log8.error("Error in Agno agent stream", {
|
|
60440
|
+
agentId: this.config.agentId,
|
|
60441
|
+
traceId: context.traceId,
|
|
60442
|
+
error: message3
|
|
60443
|
+
});
|
|
60444
|
+
yield { phase: "error", error: message3 };
|
|
60445
|
+
}
|
|
60446
|
+
}
|
|
60313
60447
|
async checkHealth() {
|
|
60314
60448
|
return this.client.checkHealth();
|
|
60315
60449
|
}
|
|
60450
|
+
buildMessage(context) {
|
|
60451
|
+
let message2 = "";
|
|
60452
|
+
if (context.content.text) {
|
|
60453
|
+
message2 = context.content.text;
|
|
60454
|
+
} else if (context.content.emoji) {
|
|
60455
|
+
message2 = `[Reaction: ${context.content.emoji} on message ${context.content.referencedMessageId ?? context.source.messageId}]`;
|
|
60456
|
+
}
|
|
60457
|
+
if (message2 && this.config.prefixSenderName !== false && context.sender.displayName) {
|
|
60458
|
+
message2 = `[${context.sender.displayName}]: ${message2}`;
|
|
60459
|
+
}
|
|
60460
|
+
return message2;
|
|
60461
|
+
}
|
|
60462
|
+
buildRequest(context, message2, stream) {
|
|
60463
|
+
const traceContext = context.traceContext ?? createTraceContextFromTraceId(context.traceId, `${context.source.instanceId}:${context.source.chatId}:${context.source.messageId}:agno`);
|
|
60464
|
+
return {
|
|
60465
|
+
...buildProviderRequestContext(context),
|
|
60466
|
+
message: message2,
|
|
60467
|
+
agentId: this.config.agentId,
|
|
60468
|
+
agentType: this.config.agentType,
|
|
60469
|
+
stream,
|
|
60470
|
+
timeoutMs: this.config.timeoutMs ?? 60000,
|
|
60471
|
+
files: context.content.files,
|
|
60472
|
+
traceContext,
|
|
60473
|
+
khalSessionId: context.sessionId,
|
|
60474
|
+
omni: {
|
|
60475
|
+
instanceId: context.source.instanceId,
|
|
60476
|
+
chatId: context.source.chatId,
|
|
60477
|
+
messageId: context.source.messageId,
|
|
60478
|
+
channel: context.source.channelType
|
|
60479
|
+
},
|
|
60480
|
+
...context.source.chatId ? { mcpUrlParams: { chat_id: context.source.chatId } } : {}
|
|
60481
|
+
};
|
|
60482
|
+
}
|
|
60316
60483
|
}
|
|
60317
60484
|
var log8;
|
|
60318
60485
|
var init_agno_provider = __esm(() => {
|
|
60319
60486
|
init_logger();
|
|
60487
|
+
init_trace_context();
|
|
60320
60488
|
log8 = createLogger("provider:agno");
|
|
60321
60489
|
});
|
|
60322
60490
|
|
|
@@ -62523,6 +62691,7 @@ var init_a2a_provider = __esm(() => {
|
|
|
62523
62691
|
});
|
|
62524
62692
|
|
|
62525
62693
|
// ../core/src/providers/nats-genie-provider.ts
|
|
62694
|
+
import { createHash as createHash5 } from "crypto";
|
|
62526
62695
|
import { mkdir, writeFile } from "fs/promises";
|
|
62527
62696
|
import { homedir as homedir10 } from "os";
|
|
62528
62697
|
import { join as join16 } from "path";
|
|
@@ -62556,6 +62725,8 @@ class NatsGenieProvider {
|
|
|
62556
62725
|
};
|
|
62557
62726
|
}
|
|
62558
62727
|
const topic = `omni.message.${this.config.instanceId}.${context.source.chatId}`;
|
|
62728
|
+
const traceContext = this.resolveTraceContext(context);
|
|
62729
|
+
const propagationHeaders = this.buildPropagationHeaders(context, traceContext);
|
|
62559
62730
|
const payload = {
|
|
62560
62731
|
content: message2,
|
|
62561
62732
|
sender: context.sender.displayName ?? context.sender.platformUserId,
|
|
@@ -62565,22 +62736,28 @@ class NatsGenieProvider {
|
|
|
62565
62736
|
timestamp: new Date().toISOString(),
|
|
62566
62737
|
traceId: context.traceId,
|
|
62567
62738
|
messageId: context.source.messageId,
|
|
62739
|
+
contextMessages: context.contextMessages,
|
|
62568
62740
|
files: context.content.files,
|
|
62741
|
+
traceContext,
|
|
62742
|
+
metadata: this.buildSafePayloadMetadata(propagationHeaders),
|
|
62569
62743
|
env: buildOmniEnv(context),
|
|
62570
62744
|
executionContext: buildOmniExecutionContext(context)
|
|
62571
62745
|
};
|
|
62572
62746
|
try {
|
|
62573
62747
|
await this.ensureConnected();
|
|
62574
|
-
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)));
|
|
62748
|
+
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)), this.buildPublishOptions(propagationHeaders));
|
|
62575
62749
|
log17.info("Published to NATS", {
|
|
62576
|
-
|
|
62750
|
+
subject: "omni.message.<instance>.<chat_hash>",
|
|
62577
62751
|
agent: this.config.agentName,
|
|
62578
|
-
|
|
62752
|
+
instanceId: this.config.instanceId,
|
|
62753
|
+
chatHash: this.safeHash(context.source.chatId),
|
|
62579
62754
|
traceId: context.traceId
|
|
62580
62755
|
});
|
|
62581
62756
|
} catch (error2) {
|
|
62582
62757
|
log17.error("Failed to publish to NATS, writing to dead-letter queue", {
|
|
62583
|
-
|
|
62758
|
+
subject: "omni.message.<instance>.<chat_hash>",
|
|
62759
|
+
instanceId: this.config.instanceId,
|
|
62760
|
+
chatHash: this.safeHash(context.source.chatId),
|
|
62584
62761
|
error: error2 instanceof Error ? error2.message : String(error2),
|
|
62585
62762
|
traceId: context.traceId
|
|
62586
62763
|
});
|
|
@@ -62623,7 +62800,8 @@ class NatsGenieProvider {
|
|
|
62623
62800
|
}
|
|
62624
62801
|
} catch (error2) {
|
|
62625
62802
|
log17.error("Error processing reply", {
|
|
62626
|
-
subject:
|
|
62803
|
+
subject: "omni.reply.<instance>.<chat_hash>",
|
|
62804
|
+
subjectHash: this.safeHash(msg.subject),
|
|
62627
62805
|
error: error2 instanceof Error ? error2.message : String(error2)
|
|
62628
62806
|
});
|
|
62629
62807
|
}
|
|
@@ -62648,7 +62826,7 @@ class NatsGenieProvider {
|
|
|
62648
62826
|
if (!chatId) {
|
|
62649
62827
|
log17.warn("NATS session reset skipped: missing chatId", {
|
|
62650
62828
|
providerId: this.id,
|
|
62651
|
-
sessionKey
|
|
62829
|
+
sessionKeyHash: this.safeHash(sessionKey)
|
|
62652
62830
|
});
|
|
62653
62831
|
throw new Error("chatId is required to reset NATS Genie session");
|
|
62654
62832
|
}
|
|
@@ -62665,14 +62843,17 @@ class NatsGenieProvider {
|
|
|
62665
62843
|
await this.ensureConnected();
|
|
62666
62844
|
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)));
|
|
62667
62845
|
log17.info("Published session reset to NATS", {
|
|
62668
|
-
|
|
62846
|
+
subject: "omni.session.reset.<instance>.<chat_hash>",
|
|
62669
62847
|
providerId: this.id,
|
|
62670
|
-
|
|
62671
|
-
|
|
62848
|
+
instanceId: resolvedInstanceId,
|
|
62849
|
+
sessionKeyHash: this.safeHash(sessionKey),
|
|
62850
|
+
chatHash: this.safeHash(chatId)
|
|
62672
62851
|
});
|
|
62673
62852
|
} catch (error2) {
|
|
62674
62853
|
log17.error("Failed to publish NATS session reset", {
|
|
62675
|
-
|
|
62854
|
+
subject: "omni.session.reset.<instance>.<chat_hash>",
|
|
62855
|
+
instanceId: resolvedInstanceId,
|
|
62856
|
+
chatHash: this.safeHash(chatId),
|
|
62676
62857
|
error: error2 instanceof Error ? error2.message : String(error2)
|
|
62677
62858
|
});
|
|
62678
62859
|
throw error2;
|
|
@@ -62702,6 +62883,48 @@ class NatsGenieProvider {
|
|
|
62702
62883
|
});
|
|
62703
62884
|
log17.info("Connected to NATS", { url: this.config.natsUrl });
|
|
62704
62885
|
}
|
|
62886
|
+
resolveTraceContext(context) {
|
|
62887
|
+
return context.traceContext ?? createTraceContextFromTraceId(context.traceId, `${context.source.instanceId}:${context.source.chatId}:${context.source.messageId}:nats-genie`);
|
|
62888
|
+
}
|
|
62889
|
+
buildPropagationHeaders(context, traceContext) {
|
|
62890
|
+
return buildTraceHeaders2(traceContext, {
|
|
62891
|
+
khalSessionId: context.sessionId,
|
|
62892
|
+
userId: context.sender.personId ?? context.sender.platformUserId,
|
|
62893
|
+
messageId: context.source.messageId,
|
|
62894
|
+
omni: {
|
|
62895
|
+
instanceId: context.source.instanceId,
|
|
62896
|
+
chatId: context.source.chatId,
|
|
62897
|
+
channel: context.source.channelType
|
|
62898
|
+
}
|
|
62899
|
+
});
|
|
62900
|
+
}
|
|
62901
|
+
buildPublishOptions(traceHeaders) {
|
|
62902
|
+
if (Object.keys(traceHeaders).length === 0)
|
|
62903
|
+
return;
|
|
62904
|
+
const natsHeaders2 = import_nats2.headers();
|
|
62905
|
+
for (const [key, value] of Object.entries(traceHeaders)) {
|
|
62906
|
+
natsHeaders2.set(key, value);
|
|
62907
|
+
}
|
|
62908
|
+
return { headers: natsHeaders2 };
|
|
62909
|
+
}
|
|
62910
|
+
buildSafePayloadMetadata(traceHeaders) {
|
|
62911
|
+
const metadata = {};
|
|
62912
|
+
for (const [key, value] of Object.entries(traceHeaders)) {
|
|
62913
|
+
if (key === "x-khal-user-id") {
|
|
62914
|
+
metadata["x-khal-user-hash"] = this.safeHash(value);
|
|
62915
|
+
continue;
|
|
62916
|
+
}
|
|
62917
|
+
if (key === "x-omni-chat-id") {
|
|
62918
|
+
metadata["x-omni-chat-hash"] = this.safeHash(value);
|
|
62919
|
+
continue;
|
|
62920
|
+
}
|
|
62921
|
+
metadata[key] = value;
|
|
62922
|
+
}
|
|
62923
|
+
return metadata;
|
|
62924
|
+
}
|
|
62925
|
+
safeHash(value) {
|
|
62926
|
+
return createHash5("sha256").update(value).digest("hex").slice(0, 12);
|
|
62927
|
+
}
|
|
62705
62928
|
buildMessage(context) {
|
|
62706
62929
|
let message2 = "";
|
|
62707
62930
|
if (context.content.text) {
|
|
@@ -62735,6 +62958,7 @@ class NatsGenieProvider {
|
|
|
62735
62958
|
var import_nats2, log17;
|
|
62736
62959
|
var init_nats_genie_provider = __esm(() => {
|
|
62737
62960
|
init_logger();
|
|
62961
|
+
init_trace_context();
|
|
62738
62962
|
import_nats2 = __toESM(require_mod4(), 1);
|
|
62739
62963
|
log17 = createLogger("provider:nats-genie");
|
|
62740
62964
|
});
|
|
@@ -124723,7 +124947,7 @@ import { fileURLToPath } from "url";
|
|
|
124723
124947
|
// package.json
|
|
124724
124948
|
var package_default = {
|
|
124725
124949
|
name: "@automagik/omni",
|
|
124726
|
-
version: "2.260529.
|
|
124950
|
+
version: "2.260529.3",
|
|
124727
124951
|
description: "LLM-optimized CLI for Omni",
|
|
124728
124952
|
type: "module",
|
|
124729
124953
|
bin: {
|
package/dist/server/index.js
CHANGED
|
@@ -29535,6 +29535,82 @@ function buildProviderRequestContext(context2) {
|
|
|
29535
29535
|
}
|
|
29536
29536
|
var OMNI_EXECUTION_CONTEXT_EXTENSION_URI = "https://omni.dev/extensions/execution-context/v1";
|
|
29537
29537
|
|
|
29538
|
+
// ../core/src/providers/trace-context.ts
|
|
29539
|
+
import { createHash } from "crypto";
|
|
29540
|
+
function isNonZeroHex(value) {
|
|
29541
|
+
return value.length > 0 && !/^0+$/.test(value);
|
|
29542
|
+
}
|
|
29543
|
+
function hashHex(value, length) {
|
|
29544
|
+
return createHash("sha256").update(value).digest("hex").slice(0, length);
|
|
29545
|
+
}
|
|
29546
|
+
function normalizeTraceId(value) {
|
|
29547
|
+
const lower = value.toLowerCase();
|
|
29548
|
+
if (W3C_TRACE_ID.test(lower) && isNonZeroHex(lower)) {
|
|
29549
|
+
return lower;
|
|
29550
|
+
}
|
|
29551
|
+
return hashHex(lower, 32);
|
|
29552
|
+
}
|
|
29553
|
+
function normalizeSpanId(value) {
|
|
29554
|
+
const lower = value.toLowerCase();
|
|
29555
|
+
if (W3C_SPAN_ID.test(lower) && isNonZeroHex(lower)) {
|
|
29556
|
+
return lower;
|
|
29557
|
+
}
|
|
29558
|
+
return hashHex(lower, 16);
|
|
29559
|
+
}
|
|
29560
|
+
function createTraceContextFromTraceId(traceId, spanSeed = "provider") {
|
|
29561
|
+
if (!traceId)
|
|
29562
|
+
return;
|
|
29563
|
+
return {
|
|
29564
|
+
traceId: normalizeTraceId(traceId),
|
|
29565
|
+
spanId: normalizeSpanId(`${traceId}:${spanSeed}`),
|
|
29566
|
+
traceFlags: 1
|
|
29567
|
+
};
|
|
29568
|
+
}
|
|
29569
|
+
function formatTraceparent(ctx) {
|
|
29570
|
+
const traceFlags = (ctx.traceFlags ?? 1) & 255;
|
|
29571
|
+
const paddedFlagsHex = traceFlags.toString(16).padStart(2, "0");
|
|
29572
|
+
return `00-${normalizeTraceId(ctx.traceId)}-${normalizeSpanId(ctx.spanId)}-${paddedFlagsHex}`;
|
|
29573
|
+
}
|
|
29574
|
+
function buildTraceHeaders2(ctx, khal) {
|
|
29575
|
+
const traceHeaders = {};
|
|
29576
|
+
if (ctx) {
|
|
29577
|
+
traceHeaders.traceparent = formatTraceparent(ctx);
|
|
29578
|
+
traceHeaders["x-trace-id"] = normalizeTraceId(ctx.traceId);
|
|
29579
|
+
traceHeaders["x-span-id"] = normalizeSpanId(ctx.spanId);
|
|
29580
|
+
const tracestate = ctx.tracestate ?? ctx.traceState;
|
|
29581
|
+
if (tracestate) {
|
|
29582
|
+
traceHeaders.tracestate = tracestate;
|
|
29583
|
+
}
|
|
29584
|
+
if (ctx.parentSpanId) {
|
|
29585
|
+
traceHeaders["x-parent-span-id"] = normalizeSpanId(ctx.parentSpanId);
|
|
29586
|
+
}
|
|
29587
|
+
}
|
|
29588
|
+
if (khal?.khalSessionId) {
|
|
29589
|
+
traceHeaders["x-khal-session-id"] = khal.khalSessionId;
|
|
29590
|
+
}
|
|
29591
|
+
if (khal?.userId) {
|
|
29592
|
+
traceHeaders["x-khal-user-id"] = khal.userId;
|
|
29593
|
+
}
|
|
29594
|
+
if (khal?.messageId) {
|
|
29595
|
+
traceHeaders["x-khal-message-id"] = khal.messageId;
|
|
29596
|
+
}
|
|
29597
|
+
if (khal?.omni?.instanceId) {
|
|
29598
|
+
traceHeaders["x-omni-instance-id"] = khal.omni.instanceId;
|
|
29599
|
+
}
|
|
29600
|
+
if (khal?.omni?.chatId) {
|
|
29601
|
+
traceHeaders["x-omni-chat-id"] = khal.omni.chatId;
|
|
29602
|
+
}
|
|
29603
|
+
if (khal?.omni?.channel) {
|
|
29604
|
+
traceHeaders["x-omni-channel"] = khal.omni.channel;
|
|
29605
|
+
}
|
|
29606
|
+
return traceHeaders;
|
|
29607
|
+
}
|
|
29608
|
+
var W3C_TRACE_ID, W3C_SPAN_ID;
|
|
29609
|
+
var init_trace_context = __esm(() => {
|
|
29610
|
+
W3C_TRACE_ID = /^[0-9a-f]{32}$/i;
|
|
29611
|
+
W3C_SPAN_ID = /^[0-9a-f]{16}$/i;
|
|
29612
|
+
});
|
|
29613
|
+
|
|
29538
29614
|
// ../core/src/providers/agno-client.ts
|
|
29539
29615
|
class AgnoClient {
|
|
29540
29616
|
baseUrl;
|
|
@@ -29663,12 +29739,14 @@ class AgnoClient {
|
|
|
29663
29739
|
const formData = new FormData;
|
|
29664
29740
|
formData.append("message", request.message);
|
|
29665
29741
|
formData.append("stream", String(stream));
|
|
29666
|
-
|
|
29667
|
-
|
|
29742
|
+
const sessionId = request.khalSessionId ?? request.sessionId;
|
|
29743
|
+
if (sessionId) {
|
|
29744
|
+
formData.append("session_id", sessionId);
|
|
29668
29745
|
}
|
|
29669
29746
|
if (request.userId) {
|
|
29670
29747
|
formData.append("user_id", request.userId);
|
|
29671
29748
|
}
|
|
29749
|
+
this.appendStructuredMetadata(formData, request);
|
|
29672
29750
|
if (request.files?.length) {
|
|
29673
29751
|
for (const file of request.files) {
|
|
29674
29752
|
try {
|
|
@@ -29686,6 +29764,28 @@ class AgnoClient {
|
|
|
29686
29764
|
}
|
|
29687
29765
|
return formData;
|
|
29688
29766
|
}
|
|
29767
|
+
appendStructuredMetadata(formData, request) {
|
|
29768
|
+
const appendJson = (key, value) => {
|
|
29769
|
+
if (value !== undefined) {
|
|
29770
|
+
formData.append(key, JSON.stringify(value));
|
|
29771
|
+
}
|
|
29772
|
+
};
|
|
29773
|
+
if (request.khalSessionId) {
|
|
29774
|
+
formData.append("khal_session_id", request.khalSessionId);
|
|
29775
|
+
}
|
|
29776
|
+
if (request.messageId) {
|
|
29777
|
+
formData.append("message_id", request.messageId);
|
|
29778
|
+
}
|
|
29779
|
+
if (request.replyToMessageId) {
|
|
29780
|
+
formData.append("reply_to_message_id", request.replyToMessageId);
|
|
29781
|
+
}
|
|
29782
|
+
appendJson("platform", request.platform);
|
|
29783
|
+
appendJson("sender", request.sender);
|
|
29784
|
+
appendJson("chat", request.chat);
|
|
29785
|
+
appendJson("mcp_url_params", request.mcpUrlParams);
|
|
29786
|
+
appendJson("env", request.env);
|
|
29787
|
+
appendJson("omni", request.omni);
|
|
29788
|
+
}
|
|
29689
29789
|
async runAgent(agentId, request) {
|
|
29690
29790
|
return this.runEndpoint("agents", agentId, request);
|
|
29691
29791
|
}
|
|
@@ -29701,7 +29801,15 @@ class AgnoClient {
|
|
|
29701
29801
|
const timeoutMs = request.timeoutMs ?? this.defaultTimeoutMs;
|
|
29702
29802
|
const response = await this.fetchWithTimeout(url, {
|
|
29703
29803
|
method: "POST",
|
|
29704
|
-
headers:
|
|
29804
|
+
headers: {
|
|
29805
|
+
...this.getHeaders(),
|
|
29806
|
+
...buildTraceHeaders2(request.traceContext, {
|
|
29807
|
+
khalSessionId: request.khalSessionId ?? request.sessionId,
|
|
29808
|
+
userId: request.userId,
|
|
29809
|
+
messageId: request.omni?.messageId,
|
|
29810
|
+
omni: request.omni
|
|
29811
|
+
})
|
|
29812
|
+
},
|
|
29705
29813
|
body: formData
|
|
29706
29814
|
}, timeoutMs);
|
|
29707
29815
|
if (!response.ok) {
|
|
@@ -29735,7 +29843,15 @@ class AgnoClient {
|
|
|
29735
29843
|
const timeoutMs = request.timeoutMs ?? this.defaultTimeoutMs;
|
|
29736
29844
|
const response = await this.fetchWithTimeout(url, {
|
|
29737
29845
|
method: "POST",
|
|
29738
|
-
headers:
|
|
29846
|
+
headers: {
|
|
29847
|
+
...this.getHeaders(),
|
|
29848
|
+
...buildTraceHeaders2(request.traceContext, {
|
|
29849
|
+
khalSessionId: request.khalSessionId ?? request.sessionId,
|
|
29850
|
+
userId: request.userId,
|
|
29851
|
+
messageId: request.omni?.messageId,
|
|
29852
|
+
omni: request.omni
|
|
29853
|
+
})
|
|
29854
|
+
},
|
|
29739
29855
|
body: formData
|
|
29740
29856
|
}, timeoutMs);
|
|
29741
29857
|
if (!response.ok) {
|
|
@@ -29875,6 +29991,7 @@ function createAgnoClient(config2) {
|
|
|
29875
29991
|
}
|
|
29876
29992
|
var DEFAULT_TIMEOUT_MS = 60000;
|
|
29877
29993
|
var init_agno_client = __esm(() => {
|
|
29994
|
+
init_trace_context();
|
|
29878
29995
|
init_types7();
|
|
29879
29996
|
});
|
|
29880
29997
|
|
|
@@ -30559,12 +30676,7 @@ class AgnoAgentProvider {
|
|
|
30559
30676
|
}
|
|
30560
30677
|
async trigger(context2) {
|
|
30561
30678
|
const startTime = Date.now();
|
|
30562
|
-
|
|
30563
|
-
if (context2.content.text) {
|
|
30564
|
-
message2 = context2.content.text;
|
|
30565
|
-
} else if (context2.content.emoji) {
|
|
30566
|
-
message2 = `[Reaction: ${context2.content.emoji} on message ${context2.content.referencedMessageId ?? context2.source.messageId}]`;
|
|
30567
|
-
}
|
|
30679
|
+
const message2 = this.buildMessage(context2);
|
|
30568
30680
|
if (!message2) {
|
|
30569
30681
|
log8.debug("No content to send to agent", { traceId: context2.traceId });
|
|
30570
30682
|
return {
|
|
@@ -30576,17 +30688,7 @@ class AgnoAgentProvider {
|
|
|
30576
30688
|
}
|
|
30577
30689
|
};
|
|
30578
30690
|
}
|
|
30579
|
-
|
|
30580
|
-
message2 = `[${context2.sender.displayName}]: ${message2}`;
|
|
30581
|
-
}
|
|
30582
|
-
const request = {
|
|
30583
|
-
...buildProviderRequestContext(context2),
|
|
30584
|
-
message: message2,
|
|
30585
|
-
agentId: this.config.agentId,
|
|
30586
|
-
agentType: this.config.agentType,
|
|
30587
|
-
stream: false,
|
|
30588
|
-
timeoutMs: this.config.timeoutMs ?? 60000
|
|
30589
|
-
};
|
|
30691
|
+
const request = this.buildRequest(context2, message2, false);
|
|
30590
30692
|
log8.info("Triggering Agno agent", {
|
|
30591
30693
|
agentId: this.config.agentId,
|
|
30592
30694
|
agentType: this.config.agentType,
|
|
@@ -30618,13 +30720,79 @@ class AgnoAgentProvider {
|
|
|
30618
30720
|
}
|
|
30619
30721
|
};
|
|
30620
30722
|
}
|
|
30723
|
+
async* triggerStream(context2) {
|
|
30724
|
+
const message2 = this.buildMessage(context2);
|
|
30725
|
+
if (!message2) {
|
|
30726
|
+
log8.debug("No content to send to Agno agent (stream)", { traceId: context2.traceId });
|
|
30727
|
+
return;
|
|
30728
|
+
}
|
|
30729
|
+
const request = this.buildRequest(context2, message2, true);
|
|
30730
|
+
log8.info("Streaming Agno agent", {
|
|
30731
|
+
agentId: this.config.agentId,
|
|
30732
|
+
agentType: this.config.agentType,
|
|
30733
|
+
triggerType: context2.type,
|
|
30734
|
+
traceId: context2.traceId
|
|
30735
|
+
});
|
|
30736
|
+
try {
|
|
30737
|
+
for await (const chunk of this.client.stream(request)) {
|
|
30738
|
+
if (chunk.content) {
|
|
30739
|
+
yield { phase: "content", content: chunk.content };
|
|
30740
|
+
}
|
|
30741
|
+
if (chunk.isComplete) {
|
|
30742
|
+
yield { phase: "final", content: chunk.fullContent ?? chunk.content ?? "" };
|
|
30743
|
+
}
|
|
30744
|
+
}
|
|
30745
|
+
} catch (error) {
|
|
30746
|
+
const message3 = error instanceof Error ? error.message : String(error);
|
|
30747
|
+
log8.error("Error in Agno agent stream", {
|
|
30748
|
+
agentId: this.config.agentId,
|
|
30749
|
+
traceId: context2.traceId,
|
|
30750
|
+
error: message3
|
|
30751
|
+
});
|
|
30752
|
+
yield { phase: "error", error: message3 };
|
|
30753
|
+
}
|
|
30754
|
+
}
|
|
30621
30755
|
async checkHealth() {
|
|
30622
30756
|
return this.client.checkHealth();
|
|
30623
30757
|
}
|
|
30758
|
+
buildMessage(context2) {
|
|
30759
|
+
let message2 = "";
|
|
30760
|
+
if (context2.content.text) {
|
|
30761
|
+
message2 = context2.content.text;
|
|
30762
|
+
} else if (context2.content.emoji) {
|
|
30763
|
+
message2 = `[Reaction: ${context2.content.emoji} on message ${context2.content.referencedMessageId ?? context2.source.messageId}]`;
|
|
30764
|
+
}
|
|
30765
|
+
if (message2 && this.config.prefixSenderName !== false && context2.sender.displayName) {
|
|
30766
|
+
message2 = `[${context2.sender.displayName}]: ${message2}`;
|
|
30767
|
+
}
|
|
30768
|
+
return message2;
|
|
30769
|
+
}
|
|
30770
|
+
buildRequest(context2, message2, stream) {
|
|
30771
|
+
const traceContext = context2.traceContext ?? createTraceContextFromTraceId(context2.traceId, `${context2.source.instanceId}:${context2.source.chatId}:${context2.source.messageId}:agno`);
|
|
30772
|
+
return {
|
|
30773
|
+
...buildProviderRequestContext(context2),
|
|
30774
|
+
message: message2,
|
|
30775
|
+
agentId: this.config.agentId,
|
|
30776
|
+
agentType: this.config.agentType,
|
|
30777
|
+
stream,
|
|
30778
|
+
timeoutMs: this.config.timeoutMs ?? 60000,
|
|
30779
|
+
files: context2.content.files,
|
|
30780
|
+
traceContext,
|
|
30781
|
+
khalSessionId: context2.sessionId,
|
|
30782
|
+
omni: {
|
|
30783
|
+
instanceId: context2.source.instanceId,
|
|
30784
|
+
chatId: context2.source.chatId,
|
|
30785
|
+
messageId: context2.source.messageId,
|
|
30786
|
+
channel: context2.source.channelType
|
|
30787
|
+
},
|
|
30788
|
+
...context2.source.chatId ? { mcpUrlParams: { chat_id: context2.source.chatId } } : {}
|
|
30789
|
+
};
|
|
30790
|
+
}
|
|
30624
30791
|
}
|
|
30625
30792
|
var log8;
|
|
30626
30793
|
var init_agno_provider = __esm(() => {
|
|
30627
30794
|
init_logger();
|
|
30795
|
+
init_trace_context();
|
|
30628
30796
|
log8 = createLogger("provider:agno");
|
|
30629
30797
|
});
|
|
30630
30798
|
|
|
@@ -32786,6 +32954,7 @@ var init_a2a_provider = __esm(() => {
|
|
|
32786
32954
|
});
|
|
32787
32955
|
|
|
32788
32956
|
// ../core/src/providers/nats-genie-provider.ts
|
|
32957
|
+
import { createHash as createHash2 } from "crypto";
|
|
32789
32958
|
import { mkdir, writeFile } from "fs/promises";
|
|
32790
32959
|
import { homedir } from "os";
|
|
32791
32960
|
import { join } from "path";
|
|
@@ -32819,6 +32988,8 @@ class NatsGenieProvider {
|
|
|
32819
32988
|
};
|
|
32820
32989
|
}
|
|
32821
32990
|
const topic = `omni.message.${this.config.instanceId}.${context2.source.chatId}`;
|
|
32991
|
+
const traceContext = this.resolveTraceContext(context2);
|
|
32992
|
+
const propagationHeaders = this.buildPropagationHeaders(context2, traceContext);
|
|
32822
32993
|
const payload = {
|
|
32823
32994
|
content: message2,
|
|
32824
32995
|
sender: context2.sender.displayName ?? context2.sender.platformUserId,
|
|
@@ -32828,22 +32999,28 @@ class NatsGenieProvider {
|
|
|
32828
32999
|
timestamp: new Date().toISOString(),
|
|
32829
33000
|
traceId: context2.traceId,
|
|
32830
33001
|
messageId: context2.source.messageId,
|
|
33002
|
+
contextMessages: context2.contextMessages,
|
|
32831
33003
|
files: context2.content.files,
|
|
33004
|
+
traceContext,
|
|
33005
|
+
metadata: this.buildSafePayloadMetadata(propagationHeaders),
|
|
32832
33006
|
env: buildOmniEnv(context2),
|
|
32833
33007
|
executionContext: buildOmniExecutionContext(context2)
|
|
32834
33008
|
};
|
|
32835
33009
|
try {
|
|
32836
33010
|
await this.ensureConnected();
|
|
32837
|
-
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)));
|
|
33011
|
+
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)), this.buildPublishOptions(propagationHeaders));
|
|
32838
33012
|
log17.info("Published to NATS", {
|
|
32839
|
-
|
|
33013
|
+
subject: "omni.message.<instance>.<chat_hash>",
|
|
32840
33014
|
agent: this.config.agentName,
|
|
32841
|
-
|
|
33015
|
+
instanceId: this.config.instanceId,
|
|
33016
|
+
chatHash: this.safeHash(context2.source.chatId),
|
|
32842
33017
|
traceId: context2.traceId
|
|
32843
33018
|
});
|
|
32844
33019
|
} catch (error) {
|
|
32845
33020
|
log17.error("Failed to publish to NATS, writing to dead-letter queue", {
|
|
32846
|
-
|
|
33021
|
+
subject: "omni.message.<instance>.<chat_hash>",
|
|
33022
|
+
instanceId: this.config.instanceId,
|
|
33023
|
+
chatHash: this.safeHash(context2.source.chatId),
|
|
32847
33024
|
error: error instanceof Error ? error.message : String(error),
|
|
32848
33025
|
traceId: context2.traceId
|
|
32849
33026
|
});
|
|
@@ -32886,7 +33063,8 @@ class NatsGenieProvider {
|
|
|
32886
33063
|
}
|
|
32887
33064
|
} catch (error) {
|
|
32888
33065
|
log17.error("Error processing reply", {
|
|
32889
|
-
subject:
|
|
33066
|
+
subject: "omni.reply.<instance>.<chat_hash>",
|
|
33067
|
+
subjectHash: this.safeHash(msg.subject),
|
|
32890
33068
|
error: error instanceof Error ? error.message : String(error)
|
|
32891
33069
|
});
|
|
32892
33070
|
}
|
|
@@ -32911,7 +33089,7 @@ class NatsGenieProvider {
|
|
|
32911
33089
|
if (!chatId) {
|
|
32912
33090
|
log17.warn("NATS session reset skipped: missing chatId", {
|
|
32913
33091
|
providerId: this.id,
|
|
32914
|
-
sessionKey
|
|
33092
|
+
sessionKeyHash: this.safeHash(sessionKey)
|
|
32915
33093
|
});
|
|
32916
33094
|
throw new Error("chatId is required to reset NATS Genie session");
|
|
32917
33095
|
}
|
|
@@ -32928,14 +33106,17 @@ class NatsGenieProvider {
|
|
|
32928
33106
|
await this.ensureConnected();
|
|
32929
33107
|
this.nc?.publish(topic, this.sc.encode(JSON.stringify(payload)));
|
|
32930
33108
|
log17.info("Published session reset to NATS", {
|
|
32931
|
-
|
|
33109
|
+
subject: "omni.session.reset.<instance>.<chat_hash>",
|
|
32932
33110
|
providerId: this.id,
|
|
32933
|
-
|
|
32934
|
-
|
|
33111
|
+
instanceId: resolvedInstanceId,
|
|
33112
|
+
sessionKeyHash: this.safeHash(sessionKey),
|
|
33113
|
+
chatHash: this.safeHash(chatId)
|
|
32935
33114
|
});
|
|
32936
33115
|
} catch (error) {
|
|
32937
33116
|
log17.error("Failed to publish NATS session reset", {
|
|
32938
|
-
|
|
33117
|
+
subject: "omni.session.reset.<instance>.<chat_hash>",
|
|
33118
|
+
instanceId: resolvedInstanceId,
|
|
33119
|
+
chatHash: this.safeHash(chatId),
|
|
32939
33120
|
error: error instanceof Error ? error.message : String(error)
|
|
32940
33121
|
});
|
|
32941
33122
|
throw error;
|
|
@@ -32965,6 +33146,48 @@ class NatsGenieProvider {
|
|
|
32965
33146
|
});
|
|
32966
33147
|
log17.info("Connected to NATS", { url: this.config.natsUrl });
|
|
32967
33148
|
}
|
|
33149
|
+
resolveTraceContext(context2) {
|
|
33150
|
+
return context2.traceContext ?? createTraceContextFromTraceId(context2.traceId, `${context2.source.instanceId}:${context2.source.chatId}:${context2.source.messageId}:nats-genie`);
|
|
33151
|
+
}
|
|
33152
|
+
buildPropagationHeaders(context2, traceContext) {
|
|
33153
|
+
return buildTraceHeaders2(traceContext, {
|
|
33154
|
+
khalSessionId: context2.sessionId,
|
|
33155
|
+
userId: context2.sender.personId ?? context2.sender.platformUserId,
|
|
33156
|
+
messageId: context2.source.messageId,
|
|
33157
|
+
omni: {
|
|
33158
|
+
instanceId: context2.source.instanceId,
|
|
33159
|
+
chatId: context2.source.chatId,
|
|
33160
|
+
channel: context2.source.channelType
|
|
33161
|
+
}
|
|
33162
|
+
});
|
|
33163
|
+
}
|
|
33164
|
+
buildPublishOptions(traceHeaders) {
|
|
33165
|
+
if (Object.keys(traceHeaders).length === 0)
|
|
33166
|
+
return;
|
|
33167
|
+
const natsHeaders2 = import_nats2.headers();
|
|
33168
|
+
for (const [key, value] of Object.entries(traceHeaders)) {
|
|
33169
|
+
natsHeaders2.set(key, value);
|
|
33170
|
+
}
|
|
33171
|
+
return { headers: natsHeaders2 };
|
|
33172
|
+
}
|
|
33173
|
+
buildSafePayloadMetadata(traceHeaders) {
|
|
33174
|
+
const metadata = {};
|
|
33175
|
+
for (const [key, value] of Object.entries(traceHeaders)) {
|
|
33176
|
+
if (key === "x-khal-user-id") {
|
|
33177
|
+
metadata["x-khal-user-hash"] = this.safeHash(value);
|
|
33178
|
+
continue;
|
|
33179
|
+
}
|
|
33180
|
+
if (key === "x-omni-chat-id") {
|
|
33181
|
+
metadata["x-omni-chat-hash"] = this.safeHash(value);
|
|
33182
|
+
continue;
|
|
33183
|
+
}
|
|
33184
|
+
metadata[key] = value;
|
|
33185
|
+
}
|
|
33186
|
+
return metadata;
|
|
33187
|
+
}
|
|
33188
|
+
safeHash(value) {
|
|
33189
|
+
return createHash2("sha256").update(value).digest("hex").slice(0, 12);
|
|
33190
|
+
}
|
|
32968
33191
|
buildMessage(context2) {
|
|
32969
33192
|
let message2 = "";
|
|
32970
33193
|
if (context2.content.text) {
|
|
@@ -32998,6 +33221,7 @@ class NatsGenieProvider {
|
|
|
32998
33221
|
var import_nats2, log17;
|
|
32999
33222
|
var init_nats_genie_provider = __esm(() => {
|
|
33000
33223
|
init_logger();
|
|
33224
|
+
init_trace_context();
|
|
33001
33225
|
import_nats2 = __toESM(require_mod4(), 1);
|
|
33002
33226
|
log17 = createLogger("provider:nats-genie");
|
|
33003
33227
|
});
|
|
@@ -136608,7 +136832,7 @@ var require_libvips = __commonJS((exports, module) => {
|
|
|
136608
136832
|
SPDX-License-Identifier: Apache-2.0
|
|
136609
136833
|
*/
|
|
136610
136834
|
var { spawnSync } = __require("child_process");
|
|
136611
|
-
var { createHash:
|
|
136835
|
+
var { createHash: createHash6 } = __require("crypto");
|
|
136612
136836
|
var semverCoerce = require_coerce();
|
|
136613
136837
|
var semverGreaterThanOrEqualTo = require_gte();
|
|
136614
136838
|
var semverSatisfies = require_satisfies();
|
|
@@ -136696,7 +136920,7 @@ var require_libvips = __commonJS((exports, module) => {
|
|
|
136696
136920
|
}
|
|
136697
136921
|
return false;
|
|
136698
136922
|
};
|
|
136699
|
-
var sha512 = (s) =>
|
|
136923
|
+
var sha512 = (s) => createHash6("sha512").update(s).digest("hex");
|
|
136700
136924
|
var yarnLocator = () => {
|
|
136701
136925
|
try {
|
|
136702
136926
|
const identHash = sha512(`imgsharp-libvips-${buildPlatformArch()}`);
|
|
@@ -230292,7 +230516,7 @@ var init_sentry_scrub = __esm(() => {
|
|
|
230292
230516
|
var require_package8 = __commonJS((exports, module) => {
|
|
230293
230517
|
module.exports = {
|
|
230294
230518
|
name: "@omni/api",
|
|
230295
|
-
version: "2.260529.
|
|
230519
|
+
version: "2.260529.3",
|
|
230296
230520
|
type: "module",
|
|
230297
230521
|
exports: {
|
|
230298
230522
|
".": {
|
|
@@ -289287,9 +289511,9 @@ var init_body_limit2 = __esm(() => {
|
|
|
289287
289511
|
});
|
|
289288
289512
|
|
|
289289
289513
|
// ../api/src/middleware/genie-signature.ts
|
|
289290
|
-
import { createHash as
|
|
289514
|
+
import { createHash as createHash9, createPublicKey, verify } from "crypto";
|
|
289291
289515
|
function canonicalSigningInput(timestamp3, method, path2, body) {
|
|
289292
|
-
const bodyHash =
|
|
289516
|
+
const bodyHash = createHash9("sha256").update(body, "utf-8").digest("hex");
|
|
289293
289517
|
return `${timestamp3}
|
|
289294
289518
|
${method.toUpperCase()}
|
|
289295
289519
|
${path2}
|
|
@@ -357678,7 +357902,7 @@ async function sendMediaBuffer(client, channelId, buffer2, options) {
|
|
|
357678
357902
|
|
|
357679
357903
|
// ../channel-discord/src/senders/media-dedup.ts
|
|
357680
357904
|
init_src();
|
|
357681
|
-
import { createHash } from "crypto";
|
|
357905
|
+
import { createHash as createHash3 } from "crypto";
|
|
357682
357906
|
var log28 = createLogger("discord:media-dedup");
|
|
357683
357907
|
|
|
357684
357908
|
class MediaDedup {
|
|
@@ -357691,7 +357915,7 @@ class MediaDedup {
|
|
|
357691
357915
|
}
|
|
357692
357916
|
computeHash(data, scope = "") {
|
|
357693
357917
|
const prefix = data.subarray(0, 4096);
|
|
357694
|
-
const hash =
|
|
357918
|
+
const hash = createHash3("sha256");
|
|
357695
357919
|
hash.update(prefix);
|
|
357696
357920
|
hash.update(Buffer.from(String(data.length)));
|
|
357697
357921
|
if (scope)
|
|
@@ -452892,7 +453116,7 @@ var import_protobufs = __toESM(require_protobufs(), 1);
|
|
|
452892
453116
|
|
|
452893
453117
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Utils/generics.js
|
|
452894
453118
|
var import_boom3 = __toESM(require_lib7(), 1);
|
|
452895
|
-
import { createHash as
|
|
453119
|
+
import { createHash as createHash5, randomBytes as randomBytes3 } from "crypto";
|
|
452896
453120
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Types/Chat.js
|
|
452897
453121
|
var ALL_WA_PATCH_NAMES = [
|
|
452898
453122
|
"critical_block",
|
|
@@ -454951,7 +455175,7 @@ ${tabs(i)}</${node.tag}>` : "/>";
|
|
|
454951
455175
|
}
|
|
454952
455176
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Utils/crypto.js
|
|
454953
455177
|
var curve = __toESM(require_curve2(), 1);
|
|
454954
|
-
import { createCipheriv, createDecipheriv, createHash as
|
|
455178
|
+
import { createCipheriv, createDecipheriv, createHash as createHash4, createHmac, randomBytes as randomBytes2 } from "crypto";
|
|
454955
455179
|
|
|
454956
455180
|
// ../../node_modules/.bun/whatsapp-rust-bridge@0.5.3/node_modules/whatsapp-rust-bridge/dist/index.js
|
|
454957
455181
|
class ExpandedAppStateKeys {
|
|
@@ -456661,7 +456885,7 @@ function hmacSign(buffer2, key, variant = "sha256") {
|
|
|
456661
456885
|
return createHmac(variant, key).update(buffer2).digest();
|
|
456662
456886
|
}
|
|
456663
456887
|
function sha256(buffer2) {
|
|
456664
|
-
return
|
|
456888
|
+
return createHash4("sha256").update(buffer2).digest();
|
|
456665
456889
|
}
|
|
456666
456890
|
async function derivePairingCodeKey(pairingCode, salt) {
|
|
456667
456891
|
const encoder = new TextEncoder;
|
|
@@ -456791,7 +457015,7 @@ var generateMessageIDV2 = (userId) => {
|
|
|
456791
457015
|
}
|
|
456792
457016
|
const random = randomBytes3(16);
|
|
456793
457017
|
random.copy(data, 28);
|
|
456794
|
-
const hash =
|
|
457018
|
+
const hash = createHash5("sha256").update(data).digest();
|
|
456795
457019
|
return "3EB0" + hash.toString("hex").toUpperCase().substring(0, 18);
|
|
456796
457020
|
};
|
|
456797
457021
|
var generateMessageID = () => "3EB0" + randomBytes3(18).toString("hex").toUpperCase();
|
|
@@ -458811,7 +459035,7 @@ var assertMediaContent = (content) => {
|
|
|
458811
459035
|
};
|
|
458812
459036
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Utils/validate-connection.js
|
|
458813
459037
|
var import_boom7 = __toESM(require_lib7(), 1);
|
|
458814
|
-
import { createHash as
|
|
459038
|
+
import { createHash as createHash7 } from "crypto";
|
|
458815
459039
|
|
|
458816
459040
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Utils/signal.js
|
|
458817
459041
|
function chunk(array, size) {
|
|
@@ -459056,7 +459280,7 @@ var getPlatformType = (platform) => {
|
|
|
459056
459280
|
return proto.DeviceProps.PlatformType[platformType] || proto.DeviceProps.PlatformType.CHROME;
|
|
459057
459281
|
};
|
|
459058
459282
|
var generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config2) => {
|
|
459059
|
-
const appVersionBuf =
|
|
459283
|
+
const appVersionBuf = createHash7("md5").update(config2.version.join(".")).digest();
|
|
459060
459284
|
const companion = {
|
|
459061
459285
|
os: config2.browser[0],
|
|
459062
459286
|
platformType: getPlatformType(config2.browser[1]),
|
|
@@ -460800,8 +461024,8 @@ var CRC = class {
|
|
|
460800
461024
|
}
|
|
460801
461025
|
}
|
|
460802
461026
|
crc = (crc ^ 4294967295) >>> 0;
|
|
460803
|
-
const
|
|
460804
|
-
return
|
|
461027
|
+
const hashHex2 = crc.toString(16).padStart(8, "0");
|
|
461028
|
+
return hashHex2;
|
|
460805
461029
|
}
|
|
460806
461030
|
async toHash(data) {
|
|
460807
461031
|
return this.toHashSync(data);
|
|
@@ -460820,8 +461044,8 @@ var WebCrypto = class {
|
|
|
460820
461044
|
async toHash(data) {
|
|
460821
461045
|
const hashBuffer = await crypto.subtle.digest(this._algorithm, data);
|
|
460822
461046
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
460823
|
-
const
|
|
460824
|
-
return
|
|
461047
|
+
const hashHex2 = hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
461048
|
+
return hashHex2;
|
|
460825
461049
|
}
|
|
460826
461050
|
};
|
|
460827
461051
|
var DJB2 = class {
|
|
@@ -460845,8 +461069,8 @@ var DJB2 = class {
|
|
|
460845
461069
|
hash = (hash << 5) + hash + bytes2[i];
|
|
460846
461070
|
hash = hash >>> 0;
|
|
460847
461071
|
}
|
|
460848
|
-
const
|
|
460849
|
-
return
|
|
461072
|
+
const hashHex2 = hash.toString(16).padStart(8, "0");
|
|
461073
|
+
return hashHex2;
|
|
460850
461074
|
}
|
|
460851
461075
|
async toHash(data) {
|
|
460852
461076
|
return this.toHashSync(data);
|
|
@@ -460876,8 +461100,8 @@ var FNV1 = class {
|
|
|
460876
461100
|
hash = hash ^ bytes2[i];
|
|
460877
461101
|
hash = hash >>> 0;
|
|
460878
461102
|
}
|
|
460879
|
-
const
|
|
460880
|
-
return
|
|
461103
|
+
const hashHex2 = hash.toString(16).padStart(8, "0");
|
|
461104
|
+
return hashHex2;
|
|
460881
461105
|
}
|
|
460882
461106
|
async toHash(data) {
|
|
460883
461107
|
return this.toHashSync(data);
|
|
@@ -460942,8 +461166,8 @@ var Murmur = class {
|
|
|
460942
461166
|
h1 = this._imul(h1, 3266489909);
|
|
460943
461167
|
h1 ^= h1 >>> 16;
|
|
460944
461168
|
h1 = h1 >>> 0;
|
|
460945
|
-
const
|
|
460946
|
-
return
|
|
461169
|
+
const hashHex2 = h1.toString(16).padStart(8, "0");
|
|
461170
|
+
return hashHex2;
|
|
460947
461171
|
}
|
|
460948
461172
|
async toHash(data) {
|
|
460949
461173
|
return this.toHashSync(data);
|
|
@@ -468812,7 +469036,7 @@ var TimeMs = {
|
|
|
468812
469036
|
|
|
468813
469037
|
// ../../node_modules/.bun/baileys@vendor+baileys-v7.0.0-rc10.tgz+89588f7e3fe8b2e6/node_modules/baileys/lib/Utils/business.js
|
|
468814
469038
|
var import_boom12 = __toESM(require_lib7(), 1);
|
|
468815
|
-
import { createHash as
|
|
469039
|
+
import { createHash as createHash8 } from "crypto";
|
|
468816
469040
|
import { createWriteStream as createWriteStream2, promises as fs4 } from "fs";
|
|
468817
469041
|
import { tmpdir as tmpdir4 } from "os";
|
|
468818
469042
|
import { join as join7 } from "path";
|
|
@@ -468997,7 +469221,7 @@ var uploadingNecessaryImages = async (images, waUploadToServer, timeoutMs = 3000
|
|
|
468997
469221
|
}
|
|
468998
469222
|
}
|
|
468999
469223
|
const { stream } = await getStream(img);
|
|
469000
|
-
const hasher =
|
|
469224
|
+
const hasher = createHash8("sha256");
|
|
469001
469225
|
const filePath = join7(tmpdir4(), "img" + generateMessageIDV2());
|
|
469002
469226
|
const encFileWriteStream = createWriteStream2(filePath);
|
|
469003
469227
|
for await (const block of stream) {
|