The platform now has `scope: 'shared'` for a dependency every account must be able to run, and the check that goes with it — world-executable, and every parent directory traversable. iris cannot use it yet, for a reason worth writing down rather than rediscovering: it BUILDS its binary in the sidecar rather than declaring it as a dependency, so there is nothing for the probe to judge. The remaining half is this sidecar installing into /usr/local/bin. Also corrected open item 3, which said a member's agent "cannot read it there". On alpha it can — /home/<owner> is mode 751, so an absolute path traverses. That is an accident, not a design, and 750 would break it silently. Stated that way so nobody concludes it already works. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
66 lines
3.3 KiB
TypeScript
66 lines
3.3 KiB
TypeScript
import type { PluginManifest } from '@@/plugins/manifest';
|
|
|
|
/**
|
|
* Iris — screenshots of live websites, so agents can SEE rendered pages instead of inferring them.
|
|
*
|
|
* ── What this plugin actually ships ──
|
|
*
|
|
* A CLI (`iris`, github.com/brijr/iris) and the knowledge of how to use it. There is no api/, no web/, no
|
|
* db/: the consumer is an agent's shell, not a screen. The plugin's value is delivered through three
|
|
* channels the platform already carries across an install:
|
|
*
|
|
* sidecar/ builds the binary once with cargo, installs the browser wrapper, then supervises
|
|
* affordances/ the short always-loaded note that tells every agent the tool exists
|
|
* skills/ the full flag reference, loaded on demand
|
|
*
|
|
* ── Why the sidecar builds instead of `release` fetching ──
|
|
*
|
|
* Upstream is a Rust crate. The install pipeline can install packages and fetch release binaries, but it
|
|
* deliberately has no build step — so the one-time `cargo install iris-screenshot` belongs to this
|
|
* plugin's own process, which PM2 starts at the end of the install. First start compiles (minutes);
|
|
* every later start finds the binary and skips. `pm2 logs officer-iris` is where the build narrates.
|
|
*
|
|
* ── Why no browser dependency is declared ──
|
|
*
|
|
* Iris renders through a Chrome-family browser, and Brave, Chromium and Chrome are all fine — the wrapper
|
|
* (`bin/iris-browser`) resolves whichever is present. Declaring one here would be wrong twice over: the
|
|
* package story differs per distro (Ubuntu's apt chromium is a snap stub), and the browser this plugin
|
|
* WANTS is the desktop plugin's, because that is where a person signs in to the sites they ask about.
|
|
* The contract with the desktop plugin is the persistent profile at ~/.config/officer/browser-profile —
|
|
* see README.md.
|
|
*/
|
|
export const manifest: PluginManifest = {
|
|
publisher: 'officerdev',
|
|
version: '0.1.0',
|
|
platform: '>=1.0.0',
|
|
|
|
label: 'Iris',
|
|
summary: 'Website screenshots for agents — eyes on any rendered page, your own Officer included',
|
|
icon: 'Camera',
|
|
color: '#8b5cf6',
|
|
|
|
// Empty, and honestly so: the surface is a binary agents run in their own shell, which the platform's
|
|
// permission gate cannot stand in front of. Whose sessions a capture rides is decided by whose Linux
|
|
// user runs it — the wrapper reads $HOME, so the kernel answers, not a grant. An api/ or web/ arriving
|
|
// later brings its key with it.
|
|
permissions: [],
|
|
|
|
osDependencies: [
|
|
{
|
|
// Owner-scoped: cargo is the BUILDER, run once by this sidecar as the owner. Members never invoke
|
|
// it. What they need is the binary it produces — see the iris entry below.
|
|
binary: 'cargo',
|
|
reason:
|
|
'Builds the iris screenshot binary from source, once, on first start. Nothing works without the build. ' +
|
|
'Note: iris needs Rust 1.88+; if your distribution ships older, the sidecar log says exactly what to do.',
|
|
packages: { apt: 'cargo', dnf: 'cargo', pacman: 'rust', brew: 'rust' },
|
|
},
|
|
{
|
|
binary: 'cc',
|
|
reason: 'Links the iris binary during that one-time build.',
|
|
// No brew entry: macOS has cc once the Xcode command-line tools exist, which Homebrew itself requires.
|
|
packages: { apt: 'build-essential', pacman: 'base-devel', dnf: 'gcc' },
|
|
},
|
|
],
|
|
};
|