session
feishu.agent.session
¶
SessionStore
¶
Bases: Protocol
会话历史存储协议,是自定义持久化后端的扩展契约。
feishu.agent.loop.AgentEngine 通过该协议读写各会话的对话历史;内置实现为
feishu.agent.session.InMemorySessionStore,可自行实现该协议接入数据库等持久化后端。该协议标注了
runtime_checkable,可用 isinstance 校验实现是否符合契约。
示例:
源代码位于: feishu/agent/session.py
InMemorySessionStore
¶
基于内存的 feishu.agent.session.SessionStore 实现。
将各会话历史保存在进程内字典中,写操作以锁保护因而并发安全。仅适用于单进程、可接受重启即丢失历史的 场景;生产环境请自行实现 feishu.agent.session.SessionStore 接入持久化后端。
示例:
源代码位于: feishu/agent/session.py
get
async
¶
get(session_id: str) -> list[Message]
append
async
¶
append(session_id: str, *messages: Message) -> None
向指定会话追加一条或多条消息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
会话标识。 |
必需 |
|
Message
|
待追加的消息。 |
()
|
源代码位于: feishu/agent/session.py
set
async
¶
set(session_id: str, messages: list[Message]) -> None
PendingApproval
dataclass
¶
一次挂起的工具审批,记录恢复对话所需的全部上下文。
当工具的 requires_approval 为 True 时,feishu.agent.loop.AgentEngine 会创建该记录并发送审批卡片;
用户在卡片上批准或拒绝后,依据其中保存的会话与工具调用信息恢复本轮对话。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/agent/session.py
PendingAuthorization
dataclass
¶
一次挂起的用户授权,记录 OAuth callback 后恢复原工具调用所需的上下文。
当工具返回 NEEDS_USER_AUTH 时,feishu.agent.loop.AgentEngine 会创建该记录、发送授权卡片并挂起本轮;
OAuth callback 完成并保存用户 token 后,产品调用 Agent.resume_authorization,依据其中保存的工具调用恢复对话。
源代码位于: feishu/agent/session.py
ClaimResult
¶
一次审批认领(claim)的结果,是审批执行前的并发安全闸门。
feishu.agent.approval.ApprovalEngine 在执行工具前先 claim 对应审批,依据返回值决定放行或拒绝:
仅 CLAIMED 允许继续执行,其余值各自对应一种不可执行的情形。由于继承自 str,枚举成员可直接与字符串
字面量比较。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/agent/session.py
PendingApprovalStore
¶
Bases: Protocol
挂起审批存储协议,是自定义审批持久化后端的扩展契约。
feishu.agent.loop.AgentEngine 通过该协议保存与取回挂起的 feishu.agent.session.PendingApproval;
内置实现为 feishu.agent.session.InMemoryPendingApprovalStore。该协议标注了 runtime_checkable,
可用 isinstance 校验实现是否符合契约。
示例:
源代码位于: feishu/agent/session.py
put
async
¶
put(approval: PendingApproval) -> None
pop
async
¶
pop(approval_id: str) -> PendingApproval | None
get
async
¶
get(approval_id: str) -> PendingApproval | None
claim
async
¶
claim(approval_id: str, *, expected_payload_sha256: str | None = None) -> ClaimResult
原子地认领一次审批(awaiting_confirmation -> executing),返回 feishu.agent.session.ClaimResult。
这是防重复执行与防篡改的并发闸门:提供 expected_payload_sha256 时须与存储的负载摘要一致,否则返回
TAMPERED;已被认领/执行返回 ALREADY_CLAIMED;不存在返回 MISSING。仅 CLAIMED 允许继续执行。
源代码位于: feishu/agent/session.py
complete
async
¶
update
async
¶
update(approval_id: str, mutator: Callable[[PendingApproval], tuple[T, PendingApproval]]) -> T
InMemoryPendingApprovalStore
¶
基于内存的 feishu.agent.session.PendingApprovalStore 实现。
将挂起审批保存在进程内字典中,写操作以锁保护因而并发安全。每个审批仅可被取出一次,取出即移除,可天然 防止重复执行。仅适用于单进程场景;生产环境请自行实现 feishu.agent.session.PendingApprovalStore。
示例:
源代码位于: feishu/agent/session.py
| Python | |
|---|---|
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 | |
put
async
¶
put(approval: PendingApproval) -> None
pop
async
¶
pop(approval_id: str) -> PendingApproval | None
按 approval_id 取出并移除一次挂起的审批。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批标识。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
PendingApproval | None
|
对应的 feishu.agent.session.PendingApproval;不存在或已被取出时返回 |
源代码位于: feishu/agent/session.py
| Python | |
|---|---|
get
async
¶
get(approval_id: str) -> PendingApproval | None
按 approval_id 读取挂起的审批而不移除。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批标识。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
PendingApproval | None
|
对应的 feishu.agent.session.PendingApproval;不存在时返回 |
源代码位于: feishu/agent/session.py
claim
async
¶
claim(approval_id: str, *, expected_payload_sha256: str | None = None) -> ClaimResult
原子地认领一次审批,返回 feishu.agent.session.ClaimResult。
在锁内完成「存在性 + 篡改 + 状态」三项校验,并在通过时将状态翻转为 executing,从而保证同一审批不会
被并发确认重复执行。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批标识。 |
必需 |
|
str | None
|
卡片回传携带的负载摘要;提供时须与存储值一致,否则返回 |
None
|
返回:
| 类型 | 描述 |
|---|---|
ClaimResult
|
认领结果;仅 |
示例:
源代码位于: feishu/agent/session.py
complete
async
¶
complete(approval_id: str, *, outcome: str) -> None
标记一次审批的最终处置。
成功、拒绝或取消(executed/replayed/rejected/cancelled)即移除记录;retry 还原为
awaiting_confirmation 以便重试;执行结果未知(unknown/frozen)则冻结为 execution_unknown。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批标识。 |
必需 |
|
str
|
最终处置标签。 |
必需 |
源代码位于: feishu/agent/session.py
update
async
¶
update(approval_id: str, mutator: Callable[[PendingApproval], tuple[T, PendingApproval]]) -> T
以 compare-and-swap 方式原子更新一次审批。
在锁内调用 mutator(旧值),其须返回 (返回值, 新值);新值写回存储,返回值回传调用方。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批标识。 |
必需 |
|
Callable[[PendingApproval], tuple[T, PendingApproval]]
|
接受旧审批、返回 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
T
|
|
引发:
| 类型 | 描述 |
|---|---|
KeyError
|
审批不存在时抛出。 |
源代码位于: feishu/agent/session.py
PendingAuthorizationStore
¶
Bases: Protocol
挂起授权存储协议,是 OAuth 授权后自动恢复工具调用的扩展契约。
feishu.agent.loop.AgentEngine 通过该协议保存与取回挂起的 feishu.agent.session.PendingAuthorization; 内置实现为 feishu.agent.session.InMemoryPendingAuthorizationStore。
源代码位于: feishu/agent/session.py
put
async
¶
put(authorization: PendingAuthorization) -> None
get
async
¶
get(authorization_id: str) -> PendingAuthorization | None
pop
async
¶
pop(authorization_id: str) -> PendingAuthorization | None
claim
async
¶
claim(authorization_id: str) -> ClaimResult
complete
async
¶
标记一次授权恢复的最终处置。
retry 还原为 awaiting_authorization;unknown/frozen 冻结为 execution_unknown;其余终态
(如 executed/failed/cancelled/expired)移除记录。
源代码位于: feishu/agent/session.py
update
async
¶
update(authorization_id: str, mutator: Callable[[PendingAuthorization], tuple[T, PendingAuthorization]]) -> T
以 compare-and-swap 方式原子更新一次授权:mutator(旧值) 返回 (返回值, 新值)。
InMemoryPendingAuthorizationStore
¶
基于内存的 feishu.agent.session.PendingAuthorizationStore 实现。
源代码位于: feishu/agent/session.py
put
async
¶
put(authorization: PendingAuthorization) -> None
get
async
¶
get(authorization_id: str) -> PendingAuthorization | None
pop
async
¶
pop(authorization_id: str) -> PendingAuthorization | None
claim
async
¶
claim(authorization_id: str) -> ClaimResult
原子地认领一次授权,返回 feishu.agent.session.ClaimResult。
源代码位于: feishu/agent/session.py
complete
async
¶
标记授权恢复的最终处置;retry 重开,unknown/frozen 冻结,其余终态移除。
源代码位于: feishu/agent/session.py
update
async
¶
update(authorization_id: str, mutator: Callable[[PendingAuthorization], tuple[T, PendingAuthorization]]) -> T
以 compare-and-swap 方式原子更新一次授权。