ollie/fs/spec.go

56 lines
2.0 KiB
Go

package fs
// treeSpec is the complete declaration of the 9P namespace.
// Every file and directory in the system is declared here — this is
// the single source of truth for the filesystem structure.
// treeSpecUID and treeSpecGID are set at NewRoot() time from the current
// system user so the root node inherits proper ownership.
var treeSpecUID, treeSpecGID string
var treeSpec = Dir("/",
// Root ownership: UID/GID set at NewRoot() time.
// Every child inherits from root unless overridden.
// ── Root-level files (owned by system user, group "agent") ──
Leaf("backends", 0444, Read(readBackends), GID("agent")),
Leaf("help", 0444, Read(readHelp), GID("agent")),
Leaf("models", 0444, Read(readModels), GID("agent")),
Leaf("agents", 0444, Read(readAgents), GID("agent")),
Leaf("tools", 0444, Read(readTools), GID("agent")),
Leaf("ctl", 0666, Write(writeRootCtl), GID("agent")),
Leaf("eventwait", 0444,
Read(readEventwait),
Stream(blockEventwait),
GID("agent"),
),
Leaf("complete", 0666, Request(requestComplete), GID("agent")),
Leaf("generate", 0666, Request(requestGenerate), GID("agent")),
Leaf("route", 0666, Request(requestRoute), GID("agent")),
// ── elevate/ (owned by system user, group "agent") ──────────
Dir("elevate", GID("agent"),
Leaf("policy", 0666,
Read(readElevatePolicy),
Write(writeElevatePolicy),
),
TemplateDir("pending", listElevatePending),
),
// ── session/ ────────────────────────────────────────────────
Dir("session", GID("agent"),
// session/new and session/idx are owned by system user
Leaf("new", 0666, Request(requestSessionNew)),
Leaf("idx", 0444, Read(readSessionIdx)),
// {id} — dynamic per-session directory.
// Ownership is set per-instance by listSessions:
// UID = session's uname, GID = "agent"
TemplateDir("{id}", listSessions),
),
)
// nopRead returns empty content.
func nopRead(_ HandlerCtx) ([]byte, error) {
return nil, nil
}