{"_id":"@buddhilive/dsh-client-ui-directory-picker-native","name":"@buddhilive/dsh-client-ui-directory-picker-native","dist-tags":{"alpha":"0.1.2-alpha.3","latest":"0.1.2-alpha.3"},"versions":{"0.1.2-alpha.3":{"name":"@buddhilive/dsh-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.2-alpha.3","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Buddhilive/buddhi-ai-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"},"dsh":{"client":{"inject":["@buddhilive/dsh-client-ui-renderer","@buddhilive/dsh-client-ui-workspace"],"platform":"web"}},"license":"MIT","peerDependencies":{"@deepseek-ai/cordis":"^4.0.2"},"devDependencies":{"@testing-library/react":"^16.1.0","@types/react":"~18.3.1","react":"^18.2.0","react-dom":"^18.2.0","@buddhilive/dsh-client-ui-renderer":"^0.1.2-alpha.3","@buddhilive/dsh-invariants":"^0.1.2-alpha.3","@buddhilive/dsh-client-ui-workspace":"^0.1.2-alpha.3","@deepseek-ai/cordis":"^4.0.2"},"scripts":{"bundle":"tsdown","watch":"tsdown --watch"},"_id":"@buddhilive/dsh-client-ui-directory-picker-native@0.1.2-alpha.3","bugs":{"url":"https://github.com/Buddhilive/buddhi-ai-harness/issues"},"homepage":"https://github.com/Buddhilive/buddhi-ai-harness#readme","_integrity":"sha512-nHp3RucPQP4EdItZ7ogJT/f7ch9dvkdsb8kgyy3PFxXDdGrRMJzWxS3JWDxkfOccqI4wxLLVLqLqmUJ4I9XmCQ==","_resolved":"C:\\DevDojo\\Buddhi\\buddhi-ai-harness\\dist\\npm\\buddhilive-dsh-client-ui-directory-picker-native-0.1.2-alpha.3.tgz","_from":"file:C:/DevDojo/Buddhi/buddhi-ai-harness/dist/npm/buddhilive-dsh-client-ui-directory-picker-native-0.1.2-alpha.3.tgz","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-nHp3RucPQP4EdItZ7ogJT/f7ch9dvkdsb8kgyy3PFxXDdGrRMJzWxS3JWDxkfOccqI4wxLLVLqLqmUJ4I9XmCQ==","shasum":"5404c70b0096505cec647f4ce2101dfca957b67d","tarball":"https://registry.npmjs.org/@buddhilive/dsh-client-ui-directory-picker-native/-/dsh-client-ui-directory-picker-native-0.1.2-alpha.3.tgz","fileCount":12,"unpackedSize":20086,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFxTIkNPxUQWmFXkRw15BXO1yeoaTczqXmvwnGqyIE+QAiEA0KciAYZcaBJkV5qntSmr6h0HdSiF9zY1FFKNNzh5o/w="}]},"_npmUser":{"name":"buddhilive","email":"visitbudkavin@gmail.com"},"directories":{},"maintainers":[{"name":"buddhilive","email":"visitbudkavin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-directory-picker-native_0.1.2-alpha.3_1788166136964_0.676494712352451"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T08:48:56.756Z","0.1.2-alpha.3":"2026-08-31T08:48:57.094Z","modified":"2026-08-31T08:48:57.357Z"},"maintainers":[{"name":"buddhilive","email":"visitbudkavin@gmail.com"}],"description":"Native directory-picker surface: the renderless workspace directory-flow occupant driving the host's OS chooser","homepage":"https://github.com/Buddhilive/buddhi-ai-harness#readme","repository":{"type":"git","url":"git+https://github.com/Buddhilive/buddhi-ai-harness.git","directory":"packages/client/ui-directory-picker-native"},"bugs":{"url":"https://github.com/Buddhilive/buddhi-ai-harness/issues"},"license":"MIT","readme":"---\ndescription: \"原生目录选择表面：驱动宿主操作系统选择器的浏览器半部，用于工作区目录流程；供选择拾取交互的用户与维护者阅读。\"\nkind: \"package-reference\"\n---\n\n# @buddhilive/dsh-client-ui-directory-picker-native\n\n[English](README.md) | 中文\n\n## 概述\n\n本包提供 Web GUI 的原生目录拾取表面：当工作区流程请求一个目录时，一个无渲染的浏览器填充会在运行宿主的机器上打开操作系统自带的选择器，并回报唯一结果——拾取的路径、取消或失败。它填充 `ui-workspace` 声明的两个目录流程槽位，用一行 cordis.yml 组合出原生拾取交互的客户端一侧。当浏览器与宿主运行在同一台机器上时选择它；进程内与远程浏览器部署则需要 [`-browse`](../ui-directory-picker-browse/README.zh.md) 表面。\n\n## 目录\n\n- [使用本包](#use-this-package)\n- [理解实现](#understand-the-implementation)\n- [进一步探索](#further-exploration)\n- [模型体验](#model-experience)\n- [已知限制与延期工作](#known-limitations-and-deferred-work)\n- [开发备注](#dev-note)\n\n-----\n\n<a id=\"use-this-package\"></a>\n## 使用本包\n\n与 `ui-workspace` 及宿主后端 [`dsh-host-directory-picker-native`](../../host/directory-picker-native/README.zh.md) 一起挂载本插件；一行 cordis.yml 随即组合出完整的原生拾取交互。当工作区添加或选择器流程发起目录请求时，用户看到操作系统的文件夹对话框；拾取的路径被工作区流程采纳，取消则关闭对话框。\n\n### 何时选择\n\n当浏览器与宿主运行在同一台机器上、操作系统对话框可以在那里打开时，选择此表面。当浏览器为远程或进程内、没有本地选择器时，选择 [`-browse`](../ui-directory-picker-browse/README.zh.md) 表面。两个表面填充相同的槽位，因此切换只是组合改动，而非代码改动。\n\n-----\n\n<a id=\"understand-the-implementation\"></a>\n## 理解实现\n\n<details>\n<summary>实现细节——点击展开</summary>\n\n两个槽位注册经嵌套的 `ctx.slots.inject()` 调用作为一次事务性效果安装，因为任一声明条目都可能晚些激活或替换其声明。填充在每个上升沿 `open` 时只武装一次，因此重渲染永远不会再拉起一个选择器；结算结果挂在 ref 上，让答复到达持有方最新的处理器。卸载（HMR 替换填充）会整体丢弃结算：线上没有按请求中止的机制，因此宿主侧选择器会一直存活到被答复，而它的答复无处落地。node 半部是一个空 `apply`，让插件留在宿主名单上。\n\n</details>\n\n-----\n\n<a id=\"further-exploration\"></a>\n## 进一步探索\n\n当拾取面不够用时阅读以下页面。它们从浏览器半部进入宿主后端与它所填充的槽位。\n\n- [dsh-host-directory-picker-native](../../host/directory-picker-native/README.zh.md)——本表面驱动的操作系统选择器后端。\n- [ui-workspace](../ui-workspace/README.zh.md)——声明目录流程槽位并拥有拾取对话。\n- [ui-directory-picker-browse](../ui-directory-picker-browse/README.zh.md)——面向远程与进程内部署的应用内浏览替代方案。\n- [Web 客户端架构](../../../.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md)——浏览器插件行如何加载并注册槽位。\n\n-----\n\n<a id=\"model-experience\"></a>\n## 模型体验\n\n无，因为目录选择器属于浏览器界面；本包中的任何内容都不会进入模型请求。\n\n#### KV Cache 影响\n\n无；本包既不组装也不发送 provider 请求。\n\n## 已知限制与延期工作\n\n<a id=\"known-limitations-and-deferred-work\"></a>\n\n\n这些限制界定了原生选择器的适用时机。它们是当前包约束，不是通用选择器对比或任务积压。\n\n- **无法取消已打开的选择器**——线上没有按请求中止的机制，因此已显示在宿主上的选择器无法从浏览器关闭；被丢弃的结算会被忽略。\n- **仅限本地宿主承载**——操作系统对话框在运行宿主的机器上打开，因此进程内与远程浏览器部署需要 `-browse` 组合。平台失败经由持有方的可重试文件夹对话框呈现。\n\n<a id=\"dev-note\"></a>\n### 开发备注\n\n<details>\n<summary>维护者的工作上下文——点击展开</summary>\n\n无。\n\n</details>\n","readmeFilename":"README.zh.md","_rev":"1-53cda34eb2469e7c4d1c85ff9337937e"}