ironcode-ai 1.20.7 → 1.20.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -39,6 +39,7 @@ IronCode is a **high-performance CLI AI coding agent** — a fork of [OpenCode](
39
39
  - 📝 **External Editor** — Opens `$EDITOR`/nvim with auto-install if missing
40
40
  - 🧩 **Built-in Skills** — 13 opinionated slash commands: plan review, code review, QA (web + API), ship, retro, and more
41
41
  - 🛡️ **Security** — Prompt injection detection blocks malicious websites from manipulating the AI
42
+ - 🔄 **Auto-Compact on Overflow** — When context limit is hit, automatically compacts conversation and retries
42
43
  - 🏠 **100% Local** — No cloud services, works completely offline
43
44
  - ⚡ **Blazing Fast** — Native Rust for all performance-critical operations
44
45
 
@@ -126,7 +127,7 @@ Press **`Ctrl+T`** to cycle between variants:
126
127
 
127
128
  ## Skills
128
129
 
129
- IronCode ships with **13 built-in skill workflows** — opinionated slash commands that switch the agent into a specialist mode. Instead of one generic assistant, you get: founder, tech lead, TDD coach, debugger, paranoid reviewer, release engineer, QA tester, technical writer, and engineering manager.
130
+ IronCode ships with **15 built-in skill workflows** — opinionated slash commands that switch the agent into a specialist mode. Instead of one generic assistant, you get: founder, tech lead, TDD coach, debugger, paranoid reviewer, release engineer, QA tester, security auditor, technical writer, and engineering manager.
130
131
 
131
132
  | Skill | Mode | What it does |
132
133
  | ------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -135,6 +136,8 @@ IronCode ships with **13 built-in skill workflows** — opinionated slash comman
135
136
  | `/tdd` | Developer | RED-GREEN-REFACTOR: write a failing test, minimal code to pass, refactor. No production code without a failing test first. |
136
137
  | `/debug` | Debugger | Systematic 4-phase debugging: root cause investigation, pattern analysis, hypothesis testing, implementation. 3-fix rule escalates architectural problems. |
137
138
  | `/code-review` | Staff engineer | Find bugs that pass CI but blow up in production. Two-pass: critical + informational. |
139
+ | `/security-review` | Security engineer | Scan the current branch diff for OWASP Top 10 vulnerabilities before shipping. Two-pass: critical + informational. Integrates Semgrep MCP when available. |
140
+ | `/web-scan` | Penetration tester | Actively probe a live URL for misconfigs, exposed files, SSL issues, CORS, and info disclosure. Uses curl; optionally integrates Nikto and Nuclei. |
138
141
  | `/verify` | Gatekeeper | Run the command, read the output, then claim the result. Evidence before assertions — no "should work now." |
139
142
  | `/code-ship` | Release engineer | Merge, test, typecheck, review, changelog, bisectable commits, push, and PR — one command. |
140
143
  | `/browse` | QA engineer | Headless Chromium via Playwright. Navigate, click, fill forms, screenshot, assert states, test responsive layouts. |
@@ -207,6 +210,82 @@ Streak: 12 consecutive days.
207
210
 
208
211
  ````
209
212
 
213
+ ### Security Skills
214
+
215
+ `/security-review` and `/web-scan` work out of the box with no extra setup. Install optional tools below for deeper scanning.
216
+
217
+ #### Optional: Semgrep MCP (static analysis for `/security-review`)
218
+
219
+ [Semgrep](https://semgrep.dev) adds pattern-based static analysis on top of the built-in OWASP checklist — detecting injection, hardcoded secrets, insecure APIs, and supply chain issues across 30+ languages.
220
+
221
+ **1. Add to your ironcode config** (`~/.config/ironcode/ironcode.json` for global, or `ironcode.json` in your project):
222
+
223
+ ```json
224
+ {
225
+ "mcp": {
226
+ "semgrep": {
227
+ "type": "local",
228
+ "command": ["npx", "@modular-intelligence/semgrep"]
229
+ }
230
+ }
231
+ }
232
+ ```
233
+
234
+ Optional — add `SEMGREP_APP_TOKEN` to unlock Pro rules (free at semgrep.dev):
235
+
236
+ ```json
237
+ {
238
+ "mcp": {
239
+ "semgrep": {
240
+ "type": "local",
241
+ "command": ["npx", "@modular-intelligence/semgrep"],
242
+ "environment": {
243
+ "SEMGREP_APP_TOKEN": "your-token-here"
244
+ }
245
+ }
246
+ }
247
+ }
248
+ ```
249
+
250
+ **2. Install Semgrep CLI** (required by the MCP server):
251
+
252
+ ```bash
253
+ # macOS
254
+ brew install semgrep
255
+
256
+ # pip
257
+ pip install semgrep
258
+ ```
259
+
260
+ **3. Restart IronCode**, then verify:
261
+
262
+ ```bash
263
+ ironcode mcp list
264
+ # semgrep connected
265
+ ```
266
+
267
+ When connected, `/security-review` runs three scans automatically — SAST (diff-aware), secrets detection, and supply chain — then merges all findings into the report under `[SEMGREP]`.
268
+
269
+ > `npx` auto-downloads `@modular-intelligence/semgrep` on first run. The Semgrep CLI must be installed separately (step 2 above).
270
+
271
+ #### Optional: Nikto + Nuclei (active scanning for `/web-scan`)
272
+
273
+ `/web-scan` uses `curl` by default. Install Nikto and/or Nuclei for deeper active scanning:
274
+
275
+ ```bash
276
+ # macOS
277
+ brew install nikto
278
+ brew install nuclei && nuclei -update-templates
279
+
280
+ # Ubuntu / Debian
281
+ sudo apt install nikto
282
+ go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
283
+ ```
284
+
285
+ When installed, `/web-scan` detects them automatically and appends their findings to the report.
286
+
287
+ ---
288
+
210
289
  ### Skills requiring Playwright MCP
211
290
 
212
291
  The `/browse`, `/qa`, `/qa-only`, and `/qa-browse` skills control a real browser via [Playwright MCP](https://github.com/microsoft/playwright-mcp). Set it up once before using them.
@@ -384,6 +463,23 @@ Areas to help with: performance optimizations, bug fixes, documentation, new plu
384
463
 
385
464
  ## Changelog
386
465
 
466
+ <details>
467
+ <summary><strong>v1.20.6</strong> — Auto-Compact Overflow + UI Fixes</summary>
468
+
469
+ **Auto-compact on context overflow**
470
+ - When model returns a token limit error (e.g. `"prompt token count of 128195 exceeds the limit of 128000"`), IronCode now automatically triggers compaction to summarize the conversation, then retries the request — instead of showing an error
471
+ - Covers Gemini, OpenAI, and generic `context length exceeded` error messages
472
+
473
+ **File Explorer — insert to prompt**
474
+ - Selecting a file in the file explorer (`/explorer`) now inserts its path directly into the prompt and closes the dialog
475
+ - Previously, selecting a file only toggled the preview panel with no action
476
+
477
+ **Fix data: URI file attachments**
478
+ - Files attached as `data:` URIs (screenshots, voice messages, documents sent via Telegram/Discord) no longer fail with `AI_DownloadError: URL scheme must be http or https`
479
+ - The `data:` prefix is stripped before passing to the AI SDK
480
+
481
+ </details>
482
+
387
483
  <details>
388
484
  <summary><strong>v1.20.5</strong> — Narrow Terminal / Mobile SSH Support</summary>
389
485
 
package/package.json CHANGED
@@ -6,13 +6,13 @@
6
6
  "scripts": {
7
7
  "postinstall": "bun ./postinstall.mjs || node ./postinstall.mjs"
8
8
  },
9
- "version": "1.20.7",
9
+ "version": "1.20.9",
10
10
  "license": "MIT",
11
11
  "optionalDependencies": {
12
- "ironcode-linux-x64-baseline": "1.20.7",
13
- "ironcode-linux-x64-modern": "1.20.7",
14
- "ironcode-linux-x64-baseline-musl": "1.20.7",
15
- "ironcode-windows-x64-modern": "1.20.7",
16
- "ironcode-darwin-arm64": "1.20.7"
12
+ "ironcode-linux-x64-modern": "1.20.9",
13
+ "ironcode-darwin-arm64": "1.20.9",
14
+ "ironcode-linux-x64-baseline-musl": "1.20.9",
15
+ "ironcode-windows-x64-modern": "1.20.9",
16
+ "ironcode-linux-x64-baseline": "1.20.9"
17
17
  }
18
18
  }
package/postinstall.mjs CHANGED
@@ -49,27 +49,33 @@ function detectPlatformAndArch() {
49
49
 
50
50
  function findBinary() {
51
51
  const { platform, arch } = detectPlatformAndArch()
52
- // const packageName = `ironcode-${platform}-${arch}`
53
- let packageName = `ironcode-${platform}-${arch}`
54
- if (arch === "x64") {
55
- packageName += "-modern"
56
- }
57
52
  const binaryName = platform === "windows" ? "ironcode.exe" : "ironcode"
58
53
 
59
- try {
60
- // Use require.resolve to find the package
61
- const packageJsonPath = require.resolve(`${packageName}/package.json`)
62
- const packageDir = path.dirname(packageJsonPath)
63
- const binaryPath = path.join(packageDir, "bin", binaryName)
54
+ // Build candidate package names in preference order
55
+ const candidates = []
56
+ if (arch === "x64") {
57
+ candidates.push(`ironcode-${platform}-${arch}-modern`)
58
+ }
59
+ candidates.push(`ironcode-${platform}-${arch}`)
60
+ // Fallback: on darwin-x64 try arm64 (runs via Rosetta 2)
61
+ if (platform === "darwin" && arch === "x64") {
62
+ candidates.push("ironcode-darwin-arm64")
63
+ }
64
64
 
65
- if (!fs.existsSync(binaryPath)) {
66
- throw new Error(`Binary not found at ${binaryPath}`)
65
+ for (const packageName of candidates) {
66
+ try {
67
+ const packageJsonPath = require.resolve(`${packageName}/package.json`)
68
+ const packageDir = path.dirname(packageJsonPath)
69
+ const binaryPath = path.join(packageDir, "bin", binaryName)
70
+ if (fs.existsSync(binaryPath)) {
71
+ return { binaryPath, binaryName }
72
+ }
73
+ } catch (_) {
74
+ // not installed, try next candidate
67
75
  }
68
-
69
- return { binaryPath, binaryName }
70
- } catch (error) {
71
- throw new Error(`Could not find package ${packageName}: ${error.message}`)
72
76
  }
77
+
78
+ throw new Error(`Could not find a suitable ironcode binary package for ${platform}-${arch}`)
73
79
  }
74
80
 
75
81
  function prepareBinDirectory(binaryName) {