{"_id":"@buckeyestudio/toh-client-ui-directory-picker-native","name":"@buckeyestudio/toh-client-ui-directory-picker-native","dist-tags":{"next":"0.1.1-rc.2","latest":"0.1.1-rc.2"},"versions":{"0.1.1-rc.2":{"name":"@buckeyestudio/toh-client-ui-directory-picker-native","description":"Native directory-picker surface: the renderless workspace directory-flow occupant driving the host's OS chooser","version":"0.1.1-rc.2","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/client/ui-directory-picker-native"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"toh":{"client":{"inject":["@buckeyestudio/toh-client-runtime","@buckeyestudio/toh-client-ui-workspace"],"platform":"web"}},"license":"MIT","author":{"name":"buckeyestudio"},"peerDependencies":{"@buckeyestudio/toh-client-ui-workspace":"^0.1.1-rc.2","@buckeyestudio/toh-client-runtime":"^0.1.1-rc.2","@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/cordis":"^4.0.1"},"devDependencies":{"@testing-library/react":"^16.1.0","@types/react":"~19.2.3","react":"^19.2.8","react-dom":"^19.2.8","@buckeyestudio/toh-client-runtime":"^0.1.1-rc.2","@buckeyestudio/toh-client-ui-workspace":"^0.1.1-rc.2","@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/cordis":"^4.0.1"},"scripts":{"bundle":"tsdown","watch":"tsdown --watch"},"_id":"@buckeyestudio/toh-client-ui-directory-picker-native@0.1.1-rc.2","bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","_integrity":"sha512-YzmkyeLJxvYkRU60pwKlqzCfeBpbR7T9NLe8wKIqeR04UNFG+ZrtOJ6zCvFLzIWfHxs5Eqryp0YGyh0cyXNFwQ==","_resolved":"/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-client-ui-directory-picker-native-0.1.1-rc.2.tgz","_from":"file:/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-client-ui-directory-picker-native-0.1.1-rc.2.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-YzmkyeLJxvYkRU60pwKlqzCfeBpbR7T9NLe8wKIqeR04UNFG+ZrtOJ6zCvFLzIWfHxs5Eqryp0YGyh0cyXNFwQ==","shasum":"ad1306ae5720bab4a8dbb78cb9353fd781f36608","tarball":"https://registry.npmjs.org/@buckeyestudio/toh-client-ui-directory-picker-native/-/toh-client-ui-directory-picker-native-0.1.1-rc.2.tgz","fileCount":12,"unpackedSize":16139,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFAnxSxvzhVBNMUW4zM5oLHjL8rfGXg8sTFdPwRGhtkIAiEAvtIxmrj6O5YNNrxJCEffiXH7PFEJ2GevYkOCm+0rZxk="}]},"_npmUser":{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"},"directories":{},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/toh-client-ui-directory-picker-native_0.1.1-rc.2_1787489608417_0.6143771080244631"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-23T12:53:28.230Z","0.1.1-rc.2":"2026-08-23T12:53:28.557Z","modified":"2026-08-23T12:53:28.773Z"},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"description":"Native directory-picker surface: the renderless workspace directory-flow occupant driving the host's OS chooser","homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/client/ui-directory-picker-native"},"author":{"name":"buckeyestudio"},"bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"license":"MIT","readme":"# @buckeyestudio/toh-client-ui-directory-picker-native\n\n[English](README.md) | 中文\n\n原生目录选择界面：原生选取交互的浏览器半边。它通过 ui-workspace 的两个 directory-flow 洞（`conversation.hero.workspace.directoryFlow` 与 `sidebar.workspaces.directoryFlow`）装入一个无渲染占位者，每次收到 `open` 请求就用 `ctx.workspaces.pickDirectory()` 驱动本地 Host 的操作系统选择框，然后通过 owner 会话回报恰好一个结果——选中的路径、取消、或失败。系统对话框本身属于 [`toh-host-directory-picker-native`](../../host/directory-picker-native/README.zh.md)；挂载本包即用一行 cordis.yml 把界面与该后端组合起来，因此没有任何客户端代码按能力种类分支。\n\n两处注册通过嵌套的 `slots.inject()` 作为一个事务性 effect 安装，因为任一声明方条目都可能稍后激活或替换其声明。占位者在每个 `open` 上升沿只武装一次，所以重渲染（包括采纳期间 `busy` 而 `open` 仍为真）都不会再开第二个选择框；owner 撤回 `open` 会为下一次请求重新武装。结果经由 ref 回报，因此答案落到 owner 最新的处理器上，而不是打开选择框时捕获的那一套。卸载（HMR 替换占位者）会整体丢弃该结果：wire 上没有按请求的中止通道，所以 Host 侧的选择框会一直存在到被回答，它的答案无处可落，替换后的实例则在 owner 仍然打开的请求下重新武装。\n\nnode 半边是一个空 `apply`：它的存在只为让插件出现在 host 的 cordis.yml 与 Loader 中，浏览器半边经 `exports[\"./client\"]` 出货，并通过 `toh.client` 清单声明被发现。\n\n## 模型体验\n\n无，因为目录选择器属于浏览器界面；本包中的任何内容都不会进入模型请求。\n\n#### KV Cache 影响\n\n无；本包既不组装也不发送 provider 请求。\n\n## 已知限制与暂缓事项\n\n- **无法取消已打开的选择框** —— wire 上没有按请求的中止通道，因此已经出现在 Host 显示器上的选择框无法从浏览器关闭；被丢弃的结果只是被忽略。\n- **仅限本地 Host 载体** —— 系统对话框开在运行 Host 的机器上，所以进程内与远程浏览器部署需要改用 `-browse` 组合。平台失败通过 owner 的可重试文件夹对话框呈现。\n","readmeFilename":"README.zh.md","_rev":"1-ac082b243fb3d30f8def1191b38d12e2"}