feat(agent): 按任务/意图预建 agent 工作目录,worker 免手动建目录

- 新增 ensureRunDir(base,taskID,intentID):os.MkdirAll 建
  <workDir>/<taskID>[/i<intentID>],返回路径;cmdOutDir 助手
- worker:CWD/ToolOutputDir/提示词指到 <workDir>/<taskID>/i<意图id>/
  (引擎预建),删 workerArtifactSubdir,新 workerArtifactSpec 文案
- planner/mainagent:补 WorkingDir=<workDir>/<taskID>/ + ToolOutputDir
  (此前根本没设 WorkingDir);artifactSpec 文案改为「本任务工作目录」

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Autumn-27andClaude Opus 4.8 committed 2026-08-09 00:40:31 -04:00
1 parent f7197da988
commit 5f0fac33aa
3 files changed
+53 -22

No files matched your search

+10 -6
View File
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
"github.com/Autumn-27/artex/db"
"github.com/Autumn-27/norma/agentcore"
"github.com/Autumn-27/norma/llm"
"github.com/Autumn-27/norma/permission"
actool "github.com/Autumn-27/norma/tool"
"github.com/Autumn-27/norma/transcript"
"github.com/Autumn-27/artex/db"
)
// MainAgent is the thin human-interface orchestrator (docs §4.2 / §7). The human
@@ -74,7 +74,9 @@ func (m *MainAgent) Chat(ctx context.Context, taskID int64, as *db.AssetStore, t
base := append(tsx.MainAgentTools(), actool.DefaultTools()...)
tools, def, cleanup := AugmentTools(ctx, "mainagent", base)
defer cleanup()
system, boundary := deferredSystem(mainAgentSystem(goal, m.workDir), def)
// 本任务的工作目录 <workDir>/<taskID>,先建好。
mainDir := ensureRunDir(m.workDir, taskID, 0)
system, boundary := deferredSystem(mainAgentSystem(goal, mainDir), def)
opts := agentcore.Options{
Provider: m.prov,
SystemPrompt: system,
@@ -93,10 +95,12 @@ func (m *MainAgent) Chat(ctx context.Context, taskID int64, as *db.AssetStore, t
BraveSearchAPIKey: m.webSearch.BraveKey,
TavilySearchAPIKey: m.webSearch.TavilyKey,
WebSearchProxy: m.webSearch.Proxy,
BashEnv: proxyEnv(m.proxyAddr, m.proxyCACert), // Bash 子命令默认走代理+信任 CA
MaxTurns: m.maxTurns, // 0 = unlimited (configurable in agent management)
Compaction: compactionConfig(m.window), // long chats stay within the window
Todos: actool.NewTodoStore(), // 会话级临时待办(TodoWrite),纯规划用,退出即丢
BashEnv: proxyEnv(m.proxyAddr, m.proxyCACert), // Bash 子命令默认走代理+信任 CA
WorkingDir: mainDir, // 本任务工作目录 <workDir>/<taskID>
ToolOutputDir: cmdOutDir(mainDir),
MaxTurns: m.maxTurns, // 0 = unlimited (configurable in agent management)
Compaction: compactionConfig(m.window), // long chats stay within the window
Todos: actool.NewTodoStore(), // 会话级临时待办(TodoWrite),纯规划用,退出即丢
// 命中预算(步数)→ SDK 跑收尾:向用户输出一句进展总结。Prompt 与收尾轮数可后台编辑(默认 5 轮)。
Settlement: wrapupSettlement("mainagent", nil),
}