Building plugins

คำขอสิทธิ์ของ Plugin

คำขอสิทธิ์ของ Plugin ช่วยให้โค้ด Plugin หยุดการเรียกใช้เครื่องมือหรือการดำเนินการที่ Plugin เป็นเจ้าของไว้ชั่วคราว จนกว่าผู้ใช้จะอนุมัติหรือปฏิเสธ โดยใช้โฟลว์ plugin.approval.* ของ Gateway และพื้นผิว UI การอนุมัติเดียวกับที่ใช้จัดการปุ่มอนุมัติในแชต และคำสั่ง /approve

ใช้คำขอสิทธิ์ของ Plugin สำหรับสิทธิ์ของ Plugin/แอป คำขอเหล่านี้ไม่ได้ใช้แทน การอนุมัติ exec ของโฮสต์ รายการอนุญาตเครื่องมือแบบเลือกใช้ หรือการตรวจสอบสิทธิ์ แบบเนทีฟของ Codex

เลือกด่านตรวจสอบที่เหมาะสม

เลือกด่านตรวจสอบที่ตรงกับจุดตัดสินใจที่ต้องการ:

ด่านตรวจสอบ ใช้เมื่อ สิ่งที่ควบคุม
เครื่องมือแบบเลือกใช้ ไม่ควรแสดงเครื่องมือแก่โมเดลจนกว่าผู้ใช้จะเลือกใช้ การเปิดเผยเครื่องมือผ่าน tools.allow
คำขอสิทธิ์ของ Plugin ฮุกของ Plugin หรือการดำเนินการที่ Plugin เป็นเจ้าของต้องขออนุญาตก่อนดำเนินการหนึ่งรายการ การอนุมัติขณะรันผ่าน plugin.approval.*
การอนุมัติ exec คำสั่งโฮสต์หรือเครื่องมือที่คล้ายเชลล์ต้องได้รับการอนุมัติจากผู้ดำเนินการ นโยบาย exec ของโฮสต์และรายการอนุญาต exec แบบถาวร
คำขอสิทธิ์แบบเนทีฟของ Codex Codex ขออนุญาตก่อนดำเนินการกับเชลล์ ไฟล์ MCP หรือ app-server แบบเนทีฟ การจัดการการอนุมัติของ Codex app-server หรือฮุกแบบเนทีฟ ซึ่งส่งผ่านการอนุมัติของ Plugin เมื่อ OpenClaw เป็นเจ้าของพรอมต์
การร้องขอการอนุมัติจาก MCP เซิร์ฟเวอร์ Codex MCP ขออนุมัติสำหรับการเรียกใช้เครื่องมือ การตอบกลับการอนุมัติ MCP ที่เชื่อมต่อผ่านการอนุมัติของ Plugin ของ OpenClaw

เครื่องมือแบบเลือกใช้เป็นด่านตรวจสอบในช่วงการค้นพบ ส่วนคำขอสิทธิ์ของ Plugin เป็น ด่านตรวจสอบต่อการเรียกแต่ละครั้ง ใช้ทั้งสองอย่างเมื่อเครื่องมือที่ละเอียดอ่อนควรกำหนดให้ผู้ใช้เลือกใช้อย่างชัดแจ้ง ก่อนที่โมเดลจะมองเห็น และต้องได้รับการอนุมัติก่อนดำเนินการ

ขออนุมัติก่อนเรียกใช้เครื่องมือ

พรอมต์ส่วนใหญ่ที่สร้างโดย Plugin ควรเริ่มในฮุก before_tool_call ฮุกนี้ ทำงานหลังจากโมเดลเลือกเครื่องมือและก่อนที่ OpenClaw จะเรียกใช้:

typescript
 export default definePluginEntry({  id: "deploy-policy",  name: "Deploy Policy",  register(api) {    api.on("before_tool_call", async (event) => {      if (event.toolName !== "deploy_service") {        return;      }       const environment =        typeof event.params.environment === "string" ? event.params.environment : "unknown";       return {        requireApproval: {          title: "Deploy service",          description: `Deploy service to ${environment}.`,          severity: environment === "production" ? "critical" : "warning",          allowedDecisions:            environment === "production"              ? ["allow-once", "deny"]              : ["allow-once", "allow-always", "deny"],          timeoutMs: 120_000,          onResolution(decision) {            console.log(`deploy approval resolved: ${decision}`);          },        },      };    });  },});

เขียนข้อความพรอมต์สำหรับผู้ที่จะอนุมัติการดำเนินการ:

  • กำหนด title ให้สั้นและมุ่งเน้นการดำเนินการ Gateway จำกัดไว้ที่ 80 อักขระ
  • กำหนด description ให้เฉพาะเจาะจงและมีขอบเขต Gateway จำกัดไว้ที่ 512 อักขระ
  • ระบุการดำเนินการ เป้าหมาย และความเสี่ยง อย่าระบุข้อมูลลับ โทเค็น หรือ เพย์โหลดส่วนตัวที่ไม่ควรปรากฏบนพื้นผิวการอนุมัติในแชต
  • หากละเว้น severity ค่าเริ่มต้นคือ "warning" ใช้ "critical" เฉพาะกับ การดำเนินการที่การตัดสินใจผิดพลาดอาจสร้างความเสียหายต่อระบบใช้งานจริงหรือทำให้ข้อมูลสูญหาย
  • หากละเว้น allowedDecisions ค่าเริ่มต้นคือ ["allow-once", "allow-always", "deny"] ส่ง ["allow-once", "deny"] เมื่อความเชื่อถือแบบถาวรไม่ปลอดภัยสำหรับ การดำเนินการนั้น
  • หากละเว้น timeoutMs ค่าเริ่มต้นคือ 120000 (2 นาที) และจำกัดสูงสุดที่ 600000 (10 นาที) ไม่ว่าค่าที่ขอจะเป็นเท่าใด

พฤติกรรมการตัดสินใจ

OpenClaw สร้างการอนุมัติที่รอดำเนินการพร้อม ID plugin: ส่งไปยัง พื้นผิวการอนุมัติที่พร้อมใช้งาน และรอการตัดสินใจ

การตัดสินใจ ผลลัพธ์
allow-once การเรียกปัจจุบันดำเนินต่อ
allow-always การเรียกปัจจุบันดำเนินต่อและส่งการตัดสินใจให้ Plugin
deny การเรียกถูกบล็อกพร้อมผลลัพธ์เครื่องมือที่ถูกปฏิเสธ
หมดเวลา การเรียกถูกบล็อก
การยกเลิก การเรียกถูกบล็อกเมื่อการรันถูกยกเลิก
ไม่มีเส้นทางการอนุมัติ การเรียกถูกบล็อกเนื่องจากไม่มีพื้นผิวการอนุมัติที่เชื่อมต่ออยู่สามารถดำเนินการให้เสร็จสิ้นได้

มีเพียงการตัดสินใจ allow-once และ allow-always ที่ตรงกันทุกประการและได้รับอนุญาตจาก คำขอเท่านั้นที่อนุญาตให้ดำเนินการ การตัดสินใจที่ไม่รู้จัก ผิดรูปแบบ ไม่ตรงกัน ขาดหาย หรือหมดเวลา จะปฏิเสธโดยค่าเริ่มต้น ฟิลด์เดิม timeoutBehavior ยังคงรองรับเพื่อ ความเข้ากันได้ของ Plugin แต่เลิกใช้แล้วและจะถูกละเว้น อย่ากำหนดฟิลด์นี้ในฮุกใหม่

allow-always จะคงอยู่ถาวรก็ต่อเมื่อ Plugin หรือรันไทม์ที่ส่งคำขอ นำการคงอยู่นั้นไปใช้ สำหรับฮุก before_tool_call.requireApproval ทั่วไป OpenClaw ถือว่า allow-once และ allow-always เป็นการตัดสินใจอนุมัติสำหรับ การเรียกปัจจุบัน และส่งค่าที่ได้ไปยัง onResolution หาก Plugin เสนอ allow-always ให้บันทึกเอกสารและนำไปใช้อย่างชัดเจนว่าจะเชื่อถือ การเรียกในอนาคตใดบ้าง

หากฮุกส่งคืน params ด้วย OpenClaw จะใช้การเปลี่ยนแปลงพารามิเตอร์เหล่านั้นเฉพาะ หลังจากการอนุมัติสำเร็จ ฮุกที่มีลำดับความสำคัญต่ำกว่ายังคงสามารถบล็อกได้หลังจาก ฮุกที่มีลำดับความสำคัญสูงกว่าขอการอนุมัติแล้ว

allowedDecisions จำกัดปุ่มและคำสั่งที่แสดงแก่ผู้ใช้ Gateway จะปฏิเสธความพยายามดำเนินการให้เสร็จสิ้นสำหรับการตัดสินใจใดก็ตามที่คำขอไม่ได้เสนอไว้

กำหนดเส้นทางพรอมต์การอนุมัติ

พรอมต์การอนุมัติสามารถดำเนินการให้เสร็จสิ้นในพื้นผิว UI ภายในเครื่องหรือในช่องแชตที่ รองรับการจัดการการอนุมัติ หากต้องการส่งต่อพรอมต์การอนุมัติของ Plugin ไปยังเป้าหมายแชต ที่ระบุอย่างชัดเจน ให้กำหนดค่า approvals.plugin:

json5
{  approvals: {    plugin: {      enabled: true,      mode: "targets",      agentFilter: ["main"],      targets: [{ channel: "slack", to: "U12345678" }],    },  },}

approvals.plugin เป็นอิสระจาก approvals.exec การเปิดใช้การส่งต่อการอนุมัติ exec จะไม่กำหนดเส้นทางพรอมต์การอนุมัติของ Plugin และการเปิดใช้การส่งต่อการอนุมัติของ Plugin จะไม่เปลี่ยนนโยบาย exec ของโฮสต์

เมื่อพรอมต์มีข้อความการอนุมัติด้วยตนเอง ให้ดำเนินการให้เสร็จสิ้นด้วยหนึ่งในการตัดสินใจ ที่เสนอ:

text
/approve <id> allow-once/approve <id> allow-always/approve <id> deny

ดู การอนุมัติ exec ขั้นสูง สำหรับโมเดลการส่งต่อทั้งหมด พฤติกรรมการอนุมัติในแชตเดียวกัน การส่งผ่านช่องทางแบบเนทีฟ และกฎผู้อนุมัติเฉพาะช่องทาง

สิทธิ์แบบเนทีฟของ Codex

พรอมต์สิทธิ์แบบเนทีฟของ Codex สามารถส่งผ่านการอนุมัติของ Plugin ได้เช่นกัน แต่ มีความเป็นเจ้าของแตกต่างจากฮุกที่สร้างโดย Plugin

  • คำขออนุมัติของ Codex app-server ส่งผ่าน OpenClaw หลังจาก Codex ตรวจสอบ
  • รีเลย์ฮุกแบบเนทีฟ permission_request สามารถขอผ่าน plugin.approval.request เมื่อเปิดใช้รีเลย์นั้น
  • การร้องขออนุมัติเครื่องมือ MCP ส่งผ่านการอนุมัติของ Plugin เมื่อ Codex กำหนด _meta.codex_approval_kind เป็น "mcp_tool_call"

ดู รันไทม์ชุดควบคุม Codex สำหรับพฤติกรรมเฉพาะของ Codex และกฎการสำรอง

การแก้ไขปัญหา

เครื่องมือแจ้งว่าการอนุมัติของ Plugin ไม่พร้อมใช้งาน ไม่มี UI การอนุมัติหรือเส้นทาง การอนุมัติที่กำหนดค่าไว้ยอมรับคำขอ เชื่อมต่อไคลเอนต์ที่รองรับการอนุมัติ ใช้ ช่องทางที่รองรับ /approve ในแชตเดียวกัน หรือกำหนดค่า approvals.plugin

allow-always ปรากฏขึ้น แต่การเรียกครั้งถัดไปถามอีกครั้ง โฟลว์การอนุมัติของ Plugin ทั่วไปไม่ได้คงความเชื่อถือสำหรับฮุกที่กำหนดเองโดยอัตโนมัติ ให้คงความเชื่อถือที่ Plugin เป็นเจ้าของไว้ใน Plugin หลังจาก onResolution("allow-always") หรือ เสนอเฉพาะ allow-once และ deny

/approve ปฏิเสธการตัดสินใจ คำขอจำกัด allowedDecisions ให้ใช้หนึ่งในการตัดสินใจที่พิมพ์อยู่ในพรอมต์

พรอมต์ของ Discord, Matrix, Slack หรือ Telegram ถูกกำหนดเส้นทางแตกต่างจากการอนุมัติ exec การอนุมัติของ Plugin และการอนุมัติ exec ใช้การกำหนดค่าแยกกันและอาจใช้ การตรวจสอบการให้สิทธิ์ต่างกัน ตรวจสอบ approvals.plugin และการรองรับ การอนุมัติของ Plugin ของช่องทาง แทนที่จะตรวจสอบเพียง approvals.exec

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page