{"_id":"@blackbelt-technology/pi-dashboard-automation-plugin","_rev":"5-cef808cf180140a9bf447ce1464b8180","name":"@blackbelt-technology/pi-dashboard-automation-plugin","dist-tags":{"latest":"0.8.0"},"versions":{"0.5.4":{"name":"@blackbelt-technology/pi-dashboard-automation-plugin","version":"0.5.4","license":"MIT","_id":"@blackbelt-technology/pi-dashboard-automation-plugin@0.5.4","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"dist":{"shasum":"ec54c726f725b8489aba97268ca6f1fb7968987d","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-automation-plugin/-/pi-dashboard-automation-plugin-0.5.4.tgz","fileCount":45,"integrity":"sha512-xWNwYETzPhV83EI6WdVP19YYCbRAE83uIWvNlaqHhxqRw8lV4435Vol2e0GYeacLWB56n+aTmEUGAVFRTE8BBw==","signatures":[{"sig":"MEUCIEDlKOE5hyx8HIIEWoDHaM/BVmdQPzCf/4r+XoSk+NhnAiEAjACkvLyjRA1CYlUDBXg5WUgGpbLdwDoYOD1oWZxhuSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148575},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"}},"gitHead":"e7383bda4eae083aebdab72192c2158e3ee79146","_npmUser":{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/automation-plugin"},"_npmVersion":"10.9.3","description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"yaml":"^2.9.0","@blackbelt-technology/pi-dashboard-shared":"^0.5.4","@blackbelt-technology/dashboard-plugin-runtime":"^0.5.4","@blackbelt-technology/pi-dashboard-client-utils":"^0.5.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"pi-dashboard-plugin":{"id":"automation","bridge":"./src/bridge/index.ts","claims":[{"slot":"sidebar-folder-section","component":"FolderAutomationSection"},{"slot":"command-route","command":"/automation","component":"AutomationBoard"},{"path":"/automation/run/:sid","slot":"shell-overlay-route","component":"AutomationRunMonitor","sessionParam":"sid"},{"slot":"session-card-badge","component":"AutomationBadge","predicate":"isAutomationRun"},{"tab":"general","slot":"settings-section","component":"AutomationSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Automations","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-automation-plugin_0.5.4_1782083171745_0.3851132873268439","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@blackbelt-technology/pi-dashboard-automation-plugin","version":"0.6.0","license":"MIT","_id":"@blackbelt-technology/pi-dashboard-automation-plugin@0.6.0","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"dist":{"shasum":"806b9db319bc23d05be7370e851c6a8e643858bf","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-automation-plugin/-/pi-dashboard-automation-plugin-0.6.0.tgz","fileCount":68,"integrity":"sha512-WIHJnfLIKjdrtUKoOPiqNEYwMnkENPOmho900R0miApgls69jOdpTVq+pqODE/9MnzV0JWZZS6G7QXyC1zU94A==","signatures":[{"sig":"MEUCIH9ND5/yC8Gv6vHsc8dh6EZhcl28EeUrgeq709JmvnKtAiEAzMGcQKUARaT2WcJqgOjxqFmbOiwPMGTy0juo9k6b4Sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-automation-plugin@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394881},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"}},"gitHead":"70c087ba97d3b7a9997767f7c9c758ac49d998f2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:92e586ca-cf18-4c20-b6d4-60b7a2a51da1"}},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/automation-plugin"},"_npmVersion":"11.12.1","description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"yaml":"^2.9.0","@blackbelt-technology/pi-dashboard-shared":"^0.6.0","@blackbelt-technology/dashboard-plugin-runtime":"^0.6.0","@blackbelt-technology/pi-dashboard-client-utils":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"pi-dashboard-plugin":{"id":"automation","bridge":"./src/bridge/index.ts","claims":[{"slot":"sidebar-folder-section","component":"FolderAutomationSection"},{"path":"/folder/:encodedCwd/automations","slot":"shell-overlay-route","depth":1,"component":"AutomationBoard"},{"path":"/automation/run/:sid","slot":"shell-overlay-route","depth":2,"component":"AutomationRunMonitor","parentPath":"/folder/:encodedCwd/automations","sessionParam":"sid"},{"slot":"session-card-badge","component":"AutomationBadge","predicate":"isAutomationRun"},{"tab":"general","slot":"settings-section","component":"AutomationSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Automations","i18nCatalog":"catalog","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-automation-plugin_0.6.0_1784565559071_0.9608752136512977","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@blackbelt-technology/pi-dashboard-automation-plugin","version":"0.6.1","license":"MIT","_id":"@blackbelt-technology/pi-dashboard-automation-plugin@0.6.1","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"dist":{"shasum":"1eea3fcff731f95ecadbe5877a040487280e5e86","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-automation-plugin/-/pi-dashboard-automation-plugin-0.6.1.tgz","fileCount":68,"integrity":"sha512-Q6Kyh7nPM7Gmb4ZZj+hn0N5AaG/gdRWLL5dYTGFEHDkf/gBfOFgObX65/fXldQSMME4dXfFFWS8FTjVqB3pdfg==","signatures":[{"sig":"MEUCIQClfppopk3CFGvPqvh3HXcux19lEBdYxlYMBhEN0GR6LAIga5GRWANfF5nT1KghYs6ttLgV1iySBkaYTNeTLkT4/V0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-automation-plugin@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394881},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"}},"gitHead":"88a0cf3cc7d7c7c4e44eb61df3cceff19ed919ad","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:92e586ca-cf18-4c20-b6d4-60b7a2a51da1"}},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/automation-plugin"},"_npmVersion":"11.12.1","description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"yaml":"^2.9.0","@blackbelt-technology/pi-dashboard-shared":"^0.6.1","@blackbelt-technology/dashboard-plugin-runtime":"^0.6.1","@blackbelt-technology/pi-dashboard-client-utils":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"pi-dashboard-plugin":{"id":"automation","bridge":"./src/bridge/index.ts","claims":[{"slot":"sidebar-folder-section","component":"FolderAutomationSection"},{"path":"/folder/:encodedCwd/automations","slot":"shell-overlay-route","depth":1,"component":"AutomationBoard"},{"path":"/automation/run/:sid","slot":"shell-overlay-route","depth":2,"component":"AutomationRunMonitor","parentPath":"/folder/:encodedCwd/automations","sessionParam":"sid"},{"slot":"session-card-badge","component":"AutomationBadge","predicate":"isAutomationRun"},{"tab":"general","slot":"settings-section","component":"AutomationSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Automations","i18nCatalog":"catalog","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-automation-plugin_0.6.1_1784571699380_0.9311265557757542","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@blackbelt-technology/pi-dashboard-automation-plugin","version":"0.7.0","license":"MIT","_id":"@blackbelt-technology/pi-dashboard-automation-plugin@0.7.0","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"dist":{"shasum":"f1125ffae5aa33c891e485ccba44c81831d49b4a","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-automation-plugin/-/pi-dashboard-automation-plugin-0.7.0.tgz","fileCount":68,"integrity":"sha512-S2oqBQn7LcXcGvz2jlCqhZNRxazeprnI3etchALkuADDw+qTpoZuJZJxU/JjJrLHVWpXNCoopPGuazERMFemBw==","signatures":[{"sig":"MEUCIG6A8BiatJCn0axRqMlcMh4uwixLukQvswVH2gAgIJ1YAiEAj74GIDReJOxYkCKL/JZPwxba6PnXa6IVKr16YN0rO2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-automation-plugin@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":395500},"type":"module","exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"}},"gitHead":"9203d6a89f1b81c516e9351072ee5cb4c6579e0a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:92e586ca-cf18-4c20-b6d4-60b7a2a51da1"}},"repository":{"url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","type":"git","directory":"packages/automation-plugin"},"_npmVersion":"12.0.1","description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"yaml":"^2.9.0","@blackbelt-technology/pi-dashboard-shared":"^0.7.0","@blackbelt-technology/dashboard-plugin-runtime":"^0.7.0","@blackbelt-technology/pi-dashboard-client-utils":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.0.0","react-dom":"^19.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"pi-dashboard-plugin":{"id":"automation","bridge":"./src/bridge/index.ts","claims":[{"slot":"sidebar-folder-section","component":"FolderAutomationSection"},{"path":"/folder/:encodedCwd/automations","slot":"shell-overlay-route","depth":1,"component":"AutomationBoard"},{"path":"/automation/run/:sid","slot":"shell-overlay-route","depth":2,"component":"AutomationRunMonitor","parentPath":"/folder/:encodedCwd/automations","sessionParam":"sid"},{"slot":"session-card-badge","component":"AutomationBadge","predicate":"isAutomationRun"},{"tab":"general","slot":"settings-section","component":"AutomationSettings"}],"client":"./src/client/index.tsx","server":"./src/server/index.ts","priority":100,"displayName":"Automations","i18nCatalog":"catalog","configSchema":"./src/configSchema.json"},"_npmOperationalInternal":{"tmp":"tmp/pi-dashboard-automation-plugin_0.7.0_1784899047401_0.5918097120248105","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@blackbelt-technology/pi-dashboard-automation-plugin","version":"0.8.0","description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","license":"MIT","publishConfig":{"access":"public"},"type":"module","repository":{"type":"git","url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","directory":"packages/automation-plugin"},"exports":{".":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./client":{"types":"./src/client/index.tsx","default":"./src/client/index.tsx"},"./server":{"types":"./src/server/index.ts","default":"./src/server/index.ts"}},"pi-dashboard-plugin":{"id":"automation","displayName":"Automations","i18nCatalog":"catalog","priority":100,"client":"./src/client/index.tsx","server":"./src/server/index.ts","bridge":"./src/bridge/index.ts","configSchema":"./src/configSchema.json","claims":[{"slot":"sidebar-folder-section","component":"FolderAutomationSection"},{"slot":"shell-overlay-route","component":"AutomationBoard","path":"/folder/:encodedCwd/automations","depth":2,"parentPath":"/folder/:encodedCwd"},{"slot":"shell-overlay-route","component":"AutomationRunMonitor","path":"/folder/:encodedCwd/automations/run/:sid","sessionParam":"sid","depth":2,"parentPath":"/folder/:encodedCwd/automations"},{"slot":"session-card-badge","component":"AutomationBadge","predicate":"isAutomationRun"},{"slot":"settings-section","component":"AutomationSettings","tab":"general"}]},"peerDependencies":{"fastify":"^5.0.0","react":">=18.0.0","react-dom":">=18.0.0","wouter":"^3.9.0"},"dependencies":{"@blackbelt-technology/dashboard-plugin-runtime":"^0.8.0","@blackbelt-technology/pi-dashboard-client-utils":"^0.8.0","@blackbelt-technology/pi-dashboard-shared":"^0.8.0","@mdi/js":"^7.4.47","@mdi/react":"^1.6.1","yaml":"^2.9.0"},"devDependencies":{"@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react":"^19.0.0","react-dom":"^19.0.0","wouter":"^3.9.0"},"gitHead":"9373dfa416660a285475febc0383608fe14270b1","_id":"@blackbelt-technology/pi-dashboard-automation-plugin@0.8.0","bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","_nodeVersion":"24.19.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-Nu2/Mk020TZShNcOzC9ergxVHwIJBSnjff7N1MKltpPpOAEk0nGzInKzKpx3Tx2/Lu94SjMqzl4SNieMFk6qgQ==","shasum":"7f8fab7879934e97971655ffecb58982ee1364ce","tarball":"https://registry.npmjs.org/@blackbelt-technology/pi-dashboard-automation-plugin/-/pi-dashboard-automation-plugin-0.8.0.tgz","fileCount":36,"unpackedSize":279336,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blackbelt-technology%2fpi-dashboard-automation-plugin@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFYxbSDQg4x6JR3hOMEZIVkRkg9EqhHHnpfUflY0dKalAiEAuB1eXyPA/5lEgv9ZwlBi/o36DapE1rxc0wn2vx4S6HY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:92e586ca-cf18-4c20-b6d4-60b7a2a51da1"}},"directories":{},"maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-dashboard-automation-plugin_0.8.0_1787745961405_0.29335723681490555"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T23:06:11.467Z","modified":"2026-08-26T12:06:01.976Z","0.5.4":"2026-06-21T23:06:11.873Z","0.6.0":"2026-07-20T16:39:19.224Z","0.6.1":"2026-07-20T18:21:39.592Z","0.7.0":"2026-07-24T13:17:27.575Z","0.8.0":"2026-08-26T12:06:01.575Z"},"bugs":{"url":"https://github.com/BlackBeltTechnology/pi-agent-dashboard/issues"},"license":"MIT","homepage":"https://github.com/BlackBeltTechnology/pi-agent-dashboard#readme","repository":{"type":"git","url":"git+https://github.com/BlackBeltTechnology/pi-agent-dashboard.git","directory":"packages/automation-plugin"},"description":"Automation plugin for pi-dashboard — schedule-triggered background agent runs with a triage inbox (Codex-Automations-style), built on the dashboard shell slots.","maintainers":[{"name":"mbotond","email":"botond.molnar@blackbelt.hu"},{"name":"mrbence","email":"dbence10@gmail.com"},{"name":"robertcsakany","email":"robert.csakany@blackbelt.hu"},{"name":"norbert.herczeg","email":"norbert.herczeg@blackbelt.hu"}],"readme":"# @blackbelt-technology/pi-dashboard-automation-plugin\n\nSchedule-triggered background agent runs for pi-dashboard — a Codex-Automations-style\ncapability built entirely on the dashboard shell slots (no core conditional rendering).\n\n## What it does\n\n- Reads automation definitions from disk in two scopes:\n  - per-folder: `<repo>/.pi/automation/<name>/automation.yaml` (+ `prompt.md`)\n  - global: `~/.pi/automation/<name>/automation.yaml`\n- Runs a single server-owned scheduler that arms each automation's trigger\n  (phase 1: `schedule` / cron only) through an extensible trigger registry.\n- When a trigger fires, spawns a pi session stamped `kind=\"automation\"` with the\n  resolved model (`@role` or bare id), action (`prompt` | `skill`), `mode`, and `sandbox`.\n- Runs are always watchable live in the Automation view (reusing `ChatView`); whether\n  they also appear on the main board is governed by an effective `visibility`\n  (per-automation override ?? settings default, default `hidden`).\n- Run results land in `<scope>/.pi/automation/runs/<date>-<name>/result.md`. Empty\n  runs auto-archive; the store keeps the last 100 runs per automation.\n\n## Run finalization + concurrency\n\nA run finalizes on the first of: `agent_end`, its action-declared completion\nevent, an explicit Stop, its session dying (connection close / heartbeat\ntimeout, no reconnect), or the stale-run reaper. Finalization is idempotent —\nlater signals are no-ops. A headless `kind=\"automation\"` session is one-shot and\nnever reconnects, so a WebSocket close is treated as terminal immediately (no\nreconnect-grace wait). See change: finalize-automation-run-on-session-death.\n\n- **Session-death finalize (primary):** a run whose session ends before a\n  terminal event is finalized once — with its buffered result if any, else\n  `error` (\"session ended before completion\") — and its concurrency slot freed.\n- **Stale-run reaper (backstop):** any run stuck `running` past `maxRunAgeMs`\n  (plugin config, default 30 min; `<= 0` disables) is finalized `error` and its\n  slot freed. Also clears pre-existing on-disk `running` orphans on first sweep.\n- **`concurrency: skip` amplifier:** a code-only `flows.run` automation can\n  finish + tear down its session in the same tick its terminal event is\n  forwarded. Before the session-death finalize, a lost terminal event left the\n  run `running` forever and `skip` dropped every later fire. Operator stopgap:\n  set `concurrency: queue|parallel` so the next fire self-heals the schedule —\n  it masks the freeze but leaves the orphaned record for the reaper.\n\n## Slots claimed\n\n| Slot | Component | Purpose |\n|---|---|---|\n| `sidebar-folder-section` | `FolderAutomationSection` | \"Automations (N) →\" folder nav entry |\n| `command-route` (`/automation`) | `AutomationBoard` | run list / Triage |\n| `shell-overlay-route` | `AutomationRunMonitor` | live run transcript (wraps ChatView) |\n| `session-card-badge` | `AutomationBadge` | running-automation indicator (predicate-gated) |\n| `settings-section` (general) | `AutomationSettings` | scopes + retention + default visibility |\n\nSee `openspec/changes/add-automation-plugin/` for the full spec.\n","readmeFilename":"README.md"}