Skip to content

Commit b2ab5ef

Browse files
committed
fixup! minor text selection mapping improvement
Signed-off-by: Petr Kadlec <petr@puradesign.cz>
1 parent 5b6592c commit b2ab5ef

File tree

3 files changed

+25
-23
lines changed

3 files changed

+25
-23
lines changed

apps/agentstack-sdk-py/examples/canvas_ui_code_agent.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"Word Counter",
3030
]
3131

32+
3233
def generate_code_response(code_title: str, description: str, closing_message: str) -> str:
3334
"""Generate a code response with the given title, description, and closing message."""
3435
return f"""\
@@ -45,7 +46,7 @@ def fibonacci(n):
4546
return [0]
4647
elif n == 2:
4748
return [0, 1]
48-
49+
4950
sequence = [0, 1]
5051
for i in range(2, n):
5152
sequence.append(sequence[i-1] + sequence[i-2])
@@ -78,20 +79,20 @@ async def artifacts_agent(
7879

7980
canvas_edit_request = await canvas.parse_canvas_edit_request(message=input)
8081

81-
if canvas_edit_request:
82-
print("Canvas Edit Request:")
83-
print(f"Start Index: {canvas_edit_request.start_index}")
84-
print(f"End Index: {canvas_edit_request.end_index}")
85-
print(f"Artifact ID: {canvas_edit_request.artifact.artifact_id}")
86-
print(f"Selected Text: {canvas_edit_request.content}")
87-
8882
if canvas_edit_request:
8983
original_code = (
9084
canvas_edit_request.artifact.parts[0].root.text
9185
if isinstance(canvas_edit_request.artifact.parts[0].root, TextPart)
9286
else ""
9387
)
9488
edited_part = original_code[canvas_edit_request.start_index : canvas_edit_request.end_index]
89+
90+
print("Canvas Edit Request:")
91+
print(f"Start Index: {canvas_edit_request.start_index}")
92+
print(f"End Index: {canvas_edit_request.end_index}")
93+
print(f"Artifact ID: {canvas_edit_request.artifact.artifact_id}")
94+
print(f"Edited part: {edited_part}")
95+
9596
description = f"You requested to edit this part:\n\n{edited_part}\n\n"
9697
code_title = "Edited Code"
9798
closing_message = "Your code has been updated!"
@@ -119,13 +120,10 @@ async def artifacts_agent(
119120

120121
# Keep the full match including the code block formatting
121122
code_content = match.group(0).strip()
122-
123+
123124
# Extract artifact name from the comment line if present
124125
first_line = match.group(1).strip().split("\n", 1)[0]
125-
if first_line.startswith("#"):
126-
artifact_name = first_line.lstrip("# ").strip()
127-
else:
128-
artifact_name = "Python Script"
126+
artifact_name = first_line.lstrip("# ").strip() if first_line.startswith("#") else "Python Script"
129127

130128
# Split code content into x chunks for streaming
131129
num_chunks = 8

apps/agentstack-sdk-py/examples/canvas_ui_test_agent.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def generate_recipe_response(recipe_title: str, description: str, closing_messag
5151
{closing_message}
5252
"""
5353

54+
5455
@server.agent(
5556
name="Canvas example agent",
5657
)
@@ -68,20 +69,20 @@ async def artifacts_agent(
6869

6970
canvas_edit_request = await canvas.parse_canvas_edit_request(message=input)
7071

71-
if canvas_edit_request:
72-
print("Canvas Edit Request:")
73-
print(f"Start Index: {canvas_edit_request.start_index}")
74-
print(f"End Index: {canvas_edit_request.end_index}")
75-
print(f"Artifact ID: {canvas_edit_request.artifact.artifact_id}")
76-
print(f"Selected Text: {canvas_edit_request.content}")
77-
7872
if canvas_edit_request:
7973
original_recipe = (
8074
canvas_edit_request.artifact.parts[0].root.text
8175
if isinstance(canvas_edit_request.artifact.parts[0].root, TextPart)
8276
else ""
8377
)
8478
edited_part = original_recipe[canvas_edit_request.start_index : canvas_edit_request.end_index]
79+
80+
print("Canvas Edit Request:")
81+
print(f"Start Index: {canvas_edit_request.start_index}")
82+
print(f"End Index: {canvas_edit_request.end_index}")
83+
print(f"Artifact ID: {canvas_edit_request.artifact.artifact_id}")
84+
print(f"Edited part: {edited_part}")
85+
8586
description = f"You requested to edit this part:\n\n{edited_part}\n\n"
8687
recipe_title = "Canvas Recipe EDITED"
8788
closing_message = "Enjoy your edited meal!"

apps/agentstack-ui/src/modules/canvas/markdown/utils/mapDOMSelectionToMarkdown.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,21 @@ export function mapDOMSelectionToMarkdown(range: Range, markdownSource: string):
6060
}
6161

6262
const { startContainer, endContainer, startOffset, endOffset } = range;
63+
6364
const isSingleNodeSelection = startContainer === endContainer;
6465

6566
// Find positioned ancestors
6667
const startInfo = findNearestElementWithPosition(startContainer);
6768
const endInfo = findNearestElementWithPosition(endContainer);
6869

70+
const isSinglePositionElementSelection = startInfo?.element === endInfo?.element;
71+
6972
if (!startInfo || !endInfo) {
7073
throw new Error('Could not find source position attributes for selection');
7174
}
7275

73-
const nodeStartOffset = getNodeOffsetWithin(startInfo.element, startContainer, range.startOffset);
74-
const nodeEndOffset = getNodeOffsetWithin(endInfo.element, endContainer, range.endOffset);
76+
const nodeStartOffset = getNodeOffsetWithin(startInfo.element, startContainer, startOffset);
77+
const nodeEndOffset = getNodeOffsetWithin(endInfo.element, endContainer, endOffset);
7578

7679
// Map to markdown positions
7780
let startIndex = startInfo.start + nodeStartOffset;
@@ -85,7 +88,7 @@ export function mapDOMSelectionToMarkdown(range: Range, markdownSource: string):
8588
startIndex += startIndexInRegion;
8689
}
8790

88-
let endIndex = endInfo.start + nodeEndOffset + (isSingleNodeSelection ? startIndexInRegion : 0);
91+
let endIndex = endInfo.start + nodeEndOffset + (isSinglePositionElementSelection ? startIndexInRegion : 0);
8992
const endSearchContent = endContainer.textContent?.slice(isSingleNodeSelection ? startOffset : 0, endOffset);
9093

9194
// Search for the end content in the markdown to adjust for syntax shifts

0 commit comments

Comments
 (0)