Scope-based HTML/CSS/DOM patch utilities and LLM patch helpers
Project description
repatch
Reusable HTML/CSS/DOM patch utilities extracted from Nexu Cinema: marked-element context, scope-restricted CSS, spatial deletes, LLM UI patch prompts, and local function DOM patches.
Also includes the original RepatchService for scope-based LLM fragment suggestions.
Install
pip install -e .
# Nexu: repatch @ file:///path/to/repatch in pyproject.toml
Public API (repatch)
| Module | Key symbols |
|---|---|
marked_context |
build_marked_element_context, resolve_marked_llm_context, restrict_scope_css_to_marks, marked_css_selectors, has_ui_marks |
scope |
inject_scope_style, strip_scope_style, normalize_focus_scope, should_block_full_html_iterate, scoped_html_fragment |
ui_patch |
build_ui_patch_prompt, parse_ui_patch_response, apply_ui_patch_options, supports_llm_patch_scope |
spatial |
apply_spatial_deletes_to_html |
dom_patch |
build_function_option_patches, build_function_patch_context, supports_function_patch |
options |
sync_option_previews_from_workspace, enforce_deletes_on_option_previews, replace_html_title, html_files_distinct |
css |
split_css_rules, validate_css_safety |
project_ir |
build_project_ir, summarize_project_ir |
service |
RepatchService, PatchSuggestion |
Multi-Language Client SDKs
The repatch repository provides official client-side and process SDKs under the sdks/ directory to simplify surgical real-time UI mutations across different languages and platforms:
1. JavaScript SDK (sdks/js/repatch-sdk.js)
A client-side library to be included in browsers. It connects to the Repatch WebSocket/SSE stream and executes surgical updates:
ADD <selector> <html_content>: Appends child element.REPLACE <selector> <html_content>: Replaces content.STYLE <selector> { css }: Scopes CSS to element.REMOVE <selector>: Deletes element.
2. Python Client SDK (sdks/python/repatch_sdk.py)
A thread-safe client that allows other python services, test harnesses, or CLI agents to subscribe or broadcast patches:
from repatch_sdk import RepatchClient
client = RepatchClient("ws://localhost:8083/repatch")
@client.on_patch
def handle_patch(data):
print("Received patch DSL:", data["dsl"])
client.start()
client.send_patch("STYLE #btn-eq { background: red; }")
Example: marked context + UI patch prompt
from repatch import build_marked_element_context
from repatch.ui_patch import build_ui_patch_prompt
ctx = build_marked_element_context(html, keep_ids=["7"], delete_ids=["tan"], focus_scope="colors", project_kind="calculator")
prompt = build_ui_patch_prompt(html, focus_scope="colors", project_kind="calculator", option_variants=variants, context_fragment=ctx)
Example: file-level option previews
from repatch import enforce_deletes_on_option_previews, sync_option_previews_from_workspace
sync_option_previews_from_workspace(
"capsule/cinema",
stage=0,
delete_ids=["old-cta"],
finalize_html=my_finalize_html,
)
enforce_deletes_on_option_previews(
"capsule/cinema",
["old-cta"],
finalize_html=my_finalize_html,
)
Original RepatchService (v0)
from repatch import RepatchService
service = RepatchService(model="gpt-4o-mini")
fragment = """
<section>
<h1>Pracownia Malort Gdynia – przestrzeń dla kreatywności Twojego dziecka</h1>
<p>Zapraszamy do wyjątkowego miejsca...</p>
## AI Cost Tracking
   
  
- 🤖 **LLM usage:** $1.6311 (12 commits)
- 👤 **Human dev:** ~$529 (5.3h @ $100/h, 30min dedup)
Generated on 2026-06-01 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
---
<button>Zapisz dziecko</button>
</section>
"""
suggestions = service.generate_patch_suggestions(
fragment=fragment,
scopes=["display", "colors"],
)
for idx, item in enumerate(suggestions, start=1):
print(f"Wariant {idx}:")
print("KEEP:", item.keep)
print("CHANGE:", item.change)
print(item.patched_fragment)
License
Licensed under Apache-2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repatch-0.2.14.tar.gz.
File metadata
- Download URL: repatch-0.2.14.tar.gz
- Upload date:
- Size: 52.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
191704a753aa772ab054b4aa346bdfb89d7197cb18e083fd938ba1aec845eb09
|
|
| MD5 |
359b3689dd318c1ba4493ec7273410dd
|
|
| BLAKE2b-256 |
07214091d4b2101a524978fe2fbc33f5632d6e85b8cd29f9ba31e656d0b8da4e
|
File details
Details for the file repatch-0.2.14-py3-none-any.whl.
File metadata
- Download URL: repatch-0.2.14-py3-none-any.whl
- Upload date:
- Size: 47.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e963cf2f14c2a2b9f1f9dbb3e9c14b57ed16b7b4a4cfa4dc384b19ecb8d4687
|
|
| MD5 |
e1d6ccfd20c81a08977652f66ff34d0b
|
|
| BLAKE2b-256 |
e5210d95fe326d5be888c595b7fd7d6db724d06c7cf5b5bb514fb30f71f6f0b0
|