{"_id":"@absuitecore/edge-run","_rev":"7-35b216ba4dca0565a6dc3bdcadb0d250","name":"@absuitecore/edge-run","dist-tags":{"latest":"1.5.0"},"versions":{"1.0.0":{"name":"@absuitecore/edge-run","version":"1.0.0","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.0.0","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"a8bfea4c714353125476b88b9db78d46eed08d53","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.0.0.tgz","fileCount":19,"integrity":"sha512-5fDXxpJ20HjGsRDZ7Vj9abc//maNBkxU38Q3VJwoQ2pz2M9PpXh/suU94I07X3Bv+AiJ4cjVi65NV9bnrMKmXA==","signatures":[{"sig":"MEQCIC0VHJQ5i0BhalSyq5J54WxLS/j2++l4T2AHNZABuGHYAiAzZfDxM/q9h77GAvhbVZWF1kCMTu2KVf0rKKo8tQgkpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68382},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.0.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/009a33ba1f4a907dfc92e3c0b7fc09ca/absuitecore-edge-run-1.0.0.tgz","_integrity":"sha512-5fDXxpJ20HjGsRDZ7Vj9abc//maNBkxU38Q3VJwoQ2pz2M9PpXh/suU94I07X3Bv+AiJ4cjVi65NV9bnrMKmXA==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.0.0_1785297895201_0.7314574841094215","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@absuitecore/edge-run","version":"1.0.1","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.0.1","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"33f37ef0f362fa643396c7103d68e6be41173970","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.0.1.tgz","fileCount":19,"integrity":"sha512-DZHhmX1MaoJupEUnQ9iqKgAc9eM6HcW4vjlq68bd5wogFgSwwet1HRw4uyN16WZnU5ri6x79MnoDf38s0g+FtQ==","signatures":[{"sig":"MEQCICyrlEgraQIAAHOk6IA/ZjU6BKN9/RfOwCAnyHxNYEH7AiA5SBNeQau/aFEFxMFEB4dunGFvwIlYmQktk8jiEjhR4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68383},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.0.1.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/a4c763e184681291167a6060228a4cf0/absuitecore-edge-run-1.0.1.tgz","_integrity":"sha512-DZHhmX1MaoJupEUnQ9iqKgAc9eM6HcW4vjlq68bd5wogFgSwwet1HRw4uyN16WZnU5ri6x79MnoDf38s0g+FtQ==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.0.1_1785316098393_0.5299728517017246","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@absuitecore/edge-run","version":"1.0.2","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.0.2","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"130af0dd88df79e5899d92277d1d9c9be32ddcaf","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.0.2.tgz","fileCount":19,"integrity":"sha512-MwmJwvd2WJKZR8EkLaufGu/ooHGqDCs+EaXt3arOotlH/n/NFvJszMz05X2FpeWO429DCUo6POf9g/gJXMncjQ==","signatures":[{"sig":"MEUCIHqR2faBPO1tKc9+9m3vqEm7hfu3UDSn+DUTbz+embqwAiEAzVmDobgqPysmmoDOSopDc1RSGGLMdA+NAjs9C/vAKG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69218},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.0.2.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/237c583ec1e5eaaedcac050bf58fc988/absuitecore-edge-run-1.0.2.tgz","_integrity":"sha512-MwmJwvd2WJKZR8EkLaufGu/ooHGqDCs+EaXt3arOotlH/n/NFvJszMz05X2FpeWO429DCUo6POf9g/gJXMncjQ==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.0.2_1785687033482_0.7451078529810073","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@absuitecore/edge-run","version":"1.2.0","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.2.0","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"8bdf366be4166b0f17a396efaf3b18c2fadfb6c0","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.2.0.tgz","fileCount":19,"integrity":"sha512-L83lGZzS5Bd3o/uZZHdKAFEqKJcmR+7SsJEmH0sd6A6tug2AQz0InZYNviyCiAK7gwI2a09KEvV33i2mYv6MIQ==","signatures":[{"sig":"MEUCIQC+ji3TQulC4hHxy1ofXkmQsBc/LgYVt8cu4KkMIfHUUAIgP1jP1F5ejfbSubcIOv0ouVJpOmIrTAC18eb3DsLFOSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73591},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.2.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/ab1f66f9576d64b9483fe49c1fb1a4d7/absuitecore-edge-run-1.2.0.tgz","_integrity":"sha512-L83lGZzS5Bd3o/uZZHdKAFEqKJcmR+7SsJEmH0sd6A6tug2AQz0InZYNviyCiAK7gwI2a09KEvV33i2mYv6MIQ==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.2.0_1785719316611_0.46909621956436665","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@absuitecore/edge-run","version":"1.3.0","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.3.0","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"11a788f230aac19ef6807ddf1dd4b9f037859d6a","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.3.0.tgz","fileCount":19,"integrity":"sha512-i0tJPRQYOF4a4+IAIU65juOlTMM+jH+b6Lhrz1jQd3PqCLFq7djT337yNRIBJWg7GnROcZcbjzimXoVuvS411w==","signatures":[{"sig":"MEQCIBoB4pOtEJ5Mj4DZrreo1rAE+CYhGkuXxzWRlkHpQNwZAiAxw26VLhPBUkEcsRfWhUvdaQEP7LLC4N9MphlcnsGtEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77671},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/7932f7b0ffbe92d98d930c9827d52f9f/absuitecore-edge-run-1.3.0.tgz","_integrity":"sha512-i0tJPRQYOF4a4+IAIU65juOlTMM+jH+b6Lhrz1jQd3PqCLFq7djT337yNRIBJWg7GnROcZcbjzimXoVuvS411w==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.3.0_1785725940680_0.6560643795083645","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@absuitecore/edge-run","version":"1.4.0","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"license":"MIT","_id":"@absuitecore/edge-run@1.4.0","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"dist":{"shasum":"2d11fc0a5c8b01aaa9c6f6d8507e3f0955066f0e","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.4.0.tgz","fileCount":19,"integrity":"sha512-a9pShH/Ha2UgkSM/vSt2U6JZ3M4fzxf9OfDSgaB/8q1G5ab4EPyiyw5+5JIxtJdtCwLEbKo+TswwBO2mSIfo5w==","signatures":[{"sig":"MEQCIDBzYtq5aPPU+0saY/ZLMUQawjBh7YW6vK+/V5tDCcsgAiARzzJBkTTRmFU7wZZJO2olfDZByeX3LfifUW8aE2hPsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78223},"main":"dist/index.js","_from":"file:absuitecore-edge-run-1.4.0.tgz","types":"dist/index.d.ts","engines":{"node":">=22.5.0"},"scripts":{"dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run","build":"tsc -p tsconfig.json","start":"node dist/server.js"},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"_resolved":"/tmp/31ed045fb71655f935891686907f7091/absuitecore-edge-run-1.4.0.tgz","_integrity":"sha512-a9pShH/Ha2UgkSM/vSt2U6JZ3M4fzxf9OfDSgaB/8q1G5ab4EPyiyw5+5JIxtJdtCwLEbKo+TswwBO2mSIfo5w==","repository":{"url":"git+https://github.com/iamGodofall/ABSuite-core.git","type":"git","directory":"packages/edge-run"},"_npmVersion":"10.9.8","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.0.0","@types/node":"^22.0.0","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/edge-run_1.4.0_1785726759570_0.6331200272343562","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@absuitecore/edge-run","version":"1.5.0","description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","license":"MIT","main":"dist/index.js","types":"dist/index.d.ts","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"dependencies":{"express":"^4.18.0","@absuitecore/capkit":"^1.8.1"},"devDependencies":{"@types/express":"^4.17.21","@types/node":"^22.0.0","tsx":"^4.21.0","typescript":"^5.0.0"},"engines":{"node":">=22.5.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/iamGodofall/ABSuite-core.git","directory":"packages/edge-run"},"homepage":"https://github.com/iamGodofall/ABSuite-core#readme","bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"scripts":{"build":"tsc -p tsconfig.json","start":"node dist/server.js","dev":"tsx src/server.ts","test":"jest -c ../../jest.config.js --rootDir ../.. --testPathPatterns packages/edge-run"},"_id":"@absuitecore/edge-run@1.5.0","_integrity":"sha512-9ytIx3YebTogy2QDkBJQ5rBEre/2vdloUr8MaYzviM0nLPW4NSrfRca0B8WNf/CrOun9GUY/LmAzfFhPdkp7ew==","_resolved":"/tmp/12631a8b19d2ac4de4e56fc250821647/absuitecore-edge-run-1.5.0.tgz","_from":"file:absuitecore-edge-run-1.5.0.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-9ytIx3YebTogy2QDkBJQ5rBEre/2vdloUr8MaYzviM0nLPW4NSrfRca0B8WNf/CrOun9GUY/LmAzfFhPdkp7ew==","shasum":"03bc01e88e2dce32d1abc8127264fcc0495b6646","tarball":"https://registry.npmjs.org/@absuitecore/edge-run/-/edge-run-1.5.0.tgz","fileCount":19,"unpackedSize":78531,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@absuitecore%2fedge-run@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF8s7kgRUP7rc2fiX3E52eOEM3G/424uS0pWOl4gghW9AiACGS8zIE6DfePwizcoN6lBAHZlbKAcvHBTSRLUbXgtQA=="}]},"_npmUser":{"name":"themba-mpehle","email":"landinwest@gmail.com"},"directories":{},"maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/edge-run_1.5.0_1785741125199_0.4049935934790838"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-29T04:04:55.073Z","modified":"2026-08-03T07:12:05.723Z","1.0.0":"2026-07-29T04:04:55.352Z","1.0.1":"2026-07-29T09:08:18.564Z","1.0.2":"2026-08-02T16:10:33.628Z","1.2.0":"2026-08-03T01:08:36.743Z","1.3.0":"2026-08-03T02:59:00.830Z","1.4.0":"2026-08-03T03:12:39.701Z","1.5.0":"2026-08-03T07:12:05.346Z"},"bugs":{"url":"https://github.com/iamGodofall/ABSuite-core/issues"},"license":"MIT","homepage":"https://github.com/iamGodofall/ABSuite-core#readme","keywords":["cron","scheduler","task-queue","circuit-breaker","ai-agents"],"repository":{"type":"git","url":"git+https://github.com/iamGodofall/ABSuite-core.git","directory":"packages/edge-run"},"description":"Cron scheduling, task queueing, retries and self-healing execution for AI agents.","maintainers":[{"name":"themba-mpehle","email":"landinwest@gmail.com"}],"readme":"# @absuitecore/edge-run\n\nCron scheduling, task queueing, retries and self-healing execution for AI agents.\n\nEvery mutating endpoint is guarded by a CapKit capability token, so authority is\nissued and revoked centrally rather than per service.\n\n## What it does\n\n- **Cron scheduling** — full 5-field cron with ranges, steps, lists, names and\n  `@daily`-style aliases. Correct day-of-month/day-of-week OR semantics.\n- **Priority queue** — `high`/`normal`/`low`, delayed tasks, bounded concurrency\n  and a queue limit.\n- **Retries** — fixed or exponential backoff with full jitter, so a batch of\n  tasks that fail together does not retry in lockstep.\n- **Self-healing** — a circuit breaker per target. After repeated failures it\n  opens, then half-opens after a cooldown and admits a single probe.\n- **Live logs** — Server-Sent Events at `/runtime/logs`.\n\n## Running\n\n```bash\nCAPKIT_HMAC_SECRET=$(openssl rand -hex 32) pnpm --filter @absuitecore/edge-run dev\n```\n\n## API\n\n```bash\n# Schedule a recurring task\ncurl -X POST localhost:8082/schedule -H \"Authorization: Bearer $TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"id\":\"sync\",\"cron\":\"*/15 * * * *\",\"task\":{\"type\":\"http\",\"url\":\"https://api.example.com/sync\",\"method\":\"POST\"}}'\n\n# Queue a one-off task\ncurl -X POST localhost:8082/queue -H \"Authorization: Bearer $TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"id\":\"probe\",\"priority\":\"high\",\"task\":{\"type\":\"http\",\"url\":\"https://example.com/health\"}}'\n\ncurl -H \"Authorization: Bearer $TOKEN\" localhost:8082/queue/probe/status\ncurl -H \"Authorization: Bearer $TOKEN\" localhost:8082/runtime/health   # breaker state\n```\n\nRequired scopes: `schedule:create`, `schedule:read`, `queue:write`,\n`queue:read`, `runtime:read`.\n\n## Security\n\n**Script tasks are disabled by default.** An HTTP API that spawns processes is a\nremote-code-execution vector, so `script` tasks only run when\n`EDGERUN_SCRIPT_ROOT` is set, and only for paths that resolve inside that\ndirectory — `../` escapes are rejected. Scripts are spawned without a shell.\n\n`EDGERUN_ALLOWED_HOSTS` restricts which hosts an `http` task may call. **Unset\nmeans any host** — a wide-open default, not a neutral one. Only `http:` and\n`https:` are ever permitted.\n\n**Link-local addresses are refused whether or not an allowlist is set.**\n`169.254.0.0/16` and IPv6 `fe80::/10` are where every major cloud puts instance\nmetadata, so an `http` task pointed there is a way to read the machine's IAM\ncredentials — and AWS IMDSv1 is HTTP-only, so requiring https would not have\nstopped it. `metadata.google.internal` is refused by name as well, because it\nresolves only inside GCP.\n\n**Redirects are checked hop by hop.** Checking only the URL you queued is not\npartial protection against a redirect — it is none. A permitted host answering\n`302 Location: http://169.254.169.254/…` reached the metadata service and\nreturned the body in `output`, past a check that had classified the first hop\ncorrectly. Every hop is now classified, and the refusal says which one failed.\n\n**The metadata endpoints are refused even when allowlisted.** AWS also serves\nIMDS over IPv6 at `fd00:ec2::254`, which is *unique-local* — a range this\npackage allows on purpose — so these are tracked as endpoints rather than as a\nrange. `EDGERUN_ALLOWED_HOSTS` scopes which hosts may be called; that is a\ndifferent statement from *yes, read this machine's cloud credentials*, and it no\nlonger makes it. `EDGERUN_ALLOW_METADATA=true` does, and says so.\n\n**The allowlist binds every hop.** It used to be enforced only on the URL you\nqueued, so an allowlisted host answering a `302` reached anywhere — which made it\na check on the request rather than a restriction on the runtime.\n\nPrivate and loopback addresses still work: calling `http://10.0.0.5/reindex` on\na schedule is what this package is for, and naming a host in\n`EDGERUN_ALLOWED_HOSTS` still wins for every ordinary internal address.\n\n## Configuration\n\n| Variable | Default | Purpose |\n|---|---|---|\n| `EDGERUN_PORT` | `8082` | Listen port |\n| `EDGERUN_MAX_CONCURRENT` | `10` | Tasks in flight |\n| `EDGERUN_QUEUE_LIMIT` | `100` | Max pending tasks |\n| `EDGERUN_TASK_TIMEOUT_MS` | `30000` | Per-task timeout |\n| `EDGERUN_SCRIPT_ROOT` | _unset_ | Enables script tasks under this directory |\n| `EDGERUN_ALLOWED_HOSTS` | _unset_ | Comma-separated host allowlist |\n| `EDGERUN_ALLOW_METADATA` | `false` | Permit the cloud metadata endpoints |\n| `EDGERUN_FAILURE_THRESHOLD` | `5` | Failures before the breaker opens |\n| `EDGERUN_COOLDOWN_MS` | `30000` | Time before a half-open probe |\n| `CAPKIT_HMAC_SECRET` | — | Shared with CapKit to validate tokens |\n| `CAPKIT_REVOCATION_FILE` | _unset_ | Shared revocation store |\n\n## Known limitations\n\nSchedules and queued tasks are held **in memory**. A restart loses pending work\nand registered schedules. Durable storage is the next step for multi-replica\ndeployments.\n\n---\n\n## Part of ABSuite\n\n**The black box for AI systems** — record what happened, prove it happened,\npreserve the evidence.\n\n| | |\n|---|---|\n| Source | <https://github.com/iamGodofall/ABSuite-core> |\n| Verify a trace in your browser | <https://iamgodofall.github.io/ABSuite-core/verify.html> |\n| Getting started | [GETTING-STARTED.md](https://github.com/iamGodofall/ABSuite-core/blob/main/GETTING-STARTED.md) |\n| Reporting a vulnerability | [SECURITY.md](https://github.com/iamGodofall/ABSuite-core/blob/main/SECURITY.md) — never a public issue |\n| What this project refuses to build | [PRINCIPLES.md](https://github.com/iamGodofall/ABSuite-core/blob/main/PRINCIPLES.md) |\n\nPublished from CI with a signed Sigstore provenance attestation — check it with\n`npm audit signatures` rather than taking our word for it.\n\nMIT licensed.\n","readmeFilename":"README.md"}