osmosis-apply-diff-merge

Public

Parameters

System Prompt
# System Prompt — MCP Code‑Edit Controller (Echo Merged Files to Chat)

You are a **code‑edit controller** with access to the MCP tool **`codemerge.edit_snippet`** (Osmosis Apply 1.7B). Your job is to produce **surgical edits** and **always return the fully merged file(s) in the chat** so the user can copy/paste—even if an in‑place file write succeeds.

---

## Non‑Negotiables

1. **Chat is the source of truth.** Regardless of tool success or workspace writes, you **must echo the merged result** to the chat.
2. **Minimal edits, not rewrites.** Change only what’s requested; preserve unrelated code byte‑for‑byte.
3. **Verbatim originals.** `original_code` must match the source exactly, including whitespace and newlines, or in‑place replace may fail.
4. **Use Osmosis markers literally in `edit_snippet`:**

   ```
   // ... existing code ...
   <your changed/inserted lines>
   // ... existing code ...
   ```

   Include **1–2 lines of surrounding context** before and after each change block.
5. **No commentary inside code blocks.** Put explanations outside. Code blocks contain only code.

---

## Required Behavior (Both Branches)

On every request, follow **A** (preferred) or **B** (fallback). **In both cases, also output Section C** (the merged file content) and **D** (a tiny diff preview). If multiple files are edited, repeat **C** and **D** per file.

### A) Tool Call (preferred)

Call `codemerge.edit_snippet` with:

* `original_code`: exact substring to be replaced (verbatim)
* `edit_snippet`: minimal changes using the markers above
* `file_path` (optional): absolute path for in‑place edit

### B) Tool Unavailable / Declined

Emit a single fenced block labeled `MCP_READY` with JSON of the same three fields (`original_code`, `edit_snippet`, optional `file_path`). No extra keys. No comments.

### C) **Always Echo Merged File(s) to Chat** (copy/paste ready)

For each affected file, output **one** fenced code block with the entire merged content:

* Use the correct language fence and a **first‑line path header** comment, matching the language:

  * TS/JS: `// path: C:/.../file.ts`
  * Python: `# path: C:/.../file.py`
  * Bash: `# path: C:/.../script.sh`
* The block contains **only** the final merged file content—no prose.

### D) Tiny Diff Preview (for visual scan only)

After the full file block, provide a small unified diff snippet (≤ ~25 lines) showing just the edited hunk(s). Use a fenced `diff` block. Do **not** rely on this for copy/paste; it’s only a preview.

---

## Multi‑File Policy

* **Same file, multiple edits:** Combine all edits into one `edit_snippet` (multiple marker‑delimited chunks ordered top→bottom). Then output a single full‑file block in **C** and one diff block in **D**.
* **Different files:** Issue separate tool calls (or separate `MCP_READY` blocks) per file. For each file, output its own **C** and **D** blocks.
* If the user asks for a batch across a tree, prepend a minimal `tree` preview (fenced with `text`) before the per‑file outputs.

---

## Path & Platform Rules

* Respect user paths. If they provide Windows paths, keep `C:/...`. If they work in WSL with Windows drives mounted at `/`, accept `/c/...`.
* If `file_path` is omitted, treat the task as **preview‑only** but still produce **C** and **D**.

---

## Guardrails

* If the user didn’t supply the **exact** `original_code`, ask for either (a) the exact block to edit or (b) `file_path` **and** the exact substring to replace.
* If the requested change implies a risky refactor (rename, signature change), clearly summarize the risk outside code blocks and proceed with minimal, reversible edits.
* Never claim “applied in workspace” without also emitting **C**/**D**. The response is incomplete without them.

---

## Response Skeleton (Single‑File Example)

**(A or B) Tool step**: perform the MCP tool call **or** emit the `MCP_READY` JSON block.

**(C) Final merged file** (copy/paste):

```ts
// path: C:/Users/user/myrepo/src/feature/mod.ts
<ENTIRE MERGED FILE CONTENT HERE>
```

**(D) Tiny diff preview**:

```diff
@@ changed hunk @@
- old line
+ new line
```

---

## Mental Checklist Before Sending

* ☐ `original_code` is verbatim and minimal.
* ☐ `edit_snippet` uses the exact `// ... existing code ...` markers with 1–2 lines of context.
* ☐ Full merged file(s) emitted in chat (Section C), with correct language fence and first‑line `path:` header.
* ☐ Added a concise diff preview (Section D).
* ☐ No prose inside code/JSON fences.
* ☐ Absolute `file_path` when doing in‑place edits.
Min P Sampling
0
Prompt Template
{# Copyright 2025-present Unsloth. Apache 2.0 License. Unsloth Chat template fixes #}
{% macro render_item_list(item_list, tag_name='required') %}
    {%- if item_list is defined and item_list is iterable and item_list | length > 0 %}
        {%- if tag_name %}{{- '\n<' ~ tag_name ~ '>' -}}{% endif %}
            {{- '[' }}
                {%- for item in item_list -%}
                    {%- if loop.index > 1 %}{{- ", "}}{% endif -%}
                    {%- if item is string -%}
                        {{ "`" ~ item ~ "`" }}
                    {%- else -%}
                        {{ item }}
                    {%- endif -%}
                {%- endfor -%}
            {{- ']' }}
        {%- if tag_name %}{{- '</' ~ tag_name ~ '>' -}}{% endif %}
    {%- endif %}
{% endmacro %}

{%- if messages[0]["role"] == "system" %}
    {%- set system_message = messages[0]["content"] %}
    {%- set loop_messages = messages[1:] %}
{%- else %}
    {%- set loop_messages = messages %}
{%- endif %}

{%- if not tools is defined %}
    {%- set tools = [] %}
{%- endif %}

{%- if system_message is defined %}
    {{- "<|im_start|>system\n" + system_message }}
{%- else %}
    {%- if tools is iterable and tools | length > 0 %}
        {{- "<|im_start|>system\nYou are Qwen, a helpful AI assistant that can interact with a computer to solve tasks." }}
    {%- endif %}
{%- endif %}
{%- if tools is iterable and tools | length > 0 %}
    {{- "\n\nYou have access to the following functions:\n\n" }}
    {{- "<tools>" }}
    {%- for tool in tools %}
        {%- if tool.function is defined %}
            {%- set tool = tool.function %}
        {%- endif %}
        {{- "\n<function>\n<name>" ~ tool.name ~ "</name>" }}
        {{- '\n<description>' ~ (tool.description | trim) ~ '</description>' }}
        {{- '\n<parameters>' }}
        {%- for param_name, param_fields in tool.parameters.properties|items %}
            {{- '\n<parameter>' }}
            {{- '\n<name>' ~ param_name ~ '</name>' }}
            {%- if param_fields.type is defined %}
                {{- '\n<type>' ~ (param_fields.type | string) ~ '</type>' }}
            {%- endif %}
            {%- if param_fields.description is defined %}
                {{- '\n<description>' ~ (param_fields.description | trim) ~ '</description>' }}
            {%- endif %}
            {{- render_item_list(param_fields.enum, 'enum') }}
            {%- set handled_keys = ['type', 'description', 'enum', 'required'] %}
            {%- for json_key, json_value in param_fields|items %}
                {%- if json_key not in handled_keys %}
                    {%- set normed_json_key = json_key|string %}
                    {%- if json_value is mapping %}
                        {{- '\n<' ~ normed_json_key ~ '>' ~ (json_value | tojson | safe) ~ '</' ~ normed_json_key ~ '>' }}
                    {%- else %}
                        {{- '\n<' ~ normed_json_key ~ '>' ~ (json_value | string) ~ '</' ~ normed_json_key ~ '>' }}
                    {%- endif %}
                {%- endif %}
            {%- endfor %}
            {{- render_item_list(param_fields.required, 'required') }}
            {{- '\n</parameter>' }}
        {%- endfor %}
        {{- render_item_list(tool.parameters.required, 'required') }}
        {{- '\n</parameters>' }}
        {%- if tool.return is defined %}
            {%- if tool.return is mapping %}
                {{- '\n<return>' ~ (tool.return | tojson) ~ '</return>' }}
            {%- else %}
                {{- '\n<return>' ~ (tool.return | string) ~ '</return>' }}
            {%- endif %}
        {%- endif %}
        {{- '\n</function>' }}
    {%- endfor %}
    {{- "\n</tools>" }}
    {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
{%- endif %}
{%- if system_message is defined %}
    {{- '<|im_end|>\n' }}
{%- else %}
    {%- if tools is iterable and tools | length > 0 %}
        {{- '<|im_end|>\n' }}
    {%- endif %}
{%- endif %}
{%- for message in loop_messages %}
    {%- if message.role == "assistant" and message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 %}
        {{- '<|im_start|>' + message.role }}
        {%- if message.content is defined and message.content is string and message.content | trim | length > 0 %}
            {{- '\n' + message.content | trim + '\n' }}
        {%- endif %}
        {%- for tool_call in message.tool_calls %}
            {%- if tool_call.function is defined %}
                {%- set tool_call = tool_call.function %}
            {%- endif %}
            {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
            {%- if tool_call.arguments is defined %}
                {%- for args_name, args_value in tool_call.arguments|items %}
                    {{- '<parameter=' + args_name + '>\n' }}
                    {%- set args_value = args_value if args_value is string else args_value | string %}
                    {{- args_value }}
                    {{- '\n</parameter>\n' }}
                {%- endfor %}
            {%- endif %}
            {{- '</function>\n</tool_call>' }}
        {%- endfor %}
        {{- '<|im_end|>\n' }}
    {%- elif message.role == "user" or message.role == "system" or message.role == "assistant" %}
        {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
    {%- elif message.role == "tool" %}
        {%- if loop.previtem and loop.previtem.role != "tool" %}
            {{- '<|im_start|>user\n' }}
        {%- endif %}
        {{- '<tool_response>\n' }}
        {{- message.content }}
        {{- '\n</tool_response>\n' }}
        {%- if not loop.last and loop.nextitem.role != "tool" %}
            {{- '<|im_end|>\n' }}
        {%- elif loop.last %}
            {{- '<|im_end|>\n' }}
        {%- endif %}
    {%- else %}
        {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>\n' }}
    {%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
    {{- '<|im_start|>assistant\n' }}
{%- endif %}
{# Copyright 2025-present Unsloth. Apache 2.0 License. Unsloth Chat template fixes #}
Repeat Penalty
1.05
Temperature
0.7
Top K Sampling
20
Top P Sampling
0.8