Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
1755abf
feat: providers, perf, security, CI — MIMO/Verboo/AtlasCloud/Astraflo…
ednsinf Aug 19, 2026
7d1f11a
fix(todo): prevent todo queue freeze — brief output + remove minItems
ednsinf Aug 19, 2026
f29e26a
fix(todo): summarize taskState block to prevent todo loop
ednsinf Aug 19, 2026
326b65b
fix(todo): count TodoWrite calls even when mixed with other tools
ednsinf Aug 19, 2026
65c372f
fix(todo): replace consecutive counter with rolling window anti-loop
ednsinf Aug 19, 2026
85dcc7a
fix(todo): prevent empty wipe + fix false-positive anti-loop
ednsinf Aug 19, 2026
55f61ce
fix(todo): move rolling window check AFTER tool execution
ednsinf Aug 19, 2026
d406ab5
fix(todo): restore [x]/[] output format for webview parsing
ednsinf Aug 19, 2026
16d24ab
test(todo): add unit tests for TodoWrite, TodoRead, rolling window, t…
ednsinf Aug 19, 2026
310d177
chore: bump version to 0.1.5
ednsinf Aug 19, 2026
9805fab
fix(todo): remove empty array guard — rolling window prevents loop
ednsinf Aug 19, 2026
7484ebd
fix(todo): increase rolling window thresholds to prevent false positives
ednsinf Aug 19, 2026
0fa8572
fix(todo): remove rolling window anti-loop — causes false positives
ednsinf Aug 19, 2026
111ca25
fix(todo): remove todo nudge — causes model to cancel all tasks
ednsinf Aug 19, 2026
4550836
fix(todo): only break on meaningful text without tools, not empty
ednsinf Aug 19, 2026
eb4aa93
fix(loop): remove premature text-break — only exit via consecutiveTex…
ednsinf Aug 19, 2026
b22f611
fix(todo): preserve list when merge=false with empty array
ednsinf Aug 19, 2026
89fce02
fix(todo): bulletproof TodoWrite handler — try-catch + input validation
ednsinf Aug 19, 2026
d35b9eb
test(todo): 104 comprehensive tests for TodoWrite/TodoRead/loop/edge …
ednsinf Aug 19, 2026
245a985
fix(todo): accept items without id — Mimo omits id field
ednsinf Aug 19, 2026
2c54b5c
test(todo): 131 proof tests including Mimo V2.5 payloads
ednsinf Aug 19, 2026
7aa6bd6
fix(loop): graceful recovery for TodoWrite/Read with truncated JSON
ednsinf Aug 19, 2026
1d0a150
test(todo): 177 stress tests — 50-item lifecycle, 200 rapid calls, 32…
ednsinf Aug 19, 2026
958487e
fix(loop): abort/timeout race condition — TodoWrite never errors on a…
ednsinf Aug 19, 2026
d480e47
test(integration): 7 abort race condition tests + 100 rapid abort cycles
ednsinf Aug 19, 2026
766ec07
fix(loop): increase MAX_STEPS from 50 to 200
ednsinf Aug 19, 2026
7f9bb14
fix(ui): sidebarProvider sends status:error for cancelled TodoWrite/Read
ednsinf Aug 19, 2026
6b5fa04
fix(prompt): strengthen anti-premature-stop instruction for Mimo
ednsinf Aug 19, 2026
fdcae8e
fix(loop): remove pre-execution todo nudge that skipped tool execution
ednsinf Aug 20, 2026
5fe8e91
fix: cover ALL TodoWrite error paths — 5 specialist agents found 4 gaps
ednsinf Aug 20, 2026
fb4bce7
fix(loop): wait for bg subagents BEFORE breaking on consecutiveTextTurns
ednsinf Aug 20, 2026
74bf190
fix(loop): incomplete todos nudge BEFORE consecutiveTextTurns break
ednsinf Aug 20, 2026
434392e
fix(ui): QuestionCard supports structured input types
ednsinf Aug 20, 2026
df190ad
fix(loop): restore 'no todo list' nudge for complex tasks
ednsinf Aug 20, 2026
8f7a14d
fix(loop): refine no-todo-list nudge — skip subagents and already-cal…
ednsinf Aug 20, 2026
b5bf1b9
fix: retry 5 attempts for 502 errors + WritePlan available in agent mode
ednsinf Aug 20, 2026
ed0a80b
fix(slugify): remove trailing dashes after truncation
ednsinf Aug 20, 2026
120ff74
fix: force approval on first edit per run — prevents silent file writes
ednsinf Aug 20, 2026
ded1eeb
fix: reset edits approval to 'ask' on activation — never silently all…
ednsinf Aug 20, 2026
2074d2b
fix: reset ALL approval policies to 'ask' on activation — shell/mcp/w…
ednsinf Aug 21, 2026
71d3726
fix: reset 'outside' approval policy too — Read tools on external pat…
ednsinf Aug 21, 2026
9e20ab6
fix: fuzzy tool name resolution — Mimo truncates 'Read' to 'Rea'
ednsinf Aug 21, 2026
70d900d
fix(todo): normalize incoming items — accept strings, missing fields,…
ednsinf Aug 21, 2026
bed83ed
fix(todo): accept 'tasks'/'items' field names — models use wrong field
ednsinf Aug 21, 2026
883b361
test(integration): 29 end-to-end tests for TodoWrite handler → UI render
ednsinf Aug 21, 2026
bd54137
fix: retry on 499 Client Closed Request + debug logging for TodoWrite
ednsinf Aug 21, 2026
dfed8a3
fix: remove policy reset on activation — was discarding user's 'Alway…
ednsinf Aug 21, 2026
aa63b54
fix: handler returns helpful message instead of 'error:' for empty in…
ednsinf Aug 21, 2026
76a693c
test: 241 integration tests — todo freeze, loop anti-freeze, approval/UI
ednsinf Aug 21, 2026
43eafcb
test: real API integration tests + .env for credentials
ednsinf Aug 21, 2026
ffb7fba
test: real API tests use direct Verboo endpoint + .env credentials
ednsinf Aug 21, 2026
9607cb0
test: IDE simulation tests — 17 real-world scenarios + .env for API
ednsinf Aug 21, 2026
98905de
test: real workflow tests — simulates exact user scenarios from scree…
ednsinf Aug 21, 2026
b0ef208
fix+test: handler creates placeholder when model sends empty args + 2…
ednsinf Aug 21, 2026
1d7cbde
fix: increase retry to 10 attempts with 30s max backoff for 502 errors
ednsinf Aug 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
63 changes: 63 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: CI

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

jobs:
build-and-test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20, 22]

steps:
- uses: actions/checkout@v4

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Install pnpm
run: npm install -g pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Type check
run: pnpm run check-types

- name: Lint
run: pnpm run lint

- name: Unit tests (vitest)
run: pnpm run test:unit

- name: Build production
run: node esbuild.js --production

- name: Package extension
if: matrix.node-version == 22
run: npx @vscode/vsce package --no-dependencies

security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check for leaked secrets
run: |
# Ensure no .env files committed
if git ls-files | grep -E '\.(env|env\..*)$'; then
echo "ERROR: .env files found in repo!"
exit 1
fi
# Check no API keys in source
if grep -rE '(sk-|tp-|vbk_|Bearer [A-Za-z0-9]{20,})' src/ --include='*.ts' --include='*.tsx' 2>/dev/null; then
echo "ERROR: Potential API keys found in source code!"
exit 1
fi
echo "Security scan passed."
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ node_modules
.vscode-dev-extensions
.vscode-test/
*.vsix
.env
.env.*
1 change: 1 addition & 0 deletions .vscodeignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ vsc-extension-quickstart.md
**/*.ts
**/.vscode-test.*
media/readme/**/*.svg
.env
Binary file added our_changes.patch
Binary file not shown.
10 changes: 6 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "ocursor",
"displayName": "OpenCursor Agent",
"description": "AI coding agent chat inside VS Code",
"version": "0.1.2",
"version": "0.1.5",
"publisher": "pkrd",
"license": "MIT",
"icon": "media/icon.png",
Expand All @@ -15,7 +15,7 @@
},
"homepage": "https://github.com/PawanOsman/OpenCursor#readme",
"engines": {
"vscode": "^1.96.0"
"vscode": "^1.85.0"
},
"categories": [
"AI",
Expand Down Expand Up @@ -119,6 +119,7 @@
"check-types": "tsc --noEmit && tsc --noEmit -p tsconfig.webview.json",
"lint": "eslint src",
"test": "vscode-test",
"test:unit": "vitest run",
"vsix": "pnpm run package && pnpm dlx @vscode/vsce package --no-dependencies"
},
"devDependencies": {
Expand All @@ -127,14 +128,15 @@
"@types/pdf-parse": "^1.1.5",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@types/vscode": "~1.96.0",
"@types/vscode": "~1.85.0",
"@vscode/test-cli": "^0.0.15",
"@vscode/test-electron": "^3.0.0",
"esbuild": "^0.28.1",
"eslint": "^10.5.0",
"npm-run-all": "^4.1.5",
"typescript": "^6.0.3",
"typescript-eslint": "^8.61.1"
"typescript-eslint": "^8.61.1",
"vitest": "^2.1.9"
},
"overrides": {
"diff": "^8.0.4",
Expand Down
Loading