Capture coverage: Copilot, Gemini CLI and Cursor observe; clipboard writes; structural web-agent detection - #103
Merged
Conversation
…rites; structural web-agent detection - Observe presets for GitHub Copilot (VS Code OTel, content capture off), Gemini CLI (OTLP/HTTP logs, logPrompts forced false) and Cursor (non-blocking hooks only; never a permission hook). Backup/preserve/refuse rules as for the other connectors; manual setup material in the dashboard. - OTLP endpoint with a separate write-only path token for clients that cannot send headers from a settings file; JSON only (415 for protobuf), bounded gzip; token redacted from access logs; per-app diagnostics channels. - Gemini CLI log adapter and Cursor hook adapter: structural allowlists, turn = prompt/generation, never falling back to the session. - Clipboard writes without a shortcut from the OS change counter (contents never read, never a paste, nothing while away); interaction events stamped with their occurrence time. - Web agents detected from structure first (aria-busy, streaming markers, data-testid send/stop, submit in composer form, Enter in message box); English labels only as fallback. Browser sensor 1.13.0. - Agents tab names only frameworks whose runs were actually hidden.
Owner
Author
|
Follow-up from end-to-end verification:
|
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.
Release 2 of the capture audit. Stacked on KAVentures/openworkgraph#102: the base is
fix/capture-correctness, so this diff shows only release 2. Merge #102 first; GitHub then retargets this PR tomain.What changes
Observe for GitHub Copilot, Gemini CLI and Cursor. The same switch, backup, preserve and refuse rules as Claude Code and Codex. Remove takes out only OpenWorkGraph's own entries.
github.copilot.chat.otel.*in the usersettings.json, withcaptureContent: false.invoke_agent/chat/execute_toolto run / model call / tool call. It never readsgen_ai.tool.call.arguments/resultorgen_ai.input.messages.settings.jsonhas comments (VS Code's JSONC). Manual setup shows the keys.telemetryblock withtarget: local,otlpProtocol: httpandlogPrompts: false. Gemini's default is true, which would put prompts, request/response text and tool arguments into its log events.user_prompt/api_response/api_error/tool_call(+ human accept/reject/modify decisions;auto_acceptis policy, not a person). It is an allowlist, so content stays out even if prompt logging is re-enabled.~/.cursor/hooks.jsongetssessionStart/End,beforeSubmitPrompt/stop(turn =generation_id),postToolUse(Failure)andsubagentStop.{"continue": true}/{}), then records, and always exits 0.preToolUse,beforeShellExecution,beforeMCPExecution,beforeReadFileandsubagentStartare never used.Endpoint for clients without headers
Authorizationfrom there. (Verified in their sources:exporter-*-otlp-httpwith{url: base + '/v1/…'}.)/agent-ingest/otlp/{copilot|gemini}/{token}/v1/{traces|logs|metrics}. The token is a separate write-only secret.[redacted]. Verified with a real uvicorn.copilot_otel,gemini_otelandcursor_hooks.Clipboard writes
clipboard_write.clipboard_write_detection_enabled: falseopts out.Web agents in any UI language
aria-busy,data-is-streaming,data-testidsend/stop tokens, a submit button in the composer's form, and Enter in the message box (not Shift+Enter or IME composition). The text is never read.Smaller
UserPromptSubmit/Stop(from Capture correctness: one collector, away spans, document boundaries, honest health #102).Verification
tests/test_agent_coverage_v099.py(14): endpoint, auth, 415, gzip, metrics, Observe off, redaction, all three presets including refusals, Cursor mapping, and the real hook process replying correctly with OpenWorkGraph unreachable.tests/test_capture_coverage_v099.py(2): the real collector loop covering write vs shortcut, paste linking and away.tests/js/agent_surface_structural.test.mjs(4): including a Swedish UI.check_injected_dashboard_js.pypasses.@opentelemetry/exporter-{trace,logs}-otlp-http0.222.0 packages against a real server:Not verified here / not included