## ADDED Requirements ### Requirement: Inline script execution Script nodes SHALL execute inline TypeScript (runtime: `bun`) or Python (runtime: `uv`) code and capture stdout as the node output. #### Scenario: Bun inline execution - **WHEN** a script node has `runtime: bun` and `script: console.log("hello")` - **THEN** the executor SHALL run the script via `bun -e` - **THEN** stdout SHALL be captured as `$nodeId.output` #### Scenario: Python inline execution - **WHEN** a script node has `runtime: uv` and `script: print("hello")` - **THEN** the executor SHALL run the script via `uv run python -c` - **THEN** stdout SHALL be captured as `$nodeId.output` ### Requirement: Dependency installation Script nodes SHALL support a `deps:` array that installs dependencies before execution. #### Scenario: Bun with npm deps - **WHEN** a script node has `runtime: bun` and `deps: ["lodash", "zod"]` - **THEN** the executor SHALL run `bun install lodash zod` before executing #### Scenario: Python with pip deps - **WHEN** a script node has `runtime: uv` and `deps: ["requests", "click"]` - **THEN** the executor SHALL run `uv pip install requests click` before executing ### Requirement: Named script files Script nodes MAY reference named scripts from a `.archon/scripts/` directory by name instead of inline code. #### Scenario: Named script discovery - **WHEN** a script node has `script: analyze` and `scripts/analyze.ts` exists - **THEN** the executor SHALL load and execute the file #### Scenario: Runtime inferred from extension - **WHEN** a script has `runtime: bun` and the named file has a `.ts` extension - **THEN** the executor SHALL run it via `bun run` ### Requirement: Script timeout Script nodes SHALL support a `timeout:` field in milliseconds. If execution exceeds the timeout, the process SHALL be killed and the node SHALL fail. #### Scenario: Timeout exceeded - **WHEN** a script node sets `timeout: 5000` and the script runs for 10 seconds - **THEN** the process SHALL be killed after 5 seconds - **THEN** the node SHALL be marked as failed with a timeout error