feat(pitot): add Devin ACP adapter (10th supported adapter) - #259
Merged
Conversation
Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
Pitot coding-agent E2EIntelligence Flow is the verification source; Pitot's public README carries the latest
Runtime capabilities
Source commit: |
Devin's HTTP client pools connections; the deterministic Connect proxy spoke HTTP/1.0 and closed the socket after every response. A request written to the stale pooled connection can black-hole until the CLI's 10s team-settings deadline expires, killing session/new before the negative-phase check can observe anything (seen intermittently on the Windows cell; the same run's log shows the fast-fail variant of the race recovered by Devin's 250ms retry at init). Keep-alive removes the stale-close race: protocol_version HTTP/1.1 and an exact content-length on every response path, including the GET 404. Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
…odies Round 2 on the intermittent Windows Devin cell. New evidence from run 30629363835 refutes the stale-connection reading: the same 10s team-settings timeout occurred with keep-alive active, attempt 1 fails instantly on a fresh process during Devin's startup burst, the hang is a single request with no transient retries, and other requests were served concurrently (auxiliary_requests=10). The mechanism consistent with all observations is listen-backlog overflow: socketserver defaults request_queue_size to 5, Devin bursts more concurrent connections than that at startup/session creation, and Windows either RSTs the overflowed SYN (the fast ConnectionFailed) or silently drops it so the client retransmit schedule outlives the 10s deadline (the single hang). Linux/macOS backlog semantics differ, matching the Windows-only intermittency. - request_queue_size=128 (+ daemon_threads) on the serving socket - drain request bodies exactly (content-length and chunked) so a kept-alive connection can never desync on an unconsumed body Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
Round-2 evidence eliminated the startup-burst fast-fail (backlog fix held: team settings ready in 8ms) but the session/new refresh still black-holes for exactly 10s as a single request, under both HTTP/1.0 and HTTP/1.1 proxies. The remaining question is binary and only CI can answer it: does that request reach the proxy at all, and on which connection. The proxy now journals CONN open/close and REQ/RES lines (client port, path, framing, duration) to a file, and the driver prints the journal after each Devin phase. Receipt schema unchanged. Disclosure-Reviewed: reviewed — public-safe only, private facet kept out of this commit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Devin CLI (pinned
3000.3.22) as Pitot's tenth supported adapter, integrated through its stateful ACP boundary rather than lifecycle hooks. Pitot's public event envelope stays at protocol v1; the existing shell Controller contract is unchanged.Devin's
PreToolUse/PermissionRequesthooks were ruled out empirically: in headless--printmode a denial terminates the turn instead of returning the denied tool result to the model, which breaks Pitot's supervised causal loop. Devin'sdevin acpmode passes that requirement:session/request_permission+reject_oncemarks the tool call failed, feeds the rejection back to the model, and the turn continues. Full investigation and binary-observed receipts are inlabs/15-pitot/pitot/docs/devin-adapter-research.mdanddocs/evidence/devin-acp-3000.3.22.json.Changes
pitot/internal/devinacp/client.go): dependency-free stdio JSON-RPC ACP v1 client — initialize, one session, one prompt; correlatessession/updaterawInput.commandby session +toolCallId; delivers the existingaction.requestedshell event; maps allow →allow_once, deny/fault →reject_once; never selects persistent/bypass permissions; fails closed (reject_once) on unknown commands, missing correlation, non-shell permissions, malformed messages, or missing options.pitot acp devin --runtime PATH --prompt TEXT ...for manually managed runtimes;pitot dev --host devin -- devin -p "PROMPT"transparently launchesdevin acp.pitot init --host devinprints ACP usage (no hook files);doctor --host devinverifies binary, version, anddevin acp --help;pitot hook devinrejects with ACP guidance. Single-prompt only for the initial release; unsupported flags return precise usage errors.hook_controlrenamedaction_control;CapabilityHookControlretained as a deprecated Go alias. Verification manifest bumped to schema v7 with Devin asintegration: acp_client.devin_releaseinstaller using the version-specific official manifest with platform/arch selection and archive SHA-256 verification.de6e255a): explicitAPPDATA/LOCALAPPDATAisolation roots so Devin resolves its config directory in isolated runtimes.2026-07-31-devin-acp-support.md), generated README inventory, and distribution projection updated.Verification
[allow, deny], exactly one canary execution, denied-canary absence, model continuation, nonce-bound final output, zero exit).go test ./..., full Python/supervisor suites, wind-tunnel, projection checks — green.