mirror of
https://github.com/cline/cline.git
synced 2026-09-19 02:05:44 +08:00
* feat(logging): replace HostProvider with node-machine-id for machine identification Replace custom HostProvider.env.getMachineId() implementation with the node-machine-id npm package for retrieving machine identifiers. This simplifies the codebase by using a well-maintained library instead of custom host provider logic. Changes: - Add node-machine-id dependency (^1.1.12) - Remove dotenv dev dependency (no longer needed) - Update distinctId service to use node-machine-id directly - Refactor tests to stub node-machine-id instead of HostProvider - Remove HostProvider mock utilities from tests This change improves maintainability and reduces custom code while maintaining the same functionality for generating stable machine IDs. * Removing dead code
105 lines
2.5 KiB
Go
105 lines
2.5 KiB
Go
package hostbridge
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/atotto/clipboard"
|
|
"github.com/cline/cli/pkg/cli"
|
|
"github.com/cline/grpc-go/cline"
|
|
"github.com/cline/grpc-go/host"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
// Global shutdown channel - simple approach
|
|
var globalShutdownCh chan struct{}
|
|
|
|
func init() {
|
|
globalShutdownCh = make(chan struct{})
|
|
}
|
|
|
|
// EnvService implements the host.EnvServiceServer interface
|
|
type EnvService struct {
|
|
host.UnimplementedEnvServiceServer
|
|
verbose bool
|
|
}
|
|
|
|
// NewEnvService creates a new EnvService
|
|
func NewEnvService(verbose bool) *EnvService {
|
|
return &EnvService{
|
|
verbose: verbose,
|
|
}
|
|
}
|
|
|
|
// ClipboardWriteText writes text to the system clipboard
|
|
func (s *EnvService) ClipboardWriteText(ctx context.Context, req *cline.StringRequest) (*cline.Empty, error) {
|
|
if s.verbose {
|
|
log.Printf("ClipboardWriteText called with text length: %d", len(req.GetValue()))
|
|
}
|
|
|
|
err := clipboard.WriteAll(req.GetValue())
|
|
if err != nil {
|
|
if s.verbose {
|
|
log.Printf("Failed to write to clipboard: %v", err)
|
|
}
|
|
// Don't fail if clipboard is not available (e.g., headless environment)
|
|
}
|
|
|
|
return &cline.Empty{}, nil
|
|
}
|
|
|
|
// ClipboardReadText reads text from the system clipboard
|
|
func (s *EnvService) ClipboardReadText(ctx context.Context, req *cline.EmptyRequest) (*cline.String, error) {
|
|
if s.verbose {
|
|
log.Printf("ClipboardReadText called")
|
|
}
|
|
|
|
text, err := clipboard.ReadAll()
|
|
if err != nil {
|
|
if s.verbose {
|
|
log.Printf("Failed to read from clipboard: %v", err)
|
|
}
|
|
// Return empty string if clipboard is not available
|
|
text = ""
|
|
}
|
|
|
|
return &cline.String{
|
|
Value: text,
|
|
}, nil
|
|
}
|
|
|
|
// GetHostVersion returns the host platform name and version
|
|
func (s *EnvService) GetHostVersion(ctx context.Context, req *cline.EmptyRequest) (*host.GetHostVersionResponse, error) {
|
|
if s.verbose {
|
|
log.Printf("GetHostVersion called")
|
|
}
|
|
|
|
return &host.GetHostVersionResponse{
|
|
Platform: proto.String("Cline CLI"),
|
|
Version: proto.String(""),
|
|
ClineType: proto.String("CLI"),
|
|
ClineVersion: proto.String(cli.Version),
|
|
}, nil
|
|
}
|
|
|
|
// Shutdown initiates a graceful shutdown of the host bridge service
|
|
func (s *EnvService) Shutdown(ctx context.Context, req *cline.EmptyRequest) (*cline.Empty, error) {
|
|
if s.verbose {
|
|
log.Printf("Shutdown requested via RPC")
|
|
}
|
|
|
|
// Trigger global shutdown signal
|
|
select {
|
|
case globalShutdownCh <- struct{}{}:
|
|
if s.verbose {
|
|
log.Printf("Shutdown signal sent successfully")
|
|
}
|
|
default:
|
|
if s.verbose {
|
|
log.Printf("Shutdown signal already pending")
|
|
}
|
|
}
|
|
|
|
return &cline.Empty{}, nil
|
|
}
|