feat(fabric): dm channels deliver any non-self message (no wakeup gate)
inbound: FabricMessage gains xType; the wakeup gate is bypassed when xType==='dm' (self messages are already filtered upstream), so a 1:1 dm always reaches the model regardless of wakeup metadata. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
6
dist/fabric/src/inbound.js
vendored
6
dist/fabric/src/inbound.js
vendored
@@ -201,7 +201,11 @@ export class FabricInbound {
|
|||||||
// the woken speaker emits a normal message or /no-reply). We still
|
// the woken speaker emits a normal message or /no-reply). We still
|
||||||
// record the message into the agent's session so it has the full
|
// record the message into the agent's session so it has the full
|
||||||
// channel conversation as context whenever it IS later woken.
|
// channel conversation as context whenever it IS later woken.
|
||||||
if (m.wakeup !== true) {
|
//
|
||||||
|
// Exception: dm channels are 1:1 — there is no turn/wakeup gating;
|
||||||
|
// any message that isn't the agent's own (already filtered above) is
|
||||||
|
// always delivered to the model.
|
||||||
|
if (m.xType !== 'dm' && m.wakeup !== true) {
|
||||||
const ctxPayload = core.channel.reply.finalizeInboundContext(baseCtx);
|
const ctxPayload = core.channel.reply.finalizeInboundContext(baseCtx);
|
||||||
await core.channel.session.recordInboundSession({
|
await core.channel.session.recordInboundSession({
|
||||||
storePath,
|
storePath,
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ type FabricMessage = {
|
|||||||
channelId?: string;
|
channelId?: string;
|
||||||
attachments?: FabricAttachment[];
|
attachments?: FabricAttachment[];
|
||||||
wakeup?: boolean;
|
wakeup?: boolean;
|
||||||
|
// x-type of the channel (sent on message.created). 'dm' bypasses the
|
||||||
|
// wakeup gate: any message that isn't the agent's own is delivered.
|
||||||
|
xType?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export class FabricInbound {
|
export class FabricInbound {
|
||||||
@@ -252,7 +255,11 @@ export class FabricInbound {
|
|||||||
// the woken speaker emits a normal message or /no-reply). We still
|
// the woken speaker emits a normal message or /no-reply). We still
|
||||||
// record the message into the agent's session so it has the full
|
// record the message into the agent's session so it has the full
|
||||||
// channel conversation as context whenever it IS later woken.
|
// channel conversation as context whenever it IS later woken.
|
||||||
if (m.wakeup !== true) {
|
//
|
||||||
|
// Exception: dm channels are 1:1 — there is no turn/wakeup gating;
|
||||||
|
// any message that isn't the agent's own (already filtered above) is
|
||||||
|
// always delivered to the model.
|
||||||
|
if (m.xType !== 'dm' && m.wakeup !== true) {
|
||||||
const ctxPayload = core.channel.reply.finalizeInboundContext(baseCtx);
|
const ctxPayload = core.channel.reply.finalizeInboundContext(baseCtx);
|
||||||
await core.channel.session.recordInboundSession({
|
await core.channel.session.recordInboundSession({
|
||||||
storePath,
|
storePath,
|
||||||
|
|||||||
Reference in New Issue
Block a user