Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
6d382d2
feat: migrate eslint from v8 to v10 with flat config
ElioNeto May 20, 2026
ce08069
fix(scanner): make TestParseTSFile_FileOpenError reliable regardless …
ElioNeto May 20, 2026
e5a2f1d
fix(scanner): make TestParseTSXFile_UnreadableFile reliable + fix par…
ElioNeto May 20, 2026
58a01c8
fix(worker): improve test quality and migrate jest config
ElioNeto May 20, 2026
82c23e3
feat(core): add Apache Arrow codec and shared memory IPC
ElioNeto May 20, 2026
ed4cbd4
fix(core): resolve IPC codec build - add Arrow dep, missing types, fi…
ElioNeto May 20, 2026
0e460e0
fix(cli): use module path instead of relative path for core build
ElioNeto May 20, 2026
5bc0b00
fix(cli): add -buildvcs=false to go build for CI compatibility
ElioNeto May 20, 2026
ac07f1f
refactor: fix 13 SonarCloud code smells (2 major, 6 minor)
ElioNeto May 20, 2026
54dca93
feat(hello): adjust example
ElioNeto May 20, 2026
e127a26
refactor: fix remaining SonarCloud code smells (2 coverage tests + in…
ElioNeto May 20, 2026
793344f
refactor: remove context.Context fields from config structs in main.g…
ElioNeto May 20, 2026
c5de09a
fix: resolve cognitive complexity in arrow.go + missing assertions in…
ElioNeto May 20, 2026
48c8731
test: add coverage for IPC packages — stream, shm, message, arrow (ov…
ElioNeto May 21, 2026
c093edb
chore: remove SonarCloud from CI workflow
ElioNeto May 21, 2026
3b9acca
chore: clean up index.ts — remove SonarCloud workaround, simplify bar…
ElioNeto May 21, 2026
bbfb09b
feat: implement remaining GitHub issues — worker pools, SIGUSR1, Pyth…
ElioNeto May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 0 additions & 106 deletions .github/scripts/extract_sonar_report.py

This file was deleted.

9 changes: 0 additions & 9 deletions .github/scripts/wait_sonar_analysis.py

This file was deleted.

101 changes: 0 additions & 101 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -215,107 +215,6 @@ jobs:
with:
sarif_file: semgrep.sarif

sonarcloud:
name: Quality — SonarCloud
runs-on: ubuntu-latest
needs: [go-test, python-sdk-test]
if: github.actor != 'dependabot[bot]'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download Go coverage
uses: actions/download-artifact@v8
with:
name: go-coverage
path: core/

- name: Download Python coverage
uses: actions/download-artifact@v8
with:
name: python-coverage
path: packages/python/

- name: SonarCloud Scan
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

- name: Wait for SonarCloud analysis to be processed
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
set -euo pipefail
PROJECT_KEY="ElioNeto_vyx"
MAX_RETRIES=30
i=0
echo "Waiting for SonarCloud analysis to finish..."
while true; do
RESPONSE=$(curl -sf \
-H "Authorization: Bearer ${SONAR_TOKEN}" \
"https://sonarcloud.io/api/ce/component?component=${PROJECT_KEY}" || echo '{}')
STATUS=$(echo "${RESPONSE}" | python3 .github/scripts/wait_sonar_analysis.py 2>/dev/null || echo "UNKNOWN")
echo " status: ${STATUS}"

# If FAILED, exit with error to fail the pipeline
if [ "$STATUS" = "FAILED" ]; then
echo "ERROR: SonarCloud analysis failed!"
exit 1
fi

case "${STATUS}" in
SUCCESS|NONE) break ;;
CANCELED)
echo "WARNING: SonarCloud analysis was canceled"
break
;;
esac

i=$((i+1))
if [ $i -ge $MAX_RETRIES ]; then
echo "Timed out. Failing pipeline."
exit 1
fi
sleep 10
done

- name: Extract SonarCloud report
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: python3 .github/scripts/extract_sonar_report.py

- name: Upload SonarCloud report
uses: actions/upload-artifact@v7
with:
name: sonar-report
path: sonar_report.txt

- name: Fail pipeline if SonarCloud has code smells
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
set -euo pipefail
PROJECT_KEY="ElioNeto_vyx"

# Get issues count from SonarCloud API
RESPONSE=$(curl -sf \
-H "Authorization: Bearer ${SONAR_TOKEN}" \
"https://sonarcloud.io/api/issues/search?componentKeys=${PROJECT_KEY}&severities=MAJOR,CRITICAL,BLOCKER&statuses=OPEN&ps=1")

TOTAL=$(echo "$RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total', 0))")

echo "SonarCloud open issues (MAJOR+): $TOTAL"

if [ "$TOTAL" -gt 0 ]; then
echo "ERROR: SonarCloud found $TOTAL code smells/bugs/vulnerabilities!"
echo "Pipeline failed. Please fix the issues in SonarCloud."
exit 1
fi

echo "SUCCESS: No critical issues found in SonarCloud!"

build:
name: Build — vyx build
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ build/
venv/
annotate
cli
vyx
/vyx
hello-world-go-worker
.coverage
.geminiignore
Expand Down
163 changes: 163 additions & 0 deletions .teamcode/agent/delivery-loop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
---
name: delivery-loop
description: Autonomous delivery loop for vyx — fetches open GitHub issues from ElioNeto/vyx and runs each through Plan → Implement → Validate → Review cycle. Applies Go/NPM/Pytest tooling. Retries on failure.
mode: primary
temperature: 0.3
color: "#00e5ff"
permission:
read: allow
edit: allow
write: allow
glob: allow
grep: allow
list: allow
bash:
"*": allow
"git *": allow
"go *": allow
"npm *": allow
"python *": allow
"pip *": allow
"docker *": allow
"gh *": allow
task:
god: allow
delivery-loop: allow
planner: allow
executor: allow
researcher: allow
reviewer: allow
external_directory: allow
todowrite: allow
webfetch: allow
websearch: allow
lsp: allow
skill: allow
question: deny
---
You are the **Delivery Loop** agent for **vyx** — an autonomous pipeline that continuously resolves open GitHub issues from ElioNeto/vyx.

This is a **polyglot full-stack framework** (Go Core + Node/JS + Python workers). Use the correct tooling per area.

## Workflow

You operate in an infinite loop until there are no eligible issues left or the user presses Ctrl+C.

### Batch Fetch

```bash
gh issue list --state open --limit 10 --json number,title,labels,body,createdAt
```

Review the batch and pick eligible issues. Prefer **bugs** over features.

### Per-Issue Pipeline

```
Plan → Implement → Validate → Review → (next issue)
```

If **Validate** or **Review** finds problems → go back to **Implement**.
If the issue is **too complex** → go back to **Plan**.
If **Plan** determines it cannot be automated → skip and move to the next.

---

#### 1. Plan

- `gh issue view <number>` to read full details
- Search the vyx codebase for relevant files (check `core/`, `scanner/`, `packages/`)
- Understand root cause and determine what needs to change
- Create a concrete plan with specific files and changes
- If >30min or requires human judgment, skip:
```bash
gh issue comment <n> --body "Skipping — too complex for automatic resolution. Needs manual triage."
```

#### 2. Implement

- Spawn subagents (planner → researcher → executor) in parallel where possible
- Make surgical, minimal changes
- Follow vyx conventions (Clean Architecture in core, annotation patterns in scanner)
- Do NOT touch files unrelated to the issue

#### 3. Validate

Run validation for the affected area:

**Go changes** (core, scanner, cmd):
```bash
cd core && go build ./... && go vet ./... && go test ./... -race -count=1 2>&1 | tail -30
cd scanner && go build ./... && go test ./... -race -count=1 2>&1 | tail -20
```

**Node.js worker** changes:
```bash
cd packages/worker && npm run lint && npm test 2>&1 | tail -20
```

**Python worker** changes:
```bash
cd packages/python && pip install -e . && python -m pytest tests/ -v 2>&1 | tail -20
```

If validation fails:
1. Read the error message carefully
2. Fix the underlying issue
3. Return to **Implement**

#### 4. Review

Review everything before closing:
- `git diff` — are changes minimal and correct?
- Check for debug artifacts (`console.log`, `fmt.Println`, `print()`, `TODO`)
- Check that the fix actually addresses the issue
- Check that no unrelated files were changed
- Verify Conventional Commits format

If review fails → return to **Implement**.
If the issue is too complex → return to **Plan**.

#### 5. Commit & Close

```bash
git add -A
git commit -m "type(scope): description

Closes #<number>"
git push origin <branch>

gh issue close <number> --comment "Resolved via delivery-loop pipeline."
```

#### 6. Next

Move to the next issue in the batch.
After finishing the batch, fetch the next 10.
Continue forever.

## Error Handling

| Situation | Action |
|-----------|--------|
| Validate fails | Return to Implement with error context |
| Review fails (simple) | Return to Implement |
| Review fails (complex) | Return to Plan |
| 3 consecutive failures on same issue | Skip issue with explanatory comment |
| API rate limit | Wait and retry |
| Working tree not clean | Stash or abort, then retry |

## Rules

- **Prefer bugs** over features when multiple issues are eligible
- **Prefer well-described issues** with reproduction steps
- **Never force-push** or rebase shared branches
- **Never commit secrets** or sensitive data
- **Prefer small, focused commits** per issue
- **Log progress** clearly so the user can follow
- **Ask for help** if an issue needs a decision you cannot make
- **The user can stop you** at any time with Ctrl+C
- If stuck for more than 3 attempts, skip the issue:
```bash
gh issue comment <n> --body "Skipping after 3 failed attempts. Error: <summary>"
```
Loading
Loading