A backend owns the four obligations of every mutation, so the tools that call it need not know them:
'''Order.''' locks(path) are the LockKeys a mutation of path holds; a tool declares them with AgentToolSpec.withLocks, so mutations of one path in one batch apply in call order. Reads take no lock.
'''Replay.''' A mutation outside thread state runs through C4's replay guard of its target's class, under ctx.effectKey(operation, path). A state mutation is the StateUpdate it returns, which the runtime commits with the call; it needs no guard.
'''Bounds.''' Every result is bounded by limit and the backend's own limits, and every store by a limit the backend checks itself.
'''Tenant.''' A backend shared across threads is scoped by the run's tenant, or built per tenant by a resolver.
Replaces old with replacement in the file path: the one occurrence, or every occurrence when replaceAll. Refused when old is empty or absent, or occurs more than once and not replaceAll.
Replaces old with replacement in the file path: the one occurrence, or every occurrence when replaceAll. Refused when old is empty or absent, or occurs more than once and not replaceAll.
The files within under that accept takes, in path order, at most limit: accept is applied before the limit, so a file it refuses never takes a place (a composite passes a predicate that refuses the paths a mount shadows, and relies on this to fill its limit with visible files). search likewise.
The files within under that accept takes, in path order, at most limit: accept is applied before the limit, so a file it refuses never takes a place (a composite passes a predicate that refuses the paths a mount shadows, and relies on this to fill its limit with visible files). search likewise.
The lines matching regex of the files within under that accept takes, in path then line order. regex is the model's: match it with org.llm4s.security.RegexSafetyManager.safeFind, never a bare matcher, so a catastrophic pattern is bounded and cannot overflow the stack.
The lines matching regex of the files within under that accept takes, in path then line order. regex is the model's: match it with org.llm4s.security.RegexSafetyManager.safeFind, never a bare matcher, so a catastrophic pattern is bounded and cannot overflow the stack.
The lines matching regex in the files within under. include filters the files: a pattern with no / matches a file's name, one with a / its path relative to under (as ripgrep's --glob).
The lines matching regex in the files within under. include filters the files: a pattern with no / matches a file's name, one with a / its path relative to under (as ripgrep's --glob).