Liking cljdoc? Tell your friends :D

im.ttalk.agent.timeline

对话时间线与多分支(设计见 docs/agent-loop-concurrency-design.md §12)

Agent 的持久状态 = 对话历史(ChatMemory 中的 append-only 日志), 日志本身就是 timeline;分支 = fork-as-new-conversation——前缀复制到 新 conversation-id + 一条血缘记录。所有既有组件(memory filter / PauseStore / react 循环)按 conversation-id 工作,换分支即换 conv-id 建 agent,无组件感知"树"。

一致性不变量:合法的 fork/rollback 点只有 turn 边界与暂停点 (屏障才是一致快照点)。fork 暂停中的会话(全量前缀)自动连带复制 PauseStore 快照——两个分支可各自 resume 不同决策(HITL 决策分支)。

用法: (def deps {:memory mem :pause-store ps :branch (in-memory-branch-store)}) (fork! deps "main" {}) ;; 全量分支(含暂停快照) (fork! deps "main" {:at 4 :as "exp"}) ;; 前 4 条消息处开分支 (rollback! deps "main" 4) ;; 破坏性截断("重新生成") (ancestry deps "exp") ;; 血缘回溯 (prune! deps "exp") ;; 删分支(有子分支拒绝)

对话时间线与多分支(设计见 docs/agent-loop-concurrency-design.md §12)

Agent 的持久状态 = 对话历史(ChatMemory 中的 append-only 日志),
日志本身就是 timeline;分支 = fork-as-new-conversation——前缀复制到
新 conversation-id + 一条血缘记录。所有既有组件(memory filter /
PauseStore / react 循环)按 conversation-id 工作,换分支即换 conv-id
建 agent,无组件感知"树"。

一致性不变量:**合法的 fork/rollback 点只有 turn 边界与暂停点**
(屏障才是一致快照点)。fork 暂停中的会话(全量前缀)自动连带复制
PauseStore 快照——两个分支可各自 resume 不同决策(HITL 决策分支)。

用法:
  (def deps {:memory mem :pause-store ps :branch (in-memory-branch-store)})
  (fork! deps "main" {})                 ;; 全量分支(含暂停快照)
  (fork! deps "main" {:at 4 :as "exp"}) ;; 前 4 条消息处开分支
  (rollback! deps "main" 4)              ;; 破坏性截断("重新生成")
  (ancestry deps "exp")                  ;; 血缘回溯
  (prune! deps "exp")                    ;; 删分支(有子分支拒绝)
raw docstring

ancestryclj

(ancestry {:keys [branch]} conv-id)

自身到根的血缘链 [自身记录 父记录 ...](根会话无记录,链止于最老的 fork)。

自身到根的血缘链 [自身记录 父记录 ...](根会话无记录,链止于最老的 fork)。
sourceraw docstring

BranchStorecljprotocol

分支血缘记录 {:id :parent :fork-point :created-at}。

分支血缘记录 {:id :parent :fork-point :created-at}。

branch-childrenclj

(branch-children store conv-id)

直接子分支的记录列表。

直接子分支的记录列表。

delete-branch!clj

(delete-branch! store conv-id)

删除该会话的血缘记录。返回 nil。

删除该会话的血缘记录。返回 nil。

get-branchclj

(get-branch store conv-id)

查该会话的血缘记录;根会话(非 fork 产物)为 nil。

查该会话的血缘记录;根会话(非 fork 产物)为 nil。

record-branch!clj

(record-branch! store branch-rec)

登记一条血缘。返回 nil。

登记一条血缘。返回 nil。
sourceraw docstring

fork!clj

(fork! {:keys [memory pause-store branch]} src-conv-id & [{:keys [at as]}])

在 src-conv-id 上开分支:前缀复制到新 conversation-id + 血缘记录。

deps: {:memory ChatMemory必填 :pause-store 可选 :branch 可选} opts:

  • :at 前缀长度(消息条数);缺省全量。合法 fork 点是 turn 边界/暂停点 (§12.2 不变量,:at 应落在完整 turn 的消息边界上,由调用方保证)
  • :as 新 conversation-id;缺省随机

全量 fork 且源处于暂停时,PauseStore 快照连带复制(快照属于日志尖端; 部分前缀 fork 不带)——两个分支可各自 resume 不同决策。

返回新 conversation-id。

在 src-conv-id 上开分支:前缀复制到新 conversation-id + 血缘记录。

deps: {:memory ChatMemory必填 :pause-store 可选 :branch 可选}
opts:
- :at  前缀长度(消息条数);缺省全量。**合法 fork 点是 turn 边界/暂停点**
       (§12.2 不变量,:at 应落在完整 turn 的消息边界上,由调用方保证)
- :as  新 conversation-id;缺省随机

全量 fork 且源处于暂停时,PauseStore 快照连带复制(快照属于日志尖端;
部分前缀 fork 不带)——两个分支可各自 resume 不同决策。

返回新 conversation-id。
sourceraw docstring

in-memory-branch-storeclj

(in-memory-branch-store)
source

lineageclj

(lineage {:keys [branch]} conv-id)

该会话的血缘记录 {:id :parent :fork-point :created-at};根会话为 nil。

该会话的血缘记录 {:id :parent :fork-point :created-at};根会话为 nil。
sourceraw docstring

prune!clj

(prune! {:keys [memory pause-store branch]} conv-id)

删除分支:历史 + 暂停快照 + 血缘记录。有直接子分支时拒绝 (先 prune 子分支,或改挂血缘后再删)。

删除分支:历史 + 暂停快照 + 血缘记录。有直接子分支时拒绝
(先 prune 子分支,或改挂血缘后再删)。
sourceraw docstring

rollback!clj

(rollback! {:keys [memory pause-store]} conv-id n)

破坏性截断:conv-id 的历史保留前 n 条("重新生成"场景;要无损请用 fork!)。 同时清除该会话的暂停快照(日志尖端已变,未决暂停失效)。 实现为 clear + 重写(现有 ChatMemory 协议即可;非原子,勿并发使用)。

破坏性截断:conv-id 的历史保留前 n 条("重新生成"场景;要无损请用 fork!)。
同时清除该会话的暂停快照(日志尖端已变,未决暂停失效)。
实现为 clear + 重写(现有 ChatMemory 协议即可;非原子,勿并发使用)。
sourceraw docstring

sqlite-branch-storeclj

(sqlite-branch-store db-path)

SQLite 后端的 BranchStore(可与 ChatMemory / PauseStore 同库不同表)。

SQLite 后端的 BranchStore(可与 ChatMemory / PauseStore 同库不同表)。
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close