Skip to main content

extract-embedded-protos

Recover all embedded FileDescriptorProto values from a compiled Go binary, preserve the original descriptor set, and flatten every recovered protobuf package into one searchable and protoc-compilable .proto file. Use when inspecting Devin, Windsurf, Codeium, or another compiled Go application for protobuf/gRPC schemas; locating RPC requests, messages, system prompts, tool definitions, field numbers, or service streaming contracts; or replacing guessed reverse-engineered structs with descriptor-backed definitions.

소스 정보

저장소
leookun/devin-2api
최근 소스 활동
2026년 8월 5일 05:24
감지된 SKILL.md 언어
영어
스타
49
포크
22

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
extract-embedded-protos
description
Recover all embedded FileDescriptorProto values from a compiled Go binary, preserve the original descriptor set, and flatten every recovered protobuf package into one searchable and protoc-compilable .proto file. Use when inspecting Devin, Windsurf, Codeium, or another compiled Go application for protobuf/gRPC schemas; locating RPC requests, messages, system prompts, tool definitions, field numbers, or service streaming contracts; or replacing guessed reverse-engineered structs with descriptor-backed definitions.
# Extract Embedded Protos Recover protobuf schemas from a binary with the bundled deterministic Go extractor. Treat the original descriptor set and the flattened source as different evidence surfaces. ## Run the extractor 1. Resolve the exact compiled binary to inspect. Require a regular file. 2. Choose a dedicated output directory. The extractor deletes that directory completely before every run; never point it at a workspace root or a directory containing unrelated files. 3. From the project root, run the Go command with exactly two positional arguments: ```sh go run ./cmd/protoextract \ /absolute/path/to/source-binary \ /absolute/path/to/output-directory ``` The first build requires Go and may need network access for module dependencies. Do not add flags or compatibility modes to the extractor CLI. ## Understand the outputs Expect exactly these files in a fresh output directory: - `descriptors.pb`: lossless recovered `FileDescriptorSet`. Use this as the authority for original file names, packages, service paths, syntax, options, field names, and field numbers. - `all-protos.proto`: all recovered declarations in one compilable package. Use this for search, reading, and code generation experiments. - `manifest.json`: extraction counts, missing dependencies, comment coverage, caveats, and original-to-flattened symbol mappings. The flattened file retains `exa.api_server_pb` when present. It prefixes non-root symbols, rewrites all message/enum/service/extension references, renames colliding enum values, and uses proto2 syntax to carry mixed proto2/proto3 definitions. It preserves known-field wire structure, including `required`, maps, oneofs, extension ranges, enum numbers, field numbers, and packed encoding. Do not treat flattened names as original protocol names. Non-root generated type names and service RPC paths change. Proto3 presence and open-enum APIs cannot be represented exactly in the proto2 view. ## Validate every extraction Read `manifest.json` and report: - descriptor, candidate, and duplicate counts; - missing dependencies; - comment locations and files with comments; - selected flattened package and syntax. Compile the flattened file when `protoc` is available without retaining a check artifact: ```sh protoc \ --proto_path=/absolute/path/to/output-directory \ --descriptor_set_out=/dev/null \ /absolute/path/to/output-directory/all-protos.proto ``` Run the project Go tests before modifying extractor behavior: ```sh go test -race ./cmd/protoextract go vet ./... ``` ## Analyze a protocol Search `all-protos.proto` by exact service, method, message, and field names. Then confirm original identities against `descriptors.pb` or `manifest.json` mappings before making claims about an RPC path. For requests involving statefulness, messages, system prompts, or tools: 1. Record exact request and response field numbers and types. 2. Separate a prompt string, structured message history, IDs, and tool definitions instead of inferring semantics from guessed names. 3. Trace related HTTP/SSE calls separately; a schema alone cannot prove whether the server persists conversation state. 4. State the extraction boundary: only descriptors embedded in this binary are recoverable. Stripped, dynamically downloaded, or separately shipped schemas are absent. 5. Never invent comments. Original comments exist only when `SourceCodeInfo` survived compilation; use manifest counts as evidence. If dependencies are missing or the flattened file fails compilation, preserve `descriptors.pb`, report the exact unresolved names, and inspect adjacent binaries or application resources before changing the extraction algorithm.
GitHub에서 보기