{ "name": "runa", "publisher": "runa", "displayName": "Runa — Rune Actors", "description": "Edit image source files and inspect and control actors in a trusted localhost Runa image.", "version": "0.0.0", "private": true, "engines": { "vscode": "^1.96.0", "node": ">=22" }, "categories": [ "Other" ], "main": "./out/src/extension.js", "activationEvents": [ "onDebug:runa", "onFileSystem:runa-actor", "onView:runa.actors", "onView:runa.sources", "onFileSystem:runa-image" ], "scripts": { "compile": "tsc -p .", "package": "npm run compile && vsce package --allow-missing-repository --no-rewrite-relative-links --skip-license --out runa.vsix", "install:local": "npm run package && node scripts/install-local.cjs", "lint": "tsc -p . --noEmit && prettier --check .", "format": "prettier --write .", "test": "npm run compile && node --test out/test/*.test.js", "test:integration": "cargo build --manifest-path ../Cargo.toml -p runa -p runa-cli && npm run compile && node --test out/integration/*.test.js", "test:host": "cargo build --manifest-path ../Cargo.toml -p runa && npm run compile && node scripts/test-host.cjs" }, "dependencies": { "lossless-json": "^4.3.0", "ws": "^8.18.3" }, "devDependencies": { "@vscode/vsce": "^4.1.0", "@vscode/test-electron": "^2.5.2", "@types/node": "^22.0.0", "@types/vscode": "~1.96.0", "@types/ws": "^8.18.1", "prettier": "^3.6.2", "typescript": "^5.9.3" }, "contributes": { "debuggers": [ { "type": "runa", "label": "Runa Actor", "languages": [ "rune" ], "configurationAttributes": { "attach": { "properties": { "image": { "type": "boolean", "description": "Discover all actors as threads without pausing them on attach." }, "actorRef": { "type": "string", "description": "Actor reference in the connected image. Omit to choose an actor." } } } }, "initialConfigurations": [ { "type": "runa", "request": "attach", "name": "Attach to Runa Actor" } ] } ], "breakpoints": [ { "language": "rune" } ], "languages": [ { "id": "rune", "aliases": [ "Rune" ], "extensions": [ ".rn" ], "mimetypes": [ "text/x-rune" ] } ], "commands": [ { "command": "runa.debugActor", "title": "Debug Actor", "category": "Runa", "enablement": "runa.connected", "icon": "$(debug-alt)" }, { "command": "runa.stepOver", "title": "Step Over Source Line", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.stepOut", "title": "Step Out of Function", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.stepSource", "title": "Step Into Source Line", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.setBreakpoints", "title": "Set Actor Breakpoints...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.inspectExecution", "title": "Inspect Execution Stack...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.newSource", "title": "New Source File...", "category": "Runa", "icon": "$(new-file)", "enablement": "runa.connected" }, { "command": "runa.renameSource", "title": "Rename or Move Source...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.deleteSource", "title": "Delete Source", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.editBehavior", "title": "Edit Current Behavior", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.goToBehavior", "title": "Go to Behavior", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.updateBehavior", "title": "Update Behavior...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.editState", "title": "Edit Actor State...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.editMessages", "title": "Edit Reserved and Queued Messages...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.logLevel", "title": "Set Actor Log Level...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.connect", "title": "Connect to Local Image", "category": "Runa" }, { "command": "runa.disconnect", "title": "Disconnect", "category": "Runa" }, { "command": "runa.refresh", "title": "Refresh Image", "category": "Runa", "icon": "$(refresh)" }, { "command": "runa.spawn", "title": "Spawn Actor", "category": "Runa", "icon": "$(add)", "enablement": "runa.connected" }, { "command": "runa.spawnSource", "title": "Spawn", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.spawnSourceWithState", "title": "Spawn with State...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.commitSource", "title": "Commit Source", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.sourceHistory", "title": "Source History...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.rollbackSource", "title": "Roll Back Source...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.send", "title": "Send Message", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.stop", "title": "Stop Actor (Graceful Removal)", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.kill", "title": "Kill Actor (Remove Immediately)", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.restart", "title": "Restart Actor", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.pause", "title": "Pause Actor", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.resume", "title": "Resume Actor", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.reload", "title": "Reload Actor Source", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.become", "title": "Become Source...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.saveImage", "title": "Save Image...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.restoreImage", "title": "Restore Image...", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.tick", "title": "Advance Scheduler", "icon": "$(debug-step-over)", "category": "Runa", "enablement": "runa.connected" }, { "command": "runa.copyActorReference", "title": "Copy Actor Reference", "category": "Runa", "icon": "$(copy)" }, { "command": "runa.inspect", "title": "Inspect Actor", "category": "Runa", "icon": "$(inspect)" } ], "viewsContainers": { "activitybar": [ { "id": "runa", "title": "Runa", "icon": "resources/runa.svg" } ] }, "views": { "runa": [ { "id": "runa.sources", "name": "Image Sources", "visibility": "visible" }, { "id": "runa.actors", "name": "Actors", "visibility": "visible" } ] }, "viewsWelcome": [ { "view": "runa.sources", "contents": "Connect to browse and edit the image's virtual filesystem.\n[Connect](command:runa.connect)", "when": "!runa.connected" }, { "view": "runa.actors", "contents": "Connect to a trusted local Runa image.\n[Connect](command:runa.connect)", "when": "!runa.connected" } ], "menus": { "view/title": [ { "command": "runa.newSource", "when": "view == runa.sources && runa.connected", "group": "navigation" }, { "command": "runa.tick", "when": "view == runa.actors && runa.connected", "group": "navigation" }, { "command": "runa.connect", "when": "view == runa.sources && !runa.connected", "group": "navigation" }, { "command": "runa.refresh", "when": "view == runa.sources && runa.connected", "group": "navigation" }, { "command": "runa.spawn", "when": "view == runa.actors && runa.connected", "group": "navigation" }, { "command": "runa.connect", "when": "view == runa.actors && !runa.connected", "group": "navigation" }, { "command": "runa.refresh", "when": "view == runa.actors && runa.connected", "group": "navigation" }, { "command": "runa.disconnect", "when": "view == runa.actors && runa.connected" } ], "view/item/context": [ { "command": "runa.debugActor", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@0" }, { "command": "runa.stepOver", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@2a" }, { "command": "runa.stepOut", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@2b" }, { "command": "runa.stepSource", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@2" }, { "command": "runa.setBreakpoints", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@3" }, { "command": "runa.inspectExecution", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "debug@1" }, { "command": "runa.newSource", "when": "view == runa.sources && viewItem == runa.sourceDirectory && runa.connected", "group": "runa_0_files@1" }, { "command": "runa.renameSource", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_0_files@2" }, { "command": "runa.deleteSource", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_0_files@3" }, { "command": "runa.editBehavior", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "behavior@1" }, { "command": "runa.goToBehavior", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "behavior@2" }, { "command": "runa.updateBehavior", "when": "view == runa.actors && viewItem == runa.actor && runa.connected", "group": "behavior@3" }, { "command": "runa.copyActorReference", "when": "view == runa.actors && viewItem == runa.actor", "group": "inline@2" }, { "command": "runa.copyActorReference", "when": "view == runa.actors && viewItem == runa.actor", "group": "copy" }, { "command": "runa.editState", "when": "view == runa.actors && viewItem == runa.actor", "group": "edit@1" }, { "command": "runa.editMessages", "when": "view == runa.actors && viewItem == runa.actor", "group": "edit@2" }, { "command": "runa.logLevel", "when": "view == runa.actors && viewItem == runa.actor", "group": "logging@1" }, { "command": "runa.spawnSource", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_1_spawn@1" }, { "command": "runa.spawnSourceWithState", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_1_spawn@2" }, { "command": "runa.commitSource", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_2_source@1" }, { "command": "runa.sourceHistory", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_2_source@2" }, { "command": "runa.rollbackSource", "when": "view == runa.sources && viewItem == runa.sourceFile && runa.connected", "group": "runa_2_source@3" }, { "command": "runa.send", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@1" }, { "command": "runa.pause", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@2" }, { "command": "runa.resume", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@3" }, { "command": "runa.stop", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@4" }, { "command": "runa.kill", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@5" }, { "command": "runa.restart", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@6" }, { "command": "runa.reload", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@7" }, { "command": "runa.become", "when": "view == runa.actors && viewItem == runa.actor", "group": "actor@8" }, { "command": "runa.inspect", "when": "view == runa.actors && viewItem == runa.actor", "group": "inline" } ], "explorer/context": [ { "command": "runa.spawnSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_1_spawn@1" }, { "command": "runa.spawnSourceWithState", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_1_spawn@2" }, { "command": "runa.commitSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@1" }, { "command": "runa.sourceHistory", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@2" }, { "command": "runa.rollbackSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@3" } ], "editor/title/context": [ { "command": "runa.spawnSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_1_spawn@1" }, { "command": "runa.spawnSourceWithState", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_1_spawn@2" }, { "command": "runa.commitSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@1" }, { "command": "runa.sourceHistory", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@2" }, { "command": "runa.rollbackSource", "when": "resourceScheme == runa-image && resourceExtname == .rn && runa.connected", "group": "runa_2_source@3" } ], "commandPalette": [ { "command": "runa.spawnSource", "when": "runa.connected" }, { "command": "runa.spawnSourceWithState", "when": "runa.connected" }, { "command": "runa.commitSource", "when": "runa.connected" }, { "command": "runa.sourceHistory", "when": "runa.connected" }, { "command": "runa.rollbackSource", "when": "runa.connected" } ] }, "configuration": { "title": "Runa", "properties": { "runa.address": { "type": "string", "default": "127.0.0.1:3737", "scope": "machine", "description": "Trusted local image endpoint: numeric IPv4 loopback or [::1]:port. No authentication is available." }, "runa.dapAddress": { "type": "string", "default": "127.0.0.1:4711", "scope": "machine", "description": "Trusted image server's DAP endpoint. Must match runa --dap-listen; numeric loopback address only." }, "runa.autoAttachDebugger": { "type": "boolean", "default": true, "description": "Automatically start an image-wide debugger when connecting, without pausing actors. Applies on the next connection." } } } } }