Skip to content

Commit 3a55cc9

Browse files
zparnoldclaude
andcommitted
Drop redundant custom commits absorbed by upstream
- Remove microagents/ directory fallback from load_org_skills (use skills/ only) - Update merge guide: document all custom areas, mark 4 commits as dropped (VSCode base-path, microagents compat, Azure prompt_cache, CI workflow reverts — all now in upstream) - Update upstream sync marker Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 025ee67 commit 3a55cc9

File tree

3 files changed

+49
-55
lines changed

3 files changed

+49
-55
lines changed

.last-upstream-sync

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2d3d96d329f8eb90708f13b55dbc23ba1c3333d1
1+
bf4e2ddfa50a874d165e0af4b5f3e6f9b39ebede

docs/upstream-merge-guide.md

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,34 @@ Unlike the OpenHands repo (which has a separate `self-hosted` branch), we work d
1515

1616
## Custom Commits to Preserve
1717

18-
These commits contain our self-hosted customizations and must survive every merge:
18+
These customizations must survive every merge. Grouped by area:
1919

20-
1. **`198e2a9`**`feat(docker): add entrypoint script to handle CA certs and argv stripping`
21-
2. **`88859a8`**`feat: configure VSCode server-base-path for proxy support`
22-
3. **`d1b8c6f`**`fix: serialize webhook events with mode='json' to include kind field`
23-
4. **`a2b4f23`**`Optimize count_events to avoid full iteration when no filters applied`
24-
5. **`a2140ea`**`feat: add org-level shared skill registry support`
25-
6. **`e1fd801`**`Add auth_header and branch support to agent-server org skills loading`
26-
7. **`96dd776`**`Support microagents/ directory in load_org_skills for backwards compat`
27-
28-
Key files touched by custom commits (high conflict risk):
20+
### Docker/Entrypoint (CA certs for corporate TLS)
2921
- `openhands-agent-server/openhands/agent_server/docker/entrypoint.sh`
30-
- `openhands-agent-server/openhands/agent_server/docker/Dockerfile`
31-
- `openhands-agent-server/openhands/agent_server/vscode_service.py`
32-
- `openhands-agent-server/openhands/agent_server/event_service.py`
33-
- `openhands-agent-server/openhands/agent_server/conversation_service.py`
34-
- `openhands-agent-server/openhands/agent_server/skills_service.py`
35-
- `openhands-agent-server/openhands/agent_server/skills_router.py`
22+
- `openhands-agent-server/openhands/agent_server/docker/build.py` (generates entrypoint for all targets)
23+
- `openhands-agent-server/openhands/agent_server/docker/Dockerfile` (root USER for CA cert merging)
24+
25+
### Webhook & Cost Tracking
26+
- `openhands-agent-server/openhands/agent_server/event_service.py``model_dump(mode="json")` for kind field (upstream bug), stats emission on startup, asyncio thread-safety fix, WebSocket _closed flag
27+
- `openhands-agent-server/openhands/agent_server/sockets.py` — WebSocket ping/pong heartbeat handler
28+
29+
### Org-Level Skill Registry
30+
- `openhands-agent-server/openhands/agent_server/skills_service.py` — org skills loading with auth_header + branch
31+
- `openhands-agent-server/openhands/agent_server/skills_router.py` — org skills routes
32+
- `openhands-sdk/openhands/sdk/context/agent_context.py` — org skills config fields
33+
- `openhands-sdk/openhands/sdk/context/skills/skill.py``load_org_skills()` function
34+
35+
### Performance
36+
- `openhands-agent-server/openhands/agent_server/event_service.py` — count_events O(1) fast path
37+
38+
### Error Handling
39+
- `openhands-sdk/openhands/sdk/workspace/remote/remote_workspace_mixin.py` — file download 4xx detail extraction
40+
41+
### Dropped (2026-03-25)
42+
- ~~VSCode server-base-path~~ — absorbed by upstream
43+
- ~~microagents/ directory compat~~ — removed, use skills/ only
44+
- ~~Azure prompt_cache_retention fix~~ — absorbed by upstream
45+
- ~~CI workflow reverts~~ — no longer needed
3646

3747
## Pre-Merge: Check Status
3848

openhands-sdk/openhands/sdk/context/skills/skill.py

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,47 +1096,31 @@ def load_org_skills(
10961096
logger.warning("Failed to access org skills repository")
10971097
return all_skills
10981098

1099-
# Load skills from skills/ (preferred) and microagents/ (legacy)
1100-
for dir_name in ("skills", "microagents"):
1101-
search_dir = repo_path / dir_name
1102-
if not search_dir.exists():
1103-
continue
1099+
search_dir = repo_path / "skills"
1100+
if not search_dir.exists():
1101+
logger.warning("No skills/ directory found in org repository")
1102+
return all_skills
11041103

1105-
skill_md_files = find_skill_md_directories(search_dir)
1106-
skill_md_dirs = {skill_md.parent for skill_md in skill_md_files}
1107-
regular_md_files = find_regular_md_files(search_dir, skill_md_dirs)
1104+
skill_md_files = find_skill_md_directories(search_dir)
1105+
skill_md_dirs = {skill_md.parent for skill_md in skill_md_files}
1106+
regular_md_files = find_regular_md_files(search_dir, skill_md_dirs)
11081107

1109-
all_skill_files = list(skill_md_files) + list(regular_md_files)
1110-
logger.info(f"Found {len(all_skill_files)} skill files in org {dir_name}/")
1111-
1112-
existing_names = {s.name for s in all_skills}
1113-
for skill_file in all_skill_files:
1114-
try:
1115-
skill = Skill.load(
1116-
path=skill_file,
1117-
skill_base_dir=repo_path,
1118-
)
1119-
if skill is None:
1120-
continue
1121-
if skill.name in existing_names:
1122-
logger.debug(
1123-
f"Skipping duplicate org skill '{skill.name}' "
1124-
f"from {dir_name}/"
1125-
)
1126-
continue
1127-
all_skills.append(skill)
1128-
existing_names.add(skill.name)
1129-
logger.debug(f"Loaded org skill: {skill.name}")
1130-
except Exception as e:
1131-
logger.warning(
1132-
f"Failed to load skill from {skill_file.name}: {str(e)}"
1133-
)
1134-
continue
1108+
all_skill_files = list(skill_md_files) + list(regular_md_files)
1109+
logger.info(f"Found {len(all_skill_files)} skill files in org skills/")
11351110

1136-
if not all_skills:
1137-
logger.warning(
1138-
"No skills/ or microagents/ directory found in org repository"
1139-
)
1111+
for skill_file in all_skill_files:
1112+
try:
1113+
skill = Skill.load(
1114+
path=skill_file,
1115+
skill_base_dir=repo_path,
1116+
)
1117+
if skill is None:
1118+
continue
1119+
all_skills.append(skill)
1120+
logger.debug(f"Loaded org skill: {skill.name}")
1121+
except Exception as e:
1122+
logger.warning(f"Failed to load skill from {skill_file.name}: {str(e)}")
1123+
continue
11401124

11411125
except Exception as e:
11421126
logger.warning(f"Failed to load org skills from {repo_url}: {str(e)}")

0 commit comments

Comments
 (0)