Files
Memoh/internal/workspace/bridgepb/bridge.pb.go
T
Menci d5b410d7e3 refactor(workspace): new workspace v3 container architecture (#244)
* feat(mcp): workspace container with bridge architecture

Migrate MCP containers to use UDS-based bridge communication instead of
TCP gRPC. Containers now mount runtime binaries and Unix domain sockets
from the host, eliminating the need for a dedicated MCP Docker image.

- Remove Dockerfile.mcp and entrypoint.sh in favor of standard base images
- Add toolkit Dockerfile for building MCP binary separately
- Containers use bind mounts for /opt/memoh (runtime) and /run/memoh (UDS)
- Update all config files with new runtime_path and socket_dir settings
- Support custom base images per bot (debian, alpine, ubuntu, etc.)
- Legacy container detection and TCP fallback for pre-bridge containers
- Frontend: add base image selector in container creation UI

* feat(container): SSE progress bar for container creation

Add real-time progress feedback during container image pull and creation
using Server-Sent Events, without breaking the existing synchronous JSON
API (content negotiation via Accept header).

Backend:
- Add PullProgress/LayerStatus types and OnProgress callback to
  PullImageOptions (containerd service layer)
- DefaultService.PullImage polls ContentStore.ListStatuses every 500ms
  when OnProgress is set; AppleService ignores it
- CreateContainer handler checks Accept: text/event-stream and switches
  to SSE branch: pulling → pull_progress → creating → complete/error

Frontend:
- handleCreateContainer/handleRecreateContainer use fetch + SSE instead
  of the SDK's synchronous postBotsByBotIdContainer
- Progress bar shows layer-level pull progress (offset/total) during
  pulling phase and indeterminate animation during creating phase
- i18n keys added for pullingImage and creatingContainer (en/zh)

* fix(container): clear stale legacy route and type create SSE

* fix(ci): resolve lint errors and arm64 musl node.js download

- Fix unused-receiver lint: rename `s` to `_` on stub methods in
  manager_legacy_test.go
- Fix sloglint: use slog.DiscardHandler instead of
  slog.NewTextHandler(io.Discard, nil)
- Handle missing arm64 musl Node.js builds: unofficial-builds.nodejs.org
  does not provide arm64 musl binaries, fall back to glibc build

* fix(lint): address errcheck, staticcheck, and gosec findings

- Discard os.Setenv/os.Remove return values explicitly with _
- Use omitted receiver name instead of _ (staticcheck ST1006)
- Tighten directory permissions from 0o755 to 0o750 (gosec G301)

* fix(lint): sanitize socket path to satisfy gosec G703

filepath.Clean the env-sourced socket path before os.Remove
to avoid path-traversal taint warning.

* fix(lint): use nolint directive for gosec G703 on socket path

filepath.Clean does not satisfy gosec's taint analysis. The socket
path comes from MCP_SOCKET_PATH env (operator-configured) or a
compiled-in default, not from end-user input.

* refactor: rename MCP container/bridge to workspace/bridge

Split internal/mcp/ to separate container lifecycle management from
Model Context Protocol connections, eliminating naming confusion:

- internal/mcp/ (container mgmt) → internal/workspace/
- internal/mcp/mcpclient/ → internal/workspace/bridge/
- internal/mcp/mcpcontainer/ → internal/workspace/bridgepb/
- cmd/mcp/ → cmd/bridge/
- config: MCPConfig → WorkspaceConfig, [mcp] → [workspace]
- container prefix: mcp-{id} → workspace-{id}
- labels: mcp.bot_id → memoh.bot_id, add memoh.workspace=v1
- socket: mcp.sock → bridge.sock, env BRIDGE_SOCKET_PATH
- runtime: /opt/memoh/runtime/mcp → /opt/memoh/runtime/bridge
- devenv: mcp-build.sh → bridge-build.sh

Legacy containers (mcp- prefix) detected by container name prefix
and handled via existing fallback path.

* fix(container): use memoh.workspace=v3 label value

* refactor(container): drop LegacyBotLabelKey, infer bot ID from container name

Legacy containers use mcp-{botID} naming, so bot ID can be derived
via TrimPrefix instead of looking up the mcp.bot_id label.

* fix(workspace): resolve containers via manager and drop gateway container ID

* docs: fix stale mcp references in AGENTS.md and DEPLOYMENT.md

* refactor(workspace): move container lifecycle ownership into manager

* dev: isolate local devenv from prod config

* toolkit: support musl node runtime

* containerd: fix fallback resolv.conf permissions

* web: preserve container create progress on completion

* web: add bot creation wait hint

* fix(workspace): preserve image selection across recreate

* feat(web): shorten default docker hub image refs

* fix(container): address code review findings

- Remove synchronous CreateContainer path (SSE-only now)
- Move flusher check before WriteHeader to avoid committed 200 on error
- Fix legacy container IP not cached via ensureContainerAndTask path
- Add atomic guard to prevent stale pull_progress after PullImage returns
- Defensive copy for tzEnv slice to avoid mutating shared backing array
- Restore network failure severity in restartContainer (return + Error)
- Extract duplicate progress bar into ContainerCreateProgress component
- Fix codesync comments to use repo-relative paths
- Add SaaS image validation note and kernel version comment on reaper

* refactor(devenv): extract toolkit install into shared script

Unify the Node.js + uv download logic into docker/toolkit/install.sh,
used by the production Dockerfile and runnable locally for dev.

Dev environment no longer bakes toolkit into the Docker image — it is
volume-mounted from .toolkit/ instead, so wrapper script changes take
effect immediately without rebuilding. The entrypoint checks for the
toolkit directory and prints a clear error if missing.

* fix(ci): address go ci failures

* chore(docker): remove unused containerd image

* refactor(config): rename workspace image key

* fix(workspace): fix legacy container data loss on migration and stop swallowing errors

Three root causes were identified and fixed:

1. Delete() used hardcoded "workspace-" prefix to look up legacy "mcp-"
   containers, causing GetContainer to return NotFound. CleanupBotContainer
   then silently skipped the error and deleted the DB record without ever
   calling PreserveData. Fix: resolve the actual container ID via
   ContainerID() (DB → label → scan) before operating.

2. Multiple restore error paths were silently swallowed (logged as Warn
   but not returned), so the user saw HTTP 200/204 with no data and no
   error. Fix: all errors in the preserve/restore chain now block the
   workflow and propagate to the caller.

3. tarGzDir used cached DirEntry.Info() for tar header size, which on
   overlayfs can differ from the actual file size, causing "archive/tar:
   write too long". Fix: open the file first, Fstat the fd for a
   race-free size, and use LimitReader as a safeguard.

Also adds a "restoring" SSE phase so the frontend shows a progress
indicator ("Restoring data, this may take a while...") during data
migration on container recreation.

* refactor(workspace): single-point container ID resolution

Replace the `containerID func(string) string` field with a single
`resolveContainerID(ctx, botID)` method that resolves the actual
container ID via DB → label → scan → fallback. All ~16 lookup
callsites across manager.go, dataio.go, versioning.go, and
manager_lifecycle.go now go through this single resolver, which
correctly handles both legacy "mcp-" and new "workspace-" containers.

Only `ensureBotWithImage` inlines `ContainerPrefix + botID` for
creating brand-new containers — every other path resolves dynamically.

* fix(web): show progress during data backup phase of container recreate

The recreate flow (delete with preserve_data + create with restore_data)
blocked on the DELETE call while backing up /data with no progress
indication. Add a 'preserving' phase to the progress component so
users see "正在备份数据..." instead of an unexplained hang.

* chore: remove [MYDEBUG] debug logging

Clean up all 112 temporary debug log statements added during the
legacy container migration investigation. Kept only meaningful
warn-level logs for non-fatal errors (network teardown, rename
failures).
2026-03-18 15:19:09 +08:00

1371 lines
42 KiB
Go

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
// protoc v7.34.0
// source: internal/workspace/bridgepb/bridge.proto
package bridgepb
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type ExecOutput_Stream int32
const (
ExecOutput_STDOUT ExecOutput_Stream = 0
ExecOutput_STDERR ExecOutput_Stream = 1
ExecOutput_EXIT ExecOutput_Stream = 2
)
// Enum value maps for ExecOutput_Stream.
var (
ExecOutput_Stream_name = map[int32]string{
0: "STDOUT",
1: "STDERR",
2: "EXIT",
}
ExecOutput_Stream_value = map[string]int32{
"STDOUT": 0,
"STDERR": 1,
"EXIT": 2,
}
)
func (x ExecOutput_Stream) Enum() *ExecOutput_Stream {
p := new(ExecOutput_Stream)
*p = x
return p
}
func (x ExecOutput_Stream) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ExecOutput_Stream) Descriptor() protoreflect.EnumDescriptor {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_enumTypes[0].Descriptor()
}
func (ExecOutput_Stream) Type() protoreflect.EnumType {
return &file_internal_mcp_mcpcontainer_mcpcontainer_proto_enumTypes[0]
}
func (x ExecOutput_Stream) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ExecOutput_Stream.Descriptor instead.
func (ExecOutput_Stream) EnumDescriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{9, 0}
}
type ReadFileRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
LineOffset int32 `protobuf:"varint,2,opt,name=line_offset,json=lineOffset,proto3" json:"line_offset,omitempty"`
NLines int32 `protobuf:"varint,3,opt,name=n_lines,json=nLines,proto3" json:"n_lines,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ReadFileRequest) Reset() {
*x = ReadFileRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ReadFileRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReadFileRequest) ProtoMessage() {}
func (x *ReadFileRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ReadFileRequest.ProtoReflect.Descriptor instead.
func (*ReadFileRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{0}
}
func (x *ReadFileRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *ReadFileRequest) GetLineOffset() int32 {
if x != nil {
return x.LineOffset
}
return 0
}
func (x *ReadFileRequest) GetNLines() int32 {
if x != nil {
return x.NLines
}
return 0
}
type ReadFileResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
TotalLines int32 `protobuf:"varint,2,opt,name=total_lines,json=totalLines,proto3" json:"total_lines,omitempty"`
Binary bool `protobuf:"varint,3,opt,name=binary,proto3" json:"binary,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ReadFileResponse) Reset() {
*x = ReadFileResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ReadFileResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReadFileResponse) ProtoMessage() {}
func (x *ReadFileResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ReadFileResponse.ProtoReflect.Descriptor instead.
func (*ReadFileResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{1}
}
func (x *ReadFileResponse) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
func (x *ReadFileResponse) GetTotalLines() int32 {
if x != nil {
return x.TotalLines
}
return 0
}
func (x *ReadFileResponse) GetBinary() bool {
if x != nil {
return x.Binary
}
return false
}
type WriteFileRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Content []byte `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WriteFileRequest) Reset() {
*x = WriteFileRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WriteFileRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WriteFileRequest) ProtoMessage() {}
func (x *WriteFileRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WriteFileRequest.ProtoReflect.Descriptor instead.
func (*WriteFileRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{2}
}
func (x *WriteFileRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *WriteFileRequest) GetContent() []byte {
if x != nil {
return x.Content
}
return nil
}
type WriteFileResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WriteFileResponse) Reset() {
*x = WriteFileResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WriteFileResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WriteFileResponse) ProtoMessage() {}
func (x *WriteFileResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WriteFileResponse.ProtoReflect.Descriptor instead.
func (*WriteFileResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{3}
}
type ListDirRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListDirRequest) Reset() {
*x = ListDirRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ListDirRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListDirRequest) ProtoMessage() {}
func (x *ListDirRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListDirRequest.ProtoReflect.Descriptor instead.
func (*ListDirRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{4}
}
func (x *ListDirRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *ListDirRequest) GetRecursive() bool {
if x != nil {
return x.Recursive
}
return false
}
type FileEntry struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
IsDir bool `protobuf:"varint,2,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
Mode string `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"`
ModTime string `protobuf:"bytes,5,opt,name=mod_time,json=modTime,proto3" json:"mod_time,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *FileEntry) Reset() {
*x = FileEntry{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *FileEntry) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FileEntry) ProtoMessage() {}
func (x *FileEntry) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FileEntry.ProtoReflect.Descriptor instead.
func (*FileEntry) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{5}
}
func (x *FileEntry) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *FileEntry) GetIsDir() bool {
if x != nil {
return x.IsDir
}
return false
}
func (x *FileEntry) GetSize() int64 {
if x != nil {
return x.Size
}
return 0
}
func (x *FileEntry) GetMode() string {
if x != nil {
return x.Mode
}
return ""
}
func (x *FileEntry) GetModTime() string {
if x != nil {
return x.ModTime
}
return ""
}
type ListDirResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Entries []*FileEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListDirResponse) Reset() {
*x = ListDirResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ListDirResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListDirResponse) ProtoMessage() {}
func (x *ListDirResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListDirResponse.ProtoReflect.Descriptor instead.
func (*ListDirResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{6}
}
func (x *ListDirResponse) GetEntries() []*FileEntry {
if x != nil {
return x.Entries
}
return nil
}
type ExecInput struct {
state protoimpl.MessageState `protogen:"open.v1"`
Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"`
WorkDir string `protobuf:"bytes,2,opt,name=work_dir,json=workDir,proto3" json:"work_dir,omitempty"`
Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"`
TimeoutSeconds int32 `protobuf:"varint,4,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"`
StdinData []byte `protobuf:"bytes,5,opt,name=stdin_data,json=stdinData,proto3" json:"stdin_data,omitempty"`
Pty bool `protobuf:"varint,6,opt,name=pty,proto3" json:"pty,omitempty"`
Resize *TerminalResize `protobuf:"bytes,7,opt,name=resize,proto3" json:"resize,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ExecInput) Reset() {
*x = ExecInput{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ExecInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExecInput) ProtoMessage() {}
func (x *ExecInput) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ExecInput.ProtoReflect.Descriptor instead.
func (*ExecInput) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{7}
}
func (x *ExecInput) GetCommand() string {
if x != nil {
return x.Command
}
return ""
}
func (x *ExecInput) GetWorkDir() string {
if x != nil {
return x.WorkDir
}
return ""
}
func (x *ExecInput) GetEnv() []string {
if x != nil {
return x.Env
}
return nil
}
func (x *ExecInput) GetTimeoutSeconds() int32 {
if x != nil {
return x.TimeoutSeconds
}
return 0
}
func (x *ExecInput) GetStdinData() []byte {
if x != nil {
return x.StdinData
}
return nil
}
func (x *ExecInput) GetPty() bool {
if x != nil {
return x.Pty
}
return false
}
func (x *ExecInput) GetResize() *TerminalResize {
if x != nil {
return x.Resize
}
return nil
}
type TerminalResize struct {
state protoimpl.MessageState `protogen:"open.v1"`
Cols uint32 `protobuf:"varint,1,opt,name=cols,proto3" json:"cols,omitempty"`
Rows uint32 `protobuf:"varint,2,opt,name=rows,proto3" json:"rows,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TerminalResize) Reset() {
*x = TerminalResize{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *TerminalResize) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TerminalResize) ProtoMessage() {}
func (x *TerminalResize) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TerminalResize.ProtoReflect.Descriptor instead.
func (*TerminalResize) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{8}
}
func (x *TerminalResize) GetCols() uint32 {
if x != nil {
return x.Cols
}
return 0
}
func (x *TerminalResize) GetRows() uint32 {
if x != nil {
return x.Rows
}
return 0
}
type ExecOutput struct {
state protoimpl.MessageState `protogen:"open.v1"`
Stream ExecOutput_Stream `protobuf:"varint,1,opt,name=stream,proto3,enum=mcpcontainer.ExecOutput_Stream" json:"stream,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
ExitCode int32 `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ExecOutput) Reset() {
*x = ExecOutput{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ExecOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ExecOutput) ProtoMessage() {}
func (x *ExecOutput) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ExecOutput.ProtoReflect.Descriptor instead.
func (*ExecOutput) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{9}
}
func (x *ExecOutput) GetStream() ExecOutput_Stream {
if x != nil {
return x.Stream
}
return ExecOutput_STDOUT
}
func (x *ExecOutput) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
func (x *ExecOutput) GetExitCode() int32 {
if x != nil {
return x.ExitCode
}
return 0
}
type ReadRawRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ReadRawRequest) Reset() {
*x = ReadRawRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ReadRawRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReadRawRequest) ProtoMessage() {}
func (x *ReadRawRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ReadRawRequest.ProtoReflect.Descriptor instead.
func (*ReadRawRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{10}
}
func (x *ReadRawRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
type DataChunk struct {
state protoimpl.MessageState `protogen:"open.v1"`
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *DataChunk) Reset() {
*x = DataChunk{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *DataChunk) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DataChunk) ProtoMessage() {}
func (x *DataChunk) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DataChunk.ProtoReflect.Descriptor instead.
func (*DataChunk) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{11}
}
func (x *DataChunk) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
type WriteRawChunk struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WriteRawChunk) Reset() {
*x = WriteRawChunk{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WriteRawChunk) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WriteRawChunk) ProtoMessage() {}
func (x *WriteRawChunk) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WriteRawChunk.ProtoReflect.Descriptor instead.
func (*WriteRawChunk) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{12}
}
func (x *WriteRawChunk) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *WriteRawChunk) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
type WriteRawResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
BytesWritten int64 `protobuf:"varint,1,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WriteRawResponse) Reset() {
*x = WriteRawResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WriteRawResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WriteRawResponse) ProtoMessage() {}
func (x *WriteRawResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WriteRawResponse.ProtoReflect.Descriptor instead.
func (*WriteRawResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{13}
}
func (x *WriteRawResponse) GetBytesWritten() int64 {
if x != nil {
return x.BytesWritten
}
return 0
}
type DeleteFileRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *DeleteFileRequest) Reset() {
*x = DeleteFileRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *DeleteFileRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteFileRequest) ProtoMessage() {}
func (x *DeleteFileRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeleteFileRequest.ProtoReflect.Descriptor instead.
func (*DeleteFileRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{14}
}
func (x *DeleteFileRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
func (x *DeleteFileRequest) GetRecursive() bool {
if x != nil {
return x.Recursive
}
return false
}
type DeleteFileResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *DeleteFileResponse) Reset() {
*x = DeleteFileResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *DeleteFileResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteFileResponse) ProtoMessage() {}
func (x *DeleteFileResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeleteFileResponse.ProtoReflect.Descriptor instead.
func (*DeleteFileResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{15}
}
type StatRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatRequest) Reset() {
*x = StatRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatRequest) ProtoMessage() {}
func (x *StatRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StatRequest.ProtoReflect.Descriptor instead.
func (*StatRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{16}
}
func (x *StatRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
type StatResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Entry *FileEntry `protobuf:"bytes,1,opt,name=entry,proto3" json:"entry,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatResponse) Reset() {
*x = StatResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatResponse) ProtoMessage() {}
func (x *StatResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StatResponse.ProtoReflect.Descriptor instead.
func (*StatResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{17}
}
func (x *StatResponse) GetEntry() *FileEntry {
if x != nil {
return x.Entry
}
return nil
}
type MkdirRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *MkdirRequest) Reset() {
*x = MkdirRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *MkdirRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MkdirRequest) ProtoMessage() {}
func (x *MkdirRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MkdirRequest.ProtoReflect.Descriptor instead.
func (*MkdirRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{18}
}
func (x *MkdirRequest) GetPath() string {
if x != nil {
return x.Path
}
return ""
}
type MkdirResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *MkdirResponse) Reset() {
*x = MkdirResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *MkdirResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MkdirResponse) ProtoMessage() {}
func (x *MkdirResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MkdirResponse.ProtoReflect.Descriptor instead.
func (*MkdirResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{19}
}
type RenameRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
OldPath string `protobuf:"bytes,1,opt,name=old_path,json=oldPath,proto3" json:"old_path,omitempty"`
NewPath string `protobuf:"bytes,2,opt,name=new_path,json=newPath,proto3" json:"new_path,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RenameRequest) Reset() {
*x = RenameRequest{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RenameRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RenameRequest) ProtoMessage() {}
func (x *RenameRequest) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RenameRequest.ProtoReflect.Descriptor instead.
func (*RenameRequest) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{20}
}
func (x *RenameRequest) GetOldPath() string {
if x != nil {
return x.OldPath
}
return ""
}
func (x *RenameRequest) GetNewPath() string {
if x != nil {
return x.NewPath
}
return ""
}
type RenameResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RenameResponse) Reset() {
*x = RenameResponse{}
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RenameResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RenameResponse) ProtoMessage() {}
func (x *RenameResponse) ProtoReflect() protoreflect.Message {
mi := &file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes[21]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RenameResponse.ProtoReflect.Descriptor instead.
func (*RenameResponse) Descriptor() ([]byte, []int) {
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP(), []int{21}
}
var File_internal_mcp_mcpcontainer_mcpcontainer_proto protoreflect.FileDescriptor
const file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDesc = "" +
"\n" +
",internal/mcp/mcpcontainer/mcpcontainer.proto\x12\fmcpcontainer\"_\n" +
"\x0fReadFileRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x1f\n" +
"\vline_offset\x18\x02 \x01(\x05R\n" +
"lineOffset\x12\x17\n" +
"\an_lines\x18\x03 \x01(\x05R\x06nLines\"e\n" +
"\x10ReadFileResponse\x12\x18\n" +
"\acontent\x18\x01 \x01(\tR\acontent\x12\x1f\n" +
"\vtotal_lines\x18\x02 \x01(\x05R\n" +
"totalLines\x12\x16\n" +
"\x06binary\x18\x03 \x01(\bR\x06binary\"@\n" +
"\x10WriteFileRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x18\n" +
"\acontent\x18\x02 \x01(\fR\acontent\"\x13\n" +
"\x11WriteFileResponse\"B\n" +
"\x0eListDirRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x1c\n" +
"\trecursive\x18\x02 \x01(\bR\trecursive\"y\n" +
"\tFileEntry\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x15\n" +
"\x06is_dir\x18\x02 \x01(\bR\x05isDir\x12\x12\n" +
"\x04size\x18\x03 \x01(\x03R\x04size\x12\x12\n" +
"\x04mode\x18\x04 \x01(\tR\x04mode\x12\x19\n" +
"\bmod_time\x18\x05 \x01(\tR\amodTime\"D\n" +
"\x0fListDirResponse\x121\n" +
"\aentries\x18\x01 \x03(\v2\x17.mcpcontainer.FileEntryR\aentries\"\xe2\x01\n" +
"\tExecInput\x12\x18\n" +
"\acommand\x18\x01 \x01(\tR\acommand\x12\x19\n" +
"\bwork_dir\x18\x02 \x01(\tR\aworkDir\x12\x10\n" +
"\x03env\x18\x03 \x03(\tR\x03env\x12'\n" +
"\x0ftimeout_seconds\x18\x04 \x01(\x05R\x0etimeoutSeconds\x12\x1d\n" +
"\n" +
"stdin_data\x18\x05 \x01(\fR\tstdinData\x12\x10\n" +
"\x03pty\x18\x06 \x01(\bR\x03pty\x124\n" +
"\x06resize\x18\a \x01(\v2\x1c.mcpcontainer.TerminalResizeR\x06resize\"8\n" +
"\x0eTerminalResize\x12\x12\n" +
"\x04cols\x18\x01 \x01(\rR\x04cols\x12\x12\n" +
"\x04rows\x18\x02 \x01(\rR\x04rows\"\xa2\x01\n" +
"\n" +
"ExecOutput\x127\n" +
"\x06stream\x18\x01 \x01(\x0e2\x1f.mcpcontainer.ExecOutput.StreamR\x06stream\x12\x12\n" +
"\x04data\x18\x02 \x01(\fR\x04data\x12\x1b\n" +
"\texit_code\x18\x03 \x01(\x05R\bexitCode\"*\n" +
"\x06Stream\x12\n" +
"\n" +
"\x06STDOUT\x10\x00\x12\n" +
"\n" +
"\x06STDERR\x10\x01\x12\b\n" +
"\x04EXIT\x10\x02\"$\n" +
"\x0eReadRawRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\"\x1f\n" +
"\tDataChunk\x12\x12\n" +
"\x04data\x18\x01 \x01(\fR\x04data\"7\n" +
"\rWriteRawChunk\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x12\n" +
"\x04data\x18\x02 \x01(\fR\x04data\"7\n" +
"\x10WriteRawResponse\x12#\n" +
"\rbytes_written\x18\x01 \x01(\x03R\fbytesWritten\"E\n" +
"\x11DeleteFileRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\x12\x1c\n" +
"\trecursive\x18\x02 \x01(\bR\trecursive\"\x14\n" +
"\x12DeleteFileResponse\"!\n" +
"\vStatRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\"=\n" +
"\fStatResponse\x12-\n" +
"\x05entry\x18\x01 \x01(\v2\x17.mcpcontainer.FileEntryR\x05entry\"\"\n" +
"\fMkdirRequest\x12\x12\n" +
"\x04path\x18\x01 \x01(\tR\x04path\"\x0f\n" +
"\rMkdirResponse\"E\n" +
"\rRenameRequest\x12\x19\n" +
"\bold_path\x18\x01 \x01(\tR\aoldPath\x12\x19\n" +
"\bnew_path\x18\x02 \x01(\tR\anewPath\"\x10\n" +
"\x0eRenameResponse2\xd8\x05\n" +
"\x10ContainerService\x12I\n" +
"\bReadFile\x12\x1d.mcpcontainer.ReadFileRequest\x1a\x1e.mcpcontainer.ReadFileResponse\x12L\n" +
"\tWriteFile\x12\x1e.mcpcontainer.WriteFileRequest\x1a\x1f.mcpcontainer.WriteFileResponse\x12F\n" +
"\aListDir\x12\x1c.mcpcontainer.ListDirRequest\x1a\x1d.mcpcontainer.ListDirResponse\x12=\n" +
"\x04Stat\x12\x19.mcpcontainer.StatRequest\x1a\x1a.mcpcontainer.StatResponse\x12@\n" +
"\x05Mkdir\x12\x1a.mcpcontainer.MkdirRequest\x1a\x1b.mcpcontainer.MkdirResponse\x12C\n" +
"\x06Rename\x12\x1b.mcpcontainer.RenameRequest\x1a\x1c.mcpcontainer.RenameResponse\x12=\n" +
"\x04Exec\x12\x17.mcpcontainer.ExecInput\x1a\x18.mcpcontainer.ExecOutput(\x010\x01\x12B\n" +
"\aReadRaw\x12\x1c.mcpcontainer.ReadRawRequest\x1a\x17.mcpcontainer.DataChunk0\x01\x12I\n" +
"\bWriteRaw\x12\x1b.mcpcontainer.WriteRawChunk\x1a\x1e.mcpcontainer.WriteRawResponse(\x01\x12O\n" +
"\n" +
"DeleteFile\x12\x1f.mcpcontainer.DeleteFileRequest\x1a .mcpcontainer.DeleteFileResponseB4Z2github.com/memohai/memoh/internal/mcp/mcpcontainerb\x06proto3"
var (
file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescOnce sync.Once
file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescData []byte
)
func file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescGZIP() []byte {
file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescOnce.Do(func() {
file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDesc), len(file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDesc)))
})
return file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDescData
}
var file_internal_mcp_mcpcontainer_mcpcontainer_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
var file_internal_mcp_mcpcontainer_mcpcontainer_proto_goTypes = []any{
(ExecOutput_Stream)(0), // 0: mcpcontainer.ExecOutput.Stream
(*ReadFileRequest)(nil), // 1: mcpcontainer.ReadFileRequest
(*ReadFileResponse)(nil), // 2: mcpcontainer.ReadFileResponse
(*WriteFileRequest)(nil), // 3: mcpcontainer.WriteFileRequest
(*WriteFileResponse)(nil), // 4: mcpcontainer.WriteFileResponse
(*ListDirRequest)(nil), // 5: mcpcontainer.ListDirRequest
(*FileEntry)(nil), // 6: mcpcontainer.FileEntry
(*ListDirResponse)(nil), // 7: mcpcontainer.ListDirResponse
(*ExecInput)(nil), // 8: mcpcontainer.ExecInput
(*TerminalResize)(nil), // 9: mcpcontainer.TerminalResize
(*ExecOutput)(nil), // 10: mcpcontainer.ExecOutput
(*ReadRawRequest)(nil), // 11: mcpcontainer.ReadRawRequest
(*DataChunk)(nil), // 12: mcpcontainer.DataChunk
(*WriteRawChunk)(nil), // 13: mcpcontainer.WriteRawChunk
(*WriteRawResponse)(nil), // 14: mcpcontainer.WriteRawResponse
(*DeleteFileRequest)(nil), // 15: mcpcontainer.DeleteFileRequest
(*DeleteFileResponse)(nil), // 16: mcpcontainer.DeleteFileResponse
(*StatRequest)(nil), // 17: mcpcontainer.StatRequest
(*StatResponse)(nil), // 18: mcpcontainer.StatResponse
(*MkdirRequest)(nil), // 19: mcpcontainer.MkdirRequest
(*MkdirResponse)(nil), // 20: mcpcontainer.MkdirResponse
(*RenameRequest)(nil), // 21: mcpcontainer.RenameRequest
(*RenameResponse)(nil), // 22: mcpcontainer.RenameResponse
}
var file_internal_mcp_mcpcontainer_mcpcontainer_proto_depIdxs = []int32{
6, // 0: mcpcontainer.ListDirResponse.entries:type_name -> mcpcontainer.FileEntry
9, // 1: mcpcontainer.ExecInput.resize:type_name -> mcpcontainer.TerminalResize
0, // 2: mcpcontainer.ExecOutput.stream:type_name -> mcpcontainer.ExecOutput.Stream
6, // 3: mcpcontainer.StatResponse.entry:type_name -> mcpcontainer.FileEntry
1, // 4: mcpcontainer.ContainerService.ReadFile:input_type -> mcpcontainer.ReadFileRequest
3, // 5: mcpcontainer.ContainerService.WriteFile:input_type -> mcpcontainer.WriteFileRequest
5, // 6: mcpcontainer.ContainerService.ListDir:input_type -> mcpcontainer.ListDirRequest
17, // 7: mcpcontainer.ContainerService.Stat:input_type -> mcpcontainer.StatRequest
19, // 8: mcpcontainer.ContainerService.Mkdir:input_type -> mcpcontainer.MkdirRequest
21, // 9: mcpcontainer.ContainerService.Rename:input_type -> mcpcontainer.RenameRequest
8, // 10: mcpcontainer.ContainerService.Exec:input_type -> mcpcontainer.ExecInput
11, // 11: mcpcontainer.ContainerService.ReadRaw:input_type -> mcpcontainer.ReadRawRequest
13, // 12: mcpcontainer.ContainerService.WriteRaw:input_type -> mcpcontainer.WriteRawChunk
15, // 13: mcpcontainer.ContainerService.DeleteFile:input_type -> mcpcontainer.DeleteFileRequest
2, // 14: mcpcontainer.ContainerService.ReadFile:output_type -> mcpcontainer.ReadFileResponse
4, // 15: mcpcontainer.ContainerService.WriteFile:output_type -> mcpcontainer.WriteFileResponse
7, // 16: mcpcontainer.ContainerService.ListDir:output_type -> mcpcontainer.ListDirResponse
18, // 17: mcpcontainer.ContainerService.Stat:output_type -> mcpcontainer.StatResponse
20, // 18: mcpcontainer.ContainerService.Mkdir:output_type -> mcpcontainer.MkdirResponse
22, // 19: mcpcontainer.ContainerService.Rename:output_type -> mcpcontainer.RenameResponse
10, // 20: mcpcontainer.ContainerService.Exec:output_type -> mcpcontainer.ExecOutput
12, // 21: mcpcontainer.ContainerService.ReadRaw:output_type -> mcpcontainer.DataChunk
14, // 22: mcpcontainer.ContainerService.WriteRaw:output_type -> mcpcontainer.WriteRawResponse
16, // 23: mcpcontainer.ContainerService.DeleteFile:output_type -> mcpcontainer.DeleteFileResponse
14, // [14:24] is the sub-list for method output_type
4, // [4:14] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
}
func init() { file_internal_mcp_mcpcontainer_mcpcontainer_proto_init() }
func file_internal_mcp_mcpcontainer_mcpcontainer_proto_init() {
if File_internal_mcp_mcpcontainer_mcpcontainer_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDesc), len(file_internal_mcp_mcpcontainer_mcpcontainer_proto_rawDesc)),
NumEnums: 1,
NumMessages: 22,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_internal_mcp_mcpcontainer_mcpcontainer_proto_goTypes,
DependencyIndexes: file_internal_mcp_mcpcontainer_mcpcontainer_proto_depIdxs,
EnumInfos: file_internal_mcp_mcpcontainer_mcpcontainer_proto_enumTypes,
MessageInfos: file_internal_mcp_mcpcontainer_mcpcontainer_proto_msgTypes,
}.Build()
File_internal_mcp_mcpcontainer_mcpcontainer_proto = out.File
file_internal_mcp_mcpcontainer_mcpcontainer_proto_goTypes = nil
file_internal_mcp_mcpcontainer_mcpcontainer_proto_depIdxs = nil
}