56 lines
2.0 KiB
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
|
|
}
|