SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
Loading...
Searching...
No Matches
claw_safety.h
Go to the documentation of this file.
1/*******************************************************************************
2 * File Name: claw_safety.h
3 *
4 * Description: BentoClaw safety guardrails — rate limiter, circuit breaker,
5 * transport trust levels.
6 *
7 * OWASP Agentic AI patterns adapted for embedded constraints:
8 * - Per-tool rate limiting (sliding window via tick counter)
9 * - Circuit breaker (3 consecutive errors -> 30s cooldown)
10 * - Transport trust levels (USB=full, HTTPS=restricted)
11 *
12 *******************************************************************************/
13
14#ifndef CLAW_SAFETY_H
15#define CLAW_SAFETY_H
16
17#include <stdint.h>
18#include <stdbool.h>
19
20/*******************************************************************************
21 * Transport Trust Levels
22 ******************************************************************************/
23typedef enum {
24 CLAW_TRUST_USB = 2, /* Full access — all tools, all risk levels */
25 CLAW_TRUST_HTTPS = 1, /* Restricted — low/medium risk only */
26 CLAW_TRUST_NONE = 0, /* Blocked — no tool execution */
28
29/*******************************************************************************
30 * Rate Limiter — per-tool sliding window
31 ******************************************************************************/
32
33/* Max tools tracked for rate limiting */
34#define CLAW_RATE_MAX_TOOLS (16)
35
36/* Per-tool rate limit config */
37typedef struct {
38 const char *tool_name; /* Tool identifier */
39 uint16_t max_per_minute; /* Max calls per 60-second window */
40 uint16_t call_count; /* Calls in current window */
41 uint32_t window_start; /* Window start tick (ms) */
43
44/* Initialize rate limiter. Called once at module init. */
45void claw_rate_init(void);
46
47/* Check if tool is allowed under current rate limit.
48 * Returns true if allowed, false if rate-limited. */
49bool claw_rate_check(const char *tool_name);
50
51/* Record a tool execution (increments counter). */
52void claw_rate_record(const char *tool_name);
53
54/* Set per-tool rate limit. Default is 10/min for most tools. */
55void claw_rate_set(const char *tool_name, uint16_t max_per_minute);
56
57/*******************************************************************************
58 * Circuit Breaker — consecutive error tracking
59 ******************************************************************************/
60
61/* Circuit breaker states */
62typedef enum {
63 CLAW_CB_CLOSED = 0, /* Normal operation */
64 CLAW_CB_OPEN = 1, /* Tripped — blocking all calls */
65 CLAW_CB_HALFOPEN = 2, /* Allowing one test call */
67
68/* Initialize circuit breaker. */
69void claw_cb_init(void);
70
71/* Check if circuit breaker allows execution.
72 * Returns true if allowed. */
73bool claw_cb_allow(void);
74
75/* Record success — resets error counter, closes breaker. */
76void claw_cb_success(void);
77
78/* Record failure — increments error counter, may trip breaker. */
79void claw_cb_failure(void);
80
81/* Get current circuit breaker state. */
83
84/* Get remaining cooldown in milliseconds (0 if not in cooldown). */
86
87/*******************************************************************************
88 * Trust Level Check
89 ******************************************************************************/
90
91/* Set current transport trust level. */
93
94/* Get current transport trust level. */
96
97/* Check if tool with given risk level is allowed at current trust level.
98 * risk: 0=low, 1=medium, 2=high
99 * Returns true if allowed. */
100bool claw_trust_allows(uint8_t risk);
101
102#endif /* CLAW_SAFETY_H */
claw_cb_state_t
Definition claw_safety.h:62
@ CLAW_CB_HALFOPEN
Definition claw_safety.h:65
@ CLAW_CB_CLOSED
Definition claw_safety.h:63
@ CLAW_CB_OPEN
Definition claw_safety.h:64
claw_trust_level_t
Definition claw_safety.h:23
@ CLAW_TRUST_USB
Definition claw_safety.h:24
@ CLAW_TRUST_NONE
Definition claw_safety.h:26
@ CLAW_TRUST_HTTPS
Definition claw_safety.h:25
uint32_t claw_cb_cooldown_remaining(void)
จำนวนมิลลิวินาทีที่เหลือใน cooldown ขณะ breaker เปิดวงจร; เป็น 0 เมื่อไม่ได้อยู่ใน cooldown
void claw_rate_init(void)
ล้างตารางหน้าต่างเลื่อนประจำแต่ละ tool; เรียกเพียงครั้งเดียวผ่าน bentoclaw_ensure_init() เท่านั้น
bool claw_rate_check(const char *tool_name)
gate ที่สาม: tool นั้นยังอยู่ใต้ค่าจำกัดต่อนาทีหรือไม่ การตรวจไม่กินโควตา
void claw_cb_failure(void)
บันทึกความล้มเหลวก่อนการ raise ที่ไม่คืนการทำงานกลับมา; breaker จะเปิดวงจรเมื่อครบ 3 ครั้ง
void claw_trust_set(claw_trust_level_t level)
ตั้งระดับ trust ของ transport; การยกระดับเป็น HTTPS ทุกครั้งจับคู่กับการตั้งกลับเป็น USB
void claw_cb_init(void)
รีเซ็ต circuit breaker ให้กลับเป็น closed; เรียกเพียงครั้งเดียวผ่าน bentoclaw_ensure_init() เท่านั้น
void claw_rate_set(const char *tool_name, uint16_t max_per_minute)
ติดตั้งค่าจำกัดประจำ tool แทนค่าเริ่มต้น 10 ครั้งต่อนาที
claw_trust_level_t claw_trust_get(void)
ส่วนที่ใช้อ่านสถานะ: ระดับ trust ปัจจุบัน
void claw_rate_record(const char *tool_name)
นับการเรียกหนึ่งครั้งในหน้าต่างปัจจุบัน; ไปถึงได้เฉพาะหลัง gate ทั้งสามผ่านแล้วเท่านั้น
bool claw_trust_allows(uint8_t risk)
gate ที่สอง: ระดับ trust ปัจจุบันยอมรับความเสี่ยงที่ tool ประกาศไว้หรือไม่
bool claw_cb_allow(void)
gate ที่หนึ่งของลำดับที่กำหนดตายตัว: breaker อนุญาตให้ทำงานหรือไม่
void claw_cb_success(void)
บันทึกผลสำเร็จ: รีเซ็ตตัวนับข้อผิดพลาดและทำให้ breaker กลับเป็น closed
claw_cb_state_t claw_cb_state(void)
ส่วนที่ใช้อ่านสถานะ: สถานะปัจจุบันของ breaker (closed / open / half-open)
Definition claw_safety.h:37
uint16_t max_per_minute
Definition claw_safety.h:39
const char * tool_name
Definition claw_safety.h:38
uint16_t call_count
Definition claw_safety.h:40
uint32_t window_start
Definition claw_safety.h:41