mirror of
https://github.com/kvcache-ai/AgentENV.git
synced 2026-11-05 01:17:36 +00:00
[PR #415] [MERGED] feat(compose): add the Compose planner #417
Labels
No labels
bug
documentation
enhancement
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/AgentENV#417
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/kvcache-ai/AgentENV/pull/415
Author: @Primary33
Created: 10/22/2026
Status: ✅ Merged
Merged: 10/28/2026
Merged by: @yingdi-shan
Base:
main← Head:feat/compose-planner📝 Commits (1)
f5d5f49feat(compose): add the Compose planner📊 Changes
7 files changed (+820 additions, -2 deletions)
View changed files
📝
services/Makefile(+6 -0)📝
services/README.md(+7 -2)➕
services/compose/cmd/main.go(+46 -0)➕
services/compose/plan.go(+451 -0)➕
services/compose/plan_test.go(+271 -0)📝
services/go.mod(+11 -0)📝
services/go.sum(+28 -0)📄 Description
What
Add
aenv-compose-planto normalize and validate image-only Compose projects with compose-go.Why
Provide a standalone planner that the Compose sandbox API can invoke.
Related issue
Planner part of the #349 split. The server integration remains in #349.
Scope and non-goals
Go planner, dependencies, and services build/test/format/vet targets.
Design and behavior changes
env_file,label_file,extends,include) are never allowed. Fields that cannot work in a sandbox are rejected: builds, replicas above 1 (one writable image drive per service), relative bind mounts (no project directory), external resources, configs/secrets, custom IPAM and non-default drivers. Guest-only options pass through, e.g.privileged, anycap_add, absolute guest bind mounts, anonymous volumes andnetwork_mode: none/host/bridge/service:<name>.!!binarykey) and custom YAML tags such as!resetare rejected. Volume types and drivers are checked on the loaded project, after interpolation.host_ipempty,0.0.0.0or::, because the sandbox proxy connects to the guest address. The envd port is reserved; the server passes it asenvdPort(default 49983).Compatibility and operations
The executable is built by
make -C services build. Release packaging is added with the server integration in #349.Validation
On the designated Ubuntu test host as a non-root user (Go 1.27.1):
go test ./compose/... -count=1 -v— all planner tests passed.make -C services build test fmt-check vet— passed; the threeRedisBindingStoreintegration tests were skipped becauseredis-serveris not installed.aenv-compose-plansmoke checks: valid input exits 0 with a JSON plan; unsupported Compose and a reservedenvdPortexit 65; an unknown request field exits 1.Risks and reviewer notes
The standalone command and its tests exercise the planner protocol; #349 connects it to the Rust server.
Checklist
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.