From c4579637dc63ea7fd78387e4c0de858336426ce6 Mon Sep 17 00:00:00 2001 From: Autumn-27 <53844290+Autumn-27@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:01:38 -0400 Subject: [PATCH] =?UTF-8?q?refactor(noa):=20=E5=BD=92=E6=A1=A3=E9=9B=86?= =?UTF-8?q?=E4=B8=AD=E5=88=B0=20/noa=20=E4=B8=8B=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E5=88=86=E6=95=A3=E5=9C=A8=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 各 agent 的 noa 归档基目录由本 run 的工作目录改为全局 workDir, 统一落在 /noa//。SessionID 全局唯一,同一基目录 内互不冲突。 --- agent/chat.go | 4 ++-- agent/mainagent.go | 4 ++-- agent/noa.go | 3 ++- agent/planner.go | 4 ++-- agent/worker.go | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/agent/chat.go b/agent/chat.go index 75bc9d4..0b75cfc 100644 --- a/agent/chat.go +++ b/agent/chat.go @@ -167,8 +167,8 @@ func (c *ChatAgent) Chat(ctx context.Context, agentKey, sessionID, message strin opts.Transcript = c.tx opts.SessionID = sessionID } - // 实验功能:开启后由 noa 接管上下文压缩(归档落在本会话 sessionWorkDir 下,持久)。 - enableNoa(&opts, c.noaEnabledFn, sessionWorkDir, "chat-"+sessionID, noaWarn("chat-"+sessionID)) + // 实验功能:开启后由 noa 接管上下文压缩(归档集中在 /noa/ 下,持久)。 + enableNoa(&opts, c.noaEnabledFn, c.workDir, "chat-"+sessionID, noaWarn("chat-"+sessionID)) ctx = attachSideCapture(ctx, &opts) s := agentcore.NewSession(opts) defer s.Close() diff --git a/agent/mainagent.go b/agent/mainagent.go index e8a1726..6de01a7 100644 --- a/agent/mainagent.go +++ b/agent/mainagent.go @@ -172,13 +172,13 @@ func (m *MainAgent) Chat(ctx context.Context, taskID int64, mainSeg int, as *db. opts.SessionID = fmt.Sprintf("exp%d-main-s%d", ts.ID(), mainSeg) } } - // 实验功能:开启后由 noa 接管上下文压缩(归档落在本任务 mainDir 下,任务级持久)。 + // 实验功能:开启后由 noa 接管上下文压缩(归档集中在 /noa/ 下,持久)。 // session id 与 transcript 同规则(分段感知),使归档与恢复对齐。 noaSession := fmt.Sprintf("exp%d-main", ts.ID()) if mainSeg > 0 { noaSession = fmt.Sprintf("exp%d-main-s%d", ts.ID(), mainSeg) } - enableNoa(&opts, m.noaEnabledFn, mainDir, noaSession, noaWarn(noaSession)) + enableNoa(&opts, m.noaEnabledFn, m.workDir, noaSession, noaWarn(noaSession)) ctx = attachSideCapture(ctx, &opts) s := agentcore.NewSession(opts) defer s.Close() diff --git a/agent/noa.go b/agent/noa.go index 9f6d197..9a28fd2 100644 --- a/agent/noa.go +++ b/agent/noa.go @@ -21,7 +21,8 @@ func noaWarn(session string) func(string) { // 一次,故切换只影响之后启动的 run,无需重建 agent。 // enableNoa 在解析器报告开启时把 noa 接入 opts。archiveRoot 是压缩原文的持久化基目录 -// (取各 agent 本 run 的工作目录,任务级持久),sessionID 命名其下的归档子目录。 +// (取全局 workDir,各 agent 统一落在 /noa 下,不随任务/意图目录分散),sessionID +// 命名其下的归档子目录(全局唯一,故同一基目录内不冲突)。 // // noa 是实验功能:接入失败不得中断真实任务。发生错误时经 onWarn 上报并回退内置压缩。 // 启用成功时清掉 opts.Compaction,避免 agentcore 因「两个上下文管理器同时设置」告警。 diff --git a/agent/planner.go b/agent/planner.go index d71eec4..94d17e5 100644 --- a/agent/planner.go +++ b/agent/planner.go @@ -435,9 +435,9 @@ func (p *Planner) Plan(ctx context.Context, taskID int64, as *db.AssetStore, ts opts.Transcript = p.tx opts.SessionID = fmt.Sprintf("exp%d-planner", ts.ID()) } - // 实验功能:开启后由 noa 接管上下文压缩(归档落在本任务 taskDir 下,任务级持久)。 + // 实验功能:开启后由 noa 接管上下文压缩(归档集中在 /noa/ 下,持久)。 noaSession := fmt.Sprintf("exp%d-planner", ts.ID()) - enableNoa(&opts, p.noaEnabledFn, taskDir, noaSession, noaWarn(noaSession)) + enableNoa(&opts, p.noaEnabledFn, p.workDir, noaSession, noaWarn(noaSession)) // 态势(刚完成的意图 + 完整图)现在拼进本轮 user 输入(见下方 input)。user 里还有 // 指令 + 跨唤醒待办(todo 是模型自己的规划便签,可再生,放 user 即可)。 // 开场白按「本轮有无具体变动」分两种:有变动 → 指向下方【实际变动】块;无变动 diff --git a/agent/worker.go b/agent/worker.go index a2ce7e1..1c767f3 100644 --- a/agent/worker.go +++ b/agent/worker.go @@ -487,9 +487,9 @@ func (w *Worker) execute(ctx context.Context, name string, taskID int64, as *db. input = "开始执行 system 里领到的意图:只做它、只产生事实、assets、finding、做完即停。" } - // 实验功能:开启后由 noa 接管上下文压缩(归档落在本意图 runDir 下,任务级持久)。 + // 实验功能:开启后由 noa 接管上下文压缩(归档集中在 /noa/ 下,持久)。 noaSession := WorkerSessionID(ts.ID(), intent.ID) - enableNoa(&opts, w.noaEnabledFn, runDir, noaSession, noaWarn(noaSession)) + enableNoa(&opts, w.noaEnabledFn, w.workDir, noaSession, noaWarn(noaSession)) ctx = attachSideCapture(ctx, &opts) s := agentcore.NewSession(opts) defer s.Close() // release the session's background-task manager (temp dir + processes)