41ed6414c6
Bundles three operator-reliability guardrails (Vikunja #28/#29/#30) plus the in-flight branch WIP they were built on top of (reasoning_content capture, operator/project profile editor, write-jail workspaceRoot fix) — the tree is interdependent (SessionOrchestrator references reasoningArtifactId from the WIP) and does not compile as separable subsets, so it lands as one commit. Guardrails: - #28 mid-stage steering: ClientMessage.SteerSession -> GlobalStreamHandler -> orchestrator.submitSteering, reusing SteeringNoteAddedEvent + existing context fold (advisory, non-authoritative; invariants #3/#7). Closes the gap where steering typed off an approval gate was silently dropped. - #29 shell-in-file guardrail: ShellInFileContentRule (core:toolintent) blocks a file_write whose content is a bare shell command (e.g. "mkdir -p ..."); FileWriteTool description now advertises auto-mkdir of parent dirs. Basename-allowlist so the extensionless case is caught; scripts/Makefiles/multiline exempt. - #30 pt1 capability-gap detector: deterministic CapabilityGapDetector maps stage intent -> implied ToolCapability, compares to granted tools, emits advisory CapabilityGapDetectedEvent in FreestyleDriver.lockAndRun. Recorded, never fails the gate and never auto-grants (invariants #3/#4/#5). Reflection rung is pt2. Verified: ./gradlew check green (whole tree).
17 lines
604 B
Groovy
17 lines
604 B
Groovy
plugins {
|
|
id 'java-library'
|
|
id 'org.jetbrains.kotlin.jvm'
|
|
}
|
|
|
|
dependencies {
|
|
implementation(project(":core:transitions"))
|
|
implementation(project(":core:inference"))
|
|
implementation(project(":core:events"))
|
|
implementation(project(":core:artifacts"))
|
|
implementation(project(":core:tools"))
|
|
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-toml:2.17.0")
|
|
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0")
|
|
testImplementation "org.junit.jupiter:junit-jupiter"
|
|
testImplementation "org.jetbrains.kotlin:kotlin-test-junit5"
|
|
}
|