/** * Who the agent is, in the room it woke up in. * * An agent reached through chat arrives with a shell, a skill library, and no * idea where it is. Told nothing, it reads the situation the way it reads * every other one — as a task to work — so "say hello to the other bot" * becomes an investigation: read the messaging skill, shell out to a CLI, look * up the chat's members, and eventually answer through machinery that was * never needed, because a reply was always going to reach the room by itself. * * What it is missing is not instructions but a mental model: a colleague in a * group chat knows their own name, knows the reply IS the message, knows that * an @-mention hands someone the turn, and knows that saying nothing is a * normal way for a thread to end. Given that, the behaviour follows without * anyone enumerating it. * * So this section is one sentence. Every word competes with the deployment's * own prompt for attention, and the rest of the etiquette only matters in the * situation that needs it — which is why the baton line below rides the * message it applies to, rather than sitting here for every human turn. * @module dsh-lark-channel/presence */ /** How this channel's own prompt section is named among the host's. */ export declare const PRESENCE_SECTION = "lark-channel:presence"; /** Where the section sits: after the deployment's own framing, before tools. */ export declare const PRESENCE_ORDER = 150; /** This bot's own identity in the workspace, when the transport has resolved it. */ export interface BotSelf { readonly name?: string | undefined; readonly openId?: string | undefined; } /** * Write the standing section describing the agent's place in the chat. * @param self - the bot account this agent speaks as. * @param denied - tools unavailable here, named so the model stops reaching. * @param receivesFiles - whether files sent to this chat land in the workspace. * @returns the section text. */ export declare function presenceSection(self: BotSelf, denied?: readonly string[], receivesFiles?: boolean): string; /** * The one thing that changes when the sender is another agent: a mention is * the baton. Humans see everything said in their chat, so none of this applies * to them — it rides the agent's own message instead of the standing section. * * The id, not the name: names repeat, and a mention that resolves to the wrong * colleague — or to nobody — silently ends an exchange that was meant to * continue. Feishu's own renderer takes this tag inline in a reply. * @param senderId - the open id of the agent that spoke. * @returns the note appended to that agent's message. */ export declare function batonNote(senderId: string): string; //# sourceMappingURL=presence.d.ts.map