feat(fetchsvc): in-sandbox fetch-skill subcommand (Phase 4, PR 2) - #2223
Conversation
Site previewPreview: https://898ac605-site.fullsend-ai.workers.dev Commit: |
|
🤖 Finished Review · ✅ Success · Started 12:58 PM UTC · Completed 1:14 PM UTC |
ReviewFindingsMedium
Low
Info
Previous runReviewFindingsMedium
Low
Info
Previous run (2)ReviewFindingsMedium
Low
Info
Previous run (3)ReviewFindingsMedium
Low
Info
Previous run (4)ReviewFindingsMedium
Low
Info
Previous run (5)ReviewFindingsMedium
Low
Previous runReviewFindingsMedium
Low
Info
Previous run (2)ReviewFindingsMedium
Low
Info
Previous run (3)ReviewFindingsMedium
Low
Info
Previous run (4)ReviewFindingsMedium
Low
Info
Previous run (5)ReviewFindingsMedium
Low
|
6f269db to
d0508ad
Compare
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
|
🤖 Finished Review · ✅ Success · Started 1:41 PM UTC · Completed 1:55 PM UTC |
d0508ad to
1062af2
Compare
|
🤖 Agent run interrupted (process terminated) |
1062af2 to
badb454
Compare
|
🤖 Agent run interrupted (process terminated) |
badb454 to
0815fc2
Compare
|
🤖 Finished Review · ✅ Success · Started 2:25 PM UTC · Completed 2:38 PM UTC |
ralphbean
left a comment
There was a problem hiding this comment.
LGTM. One minor note inline.
0815fc2 to
0476f7f
Compare
|
🤖 Finished Review · ✅ Success · Started 4:27 PM UTC · Completed 4:44 PM UTC |
0476f7f to
13f7948
Compare
|
🤖 Finished Review · ✅ Success · Started 5:30 PM UTC · Completed 5:44 PM UTC |
Signed-off-by: Greg Allen <gallen@redhat.com> Signed-off-by: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
13f7948 to
aeb0f1d
Compare
|
🤖 Finished Review · ✅ Success · Started 6:49 PM UTC · Completed 7:07 PM UTC |
|
🤖 Finished Retro · ✅ Success · Started 8:09 PM UTC · Completed 8:16 PM UTC |
Retro: PR #2223 — feat(fetchsvc): in-sandbox fetch-skill subcommandOverall assessment: The workflow completed successfully but with significant token waste from redundant review runs. Review quality was good but missed one finding that a human caught. TimelinePR #2223 was a human-authored PR (ggallen) adding the in-sandbox Key findings
ProposalsNo new proposals filed — all identified improvement opportunities are already tracked by existing open issues:
Prioritizing #981 (concurrency groups) and #1014 (debounce) would have the highest impact on this class of workflow — they would have prevented the two interrupted runs and reduced the 8 total runs to ~3-4. |
Summary
fullsend fetch-skill <url>subcommand for agents to fetch skills at runtime from inside the sandbox, communicating with the runner-side fetch service over HTTP with bearer token authstartFetchService) with dynamic TCP port allocation, per-run UUID bearer token (timing-safe comparison), and graceful shutdownSandboxUploaderadapter wrappingsandbox.UploadDirto implement thefetchsvc.UploaderinterfacerunAgent()and injectsFULLSEND_FETCH_URL/FULLSEND_FETCH_TOKENenv vars during sandbox bootstrapCachePutDirreturn value correctness, audit log error propagation,MaxBytesError→ 413Context
This is Phase 4, PR 2 of ADR-0038 (Universal Harness Access). PR 1 (#2173) delivered the runner-side
fetchsvcpackage. This PR completes the client side so agents can invokefullsend fetch-skillinside the sandbox. PR 3 will addallow_runtime_fetch/max_runtime_fetchesharness schema fields to gate the feature.Supersedes #2221 (closed due to branch rename).
Design pivot: Unix socket → HTTP
The original design in
docs/plans/universal-harness-access.mdspecified a Unix socket for sandbox-to-runner communication. During Phase 4 implementation, this was changed to HTTP over TCP because OpenShell sandboxes are containers with no shared filesystem for Unix sockets. This aligns with ADR-0046, which establishes TCP through the L7 proxy as the standard transport for container-to-host services. Plan docs have been updated to reflect this change.Key decisions
/sandbox/workspace/bin/fullsend, avoiding cross-compilation and GoReleaser changesAllowedRemoteResources— the service only starts when the harness declares remote resources, minimizing attack surface for harnesses that don't use runtime fetching. PR 3 will add dedicatedallow_runtime_fetchfor finer-grained control.Test plan
fetch-skillsubcommand (success, error codes, missing env, auth propagation, request body, connection refused, registration, arg validation)setupFetchService(forge client passthrough, token resolution, no-remote-resources, token failure warning)bootstrapEnv(includes/skips fetch env vars)go test ./...— all packages passgo vetcleanmake lintpassesfullsend fetch-skill --helpdisplays correct usage🤖 Generated with Claude Code