fix: fix readme, add posthog reverse proxy, update python sdk to fluid - #30
Conversation
There was a problem hiding this comment.
Pull request overview
This PR renames the project from virsh-sandbox to fluid, updates the Python SDK accordingly, adds a PostHog reverse proxy, and introduces a read-only mode in the Fluid TUI/agent.
Changes:
- Renamed Python SDK package/module references from
virsh_sandboxtofluidand bumped version to0.1.0 - Added PostHog reverse proxy (nginx) container assets
- Added read-only mode toggle in the TUI/agent and added arm64 to GoReleaser builds
Reviewed changes
Copilot reviewed 279 out of 437 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/fluid-py/pyproject.toml | Renames Python package + mypy targets to fluid and bumps version |
| sdk/fluid-py/fluid/rest.py | Updates exceptions import to the new package path |
| sdk/fluid-py/fluid/models/internal_rest_vm_info.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_start_sandbox_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_start_sandbox_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_snapshot_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_snapshot_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_session_start_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_session_start_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_session_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_session_end_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_session_end_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_sandbox_info.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_run_command_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_run_command_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_revoke_certificate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_revoke_certificate_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_request_access_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_request_access_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_publish_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_publish_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_list_vms_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_list_sessions_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_list_sandboxes_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_list_sandbox_commands_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_list_certificates_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_inject_ssh_key_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_health_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_get_sandbox_response.py | Updates model import paths to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_generate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_error_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_discover_ip_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_diff_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_diff_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_destroy_sandbox_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_create_sandbox_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_rest_create_sandbox_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_certificate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_ca_public_key_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_rest_access_error_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_update_task_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_update_task_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_reorder_tasks_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_list_playbooks_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_job_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_job_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_job.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_get_playbook_response.py | Updates model import paths to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_export_playbook_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_create_playbook_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_create_playbook_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/internal_ansible_add_task_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/internal_ansible_add_task_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_snapshot.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_service_change.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_sandbox.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_playbook_task.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_playbook.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_package_info.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_diff.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_command_summary.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_command_exec_record.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_command.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_store_change_diff.py | Updates model import paths to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_vm_info.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_start_sandbox_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_start_sandbox_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_snapshot_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_snapshot_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_session_start_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_session_start_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_session_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_session_end_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_session_end_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_sandbox_info.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_run_command_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_run_command_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_revoke_certificate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_revoke_certificate_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_request_access_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_request_access_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_publish_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_publish_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_list_vms_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_list_sessions_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_list_sandboxes_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_list_sandbox_commands_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_list_certificates_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_inject_ssh_key_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_health_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_get_sandbox_response.py | Updates model import paths to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_generate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_error_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_discover_ip_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_diff_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_diff_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_destroy_sandbox_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_create_sandbox_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_create_sandbox_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_certificate_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_ca_public_key_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_rest_access_error_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_error_error_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_update_task_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_update_task_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_reorder_tasks_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_list_playbooks_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_job_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_job_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_job.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_get_playbook_response.py | Updates model import paths to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_export_playbook_response.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_create_playbook_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_create_playbook_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_add_task_response.py | Updates model import path to fluid.* |
| sdk/fluid-py/fluid/models/fluid_remote_internal_ansible_add_task_request.py | Removes unused generated import (re) |
| sdk/fluid-py/fluid/models/init.py | Adds model package exports for the renamed SDK |
| sdk/fluid-py/fluid/configuration.py | Renames config docstring and bumps SDK version string |
| sdk/fluid-py/fluid/api_client.py | Renames imports, updates user agent, and adds compatibility getattr guards |
| sdk/fluid-py/fluid/api/vms_api.py | Updates API imports to fluid.* |
| sdk/fluid-py/fluid/api/sandbox_api.py | Updates API imports to fluid.* and adds pydantic/Annotated imports |
| sdk/fluid-py/fluid/api/health_api.py | Updates API imports to fluid.* |
| sdk/fluid-py/fluid/api/ansible_playbooks_api.py | Updates API imports to fluid.* and adds pydantic/Annotated imports |
| sdk/fluid-py/fluid/api/ansible_api.py | Updates API imports to fluid.* and adds pydantic/Annotated imports |
| sdk/fluid-py/fluid/api/access_api.py | Updates API imports to fluid.* and adds pydantic/Annotated imports |
| sdk/fluid-py/fluid/api/init.py | Adds API package exports |
| sdk/fluid-py/docs/VMsApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/SandboxApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestVmInfo.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestStartSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestStartSandboxRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSnapshotResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSnapshotRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSessionStartResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSessionStartRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSessionResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSessionEndResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSessionEndRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestSandboxInfo.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRunCommandResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRunCommandRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRevokeCertificateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRevokeCertificateRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRequestAccessResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestRequestAccessRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestPublishResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestPublishRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestListVMsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestListSessionsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestListSandboxesResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestListSandboxCommandsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestListCertificatesResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestInjectSSHKeyRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestHealthResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestGetSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestGenerateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestErrorResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestDiscoverIPResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestDiffResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestDiffRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestDestroySandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestCreateSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestCreateSandboxRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestCertificateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestCaPublicKeyResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalRestAccessErrorResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleUpdateTaskResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleUpdateTaskRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleReorderTasksRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleListPlaybooksResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleJobResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleJobRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleJob.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleGetPlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleExportPlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleCreatePlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleCreatePlaybookRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleAddTaskResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/InternalAnsibleAddTaskRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/HealthApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreSnapshot.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreServiceChange.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreSandbox.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStorePlaybookTask.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStorePlaybook.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStorePackageInfo.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreDiff.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreCommandSummary.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreCommandExecRecord.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreCommand.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalStoreChangeDiff.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestVmInfo.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestStartSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestStartSandboxRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSnapshotResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSnapshotRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSessionStartResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSessionStartRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSessionResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSessionEndResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSessionEndRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestSandboxInfo.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRunCommandResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRunCommandRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRevokeCertificateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRevokeCertificateRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRequestAccessResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestRequestAccessRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestPublishResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestPublishRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestListVMsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestListSessionsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestListSandboxesResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestListSandboxCommandsResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestListCertificatesResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestInjectSSHKeyRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestHealthResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestGetSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestGenerateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestErrorResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestDiscoverIPResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestDiffResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestDiffRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestDestroySandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestCreateSandboxResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestCreateSandboxRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestCertificateResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestCaPublicKeyResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalRestAccessErrorResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalErrorErrorResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleUpdateTaskResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleUpdateTaskRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleReorderTasksRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleListPlaybooksResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleJobResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleJobRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleJob.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleGetPlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleExportPlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleCreatePlaybookResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleCreatePlaybookRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleAddTaskResponse.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/FluidRemoteInternalAnsibleAddTaskRequest.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/AnsiblePlaybooksApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/AnsibleApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/docs/AccessApi.md | Renames docs import paths to fluid.* |
| sdk/fluid-py/README.md | Renames package references and bumps version |
| sdk/fluid-py/.travis.yml | Updates pytest coverage target from virsh_sandbox to fluid |
| sdk/fluid-py/.openapi-generator/FILES | Adds generator file manifest for the new SDK layout |
| sdk/fluid-py/.gitlab-ci.yml | Updates pytest coverage target from virsh_sandbox to fluid |
| sdk/fluid-py/.github/workflows/python.yml | Renames workflow & pytest coverage target to fluid |
| sdk/.openapi-generator/config.yaml | Renames OpenAPI generator properties to fluid + env prefix |
| scripts/reset-ubuntu.Dockerfile | Adds docker image for running reset scripts remotely |
| scripts/reset-challenge-vm.sh | Removes host reset script |
| scripts/reset-challenge-ubuntu.sh | Removes host reset-all script |
| scripts/hosts.txt | Cleans up host list file footer text |
| scripts/.gitignore | Stops ignoring hosts.txt (now committed) |
| reverse-proxy/nginx.conf | Adds nginx reverse proxy configuration for PostHog |
| reverse-proxy/Dockerfile | Adds Dockerfile for reverse proxy container |
| plans/ralph.sh | Removes deprecated/irrelevant plan script |
| plans/ralph-once.sh | Removes deprecated/irrelevant plan script |
| plans/prd.json | Removes deprecated/irrelevant PRD |
| lefthook.yaml | Adds SDK/web formatters and updates hook structure |
| landing-page/src/pages/index.astro | Adds demo embed + refactors feature cards into component |
| landing-page/src/components/FeatureCard.astro | Introduces reusable feature card component |
| fluid/internal/tui/model.go | Adds read-only flag + toggle and passes it to status bar |
| fluid/internal/tui/logo.go | Extends status bar to show mode |
| fluid/internal/tui/agent.go | Adds read-only mode tool restriction and system prompt note |
| fluid/internal/llm/tools.go | Adds GetReadOnlyTools() tool filtering |
| fluid/cmd/fluid/main.go | Updates default VM memory configuration values |
| fluid/.gitignore | Ignores .claude working directory |
| fluid-remote/cmd/api/main.go | Updates API metadata + startup log message |
| docker-compose.yml | Renames services to fluid-* and adjusts compose wiring |
| .goreleaser.yaml | Adds linux/arm64 build targets |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <h2 class="mt-14 mb-4 text-xl text-neutral-200">What does that mean?</h2> | ||
| <p class="mt-4 text-neutral-400"> | ||
| Fluid is a terminal agent that do work on production infrastructure like VMs/K8s cluster/etc. by making sandbox clones of the infrastructure for AI agents to work on, allowing the agents to run commands, test connections, edit files, and then generate Infra-as-code like an Ansible Playbook to be applied on production. | ||
| Fluid is a terminal agent that helps manage and debug production infrastructure like VMs/K8s cluster by making sandbox clones of the infrastructure for AI agents to work on, allowing the agents to run commands, test connections, edit files, and then generate Infra-as-code like an Ansible Playbook to be applied osn production. |
There was a problem hiding this comment.
Correct the typos “osn” → “on” and “sanboxes” → “sandboxes” in the landing page copy.
| </h2> | ||
| <p class="mt-4 text-neutral-400"> | ||
| Safety. I didn't want CC to SSH into a prod machine from where it is running locally (real problem!). I wanted to lock down the tools it can run to be only on sandboxes while also giving it autonomy to create sandboxes and not have access to anything else. | ||
| Safety and observability. I didn't want Claude Code to SSH into a production machine and run bash commands with limited observability/control. Restricting Fluid's tools to only run on sanboxes gives it autonomy to execute commands, write and edit files safely without having to watch every second of it (ofc still good to keep a close eye). |
There was a problem hiding this comment.
Correct the typos “osn” → “on” and “sanboxes” → “sandboxes” in the landing page copy.
There was a problem hiding this comment.
@copilot open a new pull request to apply changes based on this feedback
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Code ReviewThis PR makes several significant updates including renaming from virsh-sandbox to fluid, adding ARM64 support, implementing read-only mode, and adding a PostHog reverse proxy. Overall, the changes are well-structured, but I have some important feedback: 🎯 Major Concerns1. Security: PostHog Reverse Proxy ConfigurationThe new reverse proxy at location / {
proxy_pass https://app.posthog.com;
}Issues:
Recommendation: # Only proxy specific endpoints needed
location /i/ { # Ingestion endpoint
proxy_pass https://app.posthog.com/i/;
# Add rate limiting
limit_req zone=posthog_limit burst=20 nodelay;
}
location /s/ { # Static assets
proxy_pass https://app.posthog.com/s/;
}2. Docker Compose: Incorrect Volume MountLine 62 in - ./virsh-sandbox/.ssh-ca:/etc/virsh-sandbox:roThe directory is named - ./fluid/.ssh-ca:/etc/fluid:roOr use a path that exists in the new structure. 3. Docker Compose: Database Credentials MismatchLines 86-88 use POSTGRES_USER: fluid
POSTGRES_PASSWORD: fluid
POSTGRES_DB: fluidBut line 38 still references the old credentials: DATABASE_URL=postgresql://virsh_sandbox:virsh_sandbox@postgres:5432/virsh_sandboxThese need to match or the API won't be able to connect to the database.
|
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Pull Request Review: Fix README, Add PostHog Reverse Proxy, Update Python SDKOverviewThis is a substantial PR with 4,221 additions and 5,602 deletions across 436 files. The main changes include:
✅ Positive Aspects1. Comprehensive RebrandingThe rename from
2. Excellent Documentation UpdatesThe README.md improvements are significant:
3. Read-Only Mode ImplementationThe addition of read-only mode in var readOnlyTools = map[string]bool{
"list_sandboxes": true,
"read_file": true,
"list_playbooks": true,
// ... only safe operations
}This provides a clean separation between destructive and non-destructive operations. 4. ARM64 SupportAdding ARM64 to goarch:
- amd64
- arm645. PostHog Reverse ProxySimple nginx-based reverse proxy for privacy/CORS handling is a clean solution.
|
Code Review - PR #30SummaryThis PR implements several important changes:
✅ Strengths1. Comprehensive Renaming 2. ARM64 Support 3. Read-Only Mode Implementation
4. Security - Reverse Proxy
|
Code ReviewThis is a substantial PR with 436 files changed (+4222/-5603 lines). I've reviewed the key changes and here's my feedback: ✅ Positives1. Clean Renaming from virsh-sandbox to fluid
2. ARM64 Support in GoReleaser
3. Read-Only Mode Implementation
4. PostHog Reverse Proxy
5. README Improvements
🔍 Concerns & Suggestions1. Docker Compose Inconsistency (docker-compose.yml)
2. Missing Tests
3. Security: Network Detection Could Be Bypassed 4. Performance: Buffer Size 5. README: Typo on Line 30 📋 Checklist Before Merge
🎯 Overall AssessmentThis is a well-executed refactoring with meaningful improvements (ARM64 support, read-only mode, better docs). The core changes are solid, but there are a few consistency issues and missing tests that should be addressed before merging. The read-only mode is a particularly nice safety feature that will help users explore without fear of destructive actions. Recommendation: Request changes for the docker-compose.yml issues and missing tests, then approve once addressed. |
PR Review: Rename virsh-sandbox to fluidThank you for this significant refactoring effort! This PR introduces valuable features but has some critical issues that need addressing before merge. 🔴 Critical Issues - Must Fix Before Merge1. Incomplete Renaming (High Priority)The renaming from In
In web frontend and Python SDK:
Recommendation: Complete the renaming systematically:
|
| Category | Severity | Status |
|---|---|---|
| Incomplete renaming | 🔴 High | Needs fix |
| Security (PostHog proxy) | Needs improvement | |
| Missing tests | Needs tests | |
| Documentation inconsistency | ℹ️ Low | Needs update |
| New features (read-only, ARM64) | ✅ Good | Approved |
🎯 Recommendation: Request Changes
This PR is in an inconsistent state with mixed naming conventions. Before merging:
Must Do:
- Complete the virsh-sandbox → fluid renaming across all files
- Regenerate web and Python SDK from updated OpenAPI spec
- Update database credentials in docker-compose.yml
Should Do:
4. Restrict PostHog reverse proxy endpoints
5. Add tests for new features
Overall: Great features, but the incomplete renaming creates technical debt that will confuse future developers. Please complete the renaming systematically before merge.
cc: @aspectrr - Let me know if you need help with the renaming or SDK regeneration scripts!
Code Review: PR #30 - fluid.sh Renaming and Feature AdditionsExecutive SummaryThis is a large PR (436 files, +4222/-5603) implementing several significant changes:
🔴 CRITICAL Issues (Must Fix Before Merge)1. Hardcoded Database CredentialsFile: docker-compose.yml Lines 38 and 87 contain hardcoded credentials that are inconsistent and insecure. Problems:
Fix: Use environment variables instead with proper .env file 2. PostHog Reverse Proxy SecurityFile: reverse-proxy/nginx.conf Critical vulnerabilities:
Recommended: Bind to localhost only, add rate limiting, and implement IP whitelisting 3. Breaking Change Not MarkedThe SDK renaming (virsh-sandbox to fluid) is a BREAKING CHANGE but PR is marked as non-breaking. Impact:
Required actions:
🟡 HIGH Priority (Should Fix)4. Incomplete Renamingvirsh-sandbox references still exist in:
5. Missing TestsPR claims to have added tests but no new test files visible for:
6. ARM64 Build Verification.goreleaser.yaml adds ARM64 support but:
🟢 MEDIUM Priority (Nice to Have)7. Minor Documentation Issues
8. Network Detection EnhancementsGood implementation in fluid/internal/tui/agent.go, but consider adding package managers (apt, yum, dnf) and VCS tools (git, svn) to network detection. ✅ Positive Aspects
RecommendationsBefore merging:
After merging:
Final VerdictDo not merge yet - Critical security issues must be addressed first. The functionality looks solid, but the security concerns around hardcoded credentials and the open proxy are blocking issues. Once the critical issues are resolved, this will be a great improvement to the project! Reviewed with Claude Code |
Code Review - PR #30Thank you for this comprehensive PR that transitions the project from virsh-sandbox to fluid! I've reviewed the changes across the codebase. Here's my feedback: ✅ Strengths
|
Description
Type of Change
Checklist
Release Notes
Labels