Skip to content

[Project] 为通用 Akashic 增加项目 Session 与 coding context #369

Description

@kachofugetsu09

父路线:#367
依赖:#368

用户可见结果

用户新建 Session 时可以显式选择服务器上的 Git 路径。该 Session 从此持续以这个工作根、仓库身份、适用 AGENTS.md 和项目记忆完成 coding work;同一仓库可以有多个平级 Session。

Coding Agent 不是第二个 Agent,而是通用 Akashic 在 Project Session 中的工作形态。

已确认合同

  1. Session 使用 session_kind = companion | project。Project Session 持久保存 project_id、不可变 working_root 和创建时的 project identity snapshot。
  2. 第一版不建 projects 表。每个 Project Session 重复保存同一确定性 project_id
  3. 有 Git remote 时,project_id 从去凭据、规范化后的 origin identity 派生;没有 remote 时从 canonical git-common-dir 派生。算法必须版本化。同 remote 的 clone/worktree 属于同一 Project,fork remote 属于不同 Project。
  4. working_root 是用户选择、服务端已存在的绝对路径,可以是仓库子目录。它是默认 cwd 和上下文根,不是硬 sandbox。
  5. Agent 可以按既有工具权限跳出根目录,但不会因此重新绑定 Project。
  6. Session 创建后不允许修改、清除或重新指定工作根;其他根使用新 Session。
  7. 用户可从最近 Git 根选择,也可手工输入绝对服务端路径;路径必须存在且 identity 可确定。
  8. 同一 Project 可有多个平级 Session,不建立用户可见 parent/child。内部 programmatic 子任务可以继承 scope,但不进入普通抽屉。
  9. 同一 repository/worktree 的不同 Session 可以并发修改文件;第一版不加跨 Session 文件锁或警告。UI 显示 project、root、branch、dirty 和同项目 active Session 数。
  10. 抽屉保持扁平:Companion 使用 primary 语义色,Project 使用 tertiary,不可用路径使用 neutral;error 只表示真实错误。颜色同时有图标或文字。
  11. Project 自动标题为 repo · 首条用户消息;第一版只支持标题搜索。
  12. 工作根暂不可访问时,Session 从普通列表隐藏并进入“不可用项目”;数据保留,路径恢复后重新出现。

AGENTS.md Prompt 合同

  • 每个新 turn 从 Git root 到 working_root 重新发现适用 AGENTS.md
  • 更深层文件在工具将要接触对应路径时按需加载。
  • 离开工作根操作时按目标路径重新检查适用 AGENTS.md,但 Project identity 不变。
  • 更深层 AGENTS.md 对目录树更具体;direct system/developer/user 指令仍优先。
  • 总注入上限 32 KiB,来源与截断可见;文件变化在下一 turn 替换旧 Prompt 内容。
  • 第一版只自动信任 AGENTS.md。不自动加载项目 Skill、MCP、插件、extension、prompt template 或其他约定文件。

项目记忆与 programmatic 规则

  • Companion 继续读取全局 MEMORY.md / SELF.md 和 Companion Akasha。
  • Project 以全局 MEMORY.md / SELF.md 作为人物与通用偏好基线;项目事实进入 Project Akasha,不复制到 Companion 图。
  • 现有记忆提取判断编码偏好是否跨 Project 通用。可能通用的偏好先追加 PENDING.md,再由现有 optimizer 合并;不新增审批状态机。
  • scheduler:* 始终排除记忆。
  • programmatic:* 缺少 skip_post_memory 时默认排除;只有创建时显式 persist_memory=true / skip_post_memory=false 才学习。
  • 现存未标记 programmatic Session 在派生重建时按新默认排除。
  • Project 内部子任务只有显式继承 project_id 且显式开启记忆时,才能进入对应 Project scope。

持久化语义

  • kind/project/root/identity 在 Session 创建时一次写入;project/root 不可原位修改。
  • 标题、updated_at、模型选择继续按现有状态机更新。
  • Project Session 只随 SES-003 的显式 Session 删除减少。
  • AGENTS Prompt block 是每 turn 临时投影,不修改或删除仓库文件。
  • Project preference 使用现有 PENDING 两阶段事务。
  • unavailable 是路径探测投影,不是删除或 tombstone。

验收

  • 同一 Git remote 的两个 worktree 得到同一 project_id,fork remote 不同;无 remote 的同一 git-common-dir 稳定一致。
  • 一个 Project 的多个 Session 共享 Project identity,但保持独立消息、turn 和 compaction。
  • 每个 turn 重新读取 AGENTS.md;嵌套覆盖、32 KiB 截断、来源展示与跳出根目录有真实测试。
  • working_root 不可重绑;路径离线时数据不减少,恢复后重新可见。
  • Web/Mobile 显示同一 Project Session;light/dark/warm-paper 的语义颜色可区分且可访问。
  • scheduler 与默认 programmatic 不进入 Markdown、Memory2 或 Akasha;显式 Project child 只进入对应 scope。

非目标

  • 不增加 Projects 表、父子 Session 或 Project workflow engine。
  • 不把 working root 当安全 sandbox。
  • 不自动信任项目 Skill、MCP、插件或 extension。
  • 不重做已实现的 Session compaction,也不引入 terminal resume。

Metadata

Metadata

Assignees

No one assigned

    Labels

    roadmapTracks roadmap items and ongoing directions

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions