Repository navigation
feat(orient): 0006 StateManifestOrientation — orient_workspace v1 - #36
Ryan-AI-Studios wants to merge 13 commits into
Conversation
Add uv dev toolchain (ruff, basedpyright, pytest), project CI with Node-24-ready Actions, gitignore for local agent/conductor governance, offline smoke tests, and docs/planner-handoff.md for cold-start planners. Includes small gimp_mcp_server typing/format fixes for the new gate.
Document 0001 bootstrap complete, 0002 quality stabilization as next, and the full path through 0028 final product polish.
Full product ruff/format green; scripts layout; setup-uv@v9.0.0; lint.yml retired; planner-handoff policy. Ledger: 83598dee-78b5-4c0a-8975-96a7b5cd15c4
…th jail Track 0003: Class A/B exec gates, AF_INET 127.0.0.1, session auth, path jail, audit. CI green. Codex final PASS WITH DEFERRED P3.
…mapping Visible composite snapshots (dup+merge), image_index, ToolResult structuredContent mapping, temp policy, fail-closed selection/PNG validation. Codex final PASS WITH DEFERRED P3.
* feat(export): add gimp_mcp_export host module + offline alpha tests * fix(export): alpha-preserving merge-on-dup + file-*-export + verify tool * docs: Issue 16 alpha export defaults, install gimp_mcp_export.py * fix(export): recursive alpha preflight + structured MCP errors IR1-01: walk layer groups recursively in preflight/verify_alpha IR1-02: return structured export error dicts from MCP export_image IR1-04: fail-closed when preserve_alpha and drawable unset IR1-05: greps, type-4 PNG fixture, structured-error source tests * fix(export): codex P1/P2 — no silent format fallback, fail-closed RGBA8, batch metadata * fix(export): format README; drop accidental conductor review from tree Keep conductor/ gitignored local-only. Ruff-format README code fences for CI. * docs(0005): mark AlphaExportCorrectness complete in planner handoff Issue 16 closed: merge-on-dup export, IHDR ALPHA_LOST, verify_alpha_channel. Next product track: 0006 StateManifestOrientation (placeholder plan). --------- Co-authored-by: Ryan <rbourgoin@gmail.com>
Introduce schemas/state-manifest.v1.json (draft 2020-12), pure stdlib gimp_mcp_state.py (handles, normalize, capabilities, recursive validate, finalize_manifest), and tests/test_state_manifest.py with nested-group goldens and optional jsonschema checks. Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
Add session_id/epoch/started_at on MCPPlugin.__init__, register orient_workspace dispatcher, implement read-only recursive state dump (selected via displays[0], kinds via isinstance/gtype, no flush/undo), and wire get_image_metadata params through dispatcher + _get_image. Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
Wire server orient_workspace through finalize_manifest (stdio-proxy), pass image_index on get_image_metadata, update list_layers/protocol/ README for orientation SoT, and harden wiring tests. Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
…arnings) Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
- summary_only layer_count: visited ids + _ORIENT_MAX_LAYER_DEPTH - _iter_layers_recursive: visited set + max_depth=32 - Host validate: source_path required (string|null), selection.bounds ints, captured_at ISO-ish - Schema: source_path in imageManifest.required; bounds requires x/y/width/height Ledger: f13ebc80-dc77-4722-831e-68b1858c6a0f
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (30)
WalkthroughThe bridge now uses authenticated loopback transport, workspace path confinement, gated execution, composite snapshots, alpha-aware exports, schema-versioned workspace orientation, structured errors, CI quality checks, and expanded documentation. ChangesGIMP MCP bridge
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested labels: ✨ 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 |
|
Opened against upstream by mistake — product work lands on Ryan-AI-Studios/gimp-mcp fork first. |
Summary
Track 0006-StateManifestOrientation: agents get a schema-versioned, read-only workspace model before mutation.
orient_workspaceMCP tool → state-manifest v1.0.0 (urn:gimp-agent:state-manifest:1)gimp_mcp_state.py: provisional handles, recursivevalidate_manifest, honest capabilities,finalize_manifest(transportstdio-proxy)schemas/state-manifest.v1.json_layer_children, kinds via isinstance/gtype, selection, color profile, EXIF fields, session_id/epoch on plugin instanceselectedusesdisplays[0]only (never index-0 default when no displays)summary_only+image_indexfor large workspacesget_image_metadata(image_index)three coordinated edits_iter_layers_recursiveOut of scope (as planned)
review.mdReview
Test plan
uv run ruff check .uv run ruff format --check .uv run basedpyrightuv run pytest -m \"not integration and not slow\"ledgerful verify --scope fullSummary by CodeRabbit
New Features
Documentation
Tests