@automagik/omni 2.260530.5 → 2.260531.2

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 CHANGED
@@ -60766,6 +60766,7 @@ class WebhookAgentProvider {
60766
60766
  emoji: context.content.emoji
60767
60767
  },
60768
60768
  traceId: context.traceId,
60769
+ headers: context.headers,
60769
60770
  executionContext: buildOmniExecutionContext(context),
60770
60771
  replyEndpoint: "POST /api/v2/messages/send"
60771
60772
  };
@@ -60827,10 +60828,11 @@ class WebhookAgentProvider {
60827
60828
  };
60828
60829
  }
60829
60830
  }
60830
- buildHeaders() {
60831
+ buildHeaders(extraHeaders) {
60831
60832
  const headers = {
60832
60833
  "Content-Type": "application/json",
60833
- "X-Omni-Provider": "webhook"
60834
+ "X-Omni-Provider": "webhook",
60835
+ ...extraHeaders
60834
60836
  };
60835
60837
  if (this.config.apiKey) {
60836
60838
  headers.Authorization = `Bearer ${this.config.apiKey}`;
@@ -60841,7 +60843,7 @@ class WebhookAgentProvider {
60841
60843
  const timeoutMs = this.config.timeoutMs ?? DEFAULT_TIMEOUT_MS2;
60842
60844
  const response = await fetch(this.config.webhookUrl, {
60843
60845
  method: "POST",
60844
- headers: this.buildHeaders(),
60846
+ headers: this.buildHeaders(payload.headers),
60845
60847
  body: JSON.stringify(payload),
60846
60848
  signal: AbortSignal.timeout(timeoutMs)
60847
60849
  });
@@ -124965,7 +124967,7 @@ import { fileURLToPath } from "url";
124965
124967
  // package.json
124966
124968
  var package_default = {
124967
124969
  name: "@automagik/omni",
124968
- version: "2.260530.5",
124970
+ version: "2.260531.2",
124969
124971
  description: "LLM-optimized CLI for Omni",
124970
124972
  type: "module",
124971
124973
  bin: {
@@ -31074,6 +31074,7 @@ class WebhookAgentProvider {
31074
31074
  emoji: context2.content.emoji
31075
31075
  },
31076
31076
  traceId: context2.traceId,
31077
+ headers: context2.headers,
31077
31078
  executionContext: buildOmniExecutionContext(context2),
31078
31079
  replyEndpoint: "POST /api/v2/messages/send"
31079
31080
  };
@@ -31135,10 +31136,11 @@ class WebhookAgentProvider {
31135
31136
  };
31136
31137
  }
31137
31138
  }
31138
- buildHeaders() {
31139
+ buildHeaders(extraHeaders) {
31139
31140
  const headers = {
31140
31141
  "Content-Type": "application/json",
31141
- "X-Omni-Provider": "webhook"
31142
+ "X-Omni-Provider": "webhook",
31143
+ ...extraHeaders
31142
31144
  };
31143
31145
  if (this.config.apiKey) {
31144
31146
  headers.Authorization = `Bearer ${this.config.apiKey}`;
@@ -31149,7 +31151,7 @@ class WebhookAgentProvider {
31149
31151
  const timeoutMs = this.config.timeoutMs ?? DEFAULT_TIMEOUT_MS2;
31150
31152
  const response = await fetch(this.config.webhookUrl, {
31151
31153
  method: "POST",
31152
- headers: this.buildHeaders(),
31154
+ headers: this.buildHeaders(payload.headers),
31153
31155
  body: JSON.stringify(payload),
31154
31156
  signal: AbortSignal.timeout(timeoutMs)
31155
31157
  });
@@ -225239,7 +225241,7 @@ var init_sentry_scrub = __esm(() => {
225239
225241
  var require_package7 = __commonJS((exports, module) => {
225240
225242
  module.exports = {
225241
225243
  name: "@omni/api",
225242
- version: "2.260530.5",
225244
+ version: "2.260531.2",
225243
225245
  type: "module",
225244
225246
  exports: {
225245
225247
  ".": {
@@ -338506,6 +338508,25 @@ async function consumeStream(generator, sender, instanceId, chatId, traceId) {
338506
338508
  function extractThreadId(messages4) {
338507
338509
  return (messages4[0]?.payload.rawPayload ?? {}).threadId;
338508
338510
  }
338511
+ function extractKhalSessionId(messages4) {
338512
+ for (const message2 of messages4) {
338513
+ const rawPayload = message2.payload.rawPayload ?? {};
338514
+ const direct = rawPayload.khalSessionId;
338515
+ if (typeof direct === "string" && direct.trim())
338516
+ return direct.trim();
338517
+ const headers = rawPayload.headers;
338518
+ if (headers && typeof headers === "object") {
338519
+ const headerMap = headers;
338520
+ const value = headerMap["x-khal-session-id"] ?? headerMap["X-Khal-Session-Id"] ?? headerMap["X-KHAL-SESSION-ID"];
338521
+ if (typeof value === "string" && value.trim())
338522
+ return value.trim();
338523
+ }
338524
+ }
338525
+ return;
338526
+ }
338527
+ function buildTriggerHeaders(khalSessionId) {
338528
+ return khalSessionId ? { "x-khal-session-id": khalSessionId } : undefined;
338529
+ }
338509
338530
  function mergeContextMessages(extra, db2) {
338510
338531
  return extra?.length ? [...extra, ...db2] : db2;
338511
338532
  }
@@ -338553,7 +338574,7 @@ async function executeBeforeMessageWriteHooks(instanceId, chatId, content) {
338553
338574
  });
338554
338575
  return result.context.content;
338555
338576
  }
338556
- function buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages) {
338577
+ function buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages, khalSessionId) {
338557
338578
  const threadId2 = extractThreadId(messages4);
338558
338579
  const env2 = {};
338559
338580
  if (instance4.bridgeTmuxSession) {
@@ -338582,6 +338603,7 @@ function buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4
338582
338603
  referencedMessageId: messages4[0]?.payload.replyToId || undefined
338583
338604
  },
338584
338605
  sessionId,
338606
+ headers: buildTriggerHeaders(khalSessionId),
338585
338607
  sessionStrategy: instance4.agentSessionStrategy ?? "per_chat",
338586
338608
  customer: customerContext,
338587
338609
  contextMessages: allContextMessages.length > 0 ? allContextMessages : undefined,
@@ -338598,7 +338620,8 @@ async function dispatchViaStreamingProvider(services, instance4, messages4, trig
338598
338620
  if (!messageTexts.length && mediaFiles.length)
338599
338621
  messageTexts.push("[Media message]");
338600
338622
  const rawThreadId = extractThreadId(messages4);
338601
- const sessionId = computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadId);
338623
+ const explicitKhalSessionId = extractKhalSessionId(messages4);
338624
+ const sessionId = explicitKhalSessionId ?? computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadId);
338602
338625
  const rawPl = messages4[0]?.payload.rawPayload ?? {};
338603
338626
  const replyToId = messages4[0]?.payload.replyToId ?? messages4[0]?.payload.externalId;
338604
338627
  const currentMessageIds = messages4.map((msg) => msg.payload.externalId).filter((id) => !!id);
@@ -338607,7 +338630,7 @@ async function dispatchViaStreamingProvider(services, instance4, messages4, trig
338607
338630
  const triggerFiles = toTriggerFiles(mediaFiles);
338608
338631
  await executeBeforeAgentStartHooks(instance4, chatId, senderId, senderName, triggerType, traceId, messages4[0]?.metadata.correlationId, triggerFiles);
338609
338632
  const customerContext = await resolveCustomerContext(services, personId, extractA2ACustomerContext(messages4, channel5));
338610
- const trigger = buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages);
338633
+ const trigger = buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages, explicitKhalSessionId);
338611
338634
  const chatType = determineChatType(chatId, channel5, rawPl);
338612
338635
  const formatMode = instance4.messageFormatMode ?? "convert";
338613
338636
  const sender = resolved.createSender(instance4.id, chatId, replyToId, chatType, { formatMode });
@@ -338820,14 +338843,15 @@ async function dispatchViaProvider(services, instance4, messages4, triggerType,
338820
338843
  messageTexts.push("[Media message]");
338821
338844
  }
338822
338845
  const rawThreadId = extractThreadId(messages4);
338823
- const sessionId = computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadId);
338846
+ const explicitKhalSessionId = extractKhalSessionId(messages4);
338847
+ const sessionId = explicitKhalSessionId ?? computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadId);
338824
338848
  const currentMessageIds = messages4.map((msg) => msg.payload.externalId).filter((id) => !!id);
338825
338849
  const dbContextMessages = await buildContextMessages(services, instance4, chatId, currentMessageIds);
338826
338850
  const allContextMessages = mergeContextMessages(extraContextMessages, dbContextMessages);
338827
338851
  const triggerFiles = toTriggerFiles(mediaFiles);
338828
338852
  await executeBeforeAgentStartHooks(instance4, chatId, senderId, senderName, triggerType, traceId, messages4[0]?.metadata.correlationId, triggerFiles);
338829
338853
  const customerContext = await resolveCustomerContext(services, personId, extractA2ACustomerContext(messages4, channel5));
338830
- const trigger = buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages);
338854
+ const trigger = buildMessageTrigger(traceId, triggerType, rawEvent, channel5, instance4, chatId, senderId, personId, senderName, messages4, messageTexts, triggerFiles, sessionId, customerContext, allContextMessages, explicitKhalSessionId);
338831
338855
  if (provider.mode === "turn-based") {
338832
338856
  return dispatchViaTurnBasedProvider(services, instance4, provider, trigger, messages4, chatId, traceId, db2);
338833
338857
  }
@@ -338958,7 +338982,7 @@ async function handleSessionReset(firstMessage, instance4, channel5, senderId, c
338958
338982
  const hasThread = !!(firstMessage.payload.threadId || msgRawPayload.isThread || msgRawPayload.threadId);
338959
338983
  const resetChatType = hasThread ? "thread" : resolvedChatType === "channel" ? "group" : resolvedChatType;
338960
338984
  const rawThreadIdForReset = msgRawPayload.threadId;
338961
- const sessionId = computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadIdForReset);
338985
+ const sessionId = extractKhalSessionId([firstMessage]) ?? computeSessionId(instance4.agentSessionStrategy ?? "per_chat", senderId, chatId, rawThreadIdForReset);
338962
338986
  const sessionResetConfig = inst.sessionReset;
338963
338987
  const activity = sessionActivityStore.getActivity(instance4.id, sessionId);
338964
338988
  const resetResult = checkSessionReset(sessionResetConfig, resetChatType, activity);
@@ -365775,7 +365799,9 @@ async function handleGupshupWebhook(request, plugin3, instanceId, webhookVerifyT
365775
365799
  sender: webhook.sender
365776
365800
  });
365777
365801
  }
365778
- const processed = await processInboundMessage(plugin3, instanceId, webhook, dedupeCache);
365802
+ const processed = await processInboundMessage(plugin3, instanceId, webhook, dedupeCache, {
365803
+ khalSessionId: request.headers.get("x-khal-session-id")?.trim() || undefined
365804
+ });
365779
365805
  let handled;
365780
365806
  if (!knownMessageEvent) {
365781
365807
  handled = "dropped_unknown_fail_open";
@@ -365791,7 +365817,7 @@ async function handleGupshupWebhook(request, plugin3, instanceId, webhookVerifyT
365791
365817
  });
365792
365818
  return new Response("OK", { status: 200 });
365793
365819
  }
365794
- async function processInboundMessage(plugin3, instanceId, webhook, dedupeCache) {
365820
+ async function processInboundMessage(plugin3, instanceId, webhook, dedupeCache, options = {}) {
365795
365821
  const msg = webhook.messageobj;
365796
365822
  const from = webhook.sender;
365797
365823
  const dedupeKey = `${from.trim()}:${msg.id}`;
@@ -365813,13 +365839,21 @@ async function processInboundMessage(plugin3, instanceId, webhook, dedupeCache)
365813
365839
  const platformTimestamp = msg.timestamp * 1000;
365814
365840
  const replyTo = msg.replyContext?.id;
365815
365841
  const senderName = webhook.senderobj?.display ?? webhook.contextobj?.senderName ?? webhook.messageobj?.raw?.sender?.name;
365842
+ const threadId = webhook.contextobj?.contextid;
365843
+ const khalSessionHeaders = options.khalSessionId ? { "x-khal-session-id": options.khalSessionId } : undefined;
365816
365844
  await plugin3.handleMessageReceived({
365817
365845
  instanceId,
365818
365846
  externalId: msg.id,
365819
365847
  chatId: from,
365820
365848
  from,
365821
365849
  content,
365822
- rawPayload: { ...webhook, pushName: senderName },
365850
+ rawPayload: {
365851
+ ...webhook,
365852
+ pushName: senderName,
365853
+ ...threadId ? { threadId } : {},
365854
+ ...options.khalSessionId ? { khalSessionId: options.khalSessionId } : {},
365855
+ ...khalSessionHeaders ? { headers: khalSessionHeaders } : {}
365856
+ },
365823
365857
  platformTimestamp,
365824
365858
  replyTo
365825
365859
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automagik/omni",
3
- "version": "2.260530.5",
3
+ "version": "2.260531.2",
4
4
  "description": "LLM-optimized CLI for Omni",
5
5
  "type": "module",
6
6
  "bin": {