Skip to content

Repository files navigation

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)

ModuleKey symbols
marked_contextbuild_marked_element_context, resolve_marked_llm_context, restrict_scope_css_to_marks, marked_css_selectors, has_ui_marks
scopeinject_scope_style, strip_scope_style, normalize_focus_scope, should_block_full_html_iterate, scoped_html_fragment
ui_patchbuild_ui_patch_prompt, parse_ui_patch_response, apply_ui_patch_options, supports_llm_patch_scope
spatialapply_spatial_deletes_to_html
dom_patchbuild_function_option_patches, build_function_patch_context, supports_function_patch
optionssync_option_previews_from_workspace, enforce_deletes_on_option_previews, replace_html_title, html_files_distinct
csssplit_css_rules, validate_css_safety
project_irbuild_project_ir, summarize_project_ir
serviceRepatchService, 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:

fromrepatch_sdkimportRepatchClientclient=RepatchClient("ws://localhost:8083/repatch")
@client.on_patchdefhandle_patch(data):
print("Received patch DSL:", data["dsl"])
client.start()
client.send_patch("STYLE #btn-eq { background: red; }")

Example: marked context + UI patch prompt

fromrepatchimportbuild_marked_element_contextfromrepatch.ui_patchimportbuild_ui_patch_promptctx=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

fromrepatchimportenforce_deletes_on_option_previews, sync_option_previews_from_workspacesync_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)

fromrepatchimportRepatchServiceservice=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![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.20-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)![AI Cost](https://img.shields.io/badge/AI%20Cost-$2.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-16.8h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)- 🤖 **LLM usage:** $2.9005 (25 commits)- 👤 **Human dev:** ~$1683 (16.8h @ $100/h, 30min dedup)Generated on 2026-07-07 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"],
)
foridx, iteminenumerate(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.

About

Scope-based HTML/CSS/DOM patch utilities and LLM patch helpers

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages