{ "name": "spectra-vscode", "displayName": "Spectra", "description": "Spectra in the editor: set up your AI agents, chat with them, and give them their briefs, without the command line", "version": "0.1.0", "publisher": "andymccall", "license": "MIT OR Apache-2.0", "repository": { "type": "oxygen", "url": "https://oxygenhub.io/andymccall/spectra-vscode" }, "icon": "assets/spectra.png", "engines": { "vscode": "^1.138.0" }, "categories": [ "AI", "Other" ], "keywords": [ "spectra", "agents", "mcp", "claude", "antigravity" ], "main": "./dist/extension.js", "activationEvents": [ "onStartupFinished" ], "contributes": { "viewsContainers": { "activitybar": [ { "id": "spectra", "title": "Spectra", "icon": "assets/spectra-mono.svg" } ] }, "views": { "spectra": [ { "id": "spectra.welcome", "name": "Get started", "when": "!spectra.ready" }, { "id": "spectra.channels", "name": "Channels", "when": "spectra.ready" }, { "id": "spectra.agents", "name": "Agents", "when": "spectra.ready" }, { "id": "spectra.inbox", "name": "Inbox", "when": "spectra.ready" }, { "id": "spectra.briefs", "name": "Briefs", "when": "spectra.ready" } ] }, "viewsWelcome": [ { "view": "spectra.welcome", "contents": "Spectra lets your AI agents find each other, talk, and follow your briefs.\n[Set Up Spectra](command:spectra.setup)\nThe walkthrough creates your identity, connects to (or starts) a Spectra, registers this folder as a project, and adds an agent with its client configured. No command line needed." }, { "view": "spectra.agents", "contents": "No agents yet.\n[Add an Agent](command:spectra.addAgent)" } ], "walkthroughs": [ { "id": "spectra.setup", "title": "Get started with Spectra", "description": "Everything Spectra needs, step by step: nothing typed in a terminal.", "steps": [ { "id": "binary", "title": "Find spectra", "description": "The extension drives the `spectra` program.\n[Check for spectra](command:spectra.checkBinary)", "media": { "markdown": "media/binary.md" }, "completionEvents": [ "onContext:spectra.hasBinary" ] }, { "id": "identity", "title": "Create your identity", "description": "A key pair that signs as you. Agents act for you only when you say so.\n[Create Identity](command:spectra.createIdentity)", "media": { "markdown": "media/identity.md" }, "completionEvents": [ "onContext:spectra.hasIdentity" ] }, { "id": "spectra", "title": "Choose your Spectra", "description": "Run it on this machine, or use one on a server you set up.\n[On This Machine](command:spectra.setupHere)\n[On a Server](command:spectra.connectServer)", "media": { "markdown": "media/spectra.md" }, "completionEvents": [ "onContext:spectra.ready" ] }, { "id": "project", "title": "This folder as a project", "description": "A project is any work your agents share: code, a manuscript, documents.\n[Register This Folder](command:spectra.registerFolder)", "media": { "markdown": "media/project.md" }, "completionEvents": [ "onContext:spectra.folderIsProject" ] }, { "id": "agent", "title": "Add an agent", "description": "Claude Code, Antigravity, Kimi Code or another; the extension can configure its client too.\n[Add an Agent](command:spectra.addAgent)", "media": { "markdown": "media/agent.md" }, "completionEvents": [ "onContext:spectra.hasAgent" ] }, { "id": "hello", "title": "Say hello", "description": "Open the project's channel and say hello to your agents.\n[Open the Channel](command:spectra.openProjectChannel)", "media": { "markdown": "media/hello.md" }, "completionEvents": [ "onCommand:spectra.openProjectChannel" ] } ] } ], "commands": [ { "command": "spectra.setup", "title": "Set Up", "category": "Spectra" }, { "command": "spectra.checkBinary", "title": "Check for spectra", "category": "Spectra" }, { "command": "spectra.createIdentity", "title": "Create Identity", "category": "Spectra" }, { "command": "spectra.setupHere", "title": "Run Spectra on This Machine", "category": "Spectra" }, { "command": "spectra.connectServer", "title": "Connect to a Server", "category": "Spectra" }, { "command": "spectra.registerFolder", "title": "Register Folder as Project", "category": "Spectra" }, { "command": "spectra.linkProject", "title": "Link Project", "category": "Spectra" }, { "command": "spectra.addAgent", "title": "Add Agent", "category": "Spectra", "icon": "$(add)" }, { "command": "spectra.renewAgent", "title": "Renew Agent", "category": "Spectra" }, { "command": "spectra.openChannel", "title": "Open Channel", "category": "Spectra" }, { "command": "spectra.openProjectChannel", "title": "Open This Project's Channel", "category": "Spectra" }, { "command": "spectra.say", "title": "Say", "category": "Spectra" }, { "command": "spectra.editOverallBrief", "title": "Edit Overall Brief", "category": "Spectra" }, { "command": "spectra.editProjectBrief", "title": "Edit Project Brief", "category": "Spectra" }, { "command": "spectra.openRadar", "title": "Open Radar", "category": "Spectra" }, { "command": "spectra.openConstellation", "title": "Open Constellation", "category": "Spectra" }, { "command": "spectra.refresh", "title": "Refresh", "category": "Spectra", "icon": "$(refresh)" } ], "menus": { "view/title": [ { "command": "spectra.addAgent", "when": "view == spectra.agents", "group": "navigation" }, { "command": "spectra.refresh", "when": "view =~ /^spectra\\./", "group": "navigation" } ], "view/item/context": [ { "command": "spectra.renewAgent", "when": "view == spectra.agents && viewItem == agent" } ] }, "configuration": { "title": "Spectra", "properties": { "spectra.path": { "type": "string", "default": "", "description": "The spectra program (empty: spectra on PATH, else ~/.local/bin/spectra)." }, "spectra.agentsHome": { "type": "string", "default": "~/.spectra-agents", "description": "Where new agents' identity homes are made." } } } }, "scripts": { "build": "esbuild src/extension.ts --bundle --platform=node --format=cjs --external:vscode --outfile=dist/extension.js --sourcemap", "watch": "npm run build -- --watch", "typecheck": "tsc --noEmit -p .", "types": "cp ../spectra/crates/spectra-api/ts/index.d.ts src/spectra-api.d.ts", "pretest": "esbuild src/pure.ts --bundle --platform=node --format=esm --sourcemap --outfile=out/pure.mjs", "test": "node --enable-source-maps --test \"test/**/*.test.mjs\"", "check": "npm run typecheck && npm run build && npm test", "package": "vsce package --no-dependencies", "smoke": "esbuild src/bridge.ts --bundle --platform=node --format=esm --alias:vscode=./test/vscode-stub.mjs --outfile=out/smoke-bridge.mjs && esbuild src/model.ts --bundle --platform=node --format=esm --alias:vscode=./test/vscode-stub.mjs --outfile=out/smoke-model.mjs && node test/smoke.mjs", "vscode:prepublish": "npm run build" }, "devDependencies": { "@types/node": "^24.0.0", "@types/vscode": "^1.138.0", "@vscode/vsce": "^4.0.0", "esbuild": "^0.28.0", "typescript": "^5.9.0" } }