Asosiy tarkibga o'tish

Session Tool’lari

Maqsad: agentlar sessionlarni ro‘yxatlay olishi, tarixni ola olishi va boshqa sessionga yubora olishi uchun kichik va suiiste’mol qilish qiyin bo‘lgan tool to‘plami.

Tool nomlari

  • sessions_list
  • sessions_history
  • sessions_send
  • sessions_spawn

Kalit modeli

  • Asosiy to‘g‘ridan-to‘g‘ri chat bucket har doim literal kalit "main" bo‘ladi (joriy agentning asosiy kalitiga yechiladi).
  • Guruh chatlari agent:<agentId>:<channel>:group:<id> yoki agent:<agentId>:<channel>:channel:<id> dan foydalanadi (to‘liq kalitni uzating).
  • Cron job’lar cron:<job.id> dan foydalanadi.
  • Hook’lar aniq belgilab qo‘yilmagan bo‘lsa hook:<uuid> dan foydalanadi.
  • Node session’lari aniq belgilab qo‘yilmagan bo‘lsa node-<nodeId> dan foydalanadi.
global va unknown rezerv qilingan qiymatlar bo‘lib, hech qachon ro‘yxatlanmaydi. Agar session.scope = "global" bo‘lsa, biz uni barcha tool’lar uchun main ga alias qilamiz, shunda chaqiruvchilar hech qachon global ni ko‘rmaydi.

sessions_list

Sessiyalarni qatorlar massivi sifatida roʻyxatlang. Parametrlar:
  • kinds?: string[] filtr: "main" | "group" | "cron" | "hook" | "node" | "other" dan istalgani
  • limit?: number maksimal qatorlar soni (standart: serverning standart qiymati, masalan 200 bilan cheklanadi)
  • Qarang: /concepts/compaction.
  • messageLimit?: number 0 = xabarsiz (standart 0); >0 = oxirgi N ta xabarni qoʻshish
Xulq-atvor:
  • messageLimit > 0 har bir sessiya uchun chat.history ni oladi va oxirgi N ta xabarni qoʻshadi.
  • Roʻyxat chiqishida tool natijalari filtrlanadi; tool xabarlari uchun sessions_history dan foydalaning.
  • Sandboxed agent sessiyasida ishga tushirilganda, sessiya tool’lari sukut boʻyicha faqat ishga tushirilganlar uchun koʻrinish rejimida boʻladi (quyiga qarang).
Row shape (JSON):
  • key: session key (string)
  • kind: main | group | cron | hook | node | other
  • channel: whatsapp | telegram | discord | signal | imessage | webchat | internal | unknown
  • displayName (group display label if available)
  • updatedAt (ms)
  • sessionId
  • model, contextTokens, totalTokens
  • thinkingLevel, verboseLevel, systemSent, abortedLastRun
  • sendPolicy (session override if set)
  • lastChannel, lastTo
  • deliveryContext (normalized { channel, to, accountId } when available)
  • transcriptPath (best-effort path derived from store dir + sessionId)
  • messages? (only when messageLimit > 0)

sessions_history

Fetch transcript for one session. Parametrlar:
  • sessionKey (required; accepts session key or sessionId from sessions_list)
  • limit?: number max messages (server clamps)
  • includeTools?: boolean (default false)
Xulq-atvor:
  • includeTools=false filters role: "toolResult" messages.
  • Returns messages array in the raw transcript format.
  • When given a sessionId, OpenClaw resolves it to the corresponding session key (missing ids error).

sessions_send

Send a message into another session. Parametrlar:
  • sessionKey (required; accepts session key or sessionId from sessions_list)
  • message (required)
  • timeoutSeconds?: number (default >0; 0 = fire-and-forget)
Xulq-atvor:
  • timeoutSeconds = 0: enqueue and return { runId, status: "accepted" }.
  • timeoutSeconds > 0: wait up to N seconds for completion, then return { runId, status: "ok", reply }.
  • If wait times out: { runId, status: "timeout", error }. Run continues; call sessions_history later.
  • If the run fails: { runId, status: "error", error }.
  • Announce delivery runs after the primary run completes and is best-effort; status: "ok" does not guarantee the announce was delivered.
  • Waits via gateway agent.wait (server-side) so reconnects don’t drop the wait.
  • Agent-to-agent message context is injected for the primary run.
  • Sessionlararo xabarlar message.provenance.kind = "inter_session" bilan saqlanadi, shunda transkript o‘quvchilari marshrutlangan agent ko‘rsatmalarini tashqi foydalanuvchi kirishidan ajrata oladi.
  • After the primary run completes, OpenClaw runs a reply-back loop:
      1. 2+ raund so‘rovchi va nishon agentlar o‘rtasida navbatma‑navbat almashadi.
      1. Ping‑pongni to‘xtatish uchun aniq REPLY_SKIP deb javob bering.
      1. Maksimal burilishlar soni session.agentToAgent.maxPingPongTurns (0–5, standart 5).
    1. Tsikl tugagach, OpenClaw agentdan‑agentga e’lon qilish bosqichini ishga tushiradi (faqat nishon agent):
      1. Jim qolish uchun aniq ANNOUNCE_SKIP deb javob bering.
      1. Boshqa har qanday javob nishon kanaliga yuboriladi.
      1. E’lon bosqichi asl so‘rov + 1‑rau ndagi javob + so‘nggi ping‑pong javobini o‘z ichiga oladi.

8. Kanal maydoni

    1. Guruhlar uchun channel sessiya yozuvida qayd etilgan kanal bo‘ladi.
    1. To‘g‘ridan‑to‘g‘ri chatlar uchun channel lastChanneldan moslanadi.
    1. Cron/hook/node uchun channelinternal.
    1. Agar mavjud bo‘lmasa, channelunknown.

13. Xavfsizlik / Yuborish siyosati

  1. Kanal/chat turi bo‘yicha siyosatga asoslangan bloklash (sessiya identifikatori bo‘yicha emas).
15. {
  "session": {
    "sendPolicy": {
      "rules": [
        {
          "match": { "channel": "discord", "chatType": "group" },
          "action": "deny"
        }
      ],
      "default": "allow"
    }
  }
}
  1. Ish vaqtida bekor qilish (har bir sessiya yozuvi uchun):
    1. sendPolicy: "allow" | "deny" (o‘rnatilmasa = konfiguratsiyani meros qilib oladi)
    1. sessions.patch orqali yoki faqat egaga ruxsat etilgan /send on|off|inherit (alohida xabar) orqali o‘rnatiladi.
  1. Majburiy ijro nuqtalari:
    1. chat.send / agent (shlyuz)
    1. avtomatik javob yetkazib berish mantiqi

22. sessions_spawn

  1. Izolyatsiyalangan sessiyada quyi‑agent ishini ishga tushiring va natijani so‘rovchi chat kanaliga e’lon qiling.
Parameters:
  • Ruxsat etilganlar ro‘yxati:
    1. label? (ixtiyoriy; loglar/UI uchun ishlatiladi)
    1. agentId? (ixtiyoriy; ruxsat etilsa, boshqa agent identifikatori ostida ishga tushiradi)
    1. model? (ixtiyoriy; quyi‑agent modelini almashtiradi; noto‘g‘ri qiymatlar xato beradi)
    1. runTimeoutSeconds? (standart 0; o‘rnatilganda, N soniyadan so‘ng quyi‑agent ishini to‘xtatadi)
    1. cleanup? (delete|keep, standart keep)
  1. Ruxsat etilganlar ro‘yxati:
    1. agents.list[].subagents.allowAgents: agentId orqali ruxsat etilgan agent identifikatorlari ro‘yxati (["*"] — har qandayiga ruxsat). 33. Standart: faqat so‘rovchi agent.
  1. Aniqlash:
  • Xatti‑harakat:
Behavior:
    1. deliver: false bilan yangi agent:<agentId>:subagent:<uuid> sessiyasini boshlaydi.
    1. Quyi‑agentlar sukut bo‘yicha to‘liq vositalar to‘plamiga ega bo‘ladi sessiya vositalarisiz ( tools.subagents.tools orqali sozlanadi ).
    1. Quyi‑agentlarga sessions_spawnni chaqirishga ruxsat berilmaydi (quyi‑agent → quyi‑agent ishga tushirish yo‘q).
    1. Har doim bloklanmaydi: darhol { status: "accepted", runId, childSessionKey }ni qaytaradi.
    1. Yakunlangach, OpenClaw quyi‑agent e’lon qilish bosqichini ishga tushiradi va natijani so‘rovchi chat kanaliga joylaydi.
    1. E’lon bosqichida jim qolish uchun aniq ANNOUNCE_SKIP deb javob bering.
    1. E’lon javoblari Status/Result/Notes ga normallashtiriladi; Status ish vaqti natijasidan olinadi (model matnidan emas).
    1. Quyi‑agent sessiyalari agents.defaults.subagents.archiveAfterMinutes dan so‘ng avtomatik arxivlanadi (standart: 60).
    1. E’lon javoblari statistika qatorini o‘z ichiga oladi (ish vaqti, tokenlar, sessionKey/sessionId, transkript yo‘li va ixtiyoriy xarajat).

46. Sandbox sessiya ko‘rinuvchanligi

  1. Sandboxlangan sessiyalar sessiya vositalaridan foydalanishi mumkin, ammo sukut bo‘yicha ular faqat sessions_spawn orqali o‘zlari ishga tushirgan sessiyalarni ko‘ra oladi.
  2. Konfiguratsiya:
49. {
  agents: {
    defaults: {
      sandbox: {
        // default: "spawned"
        sessionToolsVisibility: "spawned", // yoki "all"
      },
    },
  },
}