Skip to content

Release v0.9.0 → prod (OpenCode + multi-provider remote scan)#193

Merged
Raftersecurity merged 7 commits into
prodfrom
main
Jul 8, 2026
Merged

Release v0.9.0 → prod (OpenCode + multi-provider remote scan)#193
Raftersecurity merged 7 commits into
prodfrom
main

Conversation

@Rome-1

@Rome-1 Rome-1 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Promotes v0.9.0 to prod (triggers npm + PyPI publish via publish.yaml).

What ships

Verification

  • Combined main: tsc clean; Node feature tests 92 pass; Python 197 pass; dual-impl parity.
  • Version parity: node/package.json = python/pyproject.toml = skill resources = 0.9.0.
  • OpenCode + multi-provider each secure-reviewed (rafter-secure-design for the credential/SSRF surface; rafter-code-review on both diffs).

Merging triggers the irreversible npm/PyPI publish + create-release tag v0.9.0.

🤖 Generated with Claude Code

Minh-Nguyen-2k7 and others added 7 commits June 30, 2026 11:02
Adds `dop_v1_[a-f0-9]{64}` (severity critical) to the built-in regex scanner in both Node and Python, with tests in each suite. Closes #26.

Co-authored-by: Minh_Nguyen <Minh-Nguyen-2k7@users.noreply.github.com>
Add OpenCode as an MCP-based platform adapter in both the Node and Python
implementations, mirroring the existing Cursor/Windsurf/Hermes pattern.

OpenCode supports local/stdio MCP servers and reads AGENTS.md natively.
Its config schema differs from Cursor/Windsurf: the block is `mcp` (not
`mcpServers`), each local server carries `type: "local"`, and command +
args are a single `command` array. Registered at
~/.config/opencode/opencode.json with a seeded `$schema` pointer.
Verified against https://opencode.ai/docs/mcp-servers/.

- Node: installOpenCodeMcp() + --with-opencode flag + auto-detection
  (~/.config/opencode), dry-run plan, interactive prompt, warnings,
  next-steps, help hints, and the openCodeMcp() component-registry spec.
  Wired into status.ts (mcpAgents + detectAgents) and verify.ts
  (checkOpenCode).
- Python: full parity in agent.py and agent_components.py.
- recipes/opencode.md, README (platform table, badge, prose lists),
  and CLI_SPEC.md (--with flag, verify checks table).
- Tests: node/tests/agent-init-opencode.test.ts plus mirrored
  TestInstallOpenCodeMcp / TestOpenCodeDetection in Python; registry
  ID lists updated (also backfilled the missing hermes.mcp entry).

OpenClaw (a separate product) is untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…JSON

Rafter security review flagged a low-severity parity/robustness gap: when an
existing ~/.config/opencode/opencode.json is valid JSON but the top level is
not an object (an array, string, or number), the Node init path would assign
properties onto it and silently mangle the user's file. Python's init already
guarded this with isinstance(loaded, dict).

- Node installOpenCodeMcp: only accept a parsed object (else warn + replace),
  mirroring the Python guard.
- Node/Python component openCodeMcp/_opencode_mcp: coerce a non-object read
  result to {} in install(), and guard is_installed()/uninstall() so a
  non-dict top-level can't raise.
- Regression tests for array/string top-level configs in both suites.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add optional multi-provider support to `rafter run` / `rafter scan` in both
the Node and Python implementations. The scan POST body additively gains two
OPTIONAL fields — `provider` (gitlab|gitea|bitbucket) and `repo_url` (canonical
https clone URL) — sent ONLY for non-github remotes. GitHub requests are
byte-identical to today (no provider, no repo_url).

- git utils: infer provider from the remote host and normalize both
  `git@host:owner/repo(.git)` and `https://host/owner/repo(.git)` into a
  canonical `https://<host>/<owner>/<repo>` repo_url. Host map:
  github.com→github; gitlab.com / *.gitlab.com→gitlab; bitbucket.org→bitbucket;
  codeberg.org / *.gitea.io→gitea; anything else→github (backward-compat default).
  parseRemote/parse_remote return value is left intact for existing callers;
  detectRepo/detect_repo additively surface provider + repo_url.
- backend run + scan command: add optional `--provider` / `--repo-url` flags
  that override inferred values. Body builder omits both fields whenever the
  resolved provider is github (or an unknown host that defaulted to github).
  github_token handling unchanged.
- CLI_SPEC.md: document the two flags, the two additive body fields, the
  host→provider inference table, and the backward-compat rule.
- Tests (Node + Python): provider inference per host and both URL forms; github
  remote produces a body with NO provider/repo_url (byte-identical shape);
  gitlab/bitbucket/gitea remotes produce the correct provider + normalized
  repo_url; --provider/--repo-url overrides win.

No version bump. No lockfile or .rafter.yml changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Raftersecurity
Raftersecurity merged commit 5a1027a into prod Jul 8, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants