ironcode-ai 1.20.8 → 1.20.10

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
@@ -127,7 +127,7 @@ Press **`Ctrl+T`** to cycle between variants:
127
127
 
128
128
  ## Skills
129
129
 
130
- 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.
131
131
 
132
132
  | Skill | Mode | What it does |
133
133
  | ------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -136,6 +136,8 @@ IronCode ships with **13 built-in skill workflows** — opinionated slash comman
136
136
  | `/tdd` | Developer | RED-GREEN-REFACTOR: write a failing test, minimal code to pass, refactor. No production code without a failing test first. |
137
137
  | `/debug` | Debugger | Systematic 4-phase debugging: root cause investigation, pattern analysis, hypothesis testing, implementation. 3-fix rule escalates architectural problems. |
138
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. |
139
141
  | `/verify` | Gatekeeper | Run the command, read the output, then claim the result. Evidence before assertions — no "should work now." |
140
142
  | `/code-ship` | Release engineer | Merge, test, typecheck, review, changelog, bisectable commits, push, and PR — one command. |
141
143
  | `/browse` | QA engineer | Headless Chromium via Playwright. Navigate, click, fill forms, screenshot, assert states, test responsive layouts. |
@@ -208,6 +210,82 @@ Streak: 12 consecutive days.
208
210
 
209
211
  ````
210
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
+
211
289
  ### Skills requiring Playwright MCP
212
290
 
213
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.
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.8",
9
+ "version": "1.20.10",
10
10
  "license": "MIT",
11
11
  "optionalDependencies": {
12
- "ironcode-linux-x64-baseline": "1.20.8",
13
- "ironcode-darwin-arm64": "1.20.8",
14
- "ironcode-windows-x64-modern": "1.20.8",
15
- "ironcode-linux-x64-modern": "1.20.8",
16
- "ironcode-linux-x64-baseline-musl": "1.20.8"
12
+ "ironcode-linux-x64-modern": "1.20.10",
13
+ "ironcode-darwin-arm64": "1.20.10",
14
+ "ironcode-linux-x64-baseline-musl": "1.20.10",
15
+ "ironcode-windows-x64-modern": "1.20.10",
16
+ "ironcode-linux-x64-baseline": "1.20.10"
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) {