29a12bb102
- Add expand_container_path() helper that resolves ~/ and $HOME/ prefixes
- Add get_manifest_home_dir() to compute /home/{user.name} or /root from manifest
- Set ENV HOME=... and ENV USER=... in generated Dockerfile for runtime compatibility
- Pass home_dir through instance creation and startup pipeline
- Expand mount targets in apply_resolved_profile() for regular profile mounts
- Expand mapping targets in _resolve_git_mount_mappings() for git mounts
- Expand working_directory and volume targets in _modify_compose_file()
- Update _prepare_manifest_instance to return home_dir alongside image tag
- Fetch tool_type early in start_instance to determine home_dir before profile application
Quality gates: pytest 188 passed, frontend typecheck clean
Addresses: home-path-expansion
2.9 KiB
2.9 KiB
Tasks: ~ / $HOME Expansion in Mount Paths
T1: Backend — Core helpers and pipeline
T1.1: Add expand_container_path helper
File: apps/api/src/services/config_profile_resolver.py
- Add
expand_container_path(path: str, home_dir: str) -> str - Handle
~/,~,$HOME/,$HOMEpatterns - Must not expand if path doesn't start with these patterns
T1.2: Add get_manifest_home_dir helper
File: apps/api/src/services/manifest_compiler.py
- Add
get_manifest_home_dir(manifest: dict) -> str - Returns
/home/{user.name}if user block exists, else/root
T1.3: Set HOME and USER env vars in Dockerfile
File: apps/api/src/services/manifest_compiler.py
- In
compile_dockerfile(), after user creation block, addENV HOME=...andENV USER=... - Update existing manifest compiler tests
T1.4: Update apply_resolved_profile to expand paths
File: apps/api/src/services/config_profile_resolver.py
- Add
home_dir: str = "/root"parameter - Expand mount targets before creating mount directories and volume entries
T1.5: Update git mount resolution to expand paths
File: apps/api/src/api/tool_instances.py
- Add
home_dir: str = "/root"parameter to_resolve_git_mount_mappings() - Expand mapping target paths before resolving
- Add
home_dirparameter to_resolve_git_mounts()and_resolve_single_git_mount()
T1.6: Determine home_dir in instance lifecycle
File: apps/api/src/api/tool_instances.py
- In
create_instance: determinehome_dirfrom tool type + manifest (if manifest), pass to_modify_compose_file - In
start_instance: determinehome_dirfrom tool type + resolved manifest, pass toapply_resolved_profileand_resolve_git_mounts - In
_prepare_manifest_instance: returnhome_diralongside image_tag and compose_content
T1.7: Update _modify_compose_file to expand paths
File: apps/api/src/api/tool_instances.py
- Add
home_dir: str = "/root"parameter - Expand
working_directoryand any mount targets in extra_volumes
T1.8: Unit tests
File: apps/api/tests/unit/test_home_path_expansion.py (new)
- Test
expand_container_pathwith~,~/foo,$HOME,$HOME/foo,/abs/path,rel/path - Test
get_manifest_home_dirwith user, without user
File: apps/api/tests/unit/test_manifest_compiler.py
- Test Dockerfile contains
ENV HOME=...for user-based manifests - Test Dockerfile contains
ENV HOME=/rootfor root manifests
T2: Verification
T2.1: Run all affected tests
cd apps/api && pytest tests/unit/test_home_path_expansion.py tests/unit/test_manifest_compiler.py tests/unit/test_config_profile_resolver.py tests/unit/test_git_mounts.py -xvs
T2.2: Frontend typecheck
cd apps/web && npm run typecheck
Estimation
| Task | Effort | Files |
|---|---|---|
| T1.1-T1.7 | 2h | 3 |
| T1.8 | 1h | 2 |
| T2.1-T2.2 | 0.5h | — |
| Total | 3.5h | 5 |