mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-14 13:22:37 +00:00
fix(ios): address clipped chat and Markdown text (#6445)
* Revert "fix(app): reflow iPad chat text after pane resize (#5716)"
This reverts commit 5715b5ba62.
* docs(changelog): describe iOS text clipping fix for 0.11.2
* chore(release): cut 0.11.2
This commit is contained in:
@@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.11.2 - 2026-10-09
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed intermittent text clipping in iOS chats and Markdown previews ([#6445](https://github.com/getpaseo/paseo/pull/6445))
|
||||||
|
|
||||||
## 0.11.1 - 2026-10-07
|
## 0.11.1 - 2026-10-07
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Fixed
|
||||||
|
- Fixed intermittent text clipping in iOS chats and Markdown previews
|
||||||
|
|
||||||
|
Full notes: https://paseo.sh/changelog
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Fixed
|
||||||
|
- Fixed intermittent text clipping in iOS chats and Markdown previews
|
||||||
|
|
||||||
|
Full notes: https://paseo.sh/changelog
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Fixed
|
||||||
|
- Fixed intermittent text clipping in iOS chats and Markdown previews
|
||||||
|
|
||||||
|
Full notes: https://paseo.sh/changelog
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Fixed
|
||||||
|
- Fixed intermittent text clipping in iOS chats and Markdown previews
|
||||||
|
|
||||||
|
Full notes: https://paseo.sh/changelog
|
||||||
Generated
+28
-28
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "paseo",
|
"name": "paseo",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "paseo",
|
"name": "paseo",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
@@ -36413,7 +36413,7 @@
|
|||||||
},
|
},
|
||||||
"packages/app": {
|
"packages/app": {
|
||||||
"name": "@getpaseo/app",
|
"name": "@getpaseo/app",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/commands": "6.10.4",
|
"@codemirror/commands": "6.10.4",
|
||||||
"@codemirror/language": "6.12.4",
|
"@codemirror/language": "6.12.4",
|
||||||
@@ -37496,12 +37496,12 @@
|
|||||||
},
|
},
|
||||||
"packages/cli": {
|
"packages/cli": {
|
||||||
"name": "@getpaseo/cli",
|
"name": "@getpaseo/cli",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@clack/prompts": "^1.0.0",
|
"@clack/prompts": "^1.0.0",
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/server": "0.11.1",
|
"@getpaseo/server": "0.11.2",
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.3.0",
|
||||||
"commander": "^12.0.0",
|
"commander": "^12.0.0",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
@@ -37748,10 +37748,10 @@
|
|||||||
},
|
},
|
||||||
"packages/client": {
|
"packages/client": {
|
||||||
"name": "@getpaseo/client",
|
"name": "@getpaseo/client",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/relay": "0.11.1",
|
"@getpaseo/relay": "0.11.2",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -37762,7 +37762,7 @@
|
|||||||
},
|
},
|
||||||
"packages/desktop": {
|
"packages/desktop": {
|
||||||
"name": "@getpaseo/desktop",
|
"name": "@getpaseo/desktop",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@getpaseo/cli": "*",
|
"@getpaseo/cli": "*",
|
||||||
@@ -38006,7 +38006,7 @@
|
|||||||
},
|
},
|
||||||
"packages/expo-two-way-audio": {
|
"packages/expo-two-way-audio": {
|
||||||
"name": "@getpaseo/expo-two-way-audio",
|
"name": "@getpaseo/expo-two-way-audio",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
@@ -38902,7 +38902,7 @@
|
|||||||
},
|
},
|
||||||
"packages/highlight": {
|
"packages/highlight": {
|
||||||
"name": "@getpaseo/highlight",
|
"name": "@getpaseo/highlight",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/language": "6.12.4",
|
"@codemirror/language": "6.12.4",
|
||||||
"@codemirror/legacy-modes": "^6.5.3",
|
"@codemirror/legacy-modes": "^6.5.3",
|
||||||
@@ -38931,14 +38931,14 @@
|
|||||||
},
|
},
|
||||||
"packages/plugin": {
|
"packages/plugin": {
|
||||||
"name": "@getpaseo/plugin",
|
"name": "@getpaseo/plugin",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@agentclientprotocol/sdk": "^1.4.0",
|
"@agentclientprotocol/sdk": "^1.4.0",
|
||||||
"use-sync-external-store": "^1.6.0"
|
"use-sync-external-store": "^1.6.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@types/node": "^20.9.0",
|
"@types/node": "^20.9.0",
|
||||||
"@types/react": "~19.2.0",
|
"@types/react": "~19.2.0",
|
||||||
"react": "19.1.0",
|
"react": "19.1.0",
|
||||||
@@ -38948,8 +38948,8 @@
|
|||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"react": "~19.1.0",
|
"react": "~19.1.0",
|
||||||
"react-native": ">=0.81.5",
|
"react-native": ">=0.81.5",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
@@ -38971,7 +38971,7 @@
|
|||||||
},
|
},
|
||||||
"packages/protocol": {
|
"packages/protocol": {
|
||||||
"name": "@getpaseo/protocol",
|
"name": "@getpaseo/protocol",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"semver": "^7.8.5",
|
"semver": "^7.8.5",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
@@ -38998,7 +38998,7 @@
|
|||||||
},
|
},
|
||||||
"packages/relay": {
|
"packages/relay": {
|
||||||
"name": "@getpaseo/relay",
|
"name": "@getpaseo/relay",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"tweetnacl": "^1.0.3",
|
"tweetnacl": "^1.0.3",
|
||||||
@@ -39216,16 +39216,16 @@
|
|||||||
},
|
},
|
||||||
"packages/server": {
|
"packages/server": {
|
||||||
"name": "@getpaseo/server",
|
"name": "@getpaseo/server",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@agentclientprotocol/sdk": "^0.17.1",
|
"@agentclientprotocol/sdk": "^0.17.1",
|
||||||
"@anthropic-ai/claude-agent-sdk": "0.3.246",
|
"@anthropic-ai/claude-agent-sdk": "0.3.246",
|
||||||
"@anthropic-ai/sdk": "^0.104.2",
|
"@anthropic-ai/sdk": "^0.104.2",
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/highlight": "0.11.1",
|
"@getpaseo/highlight": "0.11.2",
|
||||||
"@getpaseo/plugin": "0.11.1",
|
"@getpaseo/plugin": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/relay": "0.11.1",
|
"@getpaseo/relay": "0.11.2",
|
||||||
"@isaacs/ttlcache": "^2.1.4",
|
"@isaacs/ttlcache": "^2.1.4",
|
||||||
"@modelcontextprotocol/sdk": "1.29.0",
|
"@modelcontextprotocol/sdk": "1.29.0",
|
||||||
"@opencode-ai/sdk": "1.14.46",
|
"@opencode-ai/sdk": "1.14.46",
|
||||||
@@ -40146,7 +40146,7 @@
|
|||||||
},
|
},
|
||||||
"packages/website": {
|
"packages/website": {
|
||||||
"name": "@getpaseo/website",
|
"name": "@getpaseo/website",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cloudflare/vite-plugin": "^1.29.1",
|
"@cloudflare/vite-plugin": "^1.29.1",
|
||||||
"@cloudflare/workers-types": "^4.20260317.1",
|
"@cloudflare/workers-types": "^4.20260317.1",
|
||||||
@@ -41754,7 +41754,7 @@
|
|||||||
},
|
},
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"name": "@getpaseo/builtin-plugins",
|
"name": "@getpaseo/builtin-plugins",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@getpaseo/plugin": "*",
|
"@getpaseo/plugin": "*",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "paseo",
|
"name": "paseo",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Paseo: voice-controlled development environment for local AI coding agents",
|
"description": "Paseo: voice-controlled development environment for local AI coding agents",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
# Native iOS text geometry regression
|
|
||||||
|
|
||||||
Run on the Namespace Mac with a fresh simulator development build. Use the PID
|
|
||||||
returned by `xcrun simctl launch <your-task-simulator-UDID> sh.paseo.debug`.
|
|
||||||
Attach only to your task's app, while no device replay is running:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
PASEO_NATIVE_TEXT_REFLOW_PID=12345 \
|
|
||||||
PASEO_NATIVE_TEXT_REFLOW_LOG=/Volumes/devbox/workspace/native-text-reflow.log \
|
|
||||||
bash packages/app/e2e/mobile/native-text-reflow/ios.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
The probe constructs the installed `RNUITextView`, fills its real UIKit text view,
|
|
||||||
and resizes its content container from 500 to 240 and back to 500 points. It
|
|
||||||
asserts the inner frame follows both widths and the same selection survives.
|
|
||||||
It uses public UIView/UITextView operations, without mocking React Native.
|
|
||||||
LLDB detaches after the probe. An assertion failure or evaluation error fails the
|
|
||||||
shell command; the log distinguishes them.
|
|
||||||
|
|
||||||
This covers native container resizing and selection retention. It does not cover
|
|
||||||
Fabric event delivery, chat row height, reader anchoring, or the on-screen copy
|
|
||||||
menu. Those require the real chat journey: read an older multiline response,
|
|
||||||
open/close Explorer, resize/rotate, inspect complete paragraphs and bullets,
|
|
||||||
retain expanded/collapsed details, and check a stationary reader's position.
|
|
||||||
Accessibility exposes full text even when glyphs are clipped, so a text wait
|
|
||||||
alone does not verify that journey.
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
import lldb
|
|
||||||
|
|
||||||
|
|
||||||
def __lldb_init_module(debugger, _internal_dict):
|
|
||||||
debugger.HandleCommand("expression -l objc++ -- @import UIKit")
|
|
||||||
frame = debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()
|
|
||||||
options = lldb.SBExpressionOptions()
|
|
||||||
options.SetLanguage(lldb.eLanguageTypeObjC_plus_plus)
|
|
||||||
result = frame.EvaluateExpression(
|
|
||||||
r'''({
|
|
||||||
UIView *host = (UIView *)[[NSClassFromString(@"RNUITextView") alloc] init];
|
|
||||||
auto hostFrame = host.frame;
|
|
||||||
hostFrame.size.width = 500;
|
|
||||||
hostFrame.size.height = 200;
|
|
||||||
host.frame = hostFrame;
|
|
||||||
UIView *container = (UIView *)[host performSelector:@selector(contentView)];
|
|
||||||
container.frame = host.bounds;
|
|
||||||
UITextView *text = nil;
|
|
||||||
for (UIView *child in host.subviews) {
|
|
||||||
if ([child isKindOfClass:UITextView.class]) text = (UITextView *)child;
|
|
||||||
for (UIView *nested in child.subviews) {
|
|
||||||
if ([nested isKindOfClass:UITextView.class]) text = (UITextView *)nested;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text.frame = container.bounds;
|
|
||||||
text.font = [UIFont systemFontOfSize:16];
|
|
||||||
text.text = @"A realistic multiline paragraph must reflow when Explorer narrows the available chat width, then fill the restored width without replacing the text view or discarding a selection.";
|
|
||||||
auto range = text.selectedRange;
|
|
||||||
range.location = 12;
|
|
||||||
range.length = 9;
|
|
||||||
text.selectedRange = range;
|
|
||||||
auto frame = container.frame;
|
|
||||||
frame.size.width = 240;
|
|
||||||
container.frame = frame;
|
|
||||||
[container layoutIfNeeded];
|
|
||||||
CGFloat narrow = text.frame.size.width;
|
|
||||||
auto selection = text.selectedRange;
|
|
||||||
frame.size.width = 500;
|
|
||||||
container.frame = frame;
|
|
||||||
[container layoutIfNeeded];
|
|
||||||
CGFloat wide = text.frame.size.width;
|
|
||||||
BOOL ok = text != nil && narrow == 240 && wide == 500 &&
|
|
||||||
selection.location == text.selectedRange.location &&
|
|
||||||
selection.length == text.selectedRange.length &&
|
|
||||||
selection.location == 12 && selection.length == 9;
|
|
||||||
[NSString stringWithFormat:@"NATIVE_REFLOW_%@ narrow=%.0f wide=%.0f selection=%lu:%lu",
|
|
||||||
ok ? @"PASS" : @"FAIL", narrow, wide,
|
|
||||||
(unsigned long)text.selectedRange.location,
|
|
||||||
(unsigned long)text.selectedRange.length];
|
|
||||||
})''',
|
|
||||||
options,
|
|
||||||
)
|
|
||||||
if result.GetError().Fail():
|
|
||||||
raise RuntimeError(result.GetError().GetCString())
|
|
||||||
print(result.GetObjectDescription())
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
: "${PASEO_NATIVE_TEXT_REFLOW_PID:?Set the PID of your task-owned Paseo iOS simulator app}"
|
|
||||||
: "${PASEO_NATIVE_TEXT_REFLOW_LOG:?Set the test output log path}"
|
|
||||||
|
|
||||||
if [[ "$(ps -p "$PASEO_NATIVE_TEXT_REFLOW_PID" -o comm=)" != *PaseoDebug.app/PaseoDebug ]]; then
|
|
||||||
echo "Expected a running PaseoDebug simulator app" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
probe_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
xcrun lldb --batch -p "$PASEO_NATIVE_TEXT_REFLOW_PID" \
|
|
||||||
-o "command script import $probe_dir/ios.py" \
|
|
||||||
-o "process detach" -o quit > "$PASEO_NATIVE_TEXT_REFLOW_LOG" 2>&1
|
|
||||||
|
|
||||||
grep '^NATIVE_REFLOW_' "$PASEO_NATIVE_TEXT_REFLOW_LOG"
|
|
||||||
grep -q '^NATIVE_REFLOW_PASS narrow=240 wide=500 selection=12:9$' "$PASEO_NATIVE_TEXT_REFLOW_LOG"
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/app",
|
"name": "@getpaseo/app",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"main": "index.ts",
|
"main": "index.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/cli",
|
"name": "@getpaseo/cli",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo CLI - control your AI coding agents from the command line",
|
"description": "Paseo CLI - control your AI coding agents from the command line",
|
||||||
"bin": {
|
"bin": {
|
||||||
"paseo": "bin/paseo"
|
"paseo": "bin/paseo"
|
||||||
@@ -28,9 +28,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@clack/prompts": "^1.0.0",
|
"@clack/prompts": "^1.0.0",
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/server": "0.11.1",
|
"@getpaseo/server": "0.11.2",
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.3.0",
|
||||||
"commander": "^12.0.0",
|
"commander": "^12.0.0",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/client",
|
"name": "@getpaseo/client",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo client SDK package",
|
"description": "Paseo client SDK package",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
"test": "vitest run"
|
"test": "vitest run"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/relay": "0.11.1",
|
"@getpaseo/relay": "0.11.2",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/desktop",
|
"name": "@getpaseo/desktop",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Paseo desktop app (Electron wrapper)",
|
"description": "Paseo desktop app (Electron wrapper)",
|
||||||
"homepage": "https://paseo.sh",
|
"homepage": "https://paseo.sh",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/expo-two-way-audio",
|
"name": "@getpaseo/expo-two-way-audio",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Native module for two way audio streaming",
|
"description": "Native module for two way audio streaming",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"ExpoTwoWayAudio",
|
"ExpoTwoWayAudio",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/highlight",
|
"name": "@getpaseo/highlight",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
"!dist/**/*.map",
|
"!dist/**/*.map",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/plugin",
|
"name": "@getpaseo/plugin",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo plugin SDK package",
|
"description": "Paseo plugin SDK package",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
@@ -70,8 +70,8 @@
|
|||||||
"use-sync-external-store": "^1.6.0"
|
"use-sync-external-store": "^1.6.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@types/node": "^20.9.0",
|
"@types/node": "^20.9.0",
|
||||||
"@types/react": "~19.2.0",
|
"@types/react": "~19.2.0",
|
||||||
"react": "19.1.0",
|
"react": "19.1.0",
|
||||||
@@ -81,8 +81,8 @@
|
|||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"react": "~19.1.0",
|
"react": "~19.1.0",
|
||||||
"react-native": ">=0.81.5",
|
"react-native": ">=0.81.5",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/protocol",
|
"name": "@getpaseo/protocol",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo shared protocol schemas and wire types",
|
"description": "Paseo shared protocol schemas and wire types",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/relay",
|
"name": "@getpaseo/relay",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo relay for bridging daemon and client connections",
|
"description": "Paseo relay for bridging daemon and client connections",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/server",
|
"name": "@getpaseo/server",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"description": "Paseo backend server",
|
"description": "Paseo backend server",
|
||||||
"files": [
|
"files": [
|
||||||
"dist/server",
|
"dist/server",
|
||||||
@@ -107,11 +107,11 @@
|
|||||||
"@agentclientprotocol/sdk": "^0.17.1",
|
"@agentclientprotocol/sdk": "^0.17.1",
|
||||||
"@anthropic-ai/claude-agent-sdk": "0.3.246",
|
"@anthropic-ai/claude-agent-sdk": "0.3.246",
|
||||||
"@anthropic-ai/sdk": "^0.104.2",
|
"@anthropic-ai/sdk": "^0.104.2",
|
||||||
"@getpaseo/client": "0.11.1",
|
"@getpaseo/client": "0.11.2",
|
||||||
"@getpaseo/highlight": "0.11.1",
|
"@getpaseo/highlight": "0.11.2",
|
||||||
"@getpaseo/plugin": "0.11.1",
|
"@getpaseo/plugin": "0.11.2",
|
||||||
"@getpaseo/protocol": "0.11.1",
|
"@getpaseo/protocol": "0.11.2",
|
||||||
"@getpaseo/relay": "0.11.1",
|
"@getpaseo/relay": "0.11.2",
|
||||||
"@isaacs/ttlcache": "^2.1.4",
|
"@isaacs/ttlcache": "^2.1.4",
|
||||||
"@modelcontextprotocol/sdk": "1.29.0",
|
"@modelcontextprotocol/sdk": "1.29.0",
|
||||||
"@opencode-ai/sdk": "1.14.46",
|
"@opencode-ai/sdk": "1.14.46",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/website",
|
"name": "@getpaseo/website",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
diff --git a/node_modules/react-native-uitextview/ios/RNUITextView.mm b/node_modules/react-native-uitextview/ios/RNUITextView.mm
|
|
||||||
index d0c31ed..df8a233 100644
|
|
||||||
--- a/node_modules/react-native-uitextview/ios/RNUITextView.mm
|
|
||||||
+++ b/node_modules/react-native-uitextview/ios/RNUITextView.mm
|
|
||||||
@@ -22,6 +22,7 @@ using namespace facebook::react;
|
|
||||||
RNUITextViewShadowNode::ConcreteState::Shared _state;
|
|
||||||
UITapGestureRecognizer * _outsideTapRecognizer;
|
|
||||||
BOOL _suppressSelectionChange;
|
|
||||||
+ CGRect _lastTextLayoutFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (ComponentDescriptorProvider)componentDescriptorProvider
|
|
||||||
@@ -47,7 +48,8 @@ using namespace facebook::react;
|
|
||||||
_textView.delegate = self;
|
|
||||||
// Must match RCTTextLayoutManager, which measures with usesFontLeading = NO.
|
|
||||||
_textView.layoutManager.usesFontLeading = NO;
|
|
||||||
- [self addSubview:_textView];
|
|
||||||
+ _textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
||||||
+ [_view addSubview:_textView];
|
|
||||||
|
|
||||||
const auto longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self
|
|
||||||
action:@selector(handleLongPressIfNecessary:)];
|
|
||||||
@@ -94,16 +96,15 @@ using namespace facebook::react;
|
|
||||||
// Reset the frame to zero so that when it properly lays out on the next use
|
|
||||||
_textView.frame = CGRectZero;
|
|
||||||
_textView.attributedText = nil;
|
|
||||||
+ _lastTextLayoutFrame = CGRectZero;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)layoutSubviews
|
|
||||||
{
|
|
||||||
[super layoutSubviews];
|
|
||||||
- // _textView's frame is assigned inside drawRect, which only fires when
|
|
||||||
- // state changes. Trigger a redraw whenever the host frame moves out from
|
|
||||||
- // under it (rotation, parent relayout) so the text view resizes and
|
|
||||||
- // onTextLayout re-fires with the new line wrapping.
|
|
||||||
- if (!CGRectEqualToRect(_textView.frame, _view.frame)) {
|
|
||||||
+ // Autoresizing updates UIKit immediately; report the new line layout when
|
|
||||||
+ // the content container's bounds change.
|
|
||||||
+ if (!CGRectEqualToRect(_lastTextLayoutFrame, _view.bounds)) {
|
|
||||||
[self setNeedsDisplay];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -124,8 +125,9 @@ using namespace facebook::react;
|
|
||||||
// entirely when nothing actually changed so a JS-side state update made in
|
|
||||||
// response to onSelectionChange doesn't deselect what the user is selecting.
|
|
||||||
const BOOL textChanged = ![_textView.attributedText isEqualToAttributedString:convertedAttrString];
|
|
||||||
- const BOOL frameChanged = !CGRectEqualToRect(_textView.frame, _view.frame);
|
|
||||||
- if (!textChanged && !frameChanged) {
|
|
||||||
+ const BOOL frameChanged = !CGRectEqualToRect(_textView.frame, _view.bounds);
|
|
||||||
+ const BOOL layoutChanged = !CGRectEqualToRect(_lastTextLayoutFrame, _view.bounds);
|
|
||||||
+ if (!textChanged && !frameChanged && !layoutChanged) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (textChanged) {
|
|
||||||
@@ -142,7 +144,7 @@ using namespace facebook::react;
|
|
||||||
_suppressSelectionChange = NO;
|
|
||||||
}
|
|
||||||
if (frameChanged) {
|
|
||||||
- _textView.frame = _view.frame;
|
|
||||||
+ _textView.frame = _view.bounds;
|
|
||||||
}
|
|
||||||
|
|
||||||
__block std::vector<std::string> lines;
|
|
||||||
@@ -162,6 +164,7 @@ using namespace facebook::react;
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
|
|
||||||
+ _lastTextLayoutFrame = _view.bounds;
|
|
||||||
if (_eventEmitter != nullptr) {
|
|
||||||
std::dynamic_pointer_cast<const facebook::react::RNUITextViewEventEmitter>(_eventEmitter)
|
|
||||||
->onTextLayout(facebook::react::RNUITextViewEventEmitter::OnTextLayout{static_cast<int>(self.tag), lines});
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@getpaseo/builtin-plugins",
|
"name": "@getpaseo/builtin-plugins",
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -12,10 +12,6 @@ const patchedPackages = [
|
|||||||
nodeModulesPath: "node_modules/react-native-markdown-display",
|
nodeModulesPath: "node_modules/react-native-markdown-display",
|
||||||
patchPrefix: "react-native-markdown-display+",
|
patchPrefix: "react-native-markdown-display+",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
nodeModulesPath: "node_modules/react-native-uitextview",
|
|
||||||
patchPrefix: "react-native-uitextview+",
|
|
||||||
},
|
|
||||||
// Remove after react-native-unistyles ships
|
// Remove after react-native-unistyles ships
|
||||||
// https://github.com/jpudysz/react-native-unistyles/pull/1203.
|
// https://github.com/jpudysz/react-native-unistyles/pull/1203.
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user