better-dsh 0.2.3 → 0.2.4-b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/cordis.patch.yml +47 -16
  2. package/docs/10_plans/2026-09-23-remote-execution-framework.md +236 -0
  3. package/docs/10_plans/2026-09-23-remote-framework-impl.md +2083 -0
  4. package/docs/50_test-reports/2026-09-06-write/345/267/245/345/205/267sandbox/345/215/207/347/272/247/351/200/217/344/274/240bug/345/244/215/345/217/221/345/217/212/346/214/202/350/265/267-/344/272/213/344/273/266/346/212/245/345/221/212.md +176 -0
  5. package/docs/50_test-reports/2026-09-08-hashline-edit-E_RANGE_UNVERIFIED/350/267/250/350/275/256/344/274/232/350/257/235/351/224/256/345/244/261/346/225/210-/350/257/212/346/226/255/346/212/245/345/221/212.md +226 -0
  6. package/docs/50_test-reports/2026-09-11-control-prompt-into-eval-description/345/256/236/346/265/213/346/212/245/345/221/212.md +222 -0
  7. package/docs/50_test-reports/2026-09-12-fs-scheme-resolution-/345/256/236/346/265/213/346/212/245/345/221/212.md +81 -0
  8. package/docs/50_test-reports/2026-09-12-url-schemes-grammar-matrix/344/270/216catalog-centralize-/345/256/236/346/265/213/346/212/245/345/221/212.md +234 -0
  9. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-design/351/252/214/350/257/201/346/212/245/345/221/212.md +160 -0
  10. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/345/211/247/346/234/254.md +44 -0
  11. package/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/346/212/245/345/221/212.md +89 -0
  12. package/docs/50_test-reports/2026-09-12-url-schemes-/345/205/255scheme/345/206/222/347/203/237/344/270/216/350/276/271/347/225/214/345/256/236/346/265/213/346/212/245/345/221/212.md +198 -0
  13. package/docs/50_test-reports/2026-09-13-hashline-off/344/270/213scheme/345/217/257/350/276/276/346/200/247/345/267/245/345/205/267/351/235/242/344/270/215/345/257/271/347/247/260-/345/256/236/346/265/213/346/212/245/345/221/212.md +246 -0
  14. package/docs/50_test-reports/2026-09-13-preact-ui-shell/345/256/236/346/265/213/346/212/245/345/221/212.md +50 -0
  15. package/docs/50_test-reports/2026-09-14-4999-skill/346/270/205/345/215/225/344/270/216lsp-gate/345/256/236/346/265/213/346/212/245/345/221/212.md +63 -0
  16. package/docs/50_test-reports/2026-09-17-plugins/351/241/265/345/205/255/347/273/204/344/273/266/346/213/206/345/210/206/345/256/236/346/265/213/346/212/245/345/221/212.md +76 -0
  17. package/docs/50_test-reports/2026-09-23-remote-framework/345/256/236/346/265/213/346/212/245/345/221/212.md +92 -0
  18. package/docs/50_test-reports/2026-09-23-remote-framework/347/254/254/344/270/200/344/272/272/347/247/260/345/244/215/346/265/213/346/212/245/345/221/212.md +125 -0
  19. package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-local-test-report.md +44 -0
  20. package/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-report.md +110 -0
  21. package/docs/50_test-reports/upstream-dsh-0.1.5-rc.2-local-test-report.md +79 -0
  22. package/docs/50_test-reports/v0.2.3b-hashline-content-locator/345/256/236/346/265/213/346/212/245/345/221/212.md +73 -0
  23. package/docs/50_test-reports/v0.2.3c-mobile-wave/345/256/236/346/265/213/346/212/245/345/221/212.md +47 -0
  24. package/docs/50_test-reports/v0.2.4-ios-focus-zoom-suppression/345/256/236/346/265/213/346/212/245/345/221/212.md +158 -0
  25. package/docs/specs/agent/spec.md +54 -0
  26. package/docs/specs/ast/spec.md +34 -0
  27. package/docs/specs/compaction-recall/spec.md +46 -0
  28. package/docs/specs/ctx/spec.md +107 -0
  29. package/docs/specs/dsh/spec.md +47 -0
  30. package/docs/specs/dvc/spec.md +87 -0
  31. package/docs/specs/escalation-guidance/spec.md +44 -0
  32. package/docs/specs/fs-scheme-resolution/spec.md +37 -0
  33. package/docs/specs/hash-edit/spec.md +41 -0
  34. package/docs/specs/http-read/spec.md +73 -0
  35. package/docs/specs/kernel-provisioning/spec.md +53 -0
  36. package/docs/specs/lsp/spec.md +121 -0
  37. package/docs/specs/mobile-layout/spec.md +108 -0
  38. package/docs/specs/model-failover/spec.md +20 -0
  39. package/docs/specs/plugins-page-components/spec.md +79 -0
  40. package/docs/specs/preact-ui-shell/spec.md +22 -0
  41. package/docs/specs/repl-dispatch-resilience/spec.md +21 -0
  42. package/docs/specs/skill/spec.md +58 -0
  43. package/docs/specs/tool-surface/spec.md +222 -0
  44. package/docs/specs/url-schema/spec.md +148 -0
  45. package/docs/specs/web-trust-fence/spec.md +43 -0
  46. package/docs/upstream-dsh-0.1.5-rc.2-report.md +156 -0
  47. package/dsh-docs/AGENTS.md +75 -0
  48. package/dsh-docs/agent-lifecycle.md +84 -0
  49. package/dsh-docs/agent-lifecycle.zh.md +86 -0
  50. package/dsh-docs/api-gateway.md +164 -0
  51. package/dsh-docs/api-gateway.zh.md +164 -0
  52. package/dsh-docs/architecture.md +150 -0
  53. package/dsh-docs/architecture.zh.md +154 -0
  54. package/dsh-docs/capability-seams.md +543 -0
  55. package/dsh-docs/capability-seams.zh.md +545 -0
  56. package/dsh-docs/config-catalog.md +3473 -0
  57. package/dsh-docs/config-catalog.zh.md +3474 -0
  58. package/dsh-docs/cookbook/adding-a-package.md +117 -0
  59. package/dsh-docs/cookbook/adding-a-package.zh.md +119 -0
  60. package/dsh-docs/cookbook/adding-a-remote-api.md +197 -0
  61. package/dsh-docs/cookbook/adding-a-remote-api.zh.md +197 -0
  62. package/dsh-docs/cookbook/adding-a-session-format-version.md +109 -0
  63. package/dsh-docs/cookbook/adding-a-session-format-version.zh.md +109 -0
  64. package/dsh-docs/cookbook/adding-a-settings-card.md +102 -0
  65. package/dsh-docs/cookbook/adding-a-settings-card.zh.md +102 -0
  66. package/dsh-docs/cookbook/adding-a-tool.md +101 -0
  67. package/dsh-docs/cookbook/adding-a-tool.zh.md +103 -0
  68. package/dsh-docs/cookbook/adding-a-vendored-package.md +59 -0
  69. package/dsh-docs/cookbook/adding-a-vendored-package.zh.md +59 -0
  70. package/dsh-docs/cookbook/adding-an-llm-adapter.md +43 -0
  71. package/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +43 -0
  72. package/dsh-docs/cookbook/extension-cookbook.md +132 -0
  73. package/dsh-docs/cookbook/extension-cookbook.zh.md +136 -0
  74. package/dsh-docs/cookbook/maintaining-dsh-code-review.md +64 -0
  75. package/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +64 -0
  76. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
  77. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
  78. package/dsh-docs/cordis-api/context.md +364 -0
  79. package/dsh-docs/cordis-api/context.zh.md +366 -0
  80. package/dsh-docs/cordis-api/events.md +207 -0
  81. package/dsh-docs/cordis-api/events.zh.md +209 -0
  82. package/dsh-docs/cordis-api/fiber.md +375 -0
  83. package/dsh-docs/cordis-api/fiber.zh.md +377 -0
  84. package/dsh-docs/cordis-api/inherited.md +39 -0
  85. package/dsh-docs/cordis-api/registry.md +152 -0
  86. package/dsh-docs/cordis-api/registry.zh.md +154 -0
  87. package/dsh-docs/cordis-api/service.md +102 -0
  88. package/dsh-docs/cordis-api/service.zh.md +104 -0
  89. package/dsh-docs/cordis-primer.md +45 -0
  90. package/dsh-docs/cordis-primer.zh.md +51 -0
  91. package/dsh-docs/cordis-tutorial/01-first-plugin.md +95 -0
  92. package/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +95 -0
  93. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  94. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
  95. package/dsh-docs/cordis-tutorial/03-services.md +98 -0
  96. package/dsh-docs/cordis-tutorial/03-services.zh.md +98 -0
  97. package/dsh-docs/cordis-tutorial/04-events.md +144 -0
  98. package/dsh-docs/cordis-tutorial/04-events.zh.md +144 -0
  99. package/dsh-docs/cordis-tutorial/05-config.md +84 -0
  100. package/dsh-docs/cordis-tutorial/05-config.zh.md +84 -0
  101. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +113 -0
  102. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
  103. package/dsh-docs/cordis-tutorial/07-into-the-harness.md +108 -0
  104. package/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +108 -0
  105. package/dsh-docs/cordis-tutorial/index.md +60 -0
  106. package/dsh-docs/cordis-tutorial/index.zh.md +62 -0
  107. package/dsh-docs/deepseek-llm-api-wire-extensions.md +163 -0
  108. package/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +163 -0
  109. package/dsh-docs/defensive-patterns.md +33 -0
  110. package/dsh-docs/defensive-patterns.zh.md +35 -0
  111. package/dsh-docs/development.md +167 -0
  112. package/dsh-docs/development.zh.md +173 -0
  113. package/dsh-docs/event-producer-consumer.md +86 -0
  114. package/dsh-docs/event-producer-consumer.zh.md +88 -0
  115. package/dsh-docs/glossary.md +45 -0
  116. package/dsh-docs/glossary.zh.md +45 -0
  117. package/dsh-docs/graph-atlas.md +22 -0
  118. package/dsh-docs/graph-atlas.zh.md +24 -0
  119. package/dsh-docs/i18n/README.md +60 -0
  120. package/dsh-docs/i18n/README.zh.md +62 -0
  121. package/dsh-docs/i18n/style-samples.md +87 -0
  122. package/dsh-docs/i18n/terminology.md +214 -0
  123. package/dsh-docs/i18n/translation-prompt.md +263 -0
  124. package/dsh-docs/i18n/translation-rules.md +69 -0
  125. package/dsh-docs/i18n/translation-rules.zh.md +69 -0
  126. package/dsh-docs/module-graph.md +1411 -0
  127. package/dsh-docs/module-graph.zh.md +1413 -0
  128. package/dsh-docs/persistence-catalog.md +1075 -0
  129. package/dsh-docs/persistence-catalog.zh.md +1077 -0
  130. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +113 -0
  131. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
  132. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
  133. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
  134. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
  135. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
  136. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
  137. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
  138. package/dsh-docs/postmortem/README.md +18 -0
  139. package/dsh-docs/postmortem/README.zh.md +18 -0
  140. package/dsh-docs/rescope.md +53 -0
  141. package/dsh-docs/rescope.zh.md +53 -0
  142. package/dsh-docs/session-format-status.md +47 -0
  143. package/dsh-docs/session-format-status.zh.md +47 -0
  144. package/dsh-docs/subsystems/README.md +61 -0
  145. package/dsh-docs/subsystems/README.zh.md +61 -0
  146. package/dsh-docs/subsystems/agent-team.md +207 -0
  147. package/dsh-docs/subsystems/agent-team.zh.md +207 -0
  148. package/dsh-docs/subsystems/approval.md +170 -0
  149. package/dsh-docs/subsystems/approval.zh.md +170 -0
  150. package/dsh-docs/subsystems/attachment.md +351 -0
  151. package/dsh-docs/subsystems/attachment.zh.md +351 -0
  152. package/dsh-docs/subsystems/client-modules.md +168 -0
  153. package/dsh-docs/subsystems/client-modules.zh.md +168 -0
  154. package/dsh-docs/subsystems/client-resources.md +91 -0
  155. package/dsh-docs/subsystems/client-resources.zh.md +91 -0
  156. package/dsh-docs/subsystems/code-runtime.md +195 -0
  157. package/dsh-docs/subsystems/code-runtime.zh.md +195 -0
  158. package/dsh-docs/subsystems/commands.md +219 -0
  159. package/dsh-docs/subsystems/commands.zh.md +219 -0
  160. package/dsh-docs/subsystems/compaction.md +238 -0
  161. package/dsh-docs/subsystems/compaction.zh.md +238 -0
  162. package/dsh-docs/subsystems/conversation.md +258 -0
  163. package/dsh-docs/subsystems/conversation.zh.md +258 -0
  164. package/dsh-docs/subsystems/core.md +1209 -0
  165. package/dsh-docs/subsystems/core.zh.md +1219 -0
  166. package/dsh-docs/subsystems/credentials.md +329 -0
  167. package/dsh-docs/subsystems/credentials.zh.md +329 -0
  168. package/dsh-docs/subsystems/extensions.md +382 -0
  169. package/dsh-docs/subsystems/extensions.zh.md +382 -0
  170. package/dsh-docs/subsystems/feedback.md +266 -0
  171. package/dsh-docs/subsystems/feedback.zh.md +266 -0
  172. package/dsh-docs/subsystems/filesystem.md +505 -0
  173. package/dsh-docs/subsystems/filesystem.zh.md +505 -0
  174. package/dsh-docs/subsystems/goal.md +277 -0
  175. package/dsh-docs/subsystems/goal.zh.md +277 -0
  176. package/dsh-docs/subsystems/invariants.md +88 -0
  177. package/dsh-docs/subsystems/invariants.zh.md +88 -0
  178. package/dsh-docs/subsystems/jobs.md +290 -0
  179. package/dsh-docs/subsystems/jobs.zh.md +290 -0
  180. package/dsh-docs/subsystems/llm-streaming.md +1080 -0
  181. package/dsh-docs/subsystems/llm-streaming.zh.md +1086 -0
  182. package/dsh-docs/subsystems/lsp.md +202 -0
  183. package/dsh-docs/subsystems/lsp.zh.md +202 -0
  184. package/dsh-docs/subsystems/permission-presets.md +131 -0
  185. package/dsh-docs/subsystems/permission-presets.zh.md +131 -0
  186. package/dsh-docs/subsystems/persistence.md +395 -0
  187. package/dsh-docs/subsystems/persistence.zh.md +395 -0
  188. package/dsh-docs/subsystems/plan.md +87 -0
  189. package/dsh-docs/subsystems/plan.zh.md +87 -0
  190. package/dsh-docs/subsystems/sandbox.md +220 -0
  191. package/dsh-docs/subsystems/sandbox.zh.md +220 -0
  192. package/dsh-docs/subsystems/schedule.md +192 -0
  193. package/dsh-docs/subsystems/schedule.zh.md +192 -0
  194. package/dsh-docs/subsystems/scope.md +59 -0
  195. package/dsh-docs/subsystems/scope.zh.md +59 -0
  196. package/dsh-docs/subsystems/session-projection.md +354 -0
  197. package/dsh-docs/subsystems/session-projection.zh.md +354 -0
  198. package/dsh-docs/subsystems/session-query.md +509 -0
  199. package/dsh-docs/subsystems/session-query.zh.md +509 -0
  200. package/dsh-docs/subsystems/session-reference.md +219 -0
  201. package/dsh-docs/subsystems/session-reference.zh.md +219 -0
  202. package/dsh-docs/subsystems/session-telemetry.md +194 -0
  203. package/dsh-docs/subsystems/session-telemetry.zh.md +194 -0
  204. package/dsh-docs/subsystems/session-title.md +204 -0
  205. package/dsh-docs/subsystems/session-title.zh.md +204 -0
  206. package/dsh-docs/subsystems/session.md +1155 -0
  207. package/dsh-docs/subsystems/session.zh.md +1159 -0
  208. package/dsh-docs/subsystems/settings.md +405 -0
  209. package/dsh-docs/subsystems/settings.zh.md +405 -0
  210. package/dsh-docs/subsystems/shell.md +303 -0
  211. package/dsh-docs/subsystems/shell.zh.md +303 -0
  212. package/dsh-docs/subsystems/sidebar-right.md +148 -0
  213. package/dsh-docs/subsystems/sidebar-right.zh.md +148 -0
  214. package/dsh-docs/subsystems/skills.md +354 -0
  215. package/dsh-docs/subsystems/skills.zh.md +354 -0
  216. package/dsh-docs/subsystems/slots.md +175 -0
  217. package/dsh-docs/subsystems/slots.zh.md +175 -0
  218. package/dsh-docs/subsystems/spill.md +117 -0
  219. package/dsh-docs/subsystems/spill.zh.md +117 -0
  220. package/dsh-docs/subsystems/storage.md +260 -0
  221. package/dsh-docs/subsystems/storage.zh.md +260 -0
  222. package/dsh-docs/subsystems/subagent.md +766 -0
  223. package/dsh-docs/subsystems/subagent.zh.md +770 -0
  224. package/dsh-docs/subsystems/subprocess.md +324 -0
  225. package/dsh-docs/subsystems/subprocess.zh.md +324 -0
  226. package/dsh-docs/subsystems/system-prompt.md +220 -0
  227. package/dsh-docs/subsystems/system-prompt.zh.md +220 -0
  228. package/dsh-docs/subsystems/terminal.md +184 -0
  229. package/dsh-docs/subsystems/terminal.zh.md +184 -0
  230. package/dsh-docs/subsystems/todo.md +32 -0
  231. package/dsh-docs/subsystems/todo.zh.md +32 -0
  232. package/dsh-docs/subsystems/token-meter.md +105 -0
  233. package/dsh-docs/subsystems/token-meter.zh.md +105 -0
  234. package/dsh-docs/subsystems/tools.md +720 -0
  235. package/dsh-docs/subsystems/tools.zh.md +720 -0
  236. package/dsh-docs/subsystems/typert.md +343 -0
  237. package/dsh-docs/subsystems/typert.zh.md +343 -0
  238. package/dsh-docs/subsystems/user-questions.md +178 -0
  239. package/dsh-docs/subsystems/user-questions.zh.md +178 -0
  240. package/dsh-docs/subsystems/web-client.md +95 -0
  241. package/dsh-docs/subsystems/web-client.zh.md +95 -0
  242. package/dsh-docs/subsystems/web-server.md +154 -0
  243. package/dsh-docs/subsystems/web-server.zh.md +154 -0
  244. package/dsh-docs/subsystems/web.md +206 -0
  245. package/dsh-docs/subsystems/web.zh.md +206 -0
  246. package/dsh-docs/subsystems/webhook.md +70 -0
  247. package/dsh-docs/subsystems/webhook.zh.md +70 -0
  248. package/dsh-docs/subsystems/workflow.md +278 -0
  249. package/dsh-docs/subsystems/workflow.zh.md +278 -0
  250. package/dsh-docs/subsystems/workspace.md +321 -0
  251. package/dsh-docs/subsystems/workspace.zh.md +321 -0
  252. package/dsh-docs/testing.md +54 -0
  253. package/dsh-docs/testing.zh.md +54 -0
  254. package/dsh-docs/tool-catalog.md +2225 -0
  255. package/dsh-docs/tool-catalog.zh.md +2233 -0
  256. package/dsh-docs/tool-execution-pipeline.md +62 -0
  257. package/dsh-docs/tool-execution-pipeline.zh.md +64 -0
  258. package/dsh-docs/user/develop/basic/config.md +106 -0
  259. package/dsh-docs/user/develop/basic/config.zh.md +106 -0
  260. package/dsh-docs/user/develop/basic/index.md +144 -0
  261. package/dsh-docs/user/develop/basic/index.zh.md +144 -0
  262. package/dsh-docs/user/develop/basic/publish.md +183 -0
  263. package/dsh-docs/user/develop/basic/publish.zh.md +183 -0
  264. package/dsh-docs/user/develop/basic/tool.md +52 -0
  265. package/dsh-docs/user/develop/basic/tool.zh.md +52 -0
  266. package/dsh-docs/user/develop/framework/events.md +143 -0
  267. package/dsh-docs/user/develop/framework/events.zh.md +143 -0
  268. package/dsh-docs/user/develop/framework/index.md +137 -0
  269. package/dsh-docs/user/develop/framework/index.zh.md +137 -0
  270. package/dsh-docs/user/develop/framework/service.md +148 -0
  271. package/dsh-docs/user/develop/framework/service.zh.md +150 -0
  272. package/dsh-docs/user/develop/practice/dynamic-cordis.md +15 -0
  273. package/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +15 -0
  274. package/dsh-docs/user/develop/practice/index.md +155 -0
  275. package/dsh-docs/user/develop/practice/index.zh.md +155 -0
  276. package/dsh-docs/user/develop/practice/llm-adapter.md +189 -0
  277. package/dsh-docs/user/develop/practice/llm-adapter.zh.md +189 -0
  278. package/dsh-docs/user/guide/github-review.md +102 -0
  279. package/dsh-docs/user/guide/github-review.zh.md +102 -0
  280. package/dsh-docs/user/guide/index.md +30 -0
  281. package/dsh-docs/user/guide/index.zh.md +30 -0
  282. package/dsh-docs/user/guide/mcp-memory.md +101 -0
  283. package/dsh-docs/user/guide/mcp-memory.zh.md +101 -0
  284. package/dsh-docs/user/guide/network-proxy.md +85 -0
  285. package/dsh-docs/user/guide/network-proxy.zh.md +85 -0
  286. package/dsh-docs/user/guide/providers.md +190 -0
  287. package/dsh-docs/user/guide/providers.zh.md +190 -0
  288. package/dsh-docs/user/guide/python-sdk.md +150 -0
  289. package/dsh-docs/user/guide/python-sdk.zh.md +150 -0
  290. package/dsh-docs/user/guide/schedule.md +21 -0
  291. package/dsh-docs/user/guide/schedule.zh.md +21 -0
  292. package/dsh-docs/user/index.md +11 -0
  293. package/dsh-docs/user/index.zh.md +11 -0
  294. package/dsh-docs/web-styling.md +29 -0
  295. package/dsh-docs/web-styling.zh.md +29 -0
  296. package/eval-description.md +33 -0
  297. package/lib/client/index.js +328 -89
  298. package/lib/compaction/index.d.ts +47 -0
  299. package/lib/compaction/index.js +159 -0
  300. package/lib/failover/index.d.ts +35 -0
  301. package/lib/failover/index.js +141 -0
  302. package/lib/fs-aware/sandbox-plugin.d.ts +71 -0
  303. package/lib/fs-aware/sandbox-plugin.js +249 -0
  304. package/lib/index.d.ts +10 -41
  305. package/lib/index.js +226 -8173
  306. package/lib/lsp-server-registry-946ysdqg.js +972 -0
  307. package/lib/lsp-server-registry-XU6aHSqZ.js +3 -0
  308. package/lib/mobile/plugin.d.ts +29 -0
  309. package/lib/mobile/plugin.js +54 -0
  310. package/lib/native-capture-x_Hos2e8.js +68 -0
  311. package/lib/py-sdk-Chvy92MB.js +178 -0
  312. package/lib/py-sdk.d.ts +19 -2
  313. package/lib/py-sdk.js +2 -2
  314. package/lib/remote/plugin.d.ts +24 -0
  315. package/lib/remote/plugin.js +1095 -0
  316. package/lib/url-schemes/index.d.ts +88 -0
  317. package/lib/url-schemes/index.js +7200 -0
  318. package/lib/web-trust-BO66y72w.js +361 -0
  319. package/lib/web-trust-CgpBoFv3.d.ts +106 -0
  320. package/lib/web-trust.d.ts +2 -0
  321. package/lib/web-trust.js +3 -0
  322. package/lib/wrap-Dr8XtIak.js +747 -0
  323. package/package.json +87 -56
  324. package/url-schemes-instruction.md +22 -0
  325. package/control-prompt.md +0 -37
  326. package/docs/50_test-reports/v0.1.8d_artifacts/README.md +0 -138
  327. package/docs/50_test-reports/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
  328. package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
  329. package/docs/50_test-reports/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
  330. package/docs/50_test-reports/v0.1.8d_artifacts/functions.json +0 -592
  331. package/docs/50_test-reports/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
  332. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
  333. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
  334. package/docs/50_test-reports/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
  335. package/docs/50_test-reports/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
  336. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
  337. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
  338. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
  339. package/docs/50_test-reports/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
  340. package/docs/50_test-reports/v0.2.0b_artifacts/hashline-probe.md +0 -5
  341. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
  342. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
  343. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
  344. package/docs/50_test-reports/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
  345. package/docs/60_exploration-and-research/cordis-research.md +0 -350
  346. package/docs/60_exploration-and-research/dsh-web-profile-package-map.md +0 -186
  347. package/docs/60_exploration-and-research/dsh-web-ui-slot-system-research.md +0 -310
  348. package/docs/60_exploration-and-research/dsh-webui-strip-boundary-research.md +0 -300
  349. package/docs/60_exploration-and-research/ios-chat-app-bridge-research.md +0 -324
  350. package/docs/60_exploration-and-research/web-frontend-composability-research.md +0 -191
  351. package/docs/REPL-/345/267/245/345/205/267/350/260/203/347/224/250-/346/210/252/346/226/255/350/257/212/346/226/255.md +0 -110
  352. package/docs/adr/0001-bridge-tool-layer-not-service-layer.md +0 -14
  353. package/docs/adr/0002-masking-is-presentation-only.md +0 -15
  354. package/docs/plans/A2A-messaging-channel-test-archive.md +0 -256
  355. package/docs/plans/code-mode-vs-rlm-ipython-comparison.md +0 -137
  356. package/docs/plans/dashr-blueprint-review.md +0 -201
  357. package/docs/plans/dashr-blueprint.md +0 -561
  358. package/docs/plans/dashr-compaction-window-and-archive.md +0 -307
  359. package/docs/plans/dashr-profile-layer-feasibility.md +0 -367
  360. package/docs/plans/dashr-sandbox-escalation-semantics-gap.md +0 -171
  361. package/docs/plans/dashr-security-sandbox-analysis.md +0 -187
  362. package/docs/plans/dashr-surface-invariant-and-omp-imports.md +0 -97
  363. package/docs/plans/ipython-kernel-interactive-interface-test-report.md +0 -152
  364. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft.md +0 -146
  365. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v3.md +0 -50
  366. package/docs/plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v4.md +0 -79
  367. package/docs/plans/kernel-refactoring/Dash-vs-PrimeAgent-systemprompt-toolcatalog-comparison.md +0 -138
  368. package/docs/plans/kernel-refactoring/RLM-system-prompt-injection-gap-report.md +0 -161
  369. package/docs/plans/kernel-refactoring/V0.1.5-development-plan.md +0 -109
  370. package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_dsh.md +0 -50
  371. package/docs/plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_prime.md +0 -113
  372. package/docs/plans/recallable-compaction.md +0 -147
  373. package/docs/plans/spike-tag-repro.mjs +0 -102
  374. package/docs/plans/upstream-analysis.md +0 -128
  375. package/docs/v0.1.8-improved-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -142
  376. package/docs/v0.1.8-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -193
  377. package/docs/v0.1.8b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -96
  378. package/docs/v0.1.8c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -127
  379. package/docs/v0.1.8d-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -150
  380. package/docs/v0.1.8d_artifacts/README.md +0 -138
  381. package/docs/v0.1.8d_artifacts/code-mode-repl-only.observation.md +0 -74
  382. package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.jsonl +0 -3890
  383. package/docs/v0.1.8d_artifacts/dsh-session-session-4a293388-9ae1-474b-87a0-9e17bb556d94.w-sample-0435.jsonl +0 -544
  384. package/docs/v0.1.8d_artifacts/functions.json +0 -592
  385. package/docs/v0.1.8d_artifacts/skills-catalog.snapshot.md +0 -30
  386. package/docs/v0.1.8d_artifacts/tools-sdk.output-schemas.json +0 -1236
  387. package/docs/v0.1.8d_artifacts/tools-sdk.python.txt +0 -592
  388. package/docs/v0.1.8d_artifacts/tools-sdk.typescript.txt +0 -516
  389. package/docs/v0.1.8d_artifacts/wire-vs-transcription.diff.md +0 -54
  390. package/docs/v0.1.8e-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -224
  391. package/docs/v0.1.9a-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -168
  392. package/docs/v0.2.0b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -123
  393. package/docs/v0.2.0b_artifacts/f2probe/Cargo.lock +0 -7
  394. package/docs/v0.2.0b_artifacts/f2probe/Cargo.toml +0 -6
  395. package/docs/v0.2.0b_artifacts/f2probe/src/bin/messy.rs +0 -8
  396. package/docs/v0.2.0b_artifacts/f2probe/src/main.rs +0 -4
  397. package/docs/v0.2.0b_artifacts/hashline-probe.md +0 -5
  398. package/docs/v0.2.0b_artifacts/slowprobe/Cargo.lock +0 -7
  399. package/docs/v0.2.0b_artifacts/slowprobe/Cargo.toml +0 -7
  400. package/docs/v0.2.0b_artifacts/slowprobe/build.rs +0 -4
  401. package/docs/v0.2.0b_artifacts/slowprobe/src/main.rs +0 -13
  402. package/docs/v0.2.1-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -110
  403. package/docs/v0.2.1b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -86
  404. package/docs/v0.2.1c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -66
  405. package/lib/py-sdk-BCaOGYz7.d.ts +0 -125
  406. package/lib/py-sdk-CbgYiX8O.js +0 -691
package/cordis.patch.yml CHANGED
@@ -1,12 +1,18 @@
1
- # DASHR bundle patch: mounts `dashr-repl` on the HOST plane. Its `eval` tool
2
- # and persistent-kernel REPL runtime land in the global scope layer, so every
3
- # agent in every preset sees them (`agent → preset → global`). One
4
- # process-global runtime keys one kernel per Session/Agent, torn down on
5
- # `agent/disposed` — the promotion of the v0.1.5 DashrDaemon shell.
1
+ # DASHR bundle patch: six component rows on the HOST plane (spec
2
+ # docs/specs/plugins-page-components/spec.md). Each insert is one toggleable
3
+ # component on the native Plugins page; a row toggle writes `{id, disabled}`
4
+ # into the profile's user patch layer and applies live. The rows share no
5
+ # inject edges — each degrades gracefully when its dependencies (host
6
+ # services, not sibling rows) are absent.
6
7
  #
7
- # The tool is an ordinary registration: upstream's `code` preset still applies
8
- # its own `tools:code-only` rule (a direct `eval` call in a PTC session resolves
9
- # to UNKNOWN_TOOL). DASHR ships no PTC mode, so that rule never bites here.
8
+ # `dashr-repl` (core): the `eval` tool and persistent-kernel REPL runtime land
9
+ # in the global scope layer, so every agent in every preset sees them
10
+ # (`agent → preset → global`). One process-global runtime keys one kernel per
11
+ # Session/Agent, torn down on `agent/disposed` — the promotion of the v0.1.5
12
+ # DashrDaemon shell. The tool is an ordinary registration: upstream's `code`
13
+ # preset still applies its own `tools:code-only` rule (a direct `eval` call in
14
+ # a PTC session resolves to UNKNOWN_TOOL). DASHR ships no PTC mode, so that
15
+ # rule never bites here.
10
16
  #
11
17
  # `python` is only a hint: the runtime OWNS the kernel environment. An
12
18
  # explicit interpreter (DASHR_KERNEL_PYTHON) is verified; the bare
@@ -15,14 +21,39 @@
15
21
  name: 'better-dsh'
16
22
  config:
17
23
  python: !!js process.env.DASHR_KERNEL_PYTHON ?? 'python3'
18
- # NOTE (v0.2.3): trustedPageAuthorities' DERIVED default lives in the
19
- # plugin's Config schema (src/index.ts), NOT here — a profile/home
20
- # layer row with this id whole-row-overrides this config object, which
21
- # would wipe any default declared at the bundle layer (empirically
22
- # pinned on 4999). Schema defaults fill per-key at plugin load and
23
- # survive every overlay layer; the default derives from the
24
- # DSH_TRUSTED_HOSTS environment — the same single source the fence
25
- # leg reads first. An explicit value in any later layer still wins.
24
+
25
+ # URL-aware I/O + hashline + devices. Gates ride THIS row's config
26
+ # (schema defaults: both ON — opt-out), no longer the core row's.
27
+ - id: dashr-url-schemes
28
+ name: 'better-dsh/url-schemes'
29
+
30
+ # LLM failover (settings-driven; the row config is the chain base —
31
+ # both slots default "not set").
32
+ - id: dashr-failover
33
+ name: 'better-dsh/failover'
34
+
35
+ # Auto-compaction threshold preference (settings-driven).
36
+ - id: dashr-compaction-tuning
37
+ name: 'better-dsh/compaction-tuning'
38
+
39
+ # Trusted page authorities leg of the boot script (browser-side twin of
40
+ # the connection fence below). Schema default derives trustedPageAuthorities
41
+ # from DSH_TRUSTED_HOSTS (v0.2.2a ruling: schema defaults, not patch
42
+ # config — they survive every overlay layer; an explicit value still wins).
43
+ - id: dashr-web-trust
44
+ name: 'better-dsh/web-trust'
45
+
46
+ # Mobile responsiveness leg of the boot script (gestures payload +
47
+ # zoomGuard section). All knobs default ON; `enabled: false` opts out.
48
+ - id: dashr-mobile
49
+ name: 'better-dsh/mobile'
50
+
51
+ # Remote execution framework (plan 2026-09-23-remote-framework-impl.md):
52
+ # `remote` tool face — two-track (oneshot default / pty opt-in), CLI
53
+ # transports (ssh/docker/incus), BYO-PTY spawn, nonce framing, 10min TTL.
54
+ # All config defaults, so the row carries no config block.
55
+ - id: dashr-remote
56
+ name: 'better-dsh/remote'
26
57
 
27
58
  # Native compaction at the host plane: the base bundle ships the engine, the
28
59
  # `/compact` command, and the tool-result pruner as host rows; dsh-web-app
@@ -0,0 +1,236 @@
1
+ # Remote 执行框架与统一工具规范(全新阶段设计与开发计划)
2
+
3
+ - 创建日期:2026-09-23
4
+ - 阶段定位:下一代 Remote 执行工具设计规范(从单一专用 `ssh` 升维至通用 `remote`)
5
+ - 核心导向:**思维模型引领、双轨极简收敛、严守职责边界、拒绝无限缝补**
6
+
7
+ ---
8
+
9
+ ## 零、 痛点与设计宗旨
10
+
11
+ 过去在执行层面由于缺乏顶层思维模型,常常陷入“看到一个 edge case 就钻进去无休止打补丁”的陷阱:
12
+ - 把 POSIX 终端的正常物理现象(如后台进程输出未重定向)误当成工具缺陷去搞复杂的流隔离;
13
+ - 把网络或进程断开后由 Agent 自然消化(读文件系统继续干活)的常态,误当成必须耗费 300% 复杂度去 100% 还原会话内存的死磕目标;
14
+ - 把单一的 `ssh` 工具与底层通信协议、执行模式死死耦合在一起。
15
+
16
+ **本阶段核心宗旨**:
17
+ 1. **思维模型先行**:建立清晰的四层执行模型,把通用计算与控制复杂度正交拆开;
18
+ 2. **两极收敛(Two-Track)**:One-shot 与 Persistent 各取其一,拒绝提供一堆让用户和 Agent 困惑的冗余选项;
19
+ 3. **把边界焊死(Strict Non-Goals)**:工具只负责建立可靠通道和精准收帧,不越俎代庖去替进程和模型擦屁股。
20
+
21
+ ---
22
+
23
+ ## 一、 第一性原理:四层底层执行模型(4-Layer Execution Model)
24
+
25
+ 在 Linux / Unix 世界里,任何对目标环境的命令执行,在底层本质上精确划分为四个层次:
26
+
27
+ ```
28
+ ┌────────────────────────────────────────────────────────────────────────┐
29
+ │ 4-Layer Execution Model │
30
+ ├────────────────────────────────┬───────────────────────────────────────┤
31
+ │ 1. Execute One-shot │ 裸系统调用 execve(),直接加载二进制文件 │
32
+ │ (Raw Exec) │ ❌ 无管道、无变量展开、无通配符、无语法支持 │
33
+ ├────────────────────────────────┼───────────────────────────────────────┤
34
+ │ 2. Execute Bash One-shot │ 调用 bash -c "cmd string" │
35
+ │ (Shell Interpreted Exec) │ ✅ 支持管道、重定向、复合条件、极速且用完即退 │
36
+ ├────────────────────────────────┼───────────────────────────────────────┤
37
+ │ 3. Execute Bash Interactive │ 保持 Bash 进程常驻,通过无终端管道读写 │
38
+ │ (Pure Stream Session) │ ❌ 无终端控制、发不了 ^C、sudo 报 no tty │
39
+ ├────────────────────────────────┼───────────────────────────────────────┤
40
+ │ 4. Execute PTY │ 分配物理/伪终端 (/dev/pts/X),在内跑 Bash│
41
+ │ (Assisted PTY Session) │ ✅ 完整终端特性、支持 ^C 打断、支持交互 │
42
+ └────────────────────────────────┴───────────────────────────────────────┘
43
+ ```
44
+
45
+ ### 二元取舍与收敛矩阵
46
+
47
+ 这四个层次天然划分为两大阵营:**One-shot(用完即走)** 与 **Persistent(长命会话)**。
48
+
49
+ 在架构设计上,**我们坚决不在每个阵营内提供冗余选项,每个类型严格各取一个最优解**:
50
+
51
+ | 阵营 | 候选层级 | 决策结果 | 取舍原因 |
52
+ |---|---|---|---|
53
+ | **One-shot 组** | 第 1 层 vs 第 2 层 | **选第 2 层(Bash One-shot)** | Agent 敲出的命令全是复合语句(含管道 `\|`、重定向 `>`、环境变量 `$VAR`、通配符 `*`)。第 1 层纯裸 exec 会导致 90% 复合语法直接报语法错误,对 Agent 毫无实用价值;第 2 层具备完整的 Shell 语法解析能力,且进程随命令结束而自然退出,由系统内核或协议层直接回传二进制退出码,**零字符串解析需求、零前后状态残留、天然支持并发并发**。 |
54
+ | **Persistent 组** | 第 3 层 vs 第 4 层 | **选第 4 层(Assisted PTY)** | 只要会话是长命的,第 3 层和第 4 层同样逃不掉“在未关闭的数据流中判定何时执行完毕”的收帧解析;但第 3 层失去了打断失控命令的 `^C`(SIGINT),且执行 `sudo` 时会因为缺少 tty 直接卡死。既然收帧成本相同,必须选功能完备、具备真实终端控制能力的第 4 层。 |
55
+
56
+ ---
57
+
58
+ ## 二、 工具命名与定位:从 `ssh` 升维为 `remote`
59
+
60
+ ### 1. 概念解耦:Transport 协议 vs 会话形态
61
+ - 过去叫 `ssh`,把工具的名字限定在了一种网络协议上。
62
+ - 但实际上:
63
+ - 连接远端 VM 用的是 **SSH**;
64
+ - 连接本地容器用的是 **Incus / Docker API 或 CLI**;
65
+ - 随后接入内部网络/跨公网环境,可能使用的是 **WebSocket** 或 **HTTP Gateway**。
66
+ - **统一命名**:工具正式定名为 **`remote`**(语义:在远端/独立上下文环境中执行操作)。
67
+
68
+ ### 2. Target 标识与自动协议推导(Smart Target Routing)
69
+ Agent 不需要关心底层用的是什么晦涩的网络参数,仅通过目标标识即可直达:
70
+
71
+ - **统一的 Target 表达**:
72
+ - 如果是普通名称(如 `dev1`, `dev2`, `dev4`, `mac`)或 IP/域名:底层路由到 **SSH 传输层**;
73
+ - 如果带有容器前缀或属于已知容器(如 `docker:corti`, `incus:ctr-1`, 或直接注册的容器名 `ctr-1`):底层路由到 **容器传输层**;
74
+ - 未来如果是 URL 格式(如 `ws://gateway:8080`):底层路由到 **WebSocket 传输层**。
75
+
76
+ ---
77
+
78
+ ## 三、 Agent 工具注册接口(API 契约)
79
+
80
+ 我们提供的是**便利性(Convenience)**,而不是**技术可行性(Feasibility)**。
81
+ 使用主体是具备语义理解、上下文自愈能力的运行时 Agent。
82
+ - 拒绝 20 个琐碎参数;
83
+ - 拒绝在工具层做保姆式的配置界面(修改 SSH 配置、添加容器等,Agent 自己在命令行就能做);
84
+ - 提供 **BYO-PTY(Bring Your Own PTY)** 逃生门,让工具聚焦于最核心的价值——**PTY 流生命周期管理与字符解析(Framing)**。
85
+
86
+ ```typescript
87
+ interface RemoteToolParams {
88
+ /**
89
+ * 目标环境(便利通道):
90
+ * - SSH Host: 如 'dev4', 'dev1', '137.131.54.174'
91
+ * - 容器前缀: 如 'docker:my-container', 'incus:ctr-1'
92
+ * - 注:无需预先静态注册;若目标不存在,直接透传原生底层错误给 Agent
93
+ */
94
+ target?: string;
95
+
96
+ /**
97
+ * BYO-PTY 自由生成通道(自定义命令直挂 PTY 解析器):
98
+ * 当 Agent 动态创建了特殊容器、K8s pod 或特种跳板机 SSH 时,
99
+ * Agent 可直接提供启动 PTY 的完整命令(如 'docker exec -it custom-img bash')。
100
+ * 工具只提供 PTY 托管、动态 Nonce 注入与精准收帧。
101
+ * (target 与 spawn 二选一)
102
+ */
103
+ spawn?: string;
104
+
105
+ /** 要在环境中执行的具体命令 */
106
+ cmd: string;
107
+
108
+ /**
109
+ * 执行模式:
110
+ * - 'oneshot' (默认): 独立无状态执行 (bash -c),天然高并发,无污染
111
+ * - 'pty': 交互式长命终端会话,保持目录与上下文,支持 ^C 打断与交互
112
+ * (当使用 spawn 时,模式自动锁定为 'pty')
113
+ */
114
+ mode?: 'oneshot' | 'pty';
115
+
116
+ /** 可选标准输入内容 (在 pty 交互或 oneshot 管道时使用) */
117
+ stdin?: string;
118
+
119
+ /** 单次命令超时时长 (秒) */
120
+ timeout?: number;
121
+ }
122
+ ```
123
+
124
+ - **常规便利通道(`target`)**:针对常用的 Dev 环境,省去每次拼装长命令的摩擦;
125
+ - **自由接入通道(`spawn` / BYO-PTY)**:针对运行时动态创建的临时容器或特种连接,工具退守为纯粹的“PTY 字符解析与收帧引擎”;
126
+ - **错误透明原则**:底层任何连接失败、找不到容器、权限拒绝,原汁原味返回 stderr,不搞过度包裹,让 Agent 依据语义软性自愈(Soft Fail-close)。
127
+
128
+ ---
129
+
130
+ ## 四、 核心使用场景与 Agent 操作范式说明
131
+
132
+ 本工具面向具备自治理解能力的 Agent,以下是针对常见与复杂环境的标准使用范式:
133
+
134
+ ### 场景 1:80% 的日常探查与构建(默认 One-shot)
135
+ - **特点**:无状态、用完即走、天然支持多命令并发执行,零污染。
136
+ - **示例**:
137
+ ```typescript
138
+ // 检查远端 git 分支
139
+ remote({ target: 'dev4', cmd: 'git status' })
140
+ // 检查本机容器状态
141
+ remote({ target: 'ctr-1', cmd: 'cat /etc/os-release' })
142
+ ```
143
+
144
+ ### 场景 2:需要保持目录与环境变量的多步交互(Opt-in PTY)
145
+ - **特点**:跨 turn 保持 `cd` 路径、激活虚拟环境、支持 `sudo` 输入密码或 `^C` 打断。
146
+ - **示例**:
147
+ ```typescript
148
+ // Turn 1: 进入目录并激活 venv
149
+ remote({ target: 'dev4', mode: 'pty', cmd: 'cd /data/project && source .venv/bin/activate' })
150
+ // Turn 2: 直接在该环境中运行,状态保持
151
+ remote({ target: 'dev4', mode: 'pty', cmd: 'pytest -v' })
152
+ ```
153
+
154
+ ### 场景 3:嵌套环境与多层穿透(Nested Docker / 跳板机)
155
+ - **核心原理:流穿透性(Pass-through Transparency)**
156
+ 中间的网络层、容器层全部是透明管道(Dumb Pipes),只有最内层的 Bash 在执行并打出 Nonce 结束标记。**从 Host 解析器来看,无论嵌套多少层,永远只需要解析一层流!**
157
+ - **范式 A:像人类一样交互式进入(两步走)**
158
+ ```typescript
159
+ // 步骤 1: 登录 dev3 后,直接在终端里 exec 进容器
160
+ remote({ target: 'dev3', mode: 'pty', cmd: 'docker exec -it model-runner bash' })
161
+ // 步骤 2: 下一条命令已经处于容器内部,直接跑容器内任务
162
+ remote({ target: 'dev3', mode: 'pty', cmd: 'python train.py' })
163
+ ```
164
+ - **范式 B:使用 BYO-PTY 一行直达穿透**
165
+ ```typescript
166
+ // 直接拉起透传通道,工具只负责捕获最内层返回的 Exit Code
167
+ remote({
168
+ spawn: "ssh -t dev3 'docker exec -it model-runner bash'",
169
+ cmd: "python train.py"
170
+ })
171
+ ```
172
+
173
+ ### 场景 4:动态发现与免注册自愈
174
+ - **场景**:Agent 刚才在远端通过命令自己起了一个新容器 `temp-worker`;
175
+ - **操作**:Agent 下一刻直接调用 `remote({ spawn: "docker exec -it temp-worker bash", cmd: "..." })`,无需任何预先配置或注册,即插即用;
176
+ - **自愈**:若容器挂了或名字拼错,Docker 原生报错原样输出给 Agent,Agent 看到后自动通过上下文调整修正。
177
+
178
+ ---
179
+
180
+ ## 五、 底层执行与收帧设计
181
+
182
+ ### 1. 模式 A:One-shot 执行流水线(极速、无解析、零残留)
183
+ - **SSH 目标**:直接执行 `ssh -o BatchMode=yes <target> "bash -lc '<cmd>'"`(不分配 tty,`-T`);
184
+ - **Docker 目标**:直接执行 `docker exec -i <target> bash -lc "<cmd>"`(不加 `-t`);
185
+ - **Incus 目标**:直接执行 `incus exec <target> -- bash -lc "<cmd>"`(不加 `-t`);
186
+ - **收尾判断**:直接获取子进程退出码(Exit Code 0~255)。**完全不经过任何字符串扫描,绝对不可伪造,绝对无污染。**
187
+
188
+ ### 2. 模式 B:Persistent PTY 执行流水线(带内动态 Nonce 严密收帧)
189
+ 针对长命 PTY 会话,解决上一阶段暴露的偶发结束符冲突与生命周期问题:
190
+
191
+ 1. **每轮下发随机 Nonce**:
192
+ - 每次下发命令前,Host 生成一个简短的 8 字节随机字符串 `$NONCE`;
193
+ - PTY 会话在命令末尾执行的收帧指令带上该 Nonce:
194
+ `printf "\033]133;D;%s;%s\007" "$NONCE" "$?"`
195
+ - Host 端的流解析器**只有在匹配到当前轮次下发的 `$NONCE` 时才收帧**。
196
+ - 任何远端命令偶然打印的静态 `\033]133;D;`,因为 Nonce 不匹配,一律被当成普通输出文本打印,绝不会导致命令提前中断或退出码被窜改。
197
+ 2. **空闲保活与回收(10 分钟活跃 TTL)**:
198
+ - 会话从最后一次收到活跃命令开始计时,10 分钟无新交互自动关闭 SSH/容器连接,释放宿主资源;
199
+ - 下次调用时透明冷启动拉起。
200
+ 3. **断联自愈哲学(大模型上下文接管)**:
201
+ - 当遇到容器重启、SSH 偶发断联、会话 Shell 崩溃退出时,**底层绝不做耗费数百行代码的虚拟环境状态盲目重建**;
202
+ - 底层统一行为:重新建立干净的初始会话,返回明确提示:
203
+ `[remote: session reconnected to fresh shell; cwd reset to default]`;
204
+ - 依赖 Agent 自身强大的 Transcript 上下文记忆与自愈能力,由 Agent 自行决定是否需要 `cd` 回工作目录。
205
+
206
+ ---
207
+
208
+ ## 六、 明确的边界法则(Strict Non-Goals)
209
+
210
+ 为了彻底阻断无边界的复杂度下钻,本框架将以下事项焊死为“非工具职责”:
211
+
212
+ 1. **后台进程输出不隔离(属于使用者职责)**:
213
+ - 终端共享标准输出是 POSIX 规范基础行为。任何在本机、物理机、容器后台执行的进程,若未重定向输出,其日志自然会打在终端上。
214
+ - **决不在底层尝试黑魔法拦截或清洗后台流**。Agent 若需要起常驻后台进程,必须按规范显式编写重定向:`cmd > /path.log 2>&1 &`。
215
+ 2. **不追求 100% 内存状态重建**:
216
+ - 真实的状态在文件系统(磁盘)和 Agent 上下文里。不投入精力去快照和回放 Shell 内部的临时环境变量。
217
+ 3. **不暴露过多物理终端微调参数**:
218
+ - 终端行列大小固定满足标准(如 40×120),不向 Agent 暴露行列宽高调整接口,避免界面与认知膨胀。
219
+
220
+ ---
221
+
222
+ ## 七、 开发推进路线图(Roadmap)
223
+
224
+ - [ ] **Phase 1:内核解耦与 Nonce 收帧验证**
225
+ - 在底层 framing 模块中增加基于随机 Nonce 的收帧状态机原型;
226
+ - 验证随机 Nonce 下任意打印 ANSI 字符不会导致流截断。
227
+ - [ ] **Phase 2:抽象 `remote` 双轨调度器**
228
+ - 编写统一的 `RemoteDriver` 抽象基类;
229
+ - 实现 `OneShotRunner`(直接系统执行)与 `PersistentPtyRunner`(维护 PTY 实例池与 10min TTL)。
230
+ - [ ] **Phase 3:多 Transport 适配器接入**
231
+ - 封装 `SshTransport`(VM 远端);
232
+ - 封装 `IncusTransport` / `DockerTransport`(容器直连);
233
+ - 注册统一的 `remote` Agent 工具入口。
234
+ - [ ] **Phase 4:实测回归与文档定稿**
235
+ - 在 `dev4`(SSH)与 `ctr-1`(Incus)上运行标准化测试矩阵;
236
+ - 输出全新阶段的验收实测报告。