-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
devopsDevOps and deploymentDevOps and deploymentfuture-enhancementFuture enhancement beyond current roadmapFuture enhancement beyond current roadmapinfrastructureInfrastructure and DevOpsInfrastructure and DevOpskestraKestra workflow orchestration relatedKestra workflow orchestration related
Description
Implement Cline/Gemini-CLI integration with Bun runtime in Kestra workflows
Description
Integrate Cline CLI (with gemini-cli as fallback) using Bun runtime in Kestra workflow orchestration for agent execution.
Requirements
Primary: Cline CLI with Bun
- Install and configure Cline CLI in Kestra worker environment
- Use Bun as the JavaScript runtime (faster than Node.js)
- Configure Cline to use Gemini API for agent operations
- Execute adversary and defender agents via Cline in Kestra tasks
Fallback: gemini-cli with Bun
- If Cline CLI fails or is unavailable, fall back to gemini-cli
- Implement retry logic with graceful degradation
- Use gemini-cli for direct Gemini API interactions
- Maintain same input/output interface for both tools
Kestra Workflow Structure
id: redloop-security-scan
namespace: redloop
tasks:
- id: setup-environment
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
// Verify installations
try {
await $`cline --version`;
console.log('✓ Cline CLI available');
} catch {
console.log('⚠ Cline unavailable, will use gemini-cli fallback');
}
- id: adversary-scan
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
env:
GEMINI_API_KEY: "{{ secret('GEMINI_API_KEY') }}"
CLINE_TIMEOUT_SECONDS: "300"
TARGET_REPO: "{{ inputs.repo_path }}"
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
let analysisResult;
// Try Cline CLI first
try {
console.log('Attempting Cline CLI analysis...');
const result = await $`cline analyze --target ${process.env.TARGET_REPO}`.quiet();
analysisResult = result.stdout.toString();
console.log('✓ Cline analysis completed');
} catch (error) {
// Fallback to gemini-cli
console.log('⚠ Cline failed, using gemini-cli fallback');
try {
const fallback = await $`gemini-cli prompt "Analyze for security vulnerabilities: ${process.env.TARGET_REPO}"`.quiet();
analysisResult = fallback.stdout.toString();
console.log('✓ Gemini-CLI analysis completed');
} catch (fallbackError) {
console.error('✗ Both Cline and gemini-cli failed');
throw fallbackError;
}
}
console.log('Analysis Result:', analysisResult);
await Bun.write('analysis-result.json', JSON.stringify({ result: analysisResult }));
outputFiles:
- analysis-result.json
- id: defender-fix
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
env:
GEMINI_API_KEY: "{{ secret('GEMINI_API_KEY') }}"
VULNERABILITIES: "{{ outputs['adversary-scan'].outputFiles['analysis-result.json'] }}"
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
const vulns = await Bun.file(process.env.VULNERABILITIES).json();
// Try Cline CLI for fixes
try {
console.log('Attempting Cline CLI fix generation...');
await $`cline fix --input ${process.env.VULNERABILITIES}`;
console.log('✓ Cline fix generation completed');
} catch (error) {
console.log('⚠ Cline failed, using gemini-cli fallback');
await $`gemini-cli prompt "Generate fixes for: ${JSON.stringify(vulns)}"`;
console.log('✓ Gemini-CLI fix generation completed');
}Technical Details
Bun Plugin Benefits
- Native Bun Support: Uses dedicated
io.kestra.plugin.scripts.bun.Scriptplugin - Official Container:
oven/buncontainer image with full Bun runtime - Built-in Bun APIs: Direct access to
Bun.write(),Bun.file(), and$shell execution - 3x faster startup than Node.js
- Built-in TypeScript support
- Lower memory footprint
- No Node.js compatibility layer needed
Error Handling & Retry Logic
- Detect Cline CLI failures (exit codes, timeouts)
- Automatic fallback to gemini-cli
- Log which tool was used for each execution
- Metrics tracking (success rates for each tool)
Environment Variables
# Kestra environment variables
GEMINI_API_KEY=${GEMINI_API_KEY}
CLINE_CONFIG_PATH=/etc/kestra/cline.json
FALLBACK_TO_GEMINI_CLI=true
CLINE_TIMEOUT_SECONDS=300Acceptance Criteria
- Bun runtime installed in Kestra worker using
io.kestra.plugin.scripts.bun.Script - Cline CLI successfully executes in Kestra task
- gemini-cli fallback triggers on Cline failure
- Both adversary and defender agents work with both tools
- Workflow logs indicate which tool was used
- Error handling tested (simulate Cline unavailability)
- Documentation for Kestra workflow setup
- CI/CD pipeline for Kestra flow validation
Dependencies
- Related to Issue Implement Kestra workflow orchestration #19 (Kestra Workflow Integration)
- Requires Issue Install and configure Cline #4 (Install and configure Cline CLI) completion
- Depends on Gemini API access
Links & Resources
Context
Requested by @haroon0x in issue #1
This enables RedLoop agents to run in orchestrated workflows with fast Bun runtime and resilient fallback strategy.
Metadata
Metadata
Assignees
Labels
devopsDevOps and deploymentDevOps and deploymentfuture-enhancementFuture enhancement beyond current roadmapFuture enhancement beyond current roadmapinfrastructureInfrastructure and DevOpsInfrastructure and DevOpskestraKestra workflow orchestration relatedKestra workflow orchestration related