Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Agent.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -93,7 +93,7 @@ Community needs voiced in HN agent-UI discussions map directly to EMRG's design:
pkill -f "emrg.server"; rm -f ~/.emrg/emrgd.port; python -m emrg
```

Python: `uv run pytest tests/ -v` (589) — import check: `uv run python -c "from emrg.client.app import run_client"`
Python: `uv run pytest tests/ -v` (590) — import check: `uv run python -c "from emrg.client.app import run_client"`
GUI: `cd emrg/gui && npm test` (93: 22 daemon_client + 22 app-commands + 24 renderer smoke + 15 i18n + 7 integration + 3 commands) — syntax: `node --check main.js preload.js daemon_client.js renderer/js/*.js`
CI: `uv run pytest` + GUI tests + **actionlint workflow lint** (`rhysd/actionlint@v1.7.12` gate, #444 — workflow 解析错误在 PR CI 即失败,如 `if:` secrets 上下文)
Re-trigger: `scripts/re-trigger-ci.sh [branch]` (workflow_dispatch, #527 — 替代空 commit 重触发:Actions outage 会整段丢弃 push 事件,dispatch 走 API 路径不受影响)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -273,7 +273,7 @@ EMRG doesn't just keep up — it catches up on its own.
git clone https://github.com/argszero/emrg.git
cd emrg
uv sync # install deps
uv run pytest tests/ -v # run tests (currently 589 items)
uv run pytest tests/ -v # run tests (currently 590 items)
uv run python -m emrg # launch TUI
# CI includes actionlint workflow gate (#444): workflow parse errors fail PR CI

Expand Down
7 changes: 7 additions & 0 deletions emrg/server/git_utils.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -84,6 +84,13 @@ def parse_gh_auth_user(output: str) -> str | None:
"network is unreachable",
"unable to access",
"tls handshake timeout",
# "the remote end hung up unexpectedly" / "connection ... hung up" —
# git's classic message when a proxy/network drops the connection
# mid-transfer (observed on the packaged host: fetch fails with
# "fatal: the remote end hung up unexpectedly" while https works via
# proxy on retry). A network-level drop is exactly the case where an
# SSH retry may succeed.
"hung up",
)


Expand Down
11 changes: 11 additions & 0 deletions tests/test_git_utils.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -206,6 +206,17 @@ def test_is_git_connection_error_matches_connection_failures():
assert is_git_connection_error("ssh: connect to host github.com port 22: Connection refused")


def test_is_git_connection_error_matches_hung_up():
"""'remote end hung up' (network drop mid-transfer) is a connection error."""
from emrg.server.git_utils import is_git_connection_error

assert is_git_connection_error("fatal: the remote end hung up unexpectedly")
assert is_git_connection_error(
"error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: "
"PROTOCOL_ERROR (err 1)\nfatal: the remote end hung up unexpectedly"
)


def test_is_git_connection_error_rejects_auth_and_404():
from emrg.server.git_utils import is_git_connection_error

Expand Down
Loading