chore(main): release pai-opencode 3.0.0#139
Conversation
91369f1 to
10e4a5f
Compare
10e4a5f to
cf6ada1
Compare
…emove epic folder CHANGELOG [3.0.0] now covers all 19 work packages (WP1-WP4, WP-A through WP-N10, WP-M1, PR #138) including: - Algorithm v3.7.0, hierarchical skills, native skill loading, Zen free default - Event-driven plugin system (5 new handlers, bus events, shell.env hook) - Security hardening (prompt injection detection, input sanitization) - Core PAI system (skill fixes, PAI v4.0.3 docs port) - Installer & migration (migrate-legacy-config.ts, DB health, /db-archive) - Session intelligence (session registry, compaction intelligence, awareness) - Docs & tooling (system self-awareness, roborev/Biome CI, agent matrix) - Provider infrastructure (switch-provider.ts, two-step setup, ToS warning) - 8 dependency updates Remove docs/epic/ — all 6 working documents (EPIC, TODO, RUNBOOK, PLANS, CLEANUP) were project management scaffolding for a completed v3.0 migration. Architectural decisions live in ADRs, scope in docs/SCOPE-BOUNDARY.md, and what shipped is now in CHANGELOG.md.
|
@coderabbitai review |
….0.3 - Default paiVersion: '4.0.3' → '3.0.0' (PAI-OpenCode version) - Default repoUrl: 'github.com/danielmiessler/PAI' → 'github.com/Steffen025/pai-opencode' - settings.json fallback version: '2.0' → '3.0.0' - Header text: 'PAI | Personal AI Infrastructure' → 'PAI-OpenCode v3.0.0 | Personal AI Infrastructure' (large + medium banners) - Credit line added below repo URL in large + medium banners: 'Built on PAI by Daniel Miessler · github.com/danielmiessler/PAI' - Version detection: 'claude --version' → 'opencode --version'
✅ Actions performedReview triggered.
|
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis pull request transitions PAI metadata from version 4.0.3 to PAI-OpenCode 3.0.0, updates version detection to call Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
CHANGELOG.md (1)
147-153: Use a table for contributors to keep this structured section consistent.This section compares repeated fields (person + contribution + PR) and is easier to scan in table form.
As per coding guidelines, `**/*.md`: "Tables for structured comparisons".📋 Suggested table format
-Special thanks to community members whose contributions are included in this release: - -* **[`@eddovandenboom`](https://github.com/eddovandenboom)** — PAI wrapper script, `--fix-symlink` flag ([PR `#104`](https://github.com/Steffen025/pai-opencode/pull/104)) -* **[`@ktneely`](https://github.com/ktneely)** — Model profile updates for provider-agnostic routing ([PR `#103`](https://github.com/Steffen025/pai-opencode/pull/103)) -* **[`@step-security-bot`](https://github.com/step-security-bot)** — CI security hardening, pinned Actions SHA hashes ([PR `#106`](https://github.com/Steffen025/pai-opencode/pull/106)) +Special thanks to community members whose contributions are included in this release: + +| Contributor | Contribution | +|-------------|--------------| +| **[`@eddovandenboom`](https://github.com/eddovandenboom)** | PAI wrapper script, `--fix-symlink` flag ([PR `#104`](https://github.com/Steffen025/pai-opencode/pull/104)) | +| **[`@ktneely`](https://github.com/ktneely)** | Model profile updates for provider-agnostic routing ([PR `#103`](https://github.com/Steffen025/pai-opencode/pull/103)) | +| **[`@step-security-bot`](https://github.com/step-security-bot)** | CI security hardening, pinned Actions SHA hashes ([PR `#106`](https://github.com/Steffen025/pai-opencode/pull/106)) |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG.md` around lines 147 - 153, The Contributors list in CHANGELOG.md is free-form and should be converted into a structured markdown table for consistency; replace the bullet list under the "### Contributors" heading with a table that has columns like "Contributor", "Contribution", and "PR" and move each entry (e.g., `@eddovandenboom` — PAI wrapper script, `--fix-symlink` flag ([PR `#104`]), `@ktneely` — Model profile updates ([PR `#103`]), `@step-security-bot` — CI security hardening ([PR `#106`])) into its own row so the section is machine-readable and follows the `**/*.md` guideline requiring tables for structured comparisons..opencode/PAI/Tools/Banner.ts (1)
331-333: Avoid hardcoded visible widths for centered banner text.The fixed widths (
44,61) will drift as version strings or copy change and can visibly mis-center headers/credits. UsevisibleLength(...)to compute padding dynamically.♻️ Suggested refactor
- const headerLen = 44; // "PAI-OpenCode v3.0.0 | Personal AI Infrastructure" - const headerPad = " ".repeat(Math.floor((width - headerLen) / 2)); + const headerLen = visibleLength(headerText); + const headerPad = " ".repeat(Math.max(0, Math.floor((width - headerLen) / 2))); - const creditLen = 61; // visible length - const creditPad = " ".repeat(Math.floor((width - creditLen) / 2)); + const creditLen = visibleLength(creditLine); + const creditPad = " ".repeat(Math.max(0, Math.floor((width - creditLen) / 2))); - const headerPad = " ".repeat(Math.max(0, Math.floor((width - 44) / 2))); + const headerPad = " ".repeat(Math.max(0, Math.floor((width - visibleLength(headerText)) / 2))); - const creditPad = " ".repeat(Math.max(0, Math.floor((width - 61) / 2))); + const creditPad = " ".repeat(Math.max(0, Math.floor((width - visibleLength(creditLine)) / 2)));Also applies to: 365-367, 683-685, 705-707
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.opencode/PAI/Tools/Banner.ts around lines 331 - 333, The banner code hardcodes visible widths (e.g., headerLen = 44 and similar 61 elsewhere) which breaks centering when version text changes; replace those numeric literals by computing the visible length of the string using the visibleLength(...) helper (e.g., compute headerLen = visibleLength(headerText) and creditLen = visibleLength(creditText) where used) and then compute headerPad = " ".repeat(Math.floor((width - headerLen) / 2)); apply this change for the occurrences around the header block (currently using 44), the credit block (currently using 61), and the other two places noted (lines referenced in the review: 365-367, 683-685, 705-707) so all centered strings use visibleLength(...) instead of hardcoded constants.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@CHANGELOG.md`:
- Line 12: Update the release summary sentence that currently reads “Zen free
default” to use a hyphenated compound—replace the phrase "Zen free default" with
"Zen-free default" in the CHANGELOG entry so the wording reads clearly (search
for the exact phrase "Zen free default" to find the sentence to edit).
---
Nitpick comments:
In @.opencode/PAI/Tools/Banner.ts:
- Around line 331-333: The banner code hardcodes visible widths (e.g., headerLen
= 44 and similar 61 elsewhere) which breaks centering when version text changes;
replace those numeric literals by computing the visible length of the string
using the visibleLength(...) helper (e.g., compute headerLen =
visibleLength(headerText) and creditLen = visibleLength(creditText) where used)
and then compute headerPad = " ".repeat(Math.floor((width - headerLen) / 2));
apply this change for the occurrences around the header block (currently using
44), the credit block (currently using 61), and the other two places noted
(lines referenced in the review: 365-367, 683-685, 705-707) so all centered
strings use visibleLength(...) instead of hardcoded constants.
In `@CHANGELOG.md`:
- Around line 147-153: The Contributors list in CHANGELOG.md is free-form and
should be converted into a structured markdown table for consistency; replace
the bullet list under the "### Contributors" heading with a table that has
columns like "Contributor", "Contribution", and "PR" and move each entry (e.g.,
`@eddovandenboom` — PAI wrapper script, `--fix-symlink` flag ([PR `#104`]), `@ktneely`
— Model profile updates ([PR `#103`]), `@step-security-bot` — CI security hardening
([PR `#106`])) into its own row so the section is machine-readable and follows the
`**/*.md` guideline requiring tables for structured comparisons.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 439cd6f0-106e-4b6b-b8e1-d65e5b56e7d4
📒 Files selected for processing (20)
.opencode/PAI/Tools/Banner.tsCHANGELOG.mdREADME.mddocs/epic/CLAUDE-CLEANUP-PLAN.mddocs/epic/EPIC-v3.0-Synthesis-Architecture.mddocs/epic/OPTIMIZED-PR-PLAN.mddocs/epic/TODO-v3.0.mddocs/epic/V3.0-COMPLETION-PLAN.mddocs/epic/V3.0-RUNBOOK.mddocs/epic/pr-filelists/PR-01-files.txtdocs/epic/pr-filelists/PR-02-files.txtdocs/epic/pr-filelists/PR-03-files.txtdocs/epic/pr-filelists/PR-04-files.txtdocs/epic/pr-filelists/PR-05-files.txtdocs/epic/pr-filelists/PR-06-files.txtdocs/epic/pr-filelists/PR-07-files.txtdocs/epic/pr-filelists/PR-08-files.txtdocs/epic/pr-filelists/PR-09-files.txtdocs/epic/pr-filelists/PR-10-files.txtdocs/epic/pr-filelists/PR-11-files.txt
💤 Files with no reviewable changes (17)
- docs/epic/pr-filelists/PR-09-files.txt
- docs/epic/pr-filelists/PR-02-files.txt
- docs/epic/pr-filelists/PR-04-files.txt
- docs/epic/pr-filelists/PR-01-files.txt
- docs/epic/pr-filelists/PR-05-files.txt
- docs/epic/pr-filelists/PR-06-files.txt
- docs/epic/TODO-v3.0.md
- docs/epic/OPTIMIZED-PR-PLAN.md
- docs/epic/CLAUDE-CLEANUP-PLAN.md
- docs/epic/V3.0-RUNBOOK.md
- docs/epic/EPIC-v3.0-Synthesis-Architecture.md
- docs/epic/pr-filelists/PR-07-files.txt
- docs/epic/V3.0-COMPLETION-PLAN.md
- docs/epic/pr-filelists/PR-08-files.txt
- docs/epic/pr-filelists/PR-10-files.txt
- docs/epic/pr-filelists/PR-03-files.txt
- docs/epic/pr-filelists/PR-11-files.txt
CHANGELOG.md
Outdated
| ## [3.0.0] - 2026-04-12 | ||
| ## [3.0.0](https://github.com/Steffen025/pai-opencode/compare/opencode-v2.0.0...pai-opencode-v3.0.0) (2026-04-13) | ||
|
|
||
| PAI-OpenCode v3.0 is the **OpenCode-native release** — a complete re-architecture that moves from a Claude Code fork to vanilla OpenCode, removes the bootstrap loading mechanism in favour of the native skill system, and ships a zero-config Zen free default so users are productive immediately. |
There was a problem hiding this comment.
Fix compound adjective wording in the release summary.
Line 12 reads awkwardly as “Zen free default”; use a hyphenated compound (e.g., “Zen-free default”) for clarity.
✏️ Suggested wording fix
-PAI-OpenCode v3.0 is the **OpenCode-native release** — a complete re-architecture that moves from a Claude Code fork to vanilla OpenCode, removes the bootstrap loading mechanism in favour of the native skill system, and ships a zero-config Zen free default so users are productive immediately.
+PAI-OpenCode v3.0 is the **OpenCode-native release** — a complete re-architecture that moves from a Claude Code fork to vanilla OpenCode, removes the bootstrap loading mechanism in favour of the native skill system, and ships a zero-config Zen-free default so users are productive immediately.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| PAI-OpenCode v3.0 is the **OpenCode-native release** — a complete re-architecture that moves from a Claude Code fork to vanilla OpenCode, removes the bootstrap loading mechanism in favour of the native skill system, and ships a zero-config Zen free default so users are productive immediately. | |
| PAI-OpenCode v3.0 is the **OpenCode-native release** — a complete re-architecture that moves from a Claude Code fork to vanilla OpenCode, removes the bootstrap loading mechanism in favour of the native skill system, and ships a zero-config Zen-free default so users are productive immediately. |
🧰 Tools
🪛 LanguageTool
[grammar] ~12-~12: Use a hyphen to join words.
Context: ...kill system, and ships a zero-config Zen free default so users are productive imm...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@CHANGELOG.md` at line 12, Update the release summary sentence that currently
reads “Zen free default” to use a hyphenated compound—replace the phrase "Zen
free default" with "Zen-free default" in the CHANGELOG entry so the wording
reads clearly (search for the exact phrase "Zen free default" to find the
sentence to edit).
Tools/pai-to-opencode-converter.ts: - Fix CodeQL alert #11 'Incomplete string escaping': escape backslashes BEFORE double quotes (desc.replace(/\\/g, '\\\\').replace(/"/g, '\\"')) to prevent broken YAML when input contains literal backslashes. .opencode/skills/Telos/DashboardTemplate/package.json: - Bump next ^15.5.6 → ^15.5.15 — resolves Dependabot alerts #2-6 (4× HIGH/MEDIUM CVEs in Next.js < 15.5.15)
…ntering CHANGELOG.md: - 'Zen free default' → 'Zen-free default' (hyphenated compound) - Contributors bullet list → table (Contributor | Contribution | PR) Banner.ts: - Replace 6 hardcoded visible-length constants (44, 35, 61) with visibleLength() calls in large + medium Navy banners. Centering now adapts when version string length changes.
|
🤖 Created releases: 🌻 |
🤖 Release PR managed by release-please — updated to correct version.
3.0.0 (2026-04-13)
model_tiersremoved — PAI-OpenCode now runs on vanilla OpenCode from opencode.ai. The customSteffen025/opencodefork is archived. Each agent inopencode.jsonhas exactly onemodelfield. See ADR-019 and UPGRADE.md.tier: always).MINIMAL_BOOTSTRAP.mdis deleted. See ADR-020.skills/CORErenamed toskills/PAI./connect+switch-provider.ts.Features
PAI/SKILL.mdtier:always via native skill scanneropencode/big-pickle, no API key required/connect(credentials) →switch-provider.ts(opencode.json)paicommand fromopencodemodel_tiers→ flatmodelMigration
Run
bun run PAI-Install/engine/migrate-legacy-config.ts ~/.opencode/opencode.jsonto auto-convert existing v2.x configs. See UPGRADE.md.Files changed:
CHANGELOG.md,package.json,.release-please-manifest.jsonMerging this PR will create a GitHub Release
pai-opencode-v3.0.0and tagpai-opencode-v3.0.0.Summary by CodeRabbit
New Features
Documentation