-
Notifications
You must be signed in to change notification settings - Fork 0
File upload from the private artifact store #168
Copy link
Copy link
Closed
Labels
area:agent-runtimeInjected JS: inspection, pruning, refsInjected JS: inspection, pruning, refsarea:cliCLI parser, help, capabilitiesCLI parser, help, capabilitiesarea:core-protocolHeadlessProtocol: wire protocol, validation, transportHeadlessProtocol: wire protocol, validation, transportarea:linux-hostChromium host (LinuxHost/, CDP)Chromium host (LinuxHost/, CDP)area:macos-hostWKWebView host (main.swift, Host/)WKWebView host (main.swift, Host/)priority:mediumScheduled, not blockingScheduled, not blockingtype:featureNew capability or commandNew capability or commandtype:securitySecurity boundary or hardeningSecurity boundary or hardening
Description
Activity
Metadata
Metadata
Assignees
Labels
area:agent-runtimeInjected JS: inspection, pruning, refsInjected JS: inspection, pruning, refsarea:cliCLI parser, help, capabilitiesCLI parser, help, capabilitiesarea:core-protocolHeadlessProtocol: wire protocol, validation, transportHeadlessProtocol: wire protocol, validation, transportarea:linux-hostChromium host (LinuxHost/, CDP)Chromium host (LinuxHost/, CDP)area:macos-hostWKWebView host (main.swift, Host/)WKWebView host (main.swift, Host/)priority:mediumScheduled, not blockingScheduled, not blockingtype:featureNew capability or commandNew capability or commandtype:securitySecurity boundary or hardeningSecurity boundary or hardening
What an agent cannot do today
Agents cannot attach a file to
<input type=file>. Inspect deliberately does not advertiseupload. QA of resume/import/image flows requires a human. Downloads stay denied; this is the inverse: a user-supplied fixture enters the private artifact store, then the host attaches it.Proposed surface
headless artifacts add ./resume.pdf --name resume.pdf headless artifacts list headless upload --role textbox --name "Resume" --artifact resume.pdf headless upload @e12 --artifact resume.pdfartifacts addcopies a local regular file into the existing0700artifact store as a new0600O_EXCLname.uploadtakes the same target grammar asclickand an artifact basename only. The password never leaves the store as a socket payload; the host uses the on-disk path.Engines
Both if the engine can attach a file without an arbitrary-JS verb.
DOM.setFileInputFileswith the artifact path.UNSUPPORTED_CAPABILITYand declarefileUploadfalse. Do not fake it with page JavaScript that the site could observe as a hole.Contract
Architecture-decision entry in the same PR. Downloads remain denied. No home-directory paths on
upload. No TCP fixture server.artifacts add:pdf,png,jpg,jpeg,gif,webp,txt,csv,json. Nothtml,svg,exe, archives, or the blocked download extensions.upload:<input type=file>(or equivalent file control). Anything else isELEMENT_NOT_FOUND/ invalid target, not a silent click.uploadon file inputs once the command exists. Update the protocol test that currently forbids that string.Tests
Protocol: parse, reject path traversal, reject
.exe/.html, reject overwrite, reject oversized add, rejectuploadwithout a stored artifact, reject upload to a non-file control.Linux E2E: add a tiny pdf/png fixture, upload into a file input, assert the page sees a filename. macOS E2E: same, or assert
UNSUPPORTED_CAPABILITYif WebKit cannot attach files.Docs
COMMANDS.md,agentHelp, skill, capabilitiesfileUpload, what-is-excellent note that upload is artifact-store only.