claude-code: read where it runs from the controller's JSON answer
nodesRunningMe looked for printed lines in what is a JSON list, so every register tool's "also on" hint and every nodes: "all" named no machine.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package main
|
||||
|
||||
// The guard on the agent's shell (novox/hq ADR 0244): a PreToolUse hook every session on a machine of the
|
||||
// The guard on the agent's shell (novox/hq ADR 0245): a PreToolUse hook every session on a machine of the
|
||||
// mesh runs before a shell command or a file edit, delivered in the module's plugin.
|
||||
//
|
||||
// It refuses three work-arounds, each with the mesh tool that does the job when one says it replaces the
|
||||
@@ -69,7 +69,7 @@ type Verdict struct {
|
||||
// command or a setting put there (guard_run.go).
|
||||
const OverrideVar = "MESH_GUARD_OVERRIDE"
|
||||
|
||||
// ForgeUser is the forge's ssh account: it runs git, never a shell (stated in ADR 0244).
|
||||
// ForgeUser is the forge's ssh account: it runs git, never a shell (stated in ADR 0245).
|
||||
const ForgeUser = "git"
|
||||
|
||||
// protectedFiles are the files a session never writes for a mesh name.
|
||||
@@ -110,7 +110,7 @@ func (g Guard) judgeLine(line string, depth int) Verdict {
|
||||
}
|
||||
if strings.Contains(line, OverrideVar) {
|
||||
return Verdict{Refuse: true, Rule: "override-named", Message: fmt.Sprintf(
|
||||
"Refused by the mesh's guard (novox/hq ADR 0244): this command names %s, the operator's override. "+
|
||||
"Refused by the mesh's guard (novox/hq ADR 0245): this command names %s, the operator's override. "+
|
||||
"It is the operator's alone, set in their own shell before a session starts; a session never sets, "+
|
||||
"reads or passes it.", OverrideVar)}
|
||||
}
|
||||
@@ -310,7 +310,7 @@ func (g Guard) judgeSSH(name string, args []string, line string) Verdict {
|
||||
}
|
||||
}
|
||||
if user == ForgeUser {
|
||||
return Verdict{} // the forge's account: git and nothing else (stated in ADR 0244)
|
||||
return Verdict{} // the forge's account: git and nothing else (stated in ADR 0245)
|
||||
}
|
||||
if machine, ok := g.meshHost(host); ok {
|
||||
return g.refuseSSH(machine, host, remote, line)
|
||||
@@ -573,7 +573,7 @@ func (g Guard) refuseSSH(machine, host, remote, line string) Verdict {
|
||||
}
|
||||
var b strings.Builder
|
||||
var named []string
|
||||
fmt.Fprintf(&b, "Refused by the mesh's guard (novox/hq ADR 0244): `%s` reaches %s round the mesh's tools.\n", cut(line, 160), who)
|
||||
fmt.Fprintf(&b, "Refused by the mesh's guard (novox/hq ADR 0245): `%s` reaches %s round the mesh's tools.\n", cut(line, 160), who)
|
||||
switch {
|
||||
case strings.TrimSpace(remote) == "":
|
||||
target := machine
|
||||
@@ -603,7 +603,7 @@ func (g Guard) refuseSSH(machine, host, remote, line string) Verdict {
|
||||
|
||||
func (g Guard) refuseLocal(rule, replaced, what string) Verdict {
|
||||
var b strings.Builder
|
||||
fmt.Fprintf(&b, "Refused by the mesh's guard (novox/hq ADR 0244): %s is a work-around for a mesh name. "+
|
||||
fmt.Fprintf(&b, "Refused by the mesh's guard (novox/hq ADR 0245): %s is a work-around for a mesh name. "+
|
||||
"A mesh name is the mesh's resolvers' to answer, and a machine's own lines in /etc/hosts are its node-hostname seat's.\n", what)
|
||||
var named []string
|
||||
if address := g.exact(replaced); address != "" {
|
||||
@@ -628,7 +628,7 @@ func cut(s string, n int) string {
|
||||
return s
|
||||
}
|
||||
|
||||
// commandWordsOf are a command line's words as matched against a replaced command (the console's rule):
|
||||
// commandWordsOf are a command line's words as matched against a replaced command (the mesh MCP server's search rule):
|
||||
// lower-cased, a program by path reduced to its name, sudo left out.
|
||||
func commandWordsOf(line string) []string {
|
||||
var out []string
|
||||
|
||||
Reference in New Issue
Block a user