- Updated Makefile to remove "unstable" suffix from artifact names for both Linux and macOS builds, enhancing consistency.
- Simplified version retrieval in GitHub workflows, ensuring a more straightforward approach to version management.
- Consolidated Docker build steps to support multi-architecture builds, improving efficiency and clarity in the release process.
- Removed deprecated production-slim Dockerfile, streamlining the Docker setup.
Made-with: Cursor
- Merged the Linux build job into a single 'build' job for improved clarity and efficiency.
- Removed redundant version retrieval steps from both Linux and macOS workflows, streamlining the release process.
- Updated dependencies and artifact handling to ensure compatibility with the new workflow structure.
- Enhanced the macOS workflow to trigger on version tags, improving version management during releases.
Made-with: Cursor
- Updated the macOS release workflow to include a version input, allowing for dynamic version specification.
- Refactored build steps to streamline the setup of Node.js, pnpm, and Go tools, improving build efficiency.
- Added multiple repository checkouts for dependencies, ensuring all necessary components are available for the build.
- Implemented certificate management for code signing, enhancing the security of the release process.
- Improved artifact creation and signing steps, ensuring a more robust and reliable release pipeline.
Made-with: Cursor
- Changed token generation from "sandbox:mcp" to "grpc:mcp" for both access and refresh tokens, aligning with updated service requirements.
- Enhanced ClaudeRunner to copy skills from the specified directory to the ".claude/skills" path, improving skill management.
- Updated MCP configuration file path to ".claude/mcp.json" for better organization and consistency in file handling.
- Added error logging for skill copying and exit code handling in stream execution, enhancing debugging capabilities.
Made-with: Cursor
- Modified Docker run commands in CI workflows to include the `-direct` flag for enhanced server operation.
- Removed outdated loading status message during sandbox preparation and added new messages for improved user feedback.
- Introduced a loading message for waiting on AI responses, enhancing the user experience during sandbox execution.
- Refactored identity handling in stream processing to streamline message management.
Made-with: Cursor
- Updated Docker run commands in CI workflows to include the `-direct` flag for improved server operation.
- Implemented image existence checks and automatic pulling for sandbox environments, enhancing reliability during initialization.
- Added loading status updates for sandbox operations, providing better feedback during the setup process.
- Refactored lifecycle management to ensure accurate tracking of sandbox states and improved error handling.
Made-with: Cursor
- Updated BuildIdentifier to include assistant ID in session identifiers for better uniqueness.
- Implemented automatic starting of stopped boxes in resolveBox, improving recovery processes.
- Introduced status management for boxes, allowing for accurate tracking of their state (running, exited, stopped).
- Added idle timeout defaults based on lifecycle policy in BuildCreateOptions, enhancing configuration flexibility.
- Refactored tests to validate new box status behavior and lifecycle management improvements.
Made-with: Cursor
- Modified BuildGRPCEnv to accept the Tai node's gRPC port directly, enhancing flexibility for different modes.
- Updated test cases to reflect changes in gRPC address construction, ensuring accurate environment variable settings for local, direct, and tunnel modes.
- Added a new test for handling unknown modes, improving test coverage and robustness.
- Adjusted Docker configuration to ensure proper host resolution for gRPC communication.
Made-with: Cursor
- Added functionality to start the monitor service during the loading process, ensuring that watchers are registered.
- Implemented the stopping of the monitor service before unloading other services to allow for event handling.
- Updated middleware to utilize access logging for improved request tracking.
Made-with: Cursor
- Introduced a relay daemon port (2099/tcp) to facilitate communication between the host Tai server and containers.
- Updated port bindings to ensure the relay port is always mapped to the host IP for improved connectivity.
Made-with: Cursor
- Updated VNC and proxy handling in the tunnel to utilize a structured routing approach, enhancing clarity and maintainability.
- Replaced direct port checks with a new `forwardRoute` struct to encapsulate routing information, including channel type, container ID, and port.
- Modified request handling to streamline the forwarding process and improve error handling for unknown routes.
- Enhanced tests to validate the new routing logic and ensure consistent behavior across VNC and proxy requests.
Made-with: Cursor
- Introduced a human-readable display name for the sandbox, constructed from the agent and workspace names.
- Updated the BuildIdentifier function to include workspace ID in identifiers for long-running and persistent lifecycles.
- Modified sandbox creation options to incorporate the display name, improving clarity in sandbox management.
- Refactored related tests to ensure compatibility with the new identifier structure and display name integration.
Made-with: Cursor
- Replaced direct tunnel handling with a dedicated Tai integration for managing proxy and VNC requests.
- Updated routing to streamline the attachment of Tai handlers, enhancing modularity and maintainability.
Made-with: Cursor
- Added support for issuing and passing a sandbox token during stream execution in the Assistant.
- Updated StreamRequest to include a Token field for managing user authentication.
- Enhanced ClaudeRunner to set environment variables for the sandbox token and refresh token.
- Refactored SandboxToken structure to clarify its purpose and manage token credentials effectively.
- Modified sandbox management routes to enforce OAuth guard for improved security.
Made-with: Cursor
- Updated test cases to handle potential stream closure more gracefully by checking for send errors before proceeding with receive operations.
- Enhanced clarity in test logic to ensure that expected errors are correctly asserted when metadata is missing or channel IDs are non-existent.
Made-with: Cursor
- Added constants for channel ID byte size and short length to improve clarity and maintainability.
- Implemented ShortChannelID function to truncate channel IDs for log messages, enhancing readability.
- Updated gRPC tunnel logging to utilize the new ShortChannelID function, ensuring consistent and concise channel ID representation in logs.
Made-with: Cursor
- Implemented a new endpoint to retrieve the absolute path of a workspace's root directory.
- Enhanced the workspace interface with a GetRoot method to facilitate this functionality.
- Updated the workspace manager to utilize the new method for improved path resolution.
Made-with: Cursor
- Added keepalive parameters to the gRPC server configuration to manage connection health more effectively.
- Implemented sorting logic in the computer and sandbox response handling to ensure consistent ordering by display name and last active timestamp.
- Refactored node display name retrieval for better clarity and reuse across different functions.
Made-with: Cursor
- Added new environment variables for Docker and K8s API ports to avoid conflicts and enhance flexibility.
- Updated the unit test workflow to reference the new K3D API port variable, ensuring consistency across configurations.
- Adjusted the K8s API port in the workflow to align with the updated environment settings for better integration.
Made-with: Cursor
- Updated the unit test workflow to include code quality checks before building Yao and ci-token.
- Added extraction of the tai binary from the Docker image to streamline the testing process.
- Refactored the sandbox-v2 environment file to improve clarity and organization of connection modes and addresses for various Tai instances.
- Introduced new environment variables for local, Docker, K8s, and hostexec configurations to enhance flexibility in testing setups.
Made-with: Cursor
- Removed static MySQL service configuration and replaced it with a dynamic Docker run command for better flexibility.
- Added a readiness check for MySQL to ensure it is fully operational before proceeding with tests.
- Updated the MySQL ping command to directly reference the container name for improved clarity.
Made-with: Cursor
- Introduced MySQL and PostgreSQL environment variables in the unit test workflow for better database integration during testing.
- Configured MySQL and PostgreSQL services in the workflow to ensure proper database connectivity and health checks.
- Updated the sandbox-v2 environment file to include database connection details for local testing.
Made-with: Cursor
- Modified the workflow to use grep for loading the sandbox-v2 environment variables, ensuring that comments and empty lines are excluded from the environment file.
- Introduced ExpandHosts function to parse and expand comma-separated host entries, including special values like "internal" and "localhost".
- Updated gRPC server to utilize the new ExpandHosts function for improved host management.
- Added HostHasInternal function to check for "internal" in host strings, enhancing configuration flexibility.
- Implemented new gRPC endpoints for TaiTunnel registration and forwarding, improving tunnel communication capabilities.
- Refactored authentication logic to include new TaiTunnel endpoints, ensuring proper access control.
Made-with: Cursor
- Updated the AssistantInfo struct to include new fields: Connector, ConnectorOptions, Modes, DefaultMode, Sandbox, and ComputerFilter for improved assistant configuration.
- Enhanced the loading process to extract Sandbox flag and ComputerFilter from V2 sandbox configuration.
- Refactored GetInfo method to return comprehensive assistant details for better UI integration.
- Introduced new endpoint for workspace options to streamline InputArea selector functionality.
Made-with: Cursor
- Refactored the sandbox initialization process to resolve the connector before obtaining the Computer, allowing for the injection of OPENAI_PROXY_* environment variables.
- Updated the GetComputer and BuildCreateOptions functions to accept an optional connector parameter for improved environment variable management.
- Standardized the VNC configuration by replacing SANDBOX_VNC_ENABLED with VNC_ENABLED across Dockerfiles and related scripts for consistency.
- Enhanced the VNC service startup script to check the new VNC_ENABLED variable, ensuring proper service initialization.
Made-with: Cursor
- Introduced new fields in the sandboxResponse struct, including Kind, DisplayName, Mode, and Addr, to provide more detailed information about sandbox entities.
- Added hostToResponse function to convert registry.NodeSnapshot to sandboxResponse, improving the handling of host entries.
- Implemented filtering logic in handleList to differentiate between box and host entries based on ownership and capabilities.
- Enhanced sorting of the response list by LastActive timestamp for better organization of results.
Made-with: Cursor
- Updated the registration process to utilize NodeID instead of TaiID, allowing for server-generated TaiIDs.
- Implemented additional fields in the registration request, including DisplayName and improved error handling for missing parameters.
- Enhanced the connection logic for registered nodes, ensuring proper client binding and logging for better traceability.
- Introduced new methods for extracting and managing extra claims in OAuth tokens, improving the flexibility of user identification.
Made-with: Cursor
- Implemented V2 sandbox initialization in the assistant loading process, allowing for standalone sandbox.yao configuration.
- Added support for V2 sandbox execution paths in the Assistant's Stream method, differentiating between V1 and V2 sandboxes.
- Introduced comprehensive tests for V2 sandbox configurations, ensuring correct loading and execution behavior.
- Updated the context and types to accommodate V2 sandbox features, including system information and workspace management.
Made-with: Cursor
- Added sandbox initialization in the load process to ensure proper setup of the sandbox manager.
- Implemented gRPC heartbeat handling to track container liveness, enhancing the monitoring capabilities of the sandbox.
- Updated related documentation to reflect the new integration and functionality.
Made-with: Cursor
- Updated benchmark and test functions to utilize node configurations instead of pool configurations for improved clarity and consistency.
- Refactored related setup functions and test cases to align with the new node-based architecture.
- Adjusted error messages and documentation to reflect the transition from pool to node terminology.
Made-with: Cursor
- Updated benchmark functions to utilize TaiID instead of pool names for improved consistency and accuracy in tests.
- Refactored test cases across various files to ensure compatibility with the new TaiID structure.
- Enhanced setup functions to accept pointers to poolConfig for better memory management.
- Removed deprecated config struct and adjusted related documentation to reflect the changes in the sandbox architecture.
Made-with: Cursor
- Change Docker image references in the unit-test workflow from yaoapp/tai:1.2.0 to yaoapp/tai:latest for consistency and to ensure the latest features and fixes are utilized.
- Update related documentation to reflect the unified Computer interface in the sandbox, replacing Box and Host references with Computer.
Made-with: Cursor
- Define Computer interface with Exec, Stream, VNC, Proxy, ComputerInfo,
BindWorkplace, and Workplace methods in types.go
- Implement Computer interface on Host (VNC and Proxy via Tai gRPC)
- Add VNC/Proxy stubs to Box (delegates to Tai HTTP endpoints)
- Update JSAPI bindings for unified computer.vnc() and computer.proxy()
- Extend host_test.go with __host__ VNC and HTTP proxy test cases
Made-with: Cursor
Align taiTestGRPC() helper with the new Tai 1.2.0 port standard.
Also support TAI_TEST_HOST and TAI_TEST_GRPC_PORT env vars used by CI.
Made-with: Cursor
- Update CI (unit-test.yml, pr-test.yml) to use yaoapp/tai:1.2.0
with new default ports (gRPC:19100, HTTP:8099, VNC:16080, Docker:12375)
- Add explicit 0.0.0.0 bind for containerized Tai instances
- Fix sandbox/v2 grpc.go default port fallback (9100 → 19100)
- Fix tai/tunnel/proxy.go fallback ports (8080→8099, 6080→16080)
- Sync tai SDK and sandbox/v2 documentation with implementation
- Add new docs: api.md, registry.md, tunnel.md
Made-with: Cursor
Add HostExecStream type and Host.Stream method that wraps the HostExec
gRPC ExecStream RPC, providing separate stdout/stderr channels with
Wait and Cancel support. Includes 4 tests covering incremental output,
multi-line, stderr separation, and cancel behavior across k8s and
win-linux platforms. Update API.md documentation accordingly.
Made-with: Cursor
- Refactor GPT-5 test cases to improve clarity and maintainability.
- Comment out tests for temperature handling in GPT-5, indicating they are temporarily disabled.
- Remove the obsolete hostexec test file to clean up the codebase.
- Enhance the sandbox manager to support host execution capabilities and improve lifecycle management.
Made-with: Cursor
- Remove x-grpc-upstream metadata from gateway forwarding; use SetUpstream
- Remove YAO_GRPC_TAI / YAO_GRPC_UPSTREAM env vars from sandbox containers
- Delete benchmark-sandbox-v2 CI job (run benchmarks locally)
- Simplify sandbox-v2 CI to tai SDK + workspace tests only
- Add HostExec support to sandbox v2 box interface
- Add K8s semaphore and cleanup mutex for test stability
- Update design docs to reflect new architecture
Made-with: Cursor
Server lifecycle:
- Introduce service.Service to manage HTTP + gRPC startup/shutdown
- Fix gRPC mutex deadlock in StartServer when port is occupied
- Add GracefulStop with 5s timeout before forced Stop in grpc.go
- Pre-check HTTP and gRPC port availability in cmd/start.go
- Print gRPC server address in startup access-points block
gRPC client refactor:
- Move token manager and client from tai/grpc/ to grpc/client/
- Add backward-compatible aliases in tai/yao.go and tai/token.go
- Update cmd/run.go to import grpc/client directly (no tai dependency)
Sandbox v2 docker migration:
- Delete sandbox/v2/docker/ (moved to tai repo)
- Update sandbox/docker/build.sh hint to point to tai repo
- Clean up .gitignore entries for removed docker directory
- Temporarily disable SandboxV2Test and BenchmarkSandboxV2 in CI
(docker images need rebuild after tai repo migration)
Tai integration:
- Add direct-mode registration API handlers in tai/api/
- Add heartbeat handler and token management wrappers
- Update tai/registry and tai/tunnel for latest protocol
- Replace yao-grpc references with tai call in docs
Made-with: Cursor
The bubbletea-based TUI for agent request visualization was not
practical and added significant binary size. This removes the TUI
entirely: the --tui flag, the agent context TUI model/messages, and
all SendTUI/GetTUIProgram call sites. Development-mode logging now
always prints ANSI-colored output to stdout.
Drops direct dependencies on charmbracelet/bubbletea and lipgloss.
Made-with: Cursor
- Introduce a new "tunnel" scheme for the Tai client, allowing connections through Yao's reverse proxy.
- Enhance the Tai registry to manage tunnel-connected nodes and their ports.
- Add WebSocket and reverse proxy routes for tunnel connections in the OpenAPI server.
- Implement tunnel-specific proxy and VNC handling to facilitate communication with containerized environments.
- Update gRPC environment variable handling to support tunnel connections.
These changes improve the Tai service's flexibility and connectivity options, enabling better integration with remote and containerized environments.
- Add steps to generate kubeconfig specifically for benchmarks in both `pr-test.yml` and `unit-test.yml`, ensuring accurate configuration for Kubernetes interactions.
- Modify the Docker run command to mount the newly generated kubeconfig for benchmarks, enhancing the integration of Tai with K8s.
- Remove redundant kubeconfig generation steps to streamline the workflow.
These changes improve the CI workflows for the Tai service by ensuring proper kubeconfig setup for benchmark testing.
- Add Docker socket volume mount to the Docker run commands in both `pr-test.yml` and `unit-test.yml`, allowing the Tai K8s container to interact with the host Docker daemon.
- Update kubeconfig generation steps to dynamically retrieve the K3D IP address, ensuring accurate configuration for Kubernetes interactions.
These changes improve the integration of the Tai service with Kubernetes by enabling better communication with the Docker environment during CI workflows.
- Implement steps to generate kubeconfig for both the Tai K8s container and the test runner, ensuring proper configuration for Kubernetes interactions.
- Update the Docker run command to mount the generated kubeconfig, enhancing the integration of Tai with K8s.
- Remove the previous kubeconfig generation step for the Tai K8s proxy, streamlining the workflow.
These changes improve the CI workflows for the Tai service by ensuring accurate kubeconfig generation and integration with Kubernetes environments.
- Update the `testPools` function to include a new "containerized" pool configuration, allowing for testing with Tai running in a containerized environment.
- Revise comments to clarify the conditions under which each pool configuration is available, improving documentation for future reference.
These changes improve the flexibility of the testing framework by accommodating additional deployment scenarios for the Tai service.
- Add installation and setup steps for k3d to create a local Kubernetes cluster for testing.
- Implement health checks for both Docker and K8s instances of Tai, improving readiness verification.
- Generate kubeconfig for K8s benchmarks, ensuring proper configuration for testing environments.
- Update environment variables to accommodate new K8s service configurations, enhancing overall CI reliability.
These changes improve the testing framework for the Tai service by integrating Kubernetes support and refining service readiness checks.