Lays out Velox Download Manager (IDM-class download manager for Ubuntu 26.04) as a monorepo ready for parallel lane development. No implementation code by design. - docs/: architecture, roadmap M0-M7, IDM-parity GUI spec, engine design, Firefox extension spec, risks/spikes, packaging - contracts/: wire-contract skeleton (JSON Schema + fixture templates) — the single synchronization point between lanes - docs/agents/: one brief per lane (PROTO, CORE, DAEMON, GUI, EXT, PKG/QA) with owned directories, build order and definition of done - CLAUDE.md: rules of engagement — lane ownership, layering, non-negotiables - CMake scaffolding with dev/tsan/release/ci presets Two environment findings shape the design: Firefox here is the Mozilla snap (native-messaging risk, so the extension carries a loopback-WebSocket fallback), and Wayland forbids passive clipboard monitoring (so clipboard capture is explicit-action-first). Co-Authored-By: Claude Opus 5 <[email protected]>
63 lines
2.6 KiB
JSON
63 lines
2.6 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://velox.dev/schema/methods/capture.offer.schema.json",
|
|
"title": "capture.offer",
|
|
"description": "Firefox offers an intercepted response to the daemon. The daemon MUST reply within 750 ms; the extension abandons the offer and lets Firefox download normally on timeout. TEMPLATE — lane PROTO owns the final shape.",
|
|
"x-privileged": false,
|
|
"x-transports": ["uds", "ws"],
|
|
"x-deadlineMs": 750,
|
|
"type": "object",
|
|
"properties": {
|
|
"params": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["url", "method", "tabUrl"],
|
|
"properties": {
|
|
"url": { "type": "string", "format": "uri" },
|
|
"method": { "type": "string", "enum": ["GET", "POST"] },
|
|
"tabUrl": { "type": "string", "format": "uri" },
|
|
"headers": {
|
|
"type": "object",
|
|
"description": "Request headers Firefox was about to send, verbatim. Needed for signed-URL and referrer-gated CDNs.",
|
|
"additionalProperties": { "type": "string" }
|
|
},
|
|
"cookies": {
|
|
"type": "array",
|
|
"description": "Cookies for the URL, so authenticated downloads work outside the browser.",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "value"],
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"value": { "type": "string" },
|
|
"domain": { "type": "string" },
|
|
"path": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
"contentType": { "type": ["string", "null"] },
|
|
"contentLength": { "type": ["integer", "null"], "minimum": 0 },
|
|
"contentDisposition": { "type": ["string", "null"] },
|
|
"filename": { "type": ["string", "null"], "description": "Extension's best guess; the daemon may override" },
|
|
"userAgent": { "type": ["string", "null"] },
|
|
"referrer": { "type": ["string", "null"] },
|
|
"origin": { "type": "string", "description": "moz-extension://… — the daemon verifies this on the WS transport" }
|
|
}
|
|
},
|
|
"result": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["action"],
|
|
"properties": {
|
|
"action": { "type": "string", "enum": ["take", "ignore"] },
|
|
"taskId": { "type": ["string", "null"], "format": "uuid" },
|
|
"reason": {
|
|
"type": ["string", "null"],
|
|
"enum": ["excluded_host", "type_not_monitored", "below_min_size", "duplicate",
|
|
"capture_disabled", "user_declined", null]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|