Skip to main content

debug-grpc-connection

Diagnose gRPC connection issues between the Bindu core and a language SDK. Use when an SDK fails to register, HandleMessages calls time out, "connection refused" on :3774, heartbeats stop arriving, or the core logs "agent silently died".

소스 정보

저장소
GetBindu/Bindu
최근 소스 활동
2026년 4월 23일 16:28
감지된 SKILL.md 언어
영어
스타
10,058
포크
670

설치 방법

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

소스 파일 검토

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

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
debug-grpc-connection
description
Diagnose gRPC connection issues between the Bindu core and a language SDK. Use when an SDK fails to register, HandleMessages calls time out, "connection refused" on :3774, heartbeats stop arriving, or the core logs "agent silently died".
# Debug gRPC Connection ## Overview The Bindu core (Python) runs a gRPC server on port `3774` that SDKs connect to via `RegisterAgent` and `Heartbeat`. After registration, the core calls back into the SDK's own gRPC server (ephemeral port) via `HandleMessages`. Most connection bugs are in that handshake. See [docs/grpc/overview.md](../../../docs/grpc/overview.md) for the full message flow and [docs/grpc/limitations.md](../../../docs/grpc/limitations.md) for known unimplemented behaviors. ## Inputs - Which end is reporting the failure: core logs vs. SDK logs. - The exact error message and/or symptom. - Recent commits touching `proto/`, `bindu/grpc/`, or `sdks/typescript/src/`. ## Safety - Do not modify files under `bindu/grpc/generated/` or `sdks/typescript/src/generated/` to "make the error go away". Proto drift is the underlying problem — fix it with the `regenerate-grpc-stubs` skill. - Do not bypass the heartbeat mechanism. The core relies on heartbeats to clean up dead-agent registrations. - Do not assume the SDK is at fault before inspecting core logs — the core is the ground truth for registration state. ## Execution Contract 1. Confirm both processes are alive and bound to expected ports. 2. Inspect core logs for the registration handshake. 3. Probe the core directly with `grpcurl`. 4. Check for proto drift. 5. Verify SDK heartbeat timing. 6. Consult limitations doc before filing a bug. ## Steps ### 1. Confirm both processes and ports ```bash lsof -ti:3773 -ti:3774 ps aux | grep -E '(bindu|node.*agent|python.*bindu)' | grep -v grep ``` - `3773` missing → HTTP/A2A server never started. Check for port clash (`lsof -i:3773`). - `3774` missing → core started without `--grpc`. Restart with `bindu serve --grpc`. - SDK process missing → it crashed. Check its own logs for a stacktrace. ### 2. Inspect core logs Filter for the `[bindu-core]` prefix. Meaningful signals: | Log line | Means | | --- | --- | | `grpc server listening on 0.0.0.0:3774` | Core gRPC up, accepting connections | | `agent registered: <did>` | SDK successfully called `RegisterAgent` | | `heartbeat received from <did>` | SDK is alive and connected | | `agent silently died: <did>` | No heartbeat in >90s; registration pruned | | `failed to deserialize HandleMessages response` | Proto drift between core and SDK | | `connection refused dialing <host>:<port>` | Core can't reach back into SDK's gRPC server | ### 3. Probe the core with grpcurl ```bash # List services — confirms the core is accepting connections grpcurl -plaintext -proto proto/agent_handler.proto localhost:3774 list # Synthetic heartbeat — confirms the service is bound grpcurl -plaintext -proto proto/agent_handler.proto \ -d '{"agent_id":"test","timestamp":1234567890}' \ localhost:3774 bindu.grpc.BinduService.Heartbeat ``` - `list` fails with connection refused → server not bound (check step 1). - `list` works but `Heartbeat` errors → proto mismatch or handler crash. Read the error body carefully. ### 4. Check for proto drift ```bash # Any proto changes without matching generated-tree changes? git log --oneline -10 -- proto/ git log --oneline -10 -- bindu/grpc/generated/ sdks/typescript/src/generated/ ``` If the proto moved but the generated trees didn't — stubs are stale. Run the `regenerate-grpc-stubs` skill. ### 5. Verify SDK heartbeat timing SDKs must send `Heartbeat` every 30 seconds after `RegisterAgent`. TypeScript SDK heartbeat logic lives in [sdks/typescript/src/client.ts](../../../sdks/typescript/src/client.ts). Common bugs: - Heartbeat interval never started (check the `setInterval` call). - Heartbeat errors swallowed silently (check for try/catch around the call). - Process exits between heartbeats (Node.js event loop starved). ### 6. Consult limitations Before filing a bug, confirm the behavior isn't documented as known-missing in [docs/grpc/limitations.md](../../../docs/grpc/limitations.md). Things currently not implemented: - Streaming responses (`HandleMessagesStream`) - TLS / mTLS (localhost only is safe) - Automatic SDK reconnection - Connection pooling in `GrpcAgentClient` ## Never do - **Never edit generated stubs** to silence a proto drift error. Regenerate instead. - **Never disable heartbeats** to avoid "agent silently died" logs — that's the error reporting the real issue. - **Never run the core without `--grpc`** and expect SDKs to work. There is no fallback path. - **Never deploy to non-localhost without mTLS** — see [docs/MTLS_DEPLOYMENT_GUIDE.md](../../../docs/MTLS_DEPLOYMENT_GUIDE.md).
GitHub에서 보기