Files
Michael Ramos 14e9aea0ec Fix/devcontainer & plan auto switching (opencode) (#31)
* Refactor: shared server package with PLANNOTATOR_REMOTE env var

- Create packages/server/ with shared server implementation
- Add PLANNOTATOR_REMOTE=1 env var for devcontainer/SSH mode
- Deprecate SSH_CONNECTION detection (still works with warning)
- Both Claude Code and OpenCode now use identical server logic
- OpenCode gains Obsidian/Bear integrations and remote detection
- Update documentation with environment variables section

Fixes #27

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Remove PLANNOTATOR_ORIGIN env var, fix onReady callback timing

- Remove PLANNOTATOR_ORIGIN hack from Claude Code hook (hardcode "claude-code")
- Fix onReady callback to pass port directly (was referencing undefined server)
- Create tests/manual/test-server.ts for testing either origin
- Update test-hook-2.sh to use new test server with opencode origin

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add devcontainer test setup, reduce logging verbosity

- Add tests/devcontainer/ with devcontainer.json for testing remote mode
- Add tests/opencode-local/ for local OpenCode testing
- Update package.json build script for proper bundling
- Remove verbose multi-line error messages, keep useful errors
- Clean up unused deprecationWarned variable

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add devcontainer support and documentation

- Add PLANNOTATOR_REMOTE env var for container/remote detection
- Remove console logging (silent operation)
- Add devcontainer.md with full setup instructions
- Add devcontainer section to OpenCode plugin README
- Add port-only test setup to reproduce common misconfiguration
- Update test devcontainers to forward port 4096 for opencode web
- Bump version to 0.4.1

Fixes #27

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update CLAUDE.md: legacy SSH detection, not deprecated

Removed incorrect mention of deprecation warning - SSH_TTY/SSH_CONNECTION
detection is silent by design.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix OpenCode agent switching after plan approval

After approving a plan, the conversation context stayed in "plan" mode
even though the TUI showed "build". This caused edits to fail because
the plan agent has edit permissions denied.

The fix uses session.prompt() to inject a message with agent: "build",
which triggers a new agentic loop with proper build agent permissions.

Fixes #29

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 14:25:19 -08:00
..

Plannotator Test - Port Only (Expected to Fail)

This test simulates the common misconfiguration reported by users running opencode web in Docker: setting only PLANNOTATOR_PORT without PLANNOTATOR_REMOTE.

Setup

Before opening in a devcontainer, create the auth symlink from your host machine:

mkdir -p .opencode
ln ~/.local/share/opencode/auth.json .opencode/auth.json

The Problem

Users in Docker/devcontainer environments often set:

PLANNOTATOR_PORT=9999

But forget to set:

PLANNOTATOR_REMOTE=1

Without PLANNOTATOR_REMOTE=1 (and no SSH_TTY/SSH_CONNECTION in the environment), the plugin will:

  1. Use port 9999
  2. Still try to open a browser (fails silently or hangs)

Expected Behavior

When you trigger a plan in this devcontainer:

  • Server starts on port 9999
  • Plugin attempts to open browser (fails)
  • No feedback to user
  • Appears to hang

The Fix

Users need BOTH environment variables:

PLANNOTATOR_REMOTE=1
PLANNOTATOR_PORT=9999

See tests/devcontainer/ for the correct configuration.

Testing

  1. Open this folder in VS Code
  2. Reopen in Container
  3. Run opencode web to start the web interface
  4. Access OpenCode via the forwarded port (usually 4096)
  5. Ask for a plan
  6. Observe the hang/failure - nothing on port 9999
  7. Compare with tests/devcontainer/ which works correctly