docs: add host affordance bridge roadmap#565
Open
donbeave wants to merge 90 commits into
Open
Conversation
00aabda to
35f93d1
Compare
cce24f8 to
725fb2c
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Move the attach wire protocol into jackin-protocol, add the capsule attach-proxy relay, and add an opt-in host-owned attach loop behind JACKIN_HOST_ATTACH=1. Also install Linux clipboard helpers in the construct image and update the host affordance bridge roadmap with the captured preflight evidence and remaining parity gaps. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Move the OSC 10/11 default-color probe into jackin-tui so both Capsule and the opt-in host attach client use the same parser and query behavior. Host attach now sends queried default colors in Hello and forwards any bytes typed during the query window as normal input. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Show transient Capsule feedback for staged, blocked, and rejected clipboard image paste frames. Paste staged paths with bracketed-paste wrappers when the focused pane requests them, and document the completed slice in the host affordance roadmap. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Add a host-open attach frame for HTTP(S) URLs and wire the GitHub context dialog to expose separate copy, open PR, and open CI actions. Capture the best available check link from gh pr checks and document the updated roadmap scope. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Resolve Open CI targets from gh pr checks first, then statusCheckRollup detailsUrl, then the PR checks tab. Keep fallback lookup non-fatal and document the implemented selection order. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
61aed4b to
503ec7f
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
dfb8ee2 to
8f08fec
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
e006b2d to
94a877f
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
6368e12 to
48f4282
Compare
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
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
Implements the opt-in host affordance bridge foundation behind
JACKIN_HOST_ATTACH=1and keeps the roadmap as the live implementation contract. The PR started as roadmap/preflight work, but now includes the first working slices for host-owned attach, clipboard image staging, explicit host image paste/stage commands, GitHub/CI host-open actions, visible URL open actions, host-link opt-out, host-open URL log redaction, host notices, Linux clipboard setup diagnostics, and chunked file export.The default attach path still uses the existing in-container Capsule client. Host attach remains opt-in until we finish live validation in a new isolated throwaway jackin' instance.
Implemented
jackin-protocol.jackin-capsule attach-proxystdio relay and host transport selection: direct Unix socket when available, proxy fallback when direct connect fails.xclip,xauth, andwl-clipboardfor Linux CLI/runtime compatibility, while documenting that these do not bridge the macOS host clipboard.docker/construct/VERSIONto0.9-trixiebecause the construct image now bakes clipboard helper packages and CI confirmed0.8-trixiewas already published.ClipboardImageframes, including chunked large-image transfer with offsets, SHA-256, and a 64 MiB first cap./jackin/run/clipboard/staging, bracketed-paste-aware staged-path insertion, and visible image paste/rejection feedback.wl-paste/xclipimage readers gated by host display env./jackin/run/clipboard/, reports the staged path, and leaves focused pane input untouched.WAYLAND_DISPLAY/DISPLAY, missing host-sidewl-paste, and missing host-sidexclip.gh pr checkslinkfields plusstatusCheckRollup.detailsUrlfallback.http,https, andmailtoURLs,Alt/Ctrlmodified-click opening of visible HTTP(S) URLs in mouse-disabled panes, OSC 8mailtotargets, and command-palette Open link under cursor.JACKIN_OPEN_LINKS=deny|off|nodisables jackin' host browser-open actions in Capsule and the host attach client without disabling normal terminal OSC 8 passthrough.JACKIN_RUN_DIAGNOSTICS_PATHso Capsule Debug info copies the exact host diagnostics JSONL path instead of guessing from the container home.HostNoticeframes so host-open and export results show up in Capsule instead of only host logs.Remaining before default-on
JACKIN_HOST_ATTACH=1in Ghostty against a new isolated throwaway jackin' instance: text paste, mouse routing, resize, focus, pane switching, bracketed paste, OSC 52 copy, selection copy, clean detach, and image paste into real agent prompts.Ctrl+V, Paste image from host clipboard, and Stage image without pasting.Alt/Ctrlclick, Open link under cursor,JACKIN_OPEN_LINKSdenial, and file export through the opt-in host attach loop.Verification
cargo fmt --checkcargo check -p jackin-runtimecargo check -p jackin-capsule -p jackin-runtime -p jackin-protocolcargo check -p jackin-capsule -p jackin-runtime -p jackin-corecargo clippy -p jackin-protocol -p jackin-runtime -p jackin-capsule --all-targets -- -D warningscargo clippy --workspace --all-targets --all-features --locked -- -D warningscargo xtask construct assert-version-unpublishedcargo test -p jackin-core open_links_allowed -- --nocapturecargo test -p jackin-core redact_url_for_log -- --nocapturecargo test -p jackin-runtime host_open_command -- --nocapturecargo test -p jackin-runtime host_clipboard -- --nocapturecargo test -p jackin-runtime linux_clipboard_backend -- --nocapturecargo test -p jackin-runtime explicit_clipboard_image_request_returns_probe_error_to_capsule -- --nocapturecargo test -p jackin-runtime host_file_export_abort_removes_temp_and_rejects_end -- --nocapturecargo test -p jackin-runtime debug_runtime_envs_include_run_id_and_host_diagnostics_path -- --nocapturecargo test -p jackin-protocol attach::tests::server_frames_roundtrip -- --nocapturecargo test -p jackin-capsule host_url_open_policy -- --nocapturecargo test -p jackin-capsule diagnostics_path -- --nocapturecargo test -p jackin-capsule stage_image -- --nocapturecargo test -p jackin-capsule stage_only_clipboard_image_response_does_not_paste_path -- --nocapturecargo test -p jackin-capsule clipboard -- --nocapturecargo test -p jackin-term hyperlink -- --nocapturecargo test -p jackin-capsule palette_command_route_keeps_dialog_drill_down_semantics -- --nocapturecargo test -p jackin-capsule palette_routes_map_to_visible_frame_plans -- --nocapturecargo test -p jackin-capsule frame_plans_keep_diff_tier_reasons_out_of_full_redraws -- --nocapturecargo test -p jackin-capsule paste_image_palette_action_sends_typed_protocol_frame -- --nocapturecargo test -p jackin-capsule modified_primary_press_maps_to_visible_url_open_intent -- --nocapturecargo test -p jackin-capsule modified_click_visible_url_sends_typed_protocol_frame -- --nocapturecargo test -p jackin-capsule open_link_under_cursor -- --nocapturecargo test -p jackin-capsule open_host_url_dialog_action_sends_typed_protocol_frame -- --nocapturecargo test -p jackin-capsule github_context_unavailable_ci_row_is_not_clickable -- --nocapturegit diff --checkcd docs && bun run buildcd docs && bun run check:repo-linkscd docs && bun run check:roadmap-sidebarcd docs && bunx tsc --noEmitcd docs && bun testcargo test -p jackin-capsule open_link_under_cursor_palette -- --nocapture
cargo test -p jackin-capsule modified_url_hover -- --nocapturecargo test -p jackin-capsule link_hover_notice -- --nocapturecargo test -p jackin-capsule open_link_under_cursor_palette -- --nocapturecargo test -p jackin-capsule --libcargo test -p jackin-capsule pointer_shape -- --nocapturecargo test -p jackin-capsule modified_url_hover -- --nocapturecargo test -p jackin-capsule --libcargo test -p jackin-capsule modified_click -- --nocapturecargo test -p jackin-capsule chunked_transfer_rejects_oversize_start -- --nocapturecargo test -p jackin-capsule clipboard_image_notice_takes_priority -- --nocapturecargo test -p jackin-capsule --libcd docs && bun run buildcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcargo test -p jackin-runtime attach_protocol_preserves_bracketed_paste_and_mouse_bytes -- --nocapturecargo test -p jackin-runtime attach_protocol_writes_osc52_output_unchanged -- --nocapturecargo test -p jackin-runtime host_attach::tests::attach_protocol -- --nocapturecargo test -p jackin-runtime --libcd docs && bun run buildcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildcargo test -p jackin-capsule open_host_url_dialog_action_honors_operator_opt_out -- --nocapturecargo test -p jackin-capsule --libcargo fmt --checkcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run build(rerun passed after one prerender 404 race on/reference/roadmap/host-affordance-bridge-preflight)cd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildcargo test -p jackin-capsule cleanup_removes_staged_files_but_leaves_non_files -- --nocapturecargo test -p jackin-capsule --libcargo fmt --checkcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildcargo test -p jackin-core host_open_url_policy_allows_http_https_mailto_only -- --nocapturecargo test -p jackin-protocol --libcargo test -p jackin-runtime host_open_command_accepts_mailto_urls -- --nocapturecargo test -p jackin-runtime --libcargo test -p jackin-capsule modified_click_accepts_mailto_osc8_target -- --nocapturecargo test -p jackin-capsule --libcargo fmt --checkgit diff --checkcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildcargo test -p jackin-capsule osc8_uri -- --nocapturecargo test -p jackin-capsule modified_click_accepts_visible_mailto_token -- --nocapturecd docs && bun run build(rerun passed after one prerender 404 race on/guides/host-affordances)Follow-up 2026-06-12:
Additional verification:
cargo fmt --checkcargo test -p jackin-capsule file_export -- --nocapturecargo test -p jackin-runtime host_file_export -- --nocapturecargo test -p jackin-runtime export_source_path_category -- --nocapturecargo test -p jackin-capsule export_source_category -- --nocapturecd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildgit diff --checkFollow-up 2026-06-12b:
file:/javascript:/data:style targets now consume the host-open gesture, showHost link rejected: unsupported URL scheme, and do not forward mouse bytes to the pane or emit host-open frames.Additional verification:
cargo fmt --checkcargo test -p jackin-capsule modified_click_rejects_unsafe -- --nocapturecargo test -p jackin-capsule modified_click_accepts_visible_mailto_token -- --nocapturecargo test -p jackin-capsule modified_click_visible_url_sends_typed_protocol_frame -- --nocapturecargo test -p jackin-capsule modified_url_hover_renders_visible_target_without_forwarding_to_pty -- --nocapturecd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildgit diff --checkFollow-up 2026-06-12c:
file:URLs now reject with notice and emit no host-open frame.Additional verification:
cargo fmt --checkcargo test -p jackin-capsule open_link_under_cursor_palette_rejects_unsafe_visible_url -- --nocapturegit diff --checkFollow-up 2026-06-12d:
Additional verification:
cargo fmt --checkcargo test -p jackin-core has_url_scheme -- --nocapturecargo test -p jackin-capsule open_link_under_cursor_palette -- --nocapturegit diff --checkFollow-up 2026-06-12e:
Additional verification:
cargo fmt --checkcargo test -p jackin-capsule stage_only_clipboard_image_response_does_not_paste_path -- --nocapturecargo test -p jackin-capsule stage_image -- --nocapturecargo test -p jackin-runtime host_file_export -- --nocapturecd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildgit diff --checkFollow-up 2026-06-12f:
Additional verification:
cd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildgit diff --checkFollow-up 2026-06-12g:
Additional verification:
cargo fmt --checkgit diff --checkcargo test -p jackin-protocol -p jackin-capsule -p jackin-runtimecd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run buildFollow-up 2026-06-12h
Added explicit Debug info diagnostics reveal over host attach:
Rin Debug info sends a typedHostRevealPathattach frame for the debug diagnostics JSONL path.data/diagnostics/runs/directory, requires.jsonl, then reveals it with the host file manager.Verification:
cargo test -p jackin-protocol -p jackin-capsule -p jackin-runtimecargo fmt --checkgit diff --checkcd docs && bun run check:repo-linkscd docs && bunx tsc --noEmitcd docs && bun testcd docs && bun run build\n\n### Follow-up 2026-06-12i\n\nAdded launch failure artifact reveal:\n\n-Rin the rich launch failure popup reveals the hovered diagnostics/docker-output row, or diagnostics first when no revealable row is hovered.\n- Launch host terminals now share the same host desktop reveal helper used by host attach file export/debug diagnostics.\n- The failure popup showsRevealed!feedback while staying open for copy/retry/ack actions.\n- Docs now cover the launch failure reveal affordance and keep the roadmap/preflight gates current.\n\nVerification:\n\n-cargo fmt --check\n-git diff --check\n-cargo test -p jackin-launch -p jackin-runtime\n-cd docs && bun run check:repo-links\n-cd docs && bunx tsc --noEmit\n-cd docs && bun test\n-cd docs && bun run build\n\n### Follow-up 2026-06-12j\n\nFixed stale image-paste request mode:\n\n-Paste image from host clipboardandStage image from clipboard pathnow explicitly reset Capsule request mode to paste-path before emitting host frames.\n- This prevents an older pendingStage image without pastingrequest from suppressing a later explicit paste/path-stage response.\n- Roadmap test coverage note updated.\n\nVerification:\n\n-cargo fmt --check\n-git diff --check\n-cargo test -p jackin-capsule stage_image_path_palette_action_sends_typed_protocol_frame -- --nocapture\n-cargo test -p jackin-capsule image_palette_action_sends_typed_protocol_frame -- --nocapture\n-cargo test -p jackin-capsule --lib\n-cd docs && bun run check:repo-links\n-cd docs && bunx tsc --noEmit\n-cd docs && bun test\n-cd docs && bun run build\n\n### Follow-up 2026-06-12k\n\nAccepted clipboard textfile://image URLs for explicit path staging:\n\n-Stage image from clipboard pathnow accepts either an absolute host path or afile://URL and resolves it through the maintainedurlcrate.\n- Plain text paste remains inert; explicit palette action still required.\n- Operator guide and roadmap now document path-or-file-URL behavior.\n\nVerification:\n\n-cargo fmt --check\n-git diff --check\n-cargo test -p jackin-runtime image_from_path_text -- --nocapture\n-cd docs && bun run check:repo-links\n-cd docs && bunx tsc --noEmit\n-cd docs && bun test\n-cd docs && bun run buildFollow-up 2026-06-12l:
public.tiff./goaldocs describe PNG -> TIFF -> Finder/file-url reader order.cargo fmt --check,git diff --check,cargo test -p jackin-runtime host_clipboard -- --nocapture,cd docs && bun run check:repo-links,bunx tsc --noEmit,bun test, andbun run build.Follow-up 2026-06-12m:
/goaltext: code-level Debug info and launch-failure reveal paths are implemented; remaining work is live validation plus future dialog/file-row export targets.git diff --check,cd docs && bun run check:repo-links, andbunx tsc --noEmit.Follow-up 2026-06-12n:
Follow-up 2026-06-12o:
Follow-up 2026-06-12p:
Follow-up 2026-06-12q:
Follow-up 2026-06-12r:
R/Oreveal the run JSONL through the host launch terminal, and reveal-only hyperlink hits set the pointer/reveal path without copying.R/O reveal diagnosticsand synced Host Affordances plus roadmap/preflight wording with launch-cockpit and Capsule behavior.Follow-up 2026-06-12s:
Oopens the hovered run diagnostics / docker output artifact through the host file opener, falls back to diagnostics when no artifact row is hovered, and keeps the failure popup open withOpened!feedback.open,xdg-open,explorer.exe) and wired it through the launch cockpit host-terminal boundary.Follow-up 2026-06-12t:
Follow-up 2026-06-12u:
wl-clipboard,xauth, andxclipstay installed for Amp/Linux CLI clipboard-helper compatibility.