apps/mobile/clerk-theme.json | 4 +- apps/mobile/global.css | 20 +- apps/mobile/modules/t3-composer-editor/LICENSE | 21 + apps/mobile/modules/t3-composer-editor/expo-module.config.json | 6 + apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditor.podspec | 21 + apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorModule.swift | 71 +++ apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift | 819 ++++++++++++++++++++++++++ apps/mobile/modules/t3-markdown-text/LICENSE | 20 + apps/mobile/modules/t3-markdown-text/T3MarkdownText.podspec | 25 + apps/mobile/modules/t3-markdown-text/UPSTREAM.md | 12 + apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_agents.png | Bin 0 -> 2500 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_astro.png | Bin 0 -> 1975 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_babel.png | Bin 0 -> 2899 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_bash.png | Bin 0 -> 1944 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_biome.png | Bin 0 -> 1865 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_bootstrap.png | Bin 0 -> 1949 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_browserslist.png | Bin 0 -> 3352 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_bun.png | Bin 0 -> 2620 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_c.png | Bin 0 -> 2019 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_claude.png | Bin 0 -> 3782 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_cpp.png | Bin 0 -> 2019 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_css.png | Bin 0 -> 2806 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_database.png | Bin 0 -> 2175 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_default.png | Bin 0 -> 1054 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_docker.png | Bin 0 -> 1799 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_eslint.png | Bin 0 -> 2689 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_font.png | Bin 0 -> 2463 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_git.png | Bin 0 -> 1584 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_go.png | Bin 0 -> 2104 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_graphql.png | Bin 0 -> 2691 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_html.png | Bin 0 -> 2130 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_image.png | Bin 0 -> 1776 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_javascript.png | Bin 0 -> 2271 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_json.png | Bin 0 -> 1620 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_markdown.png | Bin 0 -> 870 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_mcp.png | Bin 0 -> 4074 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_nextjs.png | Bin 0 -> 1434 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_npm.png | Bin 0 -> 534 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_oxc.png | Bin 0 -> 2436 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_package.png | Bin 0 -> 472 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_pnpm.png | Bin 0 -> 620 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_postcss.png | Bin 0 -> 3765 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_prettier.png | Bin 0 -> 497 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_python.png | Bin 0 -> 2236 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_react.png | Bin 0 -> 3993 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_readme.png | Bin 0 -> 1220 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_ruby.png | Bin 0 -> 2115 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_rust.png | Bin 0 -> 3548 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_sass.png | Bin 0 -> 2792 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_stylelint.png | Bin 0 -> 2103 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_svelte.png | Bin 0 -> 3335 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_svg.png | Bin 0 -> 1453 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_svgo.png | Bin 0 -> 3222 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_swift.png | Bin 0 -> 2663 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_table.png | Bin 0 -> 1195 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_tailwind.png | Bin 0 -> 1258 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_terraform.png | Bin 0 -> 1939 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_text.png | Bin 0 -> 1142 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_tsconfig.png | Bin 0 -> 2023 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_typescript.png | Bin 0 -> 2103 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_vite.png | Bin 0 -> 1556 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_vscode.png | Bin 0 -> 2387 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_vue.png | Bin 0 -> 1541 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_wasm.png | Bin 0 -> 1939 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_webpack.png | Bin 0 -> 3337 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_yml.png | Bin 0 -> 1039 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_zig.png | Bin 0 -> 2199 bytes apps/mobile/modules/t3-markdown-text/assets/file-icons/pierre_zip.png | Bin 0 -> 1081 bytes apps/mobile/modules/t3-markdown-text/index.ts | 27 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownText.h | 13 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownText.mm | 688 ++++++++++++++++++++++ apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextComponentDescriptor.h | 13 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextManager.mm | 36 ++ apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextRun.h | 24 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextRun.mm | 72 +++ apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextRunComponentDescriptor.h | 13 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextRunShadowNode.cpp | 6 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextRunShadowNode.h | 16 + apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextShadowNode.h | 77 +++ apps/mobile/modules/t3-markdown-text/ios/T3MarkdownTextShadowNode.mm | 269 +++++++++ apps/mobile/modules/t3-markdown-text/package.json | 51 ++ apps/mobile/modules/t3-markdown-text/react-native.config.js | 10 + apps/mobile/modules/t3-markdown-text/scripts/sync-pierre-file-icons.mjs | 133 +++++ apps/mobile/modules/t3-markdown-text/src/CopyTextButton.tsx | 73 +++ apps/mobile/modules/t3-markdown-text/src/MarkdownTextPrimitive.tsx | 109 ++++ apps/mobile/modules/t3-markdown-text/src/NativeMarkdownBlock.ios.tsx | 647 +++++++++++++++++++++ apps/mobile/modules/t3-markdown-text/src/NativeMarkdownSelectableText.ios.tsx | 257 +++++++++ apps/mobile/modules/t3-markdown-text/src/SelectableMarkdownText.ios.tsx | 80 +++ apps/mobile/modules/t3-markdown-text/src/SelectableMarkdownText.tsx | 13 + apps/mobile/modules/t3-markdown-text/src/SelectableMarkdownText.types.ts | 46 ++ apps/mobile/modules/t3-markdown-text/src/T3MarkdownTextNativeComponent.ts | 55 ++ apps/mobile/modules/t3-markdown-text/src/T3MarkdownTextRunNativeComponent.ts | 51 ++ apps/mobile/modules/t3-markdown-text/src/markdownFileIcons.generated.ts | 62 ++ apps/mobile/modules/t3-markdown-text/src/markdownFileIcons.ts | 8 + apps/mobile/modules/t3-markdown-text/src/markdownLinks.ts | 349 +++++++++++ apps/mobile/modules/t3-markdown-text/src/nativeMarkdownText.ts | 751 ++++++++++++++++++++++++ apps/mobile/modules/t3-markdown-text/src/util.ts | 62 ++ apps/mobile/package.json | 6 +- apps/mobile/src/app/_layout.tsx | 40 +- apps/mobile/src/app/connections/_layout.tsx | 7 +- apps/mobile/src/app/index.tsx | 12 +- apps/mobile/src/app/new/_layout.tsx | 7 +- apps/mobile/src/app/settings/_layout.tsx | 24 +- apps/mobile/src/app/settings/auth.tsx | 33 ++ apps/mobile/src/app/settings/index.tsx | 12 +- apps/mobile/src/app/settings/waitlist.tsx | 25 +- apps/mobile/src/components/ComposerEditor.tsx | 6 + apps/mobile/src/components/CopyTextButton.tsx | 68 +++ apps/mobile/src/components/GlassSafeAreaView.tsx | 13 +- apps/mobile/src/components/GlassSurface.tsx | 33 +- apps/mobile/src/components/PierreEntryIcon.tsx | 25 + apps/mobile/src/components/ProviderIcon.tsx | 2 +- apps/mobile/src/features/cloud/ClerkSettingsSheetDetent.tsx | 44 ++ apps/mobile/src/features/cloud/useNativeClerkAuthModal.ts | 134 ----- apps/mobile/src/features/home/HomeScreen.tsx | 11 +- apps/mobile/src/features/review/shikiReviewHighlighter.test.ts | 21 +- apps/mobile/src/features/review/shikiReviewHighlighter.ts | 10 + apps/mobile/src/features/threads/ComposerCommandPopover.tsx | 11 +- apps/mobile/src/features/threads/NewTaskDraftScreen.tsx | 45 +- apps/mobile/src/features/threads/ThreadComposer.tsx | 167 +++--- apps/mobile/src/features/threads/ThreadDetailScreen.tsx | 91 ++- apps/mobile/src/features/threads/ThreadFeed.tsx | 995 +++++++++++++++++++++++++------- apps/mobile/src/features/threads/ThreadRouteScreen.tsx | 5 +- apps/mobile/src/features/threads/new-task-flow-provider.tsx | 10 + apps/mobile/src/lib/composerImages.test.ts | 94 +++ apps/mobile/src/lib/composerImages.ts | 37 +- apps/mobile/src/lib/copyTextWithHaptic.test.ts | 34 ++ apps/mobile/src/lib/copyTextWithHaptic.ts | 7 + apps/mobile/src/lib/markdownLinks.test.ts | 67 +++ apps/mobile/src/lib/nativeMarkdownText.test.ts | 734 +++++++++++++++++++++++ apps/mobile/src/lib/threadActivity.test.ts | 222 ++++++- apps/mobile/src/lib/threadActivity.ts | 379 +++++++++++- apps/mobile/src/lib/threadFeedLayout.test.ts | 32 + apps/mobile/src/lib/threadFeedLayout.ts | 22 + apps/mobile/src/native/SelectableMarkdownText.ios.tsx | 21 + apps/mobile/src/native/SelectableMarkdownText.tsx | 16 + apps/mobile/src/native/T3ComposerEditor.ios.tsx | 180 ++++++ apps/mobile/src/native/T3ComposerEditor.tsx | 65 +++ apps/mobile/src/native/T3ComposerEditor.types.ts | 38 ++ apps/mobile/src/widgets/AgentActivity.tsx | 6 +- apps/web/package.json | 4 +- apps/web/src/composer-editor-mentions.ts | 102 +--- infra/relay/package.json | 2 +- packages/shared/package.json | 4 + packages/shared/src/composerInlineTokens.test.ts | 84 +++ packages/shared/src/composerInlineTokens.ts | 118 ++++ pnpm-lock.yaml | 109 ++-- scripts/release-smoke.ts | 1 + 148 files changed, 8550 insertions(+), 715 deletions(-)