
桌面应用【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址https://gitcode.com/GitHub_Trending/ti/tinycast点击查看免费下载Tinycast 是一个完全原生的 macOS 启动器它直接运行 Raycast 扩展——读取相同的package.json与已构建的命令文件在调色板palette中以 SwiftUI 原生渲染不依赖 Electron、浏览器或内置 Node.js。本文基于官方兼容性文档website/content/docs/extensions/compatibility.md逐项拆解 Tinycast 对 Raycast API 的支持边界哪些组件、API 与 Node 内建模块可用OAuth 登录如何落地raycast://深链如何接管以及当前仍存在的功能缺口与设计取舍并深入对应 Swift 源码与 JS 运行时给出实现级依据。实测表现一个可量化的兼容基线在开发 Mac 上装有 Raycast 的真实环境里Tinycast 团队以真实安装的 37 个扩展为样本进行了测量37 个扩展中有 32 个可以打开并渲染147 个 view 命令中有 114 个可以正常打开。这一数字是实测而非估算并且是在 OAuth 登录支持落地之前记录的——因此依赖登录的扩展当时未被计入随着后续支持完善该数字预期只会上升。这个基线说明了一个关键事实Tinycast 的兼容策略不是能加载就算成功而是要求扩展真正渲染出界面。判断打开并渲染的标准对应到源码就是 ExtensionRuntime.swift 中didRender回调与didFail回调的区分——JS 侧每次渲染出视图树RenderTree都会通过__tinycastHost的render桥接回 Swift 侧解码渲染而任何运行期异常都会走failed通道明确上报而不是静默显示半屏内容。支持的组件与 API组件原生渲染的 UI 层从 Scripts/raycast-runtime/src/api/index.js 可以看出Tinycast 的运行时通过自研的 React reconciler 实现了 Raycast 声明式 UI 组件支持范围包括List与Grid支持 sections分组、空视图empty views、条目详情item details与搜索栏下拉search-bar dropdownsDetail支持Metadata元数据展示Form全部字段类型——text文本框、password密码框、text area多行文本、checkbox复选框、dropdown下拉框、tag picker标签选择器、date picker日期选择器、file picker文件选择器、separator分隔线与 description描述ActionPanel支持 sections 与 submenus子菜单Action支持其全部预制变体Copy、Paste、Open、OpenWith、ShowInFinder、Trash、Push 等。值得注意的一点已发布扩展中仍在使用的老式命名同样可用。raycastApi导出表中专门保留了ActionPanelItem、ActionPanelSection、CopyToClipboardAction、OpenInBrowserAction、PasteAction、PushAction、FormTextField、FormDropdownItem等历史别名并映射到新组件保证存量扩展不被破坏。系统 API一份完整的清单文档明确列出当前可用的 API 全集运行时的实际导出见 api/index.js类别API剪贴板与存储Clipboard、LocalStorage、Cache环境与偏好environment、getPreferenceValues、openExtensionPreferences、openCommandPreferences反馈showToast、showHUD、confirmAlert窗口closeMainWindow、popToRoot、clearSearchBar系统能力open、trash、showInFinder、getApplications、getDefaultApplication、getFrontmostApplication、getSelectedText、getSelectedFinderItems命令编排launchCommand、updateCommandMetadata导航useNavigation、Navigation登录与枚举OAuth、Icon、Color、Image.Mask、Keyboard.Shortcut.Common、LaunchType这些 API 在 Swift 侧由 ExtensionHostBridge.swift 统一分发clipboard、storage、cache、window、feedback、system、fetch、proc、oauth分别对应独立实现。例如Clipboard.copy走Paster.copyString粘贴文件时会连同文件本身与预览图一起写入系统剪贴板见writeFileToPasteboard确保图片文件能以图片而非路径文本的形式粘贴。OAuth 登录PKCE 全链路落地OAuth.PKCEClient在 Tinycast 中完整可用并且支持 Raycast 的全部三种重定向方式。其实现核心在 ExtensionOAuthSession.swift重定向捕获Tinycast 注册了raycast://链接类型同时接受tinycast://与com.raycast三种 scheme 的回调兼容 query、hashimplicit与 path 三种回调形态见handleCallbackURL与parseCallbackPKCE 状态校验如果会话携带expectedState回跳 URL 中的state必须一致否则以stateMismatch明确失败超时兜底授权启动后启动一个300 秒5 分钟的定时器登录流程一直未回跳则自动以 Authentication timed out 结束避免悬挂等待Token 存储令牌按每个扩展一套保存在登录 Keychainlogin Keychain中Keychain service 名为com.tinycast.extensions.oauthaccount 以extensionName:providerId为键见 ExtensionOAuthKeychain.swift卸载即清理卸载扩展时通过removeAllTokens按扩展名前缀把该扩展的全部令牌从 Keychain 中删除。需要理解的一个平台级细节由于 macOS 的 scheme 分发机制如果本机同时装有 Raycast系统会在两个应用之间选择谁来处理raycast://链接这属于操作系统行为而非 Tinycast 可以完全控制的。Node 内建模块真实的 polyfill 而非占位文档列出了完整的内建模块支持清单path、fs、fs/promises、os、child_process、crypto、zlib、http、https、stream、util、events、buffer、url、querystring、punycode、assert、string_decoder、timers。实现证据有两层JS 层node-shims.js 实现了path、process、Buffer、EventEmitter、各类 Stream、url/URLSearchParams、punycode等模块其中path完整实现了normalize/join/resolve/dirname/basename/relative/parse/format等全部常用方法Swift 层ExtensionNodeShims.swift 以同步宿主调用服务fs、os、child_process、crypto、zlib五类系统敏感操作。fs支持open/close/read/write/readFile/writeFile/stat/readdir/mkdir/remove/rename/copyFile/realpath/chmod/mkdtemp以及流式readRangeos支持uptime/loadavg/freemem/cpus通过 Mach API 读取真实系统数据crypto通过 CommonCrypto 与 CryptoKit 实现了md5/sha1/sha256/sha384/sha512摘要、HMAC、PBKDF2 与 AES-CBC/ECB 加解密。两个关键设计保证了真实可用而非表面兼容http/https与fetch走同一条路径。因此 axios、node-fetch 这类依赖 HTTP 适配器的库可以直接工作——node-shims.js 中特意给process对象打上Symbol.toStringTag让 axios 识别不出 Node 环境后自动落入 fetch 适配器路径Stream 是真实的 Stream。Readable/Writable/Duplex/Transform/PassThrough/pipeline/finished等一应俱全因此fetch→ 文件写入这类流水线可以端到端跑通。另外未在清单中的其他内建模块也可以正常require加载只有真正调用到时才会失败——这是node-shims.js顶部注释明确的设计stream/socket-shaped modules resolve but throw on use保证扩展 bundle 即使引用未支持模块也能启动。命令模式与后台刷新view命令出现在调色板中交互式渲染 UIno-view命令在调色板关闭的情况下于后台运行带interval的no-view命令可以按计划定时刷新详见后台刷新配置。间隔字符串的解析与调度策略集中在 ExtensionRefreshPolicy.swift支持s/m/h/d单位如90s、1m、12h、1d最短间隔被钳制为 60 秒命令连续失败时以 2 为底指数退避最长退避到 24 小时每次刷新带确定性抖动jitter避免多命令同步触发后台运行超时被限制在 15–120 秒避免悬挂的后台任务堆积。这些约束在 ExtensionManifest.swift 中解析 manifest 的interval字段后接入。raycast://深链留在 Tinycast 内部raycast://链接在 Tinycast 中不会外泄给 Raycast——这正是文档强调Passing them on would launch Raycast itself的原因。行为分两种情况链接指向已安装扩展的命令时直接运行该命令并完整尊重其arguments、fallbackText与launchTypetinycast://行为相同任何其他 Raycast 链接如未安装的命令则重新打开调色板。源码依据在 ExtensionHostBridge.swift 的openRaycastURL先尝试用ExtensionDeepLink.parse解析并启动命令失败则回落到reopenPalette()。这条链路既支持从浏览器或其他 App 唤起也支持扩展内部互相调用。捆绑的 Swift 辅助工具文档明确说明随扩展捆绑的 Swift 辅助脚本可以运行如 Color Picker 之类的扩展自带二进制。这些辅助工具通过child_process的进程启动路径被执行ExtensionNodeShims.swift 中的launch支持指定shell、cwd、env、stdin输入与超时/bin/sh作为默认 shell且对process.kill做了进程组保护防止误杀 Tinycast 自身。已知缺口清晰的边界与明确的报错缺口原因menu-bar命令启动器中会列出并明确说明为何无法打开Raycast 的登录代理sign-in proxy依赖oauth.raycast.com交换 token 的 provider 仍会失败AI、BrowserExtension、WindowManagement属于 Raycast 云端服务本地没有对应实现调用会以明确原因失败WebSocket暂不可用取消进行中的fetch调用方会收到AbortError但底层请求仍会在后台跑完child_process.spawn实时输出命令完整执行完毕后输出一次性返回流式 HTTP响应一次性到达因此 server-sent events 与下载进度不可用net与tls可以加载但真正使用时会失败AI toolstools/不会展示这些缺口的处理方式不是静默降级而是明确的失败上报。JS 侧system.unsupported()见 api/system.js会拒绝并抛出XXX is not supported in Tinycast extensions yetSwift 侧 ExtensionHostBridge.swift 的ExtensionHostError定义了unsupported错误类型。在 api/index.js 中AI、BrowserExtension、WindowManagement三个命名空间通过rejectingNamespace构造——命名空间本身可导入保证 bundle 加载成功但每个成员方法被调用时都会抛出带明确原因的错误。这种导入不炸、调用才炸、炸得明白的设计正是兼容性文档所述运行需要缺失功能的扩展时会告诉你原因而不是静默失败或显示半个屏幕的源码级实现。测试侧同样覆盖了这些边界Tests/ext-test.swift 中通过 StubHost 验证了AbortSignal能通过 node-fetch 的品牌检查、url.parse保留 path、crypto的 AES-CBC 加解密、zlib的流式解压等真实场景可作为兼容性可验证的佐证。实践建议使用前先开开关扩展功能在设置 → Extensions中默认关闭开启时会先征询同意运行第三方代码的默认安全姿态该开关从不包含在备份中遇到不支持错误不必困惑Tinycast 的哲学是明确失败优于半屏渲染错误信息本身就是对缺口的权威说明登录类扩展确认目标 provider 走的是标准 PKCE 而非 Raycast 专属代理前者可直接使用持续关注基线32/37 扩展、114/147 命令的实测数字随版本演进会继续上升且该数字诞生于 OAuth 支持之前实际表现已优于纸面记录。综上Tinycast 对 Raycast 扩展生态的兼容不是尽力而为的加载器而是一套有明确边界、可度量、可验证的运行时组件与 API 覆盖主流扩展Node 内建模块为真实实现OAuth 全链路落地而每一项缺口都以可诊断的方式暴露给用户与开发者。赞分享桌面应用【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址https://gitcode.com/GitHub_Trending/ti/tinycast点击查看免费下载相关推荐gVisor 应用兼容性实战指南Linux 接口覆盖范围、已知限制与验证排查方法gVisor 应用兼容性实战指南Linux 接口覆盖范围、已知限制与验证排查方法 gVisor 是一个面向容器的应用内核它实现了 Linux 接口的绝大部分云原生容器运行时操作系统应用安全Tinycast 扩展系统完全指南用 JavaScriptCore 原生运行 Raycast 扩展Tinycast 扩展系统完全指南用 JavaScriptCore 原生运行 Raycast 扩展 Tinycast 是一个完全原生的 macOS 启动器、热桌面应用RustFS S3 兼容性矩阵解读覆盖范围、测试门禁与有意偏差RustFS S3 兼容性矩阵解读覆盖范围、测试门禁与有意偏差 导读 本文以 RustFS 官方兼容性矩阵文档 docs/architecture/s3 c后端对象存储分布式存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考