super-dsh 0.3.0-c → 0.3.0-e

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 (772) hide show
  1. package/README.md +25 -22
  2. package/client/index.js +25 -11
  3. package/cordis.patch.yml +3 -3
  4. package/package.json +20 -8
  5. package/superd-hub/dist/bundle-setup.d.ts +17 -2
  6. package/superd-hub/dist/bundle-setup.js +158 -2
  7. package/superd-hub/dist/client/mesh-api.d.ts +6 -3
  8. package/superd-hub/dist/client/mesh-api.js +20 -5
  9. package/superd-hub/dist/fusion-transport.js +14 -3
  10. package/superd-hub/dist/gateway.js +2 -0
  11. package/superd-hub/dist/machines.d.ts +2 -0
  12. package/superd-hub/dist/machines.js +2 -0
  13. package/superd-hub/dist/mesh-link.d.ts +10 -2
  14. package/superd-hub/dist/mesh-link.js +131 -27
  15. package/superd-hub/dist/mesh-rpc.d.ts +1 -1
  16. package/superd-hub/dist/mesh-rpc.js +20 -12
  17. package/superd-hub/dist/pairing-auth.d.ts +7 -0
  18. package/superd-hub/dist/pairing-auth.js +29 -0
  19. package/superd-hub/lib/client/index.js +25 -11
  20. package/superd-hub/package.json +19 -2
  21. package/superd-hub/scripts/register-companion.mjs +100 -0
  22. package/bundles/better-dsh.tgz +0 -0
  23. package/bundles/manifest.json +0 -10
  24. package/node_modules/better-dsh/LICENSE +0 -24
  25. package/node_modules/better-dsh/README.md +0 -323
  26. package/node_modules/better-dsh/THIRD_PARTY_NOTICES.md +0 -52
  27. package/node_modules/better-dsh/cordis.patch.yml +0 -139
  28. package/node_modules/better-dsh/docs/00_adr/0001-bridge-tool-layer-not-service-layer.md +0 -14
  29. package/node_modules/better-dsh/docs/00_adr/0002-masking-is-presentation-only.md +0 -15
  30. package/node_modules/better-dsh/docs/10_plans/2026-09-23-remote-execution-framework.md +0 -236
  31. package/node_modules/better-dsh/docs/10_plans/2026-09-23-remote-framework-impl.md +0 -2083
  32. package/node_modules/better-dsh/docs/10_plans/2026-09-26-lsp-ast-reminder.md +0 -64
  33. package/node_modules/better-dsh/docs/10_plans/A2A-messaging-channel-test-archive.md +0 -256
  34. package/node_modules/better-dsh/docs/10_plans/code-mode-vs-rlm-ipython-comparison.md +0 -137
  35. package/node_modules/better-dsh/docs/10_plans/dashr-blueprint-review.md +0 -201
  36. package/node_modules/better-dsh/docs/10_plans/dashr-blueprint.md +0 -561
  37. package/node_modules/better-dsh/docs/10_plans/dashr-compaction-window-and-archive.md +0 -307
  38. package/node_modules/better-dsh/docs/10_plans/dashr-profile-layer-feasibility.md +0 -367
  39. package/node_modules/better-dsh/docs/10_plans/dashr-sandbox-escalation-semantics-gap.md +0 -171
  40. package/node_modules/better-dsh/docs/10_plans/dashr-security-sandbox-analysis.md +0 -187
  41. package/node_modules/better-dsh/docs/10_plans/dashr-surface-invariant-and-omp-imports.md +0 -97
  42. package/node_modules/better-dsh/docs/10_plans/ipython-kernel-interactive-interface-test-report.md +0 -152
  43. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft.md +0 -146
  44. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v3.md +0 -50
  45. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v4.md +0 -79
  46. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-vs-PrimeAgent-systemprompt-toolcatalog-comparison.md +0 -138
  47. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/RLM-system-prompt-injection-gap-report.md +0 -161
  48. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/V0.1.5-development-plan.md +0 -109
  49. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_dsh.md +0 -50
  50. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_prime.md +0 -113
  51. package/node_modules/better-dsh/docs/10_plans/recallable-compaction.md +0 -147
  52. package/node_modules/better-dsh/docs/10_plans/spike-tag-repro.mjs +0 -102
  53. package/node_modules/better-dsh/docs/10_plans/upstream-analysis.md +0 -128
  54. package/node_modules/better-dsh/docs/20_specs/agent/spec.md +0 -54
  55. package/node_modules/better-dsh/docs/20_specs/ast/spec.md +0 -57
  56. package/node_modules/better-dsh/docs/20_specs/compaction-recall/spec.md +0 -46
  57. package/node_modules/better-dsh/docs/20_specs/ctx/spec.md +0 -107
  58. package/node_modules/better-dsh/docs/20_specs/dsh/spec.md +0 -47
  59. package/node_modules/better-dsh/docs/20_specs/dvc/spec.md +0 -106
  60. package/node_modules/better-dsh/docs/20_specs/escalation-guidance/spec.md +0 -44
  61. package/node_modules/better-dsh/docs/20_specs/fs-scheme-resolution/spec.md +0 -37
  62. package/node_modules/better-dsh/docs/20_specs/hash-edit/spec.md +0 -41
  63. package/node_modules/better-dsh/docs/20_specs/http-read/spec.md +0 -73
  64. package/node_modules/better-dsh/docs/20_specs/kernel-provisioning/spec.md +0 -53
  65. package/node_modules/better-dsh/docs/20_specs/lsp/spec.md +0 -121
  66. package/node_modules/better-dsh/docs/20_specs/mobile-layout/spec.md +0 -108
  67. package/node_modules/better-dsh/docs/20_specs/model-failover/spec.md +0 -20
  68. package/node_modules/better-dsh/docs/20_specs/plugins-page-components/spec.md +0 -79
  69. package/node_modules/better-dsh/docs/20_specs/preact-ui-shell/spec.md +0 -22
  70. package/node_modules/better-dsh/docs/20_specs/repl-dispatch-resilience/spec.md +0 -21
  71. package/node_modules/better-dsh/docs/20_specs/skill/spec.md +0 -58
  72. package/node_modules/better-dsh/docs/20_specs/tool-surface/spec.md +0 -222
  73. package/node_modules/better-dsh/docs/20_specs/url-schema/spec.md +0 -148
  74. package/node_modules/better-dsh/docs/20_specs/web-trust-fence/spec.md +0 -43
  75. package/node_modules/better-dsh/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 +0 -176
  76. package/node_modules/better-dsh/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 +0 -226
  77. package/node_modules/better-dsh/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 +0 -222
  78. package/node_modules/better-dsh/docs/50_test-reports/2026-09-12-fs-scheme-resolution-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -81
  79. package/node_modules/better-dsh/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 +0 -234
  80. package/node_modules/better-dsh/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 +0 -160
  81. package/node_modules/better-dsh/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/345/211/247/346/234/254.md +0 -44
  82. package/node_modules/better-dsh/docs/50_test-reports/2026-09-12-url-schemes-recallable-context-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -89
  83. package/node_modules/better-dsh/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 +0 -198
  84. package/node_modules/better-dsh/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 +0 -246
  85. package/node_modules/better-dsh/docs/50_test-reports/2026-09-13-preact-ui-shell/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -50
  86. package/node_modules/better-dsh/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 +0 -63
  87. package/node_modules/better-dsh/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 +0 -76
  88. package/node_modules/better-dsh/docs/50_test-reports/2026-09-22-4988/345/217/214/345/271/263/351/235/242/345/220/257/345/212/250/344/277/256/345/244/215/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -76
  89. package/node_modules/better-dsh/docs/50_test-reports/2026-09-22-better-dsh/347/273/204/344/273/266/347/203/255/346/217/222/346/213/224/344/270/216/344/276/235/350/265/226/347/272/247/350/201/224/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -134
  90. package/node_modules/better-dsh/docs/50_test-reports/2026-09-23-remote-framework/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -92
  91. package/node_modules/better-dsh/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 +0 -125
  92. package/node_modules/better-dsh/docs/50_test-reports/2026-09-23-ssh/345/267/245/345/205/267assisted-pty/344/274/232/350/257/235framing/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -207
  93. package/node_modules/better-dsh/docs/50_test-reports/2026-09-24-v0.1.7-rc.1/345/257/271/351/275/220/350/275/256-compaction/344/270/216failover/350/256/276/347/275/256/351/235/242/344/277/256/345/244/215/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -65
  94. package/node_modules/better-dsh/docs/50_test-reports/2026-09-27-lsp-ast-reminder-4999/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -53
  95. package/node_modules/better-dsh/docs/50_test-reports/2026-09-28-ctx-scheme/351/225/277/344/274/232/350/257/235utility/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -155
  96. package/node_modules/better-dsh/docs/50_test-reports/2026-10-01-v0.2.4d-web-password-gate/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -105
  97. package/node_modules/better-dsh/docs/50_test-reports/2026-10-02-better-dsh-schemastery/344/276/235/350/265/226/345/243/260/346/230/216/344/277/256/345/244/215/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -62
  98. package/node_modules/better-dsh/docs/50_test-reports/2026-10-02-ctx-navigation/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -137
  99. package/node_modules/better-dsh/docs/50_test-reports/2026-10-02-v0.2.0-rc.2/345/257/271/351/275/220/350/275/256/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -38
  100. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-ast-engine-deomp-4999/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -325
  101. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-better-dsh-tool-surface-repl-dvc-browser-ast-lsp-4999/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -185
  102. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-docs-packaging-trim/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -82
  103. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-physical-import/344/270/216llm-completion-ast/347/233/270/345/257/271/350/267/257/345/276/204/344/277/256/345/244/215/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -101
  104. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-pnpm11/345/271/264/351/276/204/351/227/250/351/224/201/346/226/207/344/273/266/347/233/270/344/275/215/345/256/236/350/257/201.md +0 -54
  105. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-remote-BYO-PTY-label/351/207/215/346/236/204/347/254/254/344/270/200/344/272/272/347/247/260/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -447
  106. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-schemastery-cosmokit/346/272/220/347/240/201/345/206/205/350/201/224/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -63
  107. package/node_modules/better-dsh/docs/50_test-reports/2026-10-03-zero-npm-runtime-deps/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -82
  108. package/node_modules/better-dsh/docs/50_test-reports/2026-10-04-ast-engine-deomp-0.2.5-d/345/217/221/345/270/203/351/252/214/346/224/266/346/212/245/345/221/212.md +0 -220
  109. package/node_modules/better-dsh/docs/50_test-reports/2026-10-04-ast_grep/344/270/216ast_edit/345/245/221/347/272/246/344/270/216/350/276/271/347/225/214/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -151
  110. package/node_modules/better-dsh/docs/50_test-reports/2026-10-06-authentication-only-web-admission-4999.md +0 -63
  111. package/node_modules/better-dsh/docs/50_test-reports/2026-10-07-better-dsh-welcome-self-contained-4999.md +0 -52
  112. package/node_modules/better-dsh/docs/50_test-reports/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
  113. package/node_modules/better-dsh/docs/50_test-reports/kernel-provisioning.md +0 -44
  114. package/node_modules/better-dsh/docs/50_test-reports/repl-kernel-provisioning-test-report.md +0 -87
  115. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.2-alpha.5-local-test-report.md +0 -81
  116. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.2-alpha.5-report.md +0 -93
  117. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-local-test-report.md +0 -44
  118. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-report.md +0 -110
  119. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.5-rc.2-local-test-report.md +0 -79
  120. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8-improved-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -142
  121. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -193
  122. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -96
  123. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -127
  124. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8d-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -150
  125. package/node_modules/better-dsh/docs/50_test-reports/v0.1.8e-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -224
  126. package/node_modules/better-dsh/docs/50_test-reports/v0.1.9a-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -168
  127. package/node_modules/better-dsh/docs/50_test-reports/v0.2.0b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -123
  128. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -110
  129. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1b-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -86
  130. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1c-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -66
  131. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1d-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -67
  132. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1e-P1-/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -136
  133. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1ef-dev-audit-report.md +0 -73
  134. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1f-plugin-shipped-ui-patches/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -102
  135. package/node_modules/better-dsh/docs/50_test-reports/v0.2.3b-hashline-content-locator/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -73
  136. package/node_modules/better-dsh/docs/50_test-reports/v0.2.3c-mobile-wave/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -47
  137. package/node_modules/better-dsh/docs/50_test-reports/v0.2.4-ios-focus-zoom-suppression/345/256/236/346/265/213/346/212/245/345/221/212.md +0 -158
  138. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/SKILL.md +0 -147
  139. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch01-user-guide.md +0 -123
  140. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch02-plugin-basics.md +0 -127
  141. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch03-plugin-framework-practice.md +0 -120
  142. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch04-cordis-fundamentals.md +0 -129
  143. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch05-cordis-api.md +0 -115
  144. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch06-architecture.md +0 -109
  145. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch07-capability-seams.md +0 -97
  146. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch08-internals-pipelines.md +0 -111
  147. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch09-api-gateway.md +0 -106
  148. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch10-config-catalog.md +0 -97
  149. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch11-tool-catalog.md +0 -121
  150. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch12-persistence-catalog.md +0 -109
  151. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch13-subsystems-core-session.md +0 -106
  152. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch14-subsystems-agent-loop.md +0 -111
  153. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch15-subsystems-tool-execution.md +0 -106
  154. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch16-subsystems-session-data.md +0 -132
  155. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch17-subsystems-llm-streaming.md +0 -128
  156. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch18-subsystems-web-ui.md +0 -142
  157. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch19-cookbook.md +0 -149
  158. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch20-development-testing.md +0 -87
  159. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch21-postmortems.md +0 -82
  160. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch22-i18n.md +0 -86
  161. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/cheatsheet.md +0 -67
  162. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/glossary.md +0 -57
  163. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/patterns.md +0 -88
  164. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/AGENTS.md +0 -75
  165. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/agent-lifecycle.md +0 -84
  166. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/agent-lifecycle.zh.md +0 -86
  167. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/api-gateway.md +0 -164
  168. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/api-gateway.zh.md +0 -164
  169. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/architecture.md +0 -150
  170. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/architecture.zh.md +0 -154
  171. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/capability-seams.md +0 -543
  172. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/capability-seams.zh.md +0 -545
  173. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/config-catalog.md +0 -3473
  174. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/config-catalog.zh.md +0 -3474
  175. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-package.md +0 -117
  176. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-package.zh.md +0 -119
  177. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-remote-api.md +0 -197
  178. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-remote-api.zh.md +0 -197
  179. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-settings-card.md +0 -102
  180. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-settings-card.zh.md +0 -102
  181. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-tool.md +0 -101
  182. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-tool.zh.md +0 -103
  183. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-vendored-package.md +0 -59
  184. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-vendored-package.zh.md +0 -59
  185. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-an-llm-adapter.md +0 -43
  186. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-an-llm-adapter.zh.md +0 -43
  187. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/extension-cookbook.md +0 -132
  188. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/extension-cookbook.zh.md +0 -136
  189. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/maintaining-dsh-code-review.md +0 -64
  190. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/maintaining-dsh-code-review.zh.md +0 -64
  191. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/responding-to-pr-review-on-a-stack.md +0 -32
  192. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +0 -32
  193. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/context.md +0 -364
  194. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/context.zh.md +0 -366
  195. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/events.md +0 -207
  196. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/events.zh.md +0 -209
  197. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/fiber.md +0 -375
  198. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/fiber.zh.md +0 -377
  199. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/inherited.md +0 -39
  200. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/registry.md +0 -152
  201. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/registry.zh.md +0 -154
  202. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/service.md +0 -102
  203. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/service.zh.md +0 -104
  204. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-primer.md +0 -45
  205. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-primer.zh.md +0 -51
  206. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/01-first-plugin.md +0 -95
  207. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/01-first-plugin.zh.md +0 -95
  208. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/02-lifecycle-and-effects.md +0 -98
  209. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +0 -98
  210. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/03-services.md +0 -98
  211. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/03-services.zh.md +0 -98
  212. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/04-events.md +0 -144
  213. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/04-events.zh.md +0 -144
  214. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/05-config.md +0 -84
  215. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/05-config.zh.md +0 -84
  216. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/06-composition-and-hmr.md +0 -113
  217. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/06-composition-and-hmr.zh.md +0 -113
  218. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/07-into-the-harness.md +0 -108
  219. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/07-into-the-harness.zh.md +0 -108
  220. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/index.md +0 -60
  221. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/index.zh.md +0 -62
  222. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/deepseek-llm-api-wire-extensions.md +0 -163
  223. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/deepseek-llm-api-wire-extensions.zh.md +0 -163
  224. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/defensive-patterns.md +0 -33
  225. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/defensive-patterns.zh.md +0 -35
  226. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/development.md +0 -167
  227. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/development.zh.md +0 -173
  228. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/event-producer-consumer.md +0 -86
  229. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/event-producer-consumer.zh.md +0 -88
  230. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/glossary.md +0 -45
  231. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/glossary.zh.md +0 -45
  232. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/graph-atlas.md +0 -22
  233. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/graph-atlas.zh.md +0 -24
  234. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/README.md +0 -60
  235. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/README.zh.md +0 -62
  236. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/style-samples.md +0 -87
  237. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/terminology.md +0 -214
  238. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-prompt.md +0 -263
  239. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-rules.md +0 -69
  240. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-rules.zh.md +0 -69
  241. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/module-graph.md +0 -1411
  242. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/module-graph.zh.md +0 -1413
  243. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/persistence-catalog.md +0 -1075
  244. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/persistence-catalog.zh.md +0 -1077
  245. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0001-acp-default-export-drops-inject.md +0 -113
  246. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0001-acp-default-export-drops-inject.zh.md +0 -113
  247. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +0 -47
  248. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +0 -47
  249. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0003-web-agent-gui-feedback-loop.md +0 -53
  250. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +0 -53
  251. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +0 -55
  252. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +0 -55
  253. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/README.md +0 -18
  254. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/README.zh.md +0 -18
  255. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/rescope.md +0 -53
  256. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/rescope.zh.md +0 -53
  257. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/README.md +0 -61
  258. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/README.zh.md +0 -61
  259. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/agent-team.md +0 -207
  260. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/agent-team.zh.md +0 -207
  261. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/approval.md +0 -170
  262. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/approval.zh.md +0 -170
  263. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/attachment.md +0 -351
  264. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/attachment.zh.md +0 -351
  265. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/client-modules.md +0 -168
  266. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/client-modules.zh.md +0 -168
  267. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/code-runtime.md +0 -195
  268. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/code-runtime.zh.md +0 -195
  269. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/commands.md +0 -219
  270. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/commands.zh.md +0 -219
  271. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/compaction.md +0 -238
  272. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/compaction.zh.md +0 -238
  273. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/conversation.md +0 -258
  274. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/conversation.zh.md +0 -258
  275. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/core.md +0 -1209
  276. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/core.zh.md +0 -1219
  277. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/credentials.md +0 -329
  278. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/credentials.zh.md +0 -329
  279. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/extensions.md +0 -382
  280. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/extensions.zh.md +0 -382
  281. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/feedback.md +0 -266
  282. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/feedback.zh.md +0 -266
  283. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/filesystem.md +0 -505
  284. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/filesystem.zh.md +0 -505
  285. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/goal.md +0 -277
  286. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/goal.zh.md +0 -277
  287. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/invariants.md +0 -88
  288. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/invariants.zh.md +0 -88
  289. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/jobs.md +0 -290
  290. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/jobs.zh.md +0 -290
  291. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/llm-streaming.md +0 -1080
  292. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/llm-streaming.zh.md +0 -1086
  293. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/lsp.md +0 -202
  294. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/lsp.zh.md +0 -202
  295. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/permission-presets.md +0 -131
  296. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/permission-presets.zh.md +0 -131
  297. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/persistence.md +0 -395
  298. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/persistence.zh.md +0 -395
  299. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/plan.md +0 -87
  300. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/plan.zh.md +0 -87
  301. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/sandbox.md +0 -220
  302. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/sandbox.zh.md +0 -220
  303. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/schedule.md +0 -192
  304. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/schedule.zh.md +0 -192
  305. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/scope.md +0 -59
  306. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/scope.zh.md +0 -59
  307. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-projection.md +0 -354
  308. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-projection.zh.md +0 -354
  309. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-query.md +0 -509
  310. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-query.zh.md +0 -509
  311. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-reference.md +0 -219
  312. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-reference.zh.md +0 -219
  313. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-telemetry.md +0 -194
  314. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-telemetry.zh.md +0 -194
  315. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-title.md +0 -204
  316. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-title.zh.md +0 -204
  317. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session.md +0 -1155
  318. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session.zh.md +0 -1159
  319. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/settings.md +0 -405
  320. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/settings.zh.md +0 -405
  321. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/shell.md +0 -303
  322. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/shell.zh.md +0 -303
  323. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/skills.md +0 -354
  324. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/skills.zh.md +0 -354
  325. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/slots.md +0 -175
  326. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/slots.zh.md +0 -175
  327. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/spill.md +0 -117
  328. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/spill.zh.md +0 -117
  329. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/storage.md +0 -260
  330. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/storage.zh.md +0 -260
  331. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subagent.md +0 -766
  332. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subagent.zh.md +0 -770
  333. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subprocess.md +0 -324
  334. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subprocess.zh.md +0 -324
  335. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/system-prompt.md +0 -220
  336. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/system-prompt.zh.md +0 -220
  337. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/terminal.md +0 -184
  338. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/terminal.zh.md +0 -184
  339. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/todo.md +0 -32
  340. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/todo.zh.md +0 -32
  341. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/token-meter.md +0 -105
  342. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/token-meter.zh.md +0 -105
  343. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/tools.md +0 -720
  344. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/tools.zh.md +0 -720
  345. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/typert.md +0 -343
  346. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/typert.zh.md +0 -343
  347. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/user-questions.md +0 -178
  348. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/user-questions.zh.md +0 -178
  349. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-client.md +0 -95
  350. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-client.zh.md +0 -95
  351. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-server.md +0 -154
  352. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-server.zh.md +0 -154
  353. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web.md +0 -206
  354. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web.zh.md +0 -206
  355. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/webhook.md +0 -70
  356. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/webhook.zh.md +0 -70
  357. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workflow.md +0 -278
  358. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workflow.zh.md +0 -278
  359. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workspace.md +0 -321
  360. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workspace.zh.md +0 -321
  361. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/testing.md +0 -54
  362. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/testing.zh.md +0 -54
  363. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-catalog.md +0 -2225
  364. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-catalog.zh.md +0 -2233
  365. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-execution-pipeline.md +0 -62
  366. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-execution-pipeline.zh.md +0 -64
  367. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/config.md +0 -106
  368. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/config.zh.md +0 -106
  369. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/index.md +0 -144
  370. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/index.zh.md +0 -144
  371. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/publish.md +0 -183
  372. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/publish.zh.md +0 -183
  373. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/tool.md +0 -52
  374. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/tool.zh.md +0 -52
  375. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/events.md +0 -143
  376. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/events.zh.md +0 -143
  377. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/index.md +0 -137
  378. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/index.zh.md +0 -137
  379. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/service.md +0 -148
  380. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/service.zh.md +0 -150
  381. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/dynamic-cordis.md +0 -15
  382. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/dynamic-cordis.zh.md +0 -15
  383. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/index.md +0 -155
  384. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/index.zh.md +0 -155
  385. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/llm-adapter.md +0 -189
  386. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/llm-adapter.zh.md +0 -189
  387. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/github-review.md +0 -102
  388. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/github-review.zh.md +0 -102
  389. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/index.md +0 -30
  390. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/index.zh.md +0 -30
  391. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/mcp-memory.md +0 -101
  392. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/mcp-memory.zh.md +0 -101
  393. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/network-proxy.md +0 -85
  394. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/network-proxy.zh.md +0 -85
  395. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/providers.md +0 -190
  396. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/providers.zh.md +0 -190
  397. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/python-sdk.md +0 -150
  398. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/python-sdk.zh.md +0 -150
  399. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/schedule.md +0 -21
  400. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/schedule.zh.md +0 -21
  401. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/index.md +0 -11
  402. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/index.zh.md +0 -11
  403. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/web-styling.md +0 -29
  404. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/web-styling.zh.md +0 -29
  405. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/site-pages-map.txt +0 -234
  406. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/site-pages.json +0 -232
  407. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src-README.md +0 -63
  408. package/node_modules/better-dsh/docs/dev-test-environment-notes.md +0 -137
  409. package/node_modules/better-dsh/docs/distro-blueprint.md +0 -81
  410. package/node_modules/better-dsh/docs/dsh-webUI-with-rlm-mode.png +0 -0
  411. package/node_modules/better-dsh/docs/repositioning-and-rebranding.md +0 -102
  412. package/node_modules/better-dsh/docs/specs/agent/spec.md +0 -54
  413. package/node_modules/better-dsh/docs/specs/ast/spec.md +0 -57
  414. package/node_modules/better-dsh/docs/specs/ast-engine-deomp/spec.md +0 -170
  415. package/node_modules/better-dsh/docs/specs/authentication-only-web-admission/spec.md +0 -51
  416. package/node_modules/better-dsh/docs/specs/compaction-recall/spec.md +0 -46
  417. package/node_modules/better-dsh/docs/specs/ctx/spec.md +0 -179
  418. package/node_modules/better-dsh/docs/specs/docs-packaging-trim/spec.md +0 -110
  419. package/node_modules/better-dsh/docs/specs/dsh/spec.md +0 -47
  420. package/node_modules/better-dsh/docs/specs/dvc/spec.md +0 -106
  421. package/node_modules/better-dsh/docs/specs/escalation-guidance/spec.md +0 -44
  422. package/node_modules/better-dsh/docs/specs/fs-scheme-resolution/spec.md +0 -37
  423. package/node_modules/better-dsh/docs/specs/hash-edit/spec.md +0 -41
  424. package/node_modules/better-dsh/docs/specs/http-read/spec.md +0 -73
  425. package/node_modules/better-dsh/docs/specs/kernel-provisioning/spec.md +0 -53
  426. package/node_modules/better-dsh/docs/specs/lsp/spec.md +0 -121
  427. package/node_modules/better-dsh/docs/specs/mobile-layout/spec.md +0 -108
  428. package/node_modules/better-dsh/docs/specs/model-failover/spec.md +0 -20
  429. package/node_modules/better-dsh/docs/specs/model-picker-ios-blur/spec.md +0 -168
  430. package/node_modules/better-dsh/docs/specs/plugins-page-components/spec.md +0 -79
  431. package/node_modules/better-dsh/docs/specs/preact-ui-shell/spec.md +0 -22
  432. package/node_modules/better-dsh/docs/specs/remote-pty-label/spec.md +0 -126
  433. package/node_modules/better-dsh/docs/specs/repl-dispatch-resilience/spec.md +0 -21
  434. package/node_modules/better-dsh/docs/specs/skill/spec.md +0 -58
  435. package/node_modules/better-dsh/docs/specs/tool-surface/spec.md +0 -222
  436. package/node_modules/better-dsh/docs/specs/url-schema/spec.md +0 -148
  437. package/node_modules/better-dsh/docs/specs/web-trust-fence/spec.md +0 -43
  438. package/node_modules/better-dsh/docs/specs/welcome-self-contained/spec.md +0 -13
  439. package/node_modules/better-dsh/docs/specs/zero-npm-runtime-deps/spec.md +0 -85
  440. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-02-ctx-navigation.md +0 -319
  441. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-03-ast-engine-deomp.md +0 -1214
  442. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-03-docs-packaging-trim.md +0 -181
  443. package/node_modules/better-dsh/docs/superpowers/specs/2026-10-02-ctx-navigation-design.md +0 -209
  444. package/node_modules/better-dsh/docs/upstream-dsh-0.1.5-rc.2-report.md +0 -156
  445. package/node_modules/better-dsh/dsh-docs/AGENTS.md +0 -75
  446. package/node_modules/better-dsh/dsh-docs/agent-lifecycle.md +0 -84
  447. package/node_modules/better-dsh/dsh-docs/agent-lifecycle.zh.md +0 -86
  448. package/node_modules/better-dsh/dsh-docs/api-gateway.md +0 -164
  449. package/node_modules/better-dsh/dsh-docs/api-gateway.zh.md +0 -164
  450. package/node_modules/better-dsh/dsh-docs/architecture.md +0 -150
  451. package/node_modules/better-dsh/dsh-docs/architecture.zh.md +0 -154
  452. package/node_modules/better-dsh/dsh-docs/baseline.md +0 -13
  453. package/node_modules/better-dsh/dsh-docs/capability-seams.md +0 -543
  454. package/node_modules/better-dsh/dsh-docs/capability-seams.zh.md +0 -545
  455. package/node_modules/better-dsh/dsh-docs/config-catalog.md +0 -3473
  456. package/node_modules/better-dsh/dsh-docs/config-catalog.zh.md +0 -3474
  457. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-package.md +0 -117
  458. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-package.zh.md +0 -119
  459. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-remote-api.md +0 -197
  460. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-remote-api.zh.md +0 -197
  461. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-session-format-version.md +0 -109
  462. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-session-format-version.zh.md +0 -109
  463. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-settings-card.md +0 -102
  464. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-settings-card.zh.md +0 -102
  465. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-tool.md +0 -101
  466. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-tool.zh.md +0 -103
  467. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-vendored-package.md +0 -59
  468. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-vendored-package.zh.md +0 -59
  469. package/node_modules/better-dsh/dsh-docs/cookbook/adding-an-llm-adapter.md +0 -43
  470. package/node_modules/better-dsh/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +0 -43
  471. package/node_modules/better-dsh/dsh-docs/cookbook/extension-cookbook.md +0 -132
  472. package/node_modules/better-dsh/dsh-docs/cookbook/extension-cookbook.zh.md +0 -136
  473. package/node_modules/better-dsh/dsh-docs/cookbook/maintaining-dsh-code-review.md +0 -64
  474. package/node_modules/better-dsh/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +0 -64
  475. package/node_modules/better-dsh/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +0 -32
  476. package/node_modules/better-dsh/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +0 -32
  477. package/node_modules/better-dsh/dsh-docs/cordis-api/context.md +0 -364
  478. package/node_modules/better-dsh/dsh-docs/cordis-api/context.zh.md +0 -366
  479. package/node_modules/better-dsh/dsh-docs/cordis-api/events.md +0 -207
  480. package/node_modules/better-dsh/dsh-docs/cordis-api/events.zh.md +0 -209
  481. package/node_modules/better-dsh/dsh-docs/cordis-api/fiber.md +0 -375
  482. package/node_modules/better-dsh/dsh-docs/cordis-api/fiber.zh.md +0 -377
  483. package/node_modules/better-dsh/dsh-docs/cordis-api/inherited.md +0 -39
  484. package/node_modules/better-dsh/dsh-docs/cordis-api/registry.md +0 -152
  485. package/node_modules/better-dsh/dsh-docs/cordis-api/registry.zh.md +0 -154
  486. package/node_modules/better-dsh/dsh-docs/cordis-api/service.md +0 -102
  487. package/node_modules/better-dsh/dsh-docs/cordis-api/service.zh.md +0 -104
  488. package/node_modules/better-dsh/dsh-docs/cordis-primer.md +0 -45
  489. package/node_modules/better-dsh/dsh-docs/cordis-primer.zh.md +0 -51
  490. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/01-first-plugin.md +0 -95
  491. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +0 -95
  492. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +0 -98
  493. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +0 -98
  494. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/03-services.md +0 -98
  495. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/03-services.zh.md +0 -98
  496. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/04-events.md +0 -144
  497. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/04-events.zh.md +0 -144
  498. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/05-config.md +0 -84
  499. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/05-config.zh.md +0 -84
  500. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +0 -113
  501. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +0 -113
  502. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/07-into-the-harness.md +0 -108
  503. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +0 -108
  504. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/index.md +0 -60
  505. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/index.zh.md +0 -62
  506. package/node_modules/better-dsh/dsh-docs/deepseek-llm-api-wire-extensions.md +0 -163
  507. package/node_modules/better-dsh/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +0 -163
  508. package/node_modules/better-dsh/dsh-docs/defensive-patterns.md +0 -33
  509. package/node_modules/better-dsh/dsh-docs/defensive-patterns.zh.md +0 -35
  510. package/node_modules/better-dsh/dsh-docs/development.md +0 -167
  511. package/node_modules/better-dsh/dsh-docs/development.zh.md +0 -173
  512. package/node_modules/better-dsh/dsh-docs/event-producer-consumer.md +0 -86
  513. package/node_modules/better-dsh/dsh-docs/event-producer-consumer.zh.md +0 -88
  514. package/node_modules/better-dsh/dsh-docs/glossary.md +0 -45
  515. package/node_modules/better-dsh/dsh-docs/glossary.zh.md +0 -45
  516. package/node_modules/better-dsh/dsh-docs/graph-atlas.md +0 -22
  517. package/node_modules/better-dsh/dsh-docs/graph-atlas.zh.md +0 -24
  518. package/node_modules/better-dsh/dsh-docs/i18n/README.md +0 -60
  519. package/node_modules/better-dsh/dsh-docs/i18n/README.zh.md +0 -62
  520. package/node_modules/better-dsh/dsh-docs/i18n/style-samples.md +0 -87
  521. package/node_modules/better-dsh/dsh-docs/i18n/terminology.md +0 -214
  522. package/node_modules/better-dsh/dsh-docs/i18n/translation-prompt.md +0 -263
  523. package/node_modules/better-dsh/dsh-docs/i18n/translation-rules.md +0 -69
  524. package/node_modules/better-dsh/dsh-docs/i18n/translation-rules.zh.md +0 -69
  525. package/node_modules/better-dsh/dsh-docs/module-graph.md +0 -1411
  526. package/node_modules/better-dsh/dsh-docs/module-graph.zh.md +0 -1413
  527. package/node_modules/better-dsh/dsh-docs/persistence-catalog.md +0 -1075
  528. package/node_modules/better-dsh/dsh-docs/persistence-catalog.zh.md +0 -1077
  529. package/node_modules/better-dsh/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +0 -113
  530. package/node_modules/better-dsh/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +0 -113
  531. package/node_modules/better-dsh/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +0 -47
  532. package/node_modules/better-dsh/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +0 -47
  533. package/node_modules/better-dsh/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +0 -53
  534. package/node_modules/better-dsh/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +0 -53
  535. package/node_modules/better-dsh/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +0 -55
  536. package/node_modules/better-dsh/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +0 -55
  537. package/node_modules/better-dsh/dsh-docs/postmortem/README.md +0 -18
  538. package/node_modules/better-dsh/dsh-docs/postmortem/README.zh.md +0 -18
  539. package/node_modules/better-dsh/dsh-docs/rescope.md +0 -53
  540. package/node_modules/better-dsh/dsh-docs/rescope.zh.md +0 -53
  541. package/node_modules/better-dsh/dsh-docs/session-format-status.md +0 -47
  542. package/node_modules/better-dsh/dsh-docs/session-format-status.zh.md +0 -47
  543. package/node_modules/better-dsh/dsh-docs/subsystems/README.md +0 -61
  544. package/node_modules/better-dsh/dsh-docs/subsystems/README.zh.md +0 -61
  545. package/node_modules/better-dsh/dsh-docs/subsystems/agent-team.md +0 -207
  546. package/node_modules/better-dsh/dsh-docs/subsystems/agent-team.zh.md +0 -207
  547. package/node_modules/better-dsh/dsh-docs/subsystems/approval.md +0 -170
  548. package/node_modules/better-dsh/dsh-docs/subsystems/approval.zh.md +0 -170
  549. package/node_modules/better-dsh/dsh-docs/subsystems/attachment.md +0 -351
  550. package/node_modules/better-dsh/dsh-docs/subsystems/attachment.zh.md +0 -351
  551. package/node_modules/better-dsh/dsh-docs/subsystems/client-modules.md +0 -168
  552. package/node_modules/better-dsh/dsh-docs/subsystems/client-modules.zh.md +0 -168
  553. package/node_modules/better-dsh/dsh-docs/subsystems/client-resources.md +0 -91
  554. package/node_modules/better-dsh/dsh-docs/subsystems/client-resources.zh.md +0 -91
  555. package/node_modules/better-dsh/dsh-docs/subsystems/code-runtime.md +0 -195
  556. package/node_modules/better-dsh/dsh-docs/subsystems/code-runtime.zh.md +0 -195
  557. package/node_modules/better-dsh/dsh-docs/subsystems/commands.md +0 -219
  558. package/node_modules/better-dsh/dsh-docs/subsystems/commands.zh.md +0 -219
  559. package/node_modules/better-dsh/dsh-docs/subsystems/compaction.md +0 -238
  560. package/node_modules/better-dsh/dsh-docs/subsystems/compaction.zh.md +0 -238
  561. package/node_modules/better-dsh/dsh-docs/subsystems/conversation.md +0 -258
  562. package/node_modules/better-dsh/dsh-docs/subsystems/conversation.zh.md +0 -258
  563. package/node_modules/better-dsh/dsh-docs/subsystems/core.md +0 -1209
  564. package/node_modules/better-dsh/dsh-docs/subsystems/core.zh.md +0 -1219
  565. package/node_modules/better-dsh/dsh-docs/subsystems/credentials.md +0 -329
  566. package/node_modules/better-dsh/dsh-docs/subsystems/credentials.zh.md +0 -329
  567. package/node_modules/better-dsh/dsh-docs/subsystems/extensions.md +0 -382
  568. package/node_modules/better-dsh/dsh-docs/subsystems/extensions.zh.md +0 -382
  569. package/node_modules/better-dsh/dsh-docs/subsystems/feedback.md +0 -266
  570. package/node_modules/better-dsh/dsh-docs/subsystems/feedback.zh.md +0 -266
  571. package/node_modules/better-dsh/dsh-docs/subsystems/filesystem.md +0 -505
  572. package/node_modules/better-dsh/dsh-docs/subsystems/filesystem.zh.md +0 -505
  573. package/node_modules/better-dsh/dsh-docs/subsystems/goal.md +0 -277
  574. package/node_modules/better-dsh/dsh-docs/subsystems/goal.zh.md +0 -277
  575. package/node_modules/better-dsh/dsh-docs/subsystems/invariants.md +0 -91
  576. package/node_modules/better-dsh/dsh-docs/subsystems/invariants.zh.md +0 -91
  577. package/node_modules/better-dsh/dsh-docs/subsystems/jobs.md +0 -290
  578. package/node_modules/better-dsh/dsh-docs/subsystems/jobs.zh.md +0 -290
  579. package/node_modules/better-dsh/dsh-docs/subsystems/llm-streaming.md +0 -1080
  580. package/node_modules/better-dsh/dsh-docs/subsystems/llm-streaming.zh.md +0 -1086
  581. package/node_modules/better-dsh/dsh-docs/subsystems/lsp.md +0 -202
  582. package/node_modules/better-dsh/dsh-docs/subsystems/lsp.zh.md +0 -202
  583. package/node_modules/better-dsh/dsh-docs/subsystems/permission-presets.md +0 -131
  584. package/node_modules/better-dsh/dsh-docs/subsystems/permission-presets.zh.md +0 -131
  585. package/node_modules/better-dsh/dsh-docs/subsystems/persistence.md +0 -395
  586. package/node_modules/better-dsh/dsh-docs/subsystems/persistence.zh.md +0 -395
  587. package/node_modules/better-dsh/dsh-docs/subsystems/plan.md +0 -87
  588. package/node_modules/better-dsh/dsh-docs/subsystems/plan.zh.md +0 -87
  589. package/node_modules/better-dsh/dsh-docs/subsystems/sandbox.md +0 -220
  590. package/node_modules/better-dsh/dsh-docs/subsystems/sandbox.zh.md +0 -220
  591. package/node_modules/better-dsh/dsh-docs/subsystems/schedule.md +0 -192
  592. package/node_modules/better-dsh/dsh-docs/subsystems/schedule.zh.md +0 -192
  593. package/node_modules/better-dsh/dsh-docs/subsystems/scope.md +0 -59
  594. package/node_modules/better-dsh/dsh-docs/subsystems/scope.zh.md +0 -59
  595. package/node_modules/better-dsh/dsh-docs/subsystems/session-projection.md +0 -354
  596. package/node_modules/better-dsh/dsh-docs/subsystems/session-projection.zh.md +0 -354
  597. package/node_modules/better-dsh/dsh-docs/subsystems/session-query.md +0 -509
  598. package/node_modules/better-dsh/dsh-docs/subsystems/session-query.zh.md +0 -509
  599. package/node_modules/better-dsh/dsh-docs/subsystems/session-reference.md +0 -219
  600. package/node_modules/better-dsh/dsh-docs/subsystems/session-reference.zh.md +0 -219
  601. package/node_modules/better-dsh/dsh-docs/subsystems/session-telemetry.md +0 -194
  602. package/node_modules/better-dsh/dsh-docs/subsystems/session-telemetry.zh.md +0 -194
  603. package/node_modules/better-dsh/dsh-docs/subsystems/session-title.md +0 -204
  604. package/node_modules/better-dsh/dsh-docs/subsystems/session-title.zh.md +0 -204
  605. package/node_modules/better-dsh/dsh-docs/subsystems/session.md +0 -1155
  606. package/node_modules/better-dsh/dsh-docs/subsystems/session.zh.md +0 -1159
  607. package/node_modules/better-dsh/dsh-docs/subsystems/settings.md +0 -405
  608. package/node_modules/better-dsh/dsh-docs/subsystems/settings.zh.md +0 -405
  609. package/node_modules/better-dsh/dsh-docs/subsystems/shell.md +0 -303
  610. package/node_modules/better-dsh/dsh-docs/subsystems/shell.zh.md +0 -303
  611. package/node_modules/better-dsh/dsh-docs/subsystems/sidebar-right.md +0 -148
  612. package/node_modules/better-dsh/dsh-docs/subsystems/sidebar-right.zh.md +0 -148
  613. package/node_modules/better-dsh/dsh-docs/subsystems/skills.md +0 -354
  614. package/node_modules/better-dsh/dsh-docs/subsystems/skills.zh.md +0 -354
  615. package/node_modules/better-dsh/dsh-docs/subsystems/slots.md +0 -175
  616. package/node_modules/better-dsh/dsh-docs/subsystems/slots.zh.md +0 -175
  617. package/node_modules/better-dsh/dsh-docs/subsystems/spill.md +0 -117
  618. package/node_modules/better-dsh/dsh-docs/subsystems/spill.zh.md +0 -117
  619. package/node_modules/better-dsh/dsh-docs/subsystems/storage.md +0 -260
  620. package/node_modules/better-dsh/dsh-docs/subsystems/storage.zh.md +0 -260
  621. package/node_modules/better-dsh/dsh-docs/subsystems/subagent.md +0 -766
  622. package/node_modules/better-dsh/dsh-docs/subsystems/subagent.zh.md +0 -770
  623. package/node_modules/better-dsh/dsh-docs/subsystems/subprocess.md +0 -324
  624. package/node_modules/better-dsh/dsh-docs/subsystems/subprocess.zh.md +0 -324
  625. package/node_modules/better-dsh/dsh-docs/subsystems/system-prompt.md +0 -220
  626. package/node_modules/better-dsh/dsh-docs/subsystems/system-prompt.zh.md +0 -220
  627. package/node_modules/better-dsh/dsh-docs/subsystems/terminal.md +0 -184
  628. package/node_modules/better-dsh/dsh-docs/subsystems/terminal.zh.md +0 -184
  629. package/node_modules/better-dsh/dsh-docs/subsystems/todo.md +0 -32
  630. package/node_modules/better-dsh/dsh-docs/subsystems/todo.zh.md +0 -32
  631. package/node_modules/better-dsh/dsh-docs/subsystems/token-meter.md +0 -105
  632. package/node_modules/better-dsh/dsh-docs/subsystems/token-meter.zh.md +0 -105
  633. package/node_modules/better-dsh/dsh-docs/subsystems/tools.md +0 -720
  634. package/node_modules/better-dsh/dsh-docs/subsystems/tools.zh.md +0 -720
  635. package/node_modules/better-dsh/dsh-docs/subsystems/typert.md +0 -343
  636. package/node_modules/better-dsh/dsh-docs/subsystems/typert.zh.md +0 -343
  637. package/node_modules/better-dsh/dsh-docs/subsystems/user-questions.md +0 -178
  638. package/node_modules/better-dsh/dsh-docs/subsystems/user-questions.zh.md +0 -178
  639. package/node_modules/better-dsh/dsh-docs/subsystems/web-client.md +0 -95
  640. package/node_modules/better-dsh/dsh-docs/subsystems/web-client.zh.md +0 -95
  641. package/node_modules/better-dsh/dsh-docs/subsystems/web-server.md +0 -154
  642. package/node_modules/better-dsh/dsh-docs/subsystems/web-server.zh.md +0 -154
  643. package/node_modules/better-dsh/dsh-docs/subsystems/web.md +0 -206
  644. package/node_modules/better-dsh/dsh-docs/subsystems/web.zh.md +0 -206
  645. package/node_modules/better-dsh/dsh-docs/subsystems/webhook.md +0 -70
  646. package/node_modules/better-dsh/dsh-docs/subsystems/webhook.zh.md +0 -70
  647. package/node_modules/better-dsh/dsh-docs/subsystems/workflow.md +0 -278
  648. package/node_modules/better-dsh/dsh-docs/subsystems/workflow.zh.md +0 -278
  649. package/node_modules/better-dsh/dsh-docs/subsystems/workspace.md +0 -321
  650. package/node_modules/better-dsh/dsh-docs/subsystems/workspace.zh.md +0 -321
  651. package/node_modules/better-dsh/dsh-docs/testing.md +0 -54
  652. package/node_modules/better-dsh/dsh-docs/testing.zh.md +0 -54
  653. package/node_modules/better-dsh/dsh-docs/tool-catalog.md +0 -2225
  654. package/node_modules/better-dsh/dsh-docs/tool-catalog.zh.md +0 -2233
  655. package/node_modules/better-dsh/dsh-docs/tool-execution-pipeline.md +0 -62
  656. package/node_modules/better-dsh/dsh-docs/tool-execution-pipeline.zh.md +0 -64
  657. package/node_modules/better-dsh/dsh-docs/user/develop/basic/config.md +0 -106
  658. package/node_modules/better-dsh/dsh-docs/user/develop/basic/config.zh.md +0 -106
  659. package/node_modules/better-dsh/dsh-docs/user/develop/basic/index.md +0 -144
  660. package/node_modules/better-dsh/dsh-docs/user/develop/basic/index.zh.md +0 -144
  661. package/node_modules/better-dsh/dsh-docs/user/develop/basic/publish.md +0 -183
  662. package/node_modules/better-dsh/dsh-docs/user/develop/basic/publish.zh.md +0 -183
  663. package/node_modules/better-dsh/dsh-docs/user/develop/basic/tool.md +0 -52
  664. package/node_modules/better-dsh/dsh-docs/user/develop/basic/tool.zh.md +0 -52
  665. package/node_modules/better-dsh/dsh-docs/user/develop/framework/events.md +0 -143
  666. package/node_modules/better-dsh/dsh-docs/user/develop/framework/events.zh.md +0 -143
  667. package/node_modules/better-dsh/dsh-docs/user/develop/framework/index.md +0 -137
  668. package/node_modules/better-dsh/dsh-docs/user/develop/framework/index.zh.md +0 -137
  669. package/node_modules/better-dsh/dsh-docs/user/develop/framework/service.md +0 -148
  670. package/node_modules/better-dsh/dsh-docs/user/develop/framework/service.zh.md +0 -150
  671. package/node_modules/better-dsh/dsh-docs/user/develop/practice/dynamic-cordis.md +0 -15
  672. package/node_modules/better-dsh/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +0 -15
  673. package/node_modules/better-dsh/dsh-docs/user/develop/practice/index.md +0 -155
  674. package/node_modules/better-dsh/dsh-docs/user/develop/practice/index.zh.md +0 -155
  675. package/node_modules/better-dsh/dsh-docs/user/develop/practice/llm-adapter.md +0 -189
  676. package/node_modules/better-dsh/dsh-docs/user/develop/practice/llm-adapter.zh.md +0 -189
  677. package/node_modules/better-dsh/dsh-docs/user/guide/github-review.md +0 -102
  678. package/node_modules/better-dsh/dsh-docs/user/guide/github-review.zh.md +0 -102
  679. package/node_modules/better-dsh/dsh-docs/user/guide/index.md +0 -30
  680. package/node_modules/better-dsh/dsh-docs/user/guide/index.zh.md +0 -30
  681. package/node_modules/better-dsh/dsh-docs/user/guide/mcp-memory.md +0 -101
  682. package/node_modules/better-dsh/dsh-docs/user/guide/mcp-memory.zh.md +0 -101
  683. package/node_modules/better-dsh/dsh-docs/user/guide/network-proxy.md +0 -85
  684. package/node_modules/better-dsh/dsh-docs/user/guide/network-proxy.zh.md +0 -85
  685. package/node_modules/better-dsh/dsh-docs/user/guide/providers.md +0 -190
  686. package/node_modules/better-dsh/dsh-docs/user/guide/providers.zh.md +0 -190
  687. package/node_modules/better-dsh/dsh-docs/user/guide/python-sdk.md +0 -150
  688. package/node_modules/better-dsh/dsh-docs/user/guide/python-sdk.zh.md +0 -150
  689. package/node_modules/better-dsh/dsh-docs/user/guide/schedule.md +0 -21
  690. package/node_modules/better-dsh/dsh-docs/user/guide/schedule.zh.md +0 -21
  691. package/node_modules/better-dsh/dsh-docs/user/index.md +0 -11
  692. package/node_modules/better-dsh/dsh-docs/user/index.zh.md +0 -11
  693. package/node_modules/better-dsh/dsh-docs/web-styling.md +0 -29
  694. package/node_modules/better-dsh/dsh-docs/web-styling.zh.md +0 -29
  695. package/node_modules/better-dsh/eval-description.md +0 -33
  696. package/node_modules/better-dsh/lib/BrowserWebSocketTransport-D1aFReu_.js +0 -4
  697. package/node_modules/better-dsh/lib/BrowserWebSocketTransport-wm99h94r.js +0 -39
  698. package/node_modules/better-dsh/lib/LaunchOptions-B874eBu2.js +0 -4
  699. package/node_modules/better-dsh/lib/LaunchOptions-kGXcZOe0.js +0 -17
  700. package/node_modules/better-dsh/lib/NodeWebSocketTransport-BRLjmu2R.js +0 -4
  701. package/node_modules/better-dsh/lib/NodeWebSocketTransport-D9ysYGLM.js +0 -3634
  702. package/node_modules/better-dsh/lib/ast-assets/ast-grep.wasm +0 -0
  703. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-bash.wasm +0 -0
  704. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-c.wasm +0 -0
  705. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-cpp.wasm +0 -0
  706. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-css.wasm +0 -0
  707. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-go.wasm +0 -0
  708. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-html.wasm +0 -0
  709. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-javascript.wasm +0 -0
  710. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-json.wasm +0 -0
  711. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-python.wasm +0 -0
  712. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-ruby.wasm +0 -0
  713. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-rust.wasm +0 -0
  714. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-tsx.wasm +0 -0
  715. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-typescript.wasm +0 -0
  716. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-yaml.wasm +0 -0
  717. package/node_modules/better-dsh/lib/ast-assets/tree-sitter.wasm +0 -0
  718. package/node_modules/better-dsh/lib/bidi-BalpKaJc.js +0 -16106
  719. package/node_modules/better-dsh/lib/bundle-delivery.d.ts +0 -20
  720. package/node_modules/better-dsh/lib/bundle-delivery.js +0 -212
  721. package/node_modules/better-dsh/lib/chunk-DQxbwPpZ.js +0 -30
  722. package/node_modules/better-dsh/lib/client/index.js +0 -712
  723. package/node_modules/better-dsh/lib/compaction/index.d.ts +0 -57
  724. package/node_modules/better-dsh/lib/compaction/index.js +0 -145
  725. package/node_modules/better-dsh/lib/failover/index.d.ts +0 -59
  726. package/node_modules/better-dsh/lib/failover/index.js +0 -147
  727. package/node_modules/better-dsh/lib/fs-aware/sandbox-plugin.d.ts +0 -71
  728. package/node_modules/better-dsh/lib/fs-aware/sandbox-plugin.js +0 -249
  729. package/node_modules/better-dsh/lib/hmr.d.ts +0 -32
  730. package/node_modules/better-dsh/lib/hmr.js +0 -49
  731. package/node_modules/better-dsh/lib/index-DTDXUe6m.d.ts +0 -208
  732. package/node_modules/better-dsh/lib/index-browser-CysrjMyM.js +0 -21061
  733. package/node_modules/better-dsh/lib/index.d.ts +0 -705
  734. package/node_modules/better-dsh/lib/index.js +0 -3816
  735. package/node_modules/better-dsh/lib/kernel-bridge.py +0 -172
  736. package/node_modules/better-dsh/lib/kernel-env-D8UOWeji.js +0 -195
  737. package/node_modules/better-dsh/lib/kernel-env.d.ts +0 -80
  738. package/node_modules/better-dsh/lib/kernel-env.js +0 -3
  739. package/node_modules/better-dsh/lib/lib-C8_jXvwA.js +0 -894
  740. package/node_modules/better-dsh/lib/lsp-server-registry-BXvUTBY7.js +0 -3
  741. package/node_modules/better-dsh/lib/lsp-server-registry-CH9WNFFt.js +0 -972
  742. package/node_modules/better-dsh/lib/main-BQeFrBM1.js +0 -3
  743. package/node_modules/better-dsh/lib/main-CupOhMp5.js +0 -1432
  744. package/node_modules/better-dsh/lib/mobile/plugin.d.ts +0 -29
  745. package/node_modules/better-dsh/lib/mobile/plugin.js +0 -54
  746. package/node_modules/better-dsh/lib/native-capture-BEByDXYM.js +0 -68
  747. package/node_modules/better-dsh/lib/puppeteer-core-CSk2PtSm.js +0 -1136
  748. package/node_modules/better-dsh/lib/py-sdk-D7klhpWb.js +0 -178
  749. package/node_modules/better-dsh/lib/py-sdk.d.ts +0 -19
  750. package/node_modules/better-dsh/lib/py-sdk.js +0 -3
  751. package/node_modules/better-dsh/lib/remote/plugin.d.ts +0 -24
  752. package/node_modules/better-dsh/lib/remote/plugin.js +0 -1190
  753. package/node_modules/better-dsh/lib/url-schemes/index.d.ts +0 -88
  754. package/node_modules/better-dsh/lib/url-schemes/index.js +0 -12229
  755. package/node_modules/better-dsh/lib/util-BHL_dfV_.js +0 -2953
  756. package/node_modules/better-dsh/lib/wasm_bg-CNXhHjVg.js +0 -1291
  757. package/node_modules/better-dsh/lib/web-password.d.ts +0 -156
  758. package/node_modules/better-dsh/lib/web-password.js +0 -562
  759. package/node_modules/better-dsh/lib/web-tree-sitter-CPrPD4J2.js +0 -3440
  760. package/node_modules/better-dsh/lib/web-trust-D6gJpUMf.js +0 -393
  761. package/node_modules/better-dsh/lib/web-trust-Dej_RI2B.d.ts +0 -113
  762. package/node_modules/better-dsh/lib/web-trust.d.ts +0 -3
  763. package/node_modules/better-dsh/lib/web-trust.js +0 -4
  764. package/node_modules/better-dsh/lib/webserver.d.ts +0 -10
  765. package/node_modules/better-dsh/lib/webserver.js +0 -19
  766. package/node_modules/better-dsh/lib/welcome-notice.d.ts +0 -18
  767. package/node_modules/better-dsh/lib/welcome-notice.js +0 -59
  768. package/node_modules/better-dsh/lib/wrap-T4I0nfPM.js +0 -750
  769. package/node_modules/better-dsh/package.json +0 -426
  770. package/node_modules/better-dsh/scripts/kernel-provision.mjs +0 -35
  771. package/node_modules/better-dsh/scripts/register-bundle.mjs +0 -80
  772. package/node_modules/better-dsh/url-schemes-instruction.md +0 -22
@@ -1,1190 +0,0 @@
1
- import { t as Schema } from "../lib-C8_jXvwA.js";
2
- import { randomBytes } from "node:crypto";
3
- import { spawn } from "node:child_process";
4
- import { readFile } from "node:fs/promises";
5
- import { join } from "node:path";
6
- import { Context } from "@deepseek-ai/cordis";
7
- import { homedir } from "node:os";
8
- import { defineTool } from "@deepseek-ai/dsh-tools";
9
-
10
- //#region src/remote/oneshot.ts
11
- /** 单流硬收集帽(4M UTF-16 code units,ASCII≈4MB):防失控输出吃内存;模型面截断由上层 tailWindow 负责。 */
12
- const HARD_CAP = 4e6;
13
- /** One-shot:子进程退出码即收尾(spec §五.1),stdout/stderr 分离保留。 */
14
- async function runOneShot(argv, opts = {}) {
15
- const started = Date.now();
16
- const child = spawn(argv[0], argv.slice(1), {
17
- stdio: [
18
- "pipe",
19
- "pipe",
20
- "pipe"
21
- ],
22
- detached: true
23
- });
24
- let stdout = "";
25
- let stderr = "";
26
- let timedOut = false;
27
- child.stdout.setEncoding("utf8").on("data", (d) => {
28
- if (stdout.length < HARD_CAP) stdout = (stdout + d).slice(0, HARD_CAP);
29
- });
30
- child.stderr.setEncoding("utf8").on("data", (d) => {
31
- if (stderr.length < HARD_CAP) stderr = (stderr + d).slice(0, HARD_CAP);
32
- });
33
- child.stdin.on("error", () => {});
34
- if (opts.stdin !== void 0) child.stdin.write(opts.stdin);
35
- child.stdin.end();
36
- let termTimer;
37
- let killTimer;
38
- const clearTimers = () => {
39
- if (termTimer !== void 0) clearTimeout(termTimer);
40
- if (killTimer !== void 0) clearTimeout(killTimer);
41
- };
42
- if (opts.timeoutSec !== void 0) {
43
- const killGroup = (sig) => {
44
- if (child.pid === void 0) {
45
- child.kill(sig);
46
- return;
47
- }
48
- try {
49
- process.kill(-child.pid, sig);
50
- } catch {}
51
- };
52
- termTimer = setTimeout(() => {
53
- timedOut = true;
54
- killGroup("SIGTERM");
55
- killTimer = setTimeout(() => killGroup("SIGKILL"), 2e3);
56
- }, opts.timeoutSec * 1e3);
57
- }
58
- const exit = await new Promise((resolve$1) => {
59
- child.once("close", (code) => resolve$1(code));
60
- child.once("error", (err) => {
61
- stderr += `\n[remote: spawn failed: ${err.message}]`;
62
- resolve$1(null);
63
- });
64
- });
65
- clearTimers();
66
- return {
67
- exit,
68
- timedOut,
69
- stdout,
70
- stderr,
71
- durationMs: Date.now() - started
72
- };
73
- }
74
-
75
- //#endregion
76
- //#region src/remote/nonce-framing.ts
77
- /** 8 字节随机串的 hex 形(spec §五.2:每次下发前生成)。 */
78
- function genNonce(bytes = 8) {
79
- return randomBytes(bytes).toString("hex");
80
- }
81
- /** 命令整行:花括号复合体 + Nonce 收帧尾(spec §五.2 的 printf 逐字落地 + cwd 第三字段)。 */
82
- function wrapPtyCommand(cmd, nonce) {
83
- return `{\n${cmd}\n} ; printf '\\033]133;D;${nonce};%s;%s\\007' "$?" "$PWD"\n`;
84
- }
85
- /** init 整行:哑终端(echo/PS1/PS2/TERM)+ 固定 40×120(Non-Goal ③)+ INIT 帧。 */
86
- function buildInitCommand(nonce) {
87
- return `stty -echo 2>/dev/null ; stty rows 40 cols 120 2>/dev/null ; PS1='' ; PS2='' ; export TERM=dumb ; printf '\\033]133;D;${nonce};0;%s\\007' "$PWD"\n`;
88
- }
89
- const ANSI_RE = /\x1b(?:\][^\x07\x1b]*(?:\x07|\x1b\\)?|\[[0-9;?]*[ -/]*[@-~]|[@-Z\\-_])/g;
90
- function stripAnsi(s) {
91
- return s.replace(ANSI_RE, "");
92
- }
93
- function normalizePtyText(s) {
94
- return stripAnsi(s).replace(/\r\n/g, "\n").replace(/\r/g, "");
95
- }
96
- function tailWindow(text, cap) {
97
- if (text.length <= cap) return { text };
98
- return {
99
- text: `[truncated: showing last ${cap} of ${text.length} chars]\n${text.slice(text.length - cap)}`,
100
- truncated: text.length
101
- };
102
- }
103
- const FRAME_BODY_RE = /^(\d+);([^\x07\x1b]*)(?:\x07|\x1b\\)/;
104
- /**
105
- * 单 nonce、单帧解析器:一轮 dispatch 一个实例。只认 `\x1b]133;D;<nonce>;`,
106
- * 错误 nonce 的静态/伪造 marker 永不匹配,按普通输出流过(再经 ANSI 剥洗)。
107
- * 缓冲尾若可能是 marker 前缀则扣留,flush() 时作为输出放出。
108
- */
109
- function createNonceFrameParser(nonce, events) {
110
- const prefix = `\x1b]133;D;${nonce};`;
111
- let buf = "";
112
- let done = false;
113
- const emit = (raw) => {
114
- const text = normalizePtyText(raw);
115
- if (text.length > 0) events.onOutput?.(text);
116
- };
117
- const holdback = () => {
118
- const max = Math.min(buf.length, prefix.length - 1);
119
- for (let k = max; k > 0; k--) if (buf.endsWith(prefix.slice(0, k))) return k;
120
- return 0;
121
- };
122
- const consume = () => {
123
- if (done) return;
124
- const i = buf.indexOf(prefix);
125
- if (i < 0) {
126
- const keep = holdback();
127
- emit(buf.slice(0, buf.length - keep));
128
- buf = buf.slice(buf.length - keep);
129
- return;
130
- }
131
- emit(buf.slice(0, i));
132
- const rest = buf.slice(i + prefix.length);
133
- const m = FRAME_BODY_RE.exec(rest);
134
- if (m === null) {
135
- buf = buf.slice(i);
136
- return;
137
- }
138
- events.onFrame({
139
- exit: Number(m[1]),
140
- cwd: m[2].length > 0 ? m[2] : null
141
- });
142
- done = true;
143
- buf = "";
144
- };
145
- return {
146
- feed(chunk) {
147
- buf += chunk;
148
- consume();
149
- },
150
- flush() {
151
- if (buf.length > 0) events.onOutput?.(buf);
152
- buf = "";
153
- }
154
- };
155
- }
156
-
157
- //#endregion
158
- //#region src/remote/pty-session.ts
159
- /** spec §五.2 逐字。 */
160
- const RECONNECT_NOTICE = "[remote: session reconnected to fresh shell; cwd reset to default]";
161
- /** 池键 → 模型面名字:剥掉 agent 前缀与内部标记(`t:` → 裸 target;`p:` → `byop:<label>`)。
162
- * 这是**唯一**的 key→名字映射规则,roster 与错误面共用——错误面不得回吐内部键:
163
- * 2026-10-03 实测报告 F1,`E_SESSION_*` 曾把 `session-<uuid>|p:<label>` 整条吐给模型。 */
164
- function displayKey(key) {
165
- const raw = key.includes("|") ? key.slice(key.indexOf("|") + 1) : key;
166
- return raw.startsWith("t:") ? raw.slice(2) : raw.startsWith("p:") ? `byop:${raw.slice(2)}` : raw;
167
- }
168
- const DEFAULT_INIT_TIMEOUT_SEC = 30;
169
- const INTERRUPT_GRACE_MS = 3e3;
170
- /** pty 收集内存安全帽(Ruling P15,与 oneshot HARD_CAP 对齐):模型面只见尾窗,保留尾部。 */
171
- const OUTPUT_HARD_CAP = 4e6;
172
- var PtySession = class {
173
- proc = null;
174
- state = "cold";
175
- startPromise = null;
176
- queue = Promise.resolve();
177
- idleTimer = null;
178
- onChunk = null;
179
- deathWaiters = [];
180
- diag = "";
181
- inFlight = 0;
182
- lastSettleAt = 0;
183
- /** 是否曾成功初始化(ready 过)。决定死亡语义:ready 过 → reconnect(留池);从未 ready → 出池(见 start())。 */
184
- everReady = false;
185
- constructor(opts) {
186
- this.opts = opts;
187
- }
188
- get sessionState() {
189
- return this.state;
190
- }
191
- /** 创建来源(spawn 原文);仅 `byop:<label>` 会话有。 */
192
- get origin() {
193
- return this.opts.origin;
194
- }
195
- /** status 面快照:state + busy(有命令在跑)+ idleMs(上次 settle 至今)+ pid(进程组头,kill 兜底可观测)。 */
196
- get snapshot() {
197
- return {
198
- state: this.state,
199
- busy: this.inFlight > 0,
200
- idleMs: this.lastSettleAt > 0 ? Date.now() - this.lastSettleAt : null,
201
- pid: this.proc?.pid ?? null
202
- };
203
- }
204
- /** 同一会话命令严格串行(FIFO);死亡/冷态先重启。 */
205
- dispatch(cmd, dOpts = {}) {
206
- const attempt = async () => {
207
- const started = Date.now();
208
- const reconnected = this.state === "dead";
209
- if (this.state !== "ready") await this.start();
210
- this.inFlight++;
211
- return await new Promise((resolve$1) => {
212
- const nonce = genNonce();
213
- let output = "";
214
- let interrupted = false;
215
- let settled = false;
216
- let interruptTimer;
217
- let killTimer;
218
- const deathWaiter = () => finish({
219
- output,
220
- exit: null,
221
- cwd: null,
222
- timedOut: interrupted
223
- });
224
- const cleanup = () => {
225
- this.onChunk = null;
226
- this.deathWaiters = this.deathWaiters.filter((w) => w !== deathWaiter);
227
- if (interruptTimer !== void 0) clearTimeout(interruptTimer);
228
- if (killTimer !== void 0) clearTimeout(killTimer);
229
- };
230
- const finish = (r) => {
231
- if (settled) return;
232
- settled = true;
233
- cleanup();
234
- this.inFlight--;
235
- this.lastSettleAt = Date.now();
236
- this.resetIdleTimer();
237
- resolve$1({
238
- ...r,
239
- reconnected,
240
- durationMs: Date.now() - started
241
- });
242
- };
243
- const parser = createNonceFrameParser(nonce, {
244
- onOutput: (t) => {
245
- output += t;
246
- if (output.length > OUTPUT_HARD_CAP) {
247
- output = output.slice(output.length - OUTPUT_HARD_CAP);
248
- if (output.charCodeAt(0) >= 56320 && output.charCodeAt(0) <= 57343) output = output.slice(1);
249
- }
250
- },
251
- onFrame: ({ exit, cwd }) => finish({
252
- output,
253
- exit,
254
- cwd,
255
- timedOut: interrupted
256
- })
257
- });
258
- this.onChunk = (c) => parser.feed(c);
259
- this.write(wrapPtyCommand(cmd, nonce));
260
- if (dOpts.stdin !== void 0) this.write(dOpts.stdin);
261
- interruptTimer = setTimeout(() => {
262
- interrupted = true;
263
- this.write("");
264
- this.write(`printf '\\033]133;D;${nonce};130;%s\\007' "$PWD"\n`);
265
- killTimer = setTimeout(() => {
266
- this.killTree();
267
- this.markDead();
268
- finish({
269
- output,
270
- exit: null,
271
- cwd: null,
272
- timedOut: true
273
- });
274
- }, INTERRUPT_GRACE_MS);
275
- }, dOpts.timeoutSec === void 0 ? 12e4 : dOpts.timeoutSec * 1e3);
276
- this.deathWaiters.push(deathWaiter);
277
- });
278
- };
279
- const run = this.queue.then(attempt, attempt);
280
- this.queue = run.then(() => void 0, () => void 0);
281
- return run;
282
- }
283
- /** TTL / row teardown:尽力 exit,1s 后杀组,出池。 */
284
- async dispose() {
285
- if (this.state === "disposed") return;
286
- this.clearIdleTimer();
287
- this.state = "disposed";
288
- this.startPromise = null;
289
- this.write("exit\n");
290
- setTimeout(() => this.killTree(), 1e3).unref();
291
- this.opts.onDead?.();
292
- }
293
- write(s) {
294
- if (this.proc?.stdin?.writable !== true) return;
295
- try {
296
- this.proc.stdin.write(s);
297
- } catch {}
298
- }
299
- async start() {
300
- if (this.state === "disposed") throw new Error(`[E_SESSION_DISPOSED] remote pty session '${displayKey(this.opts.key)}' was disposed — the pool replaces disposed sessions; this reference is stale`);
301
- if (this.startPromise === null) {
302
- this.state = "starting";
303
- this.startPromise = this.doStart().catch((err) => {
304
- this.startPromise = null;
305
- this.markDead();
306
- if (!this.everReady) this.dispose();
307
- throw err;
308
- });
309
- }
310
- return this.startPromise;
311
- }
312
- async doStart() {
313
- const proc = spawn(this.opts.argv[0], this.opts.argv.slice(1), {
314
- stdio: [
315
- "pipe",
316
- "pipe",
317
- "pipe"
318
- ],
319
- detached: true
320
- });
321
- this.proc = proc;
322
- proc.stdout.setEncoding("utf8");
323
- proc.stdout.on("data", (d) => {
324
- this.onChunk?.(d);
325
- });
326
- proc.stderr.setEncoding("utf8").on("data", (d) => {
327
- this.diag = (this.diag + d).slice(-2e3);
328
- });
329
- proc.once("close", () => this.markDead());
330
- proc.once("error", (err) => {
331
- this.diag = (this.diag + `\n[remote: spawn failed: ${err.message}]`).slice(-2e3);
332
- });
333
- const initTimeoutSec = this.opts.initTimeoutSec ?? DEFAULT_INIT_TIMEOUT_SEC;
334
- const initNonce = genNonce();
335
- await new Promise((resolve$1, reject) => {
336
- const timer = setTimeout(() => {
337
- this.killTree();
338
- reject(/* @__PURE__ */ new Error(`[E_SESSION_START] remote pty session '${displayKey(this.opts.key)}' did not initialize in ${initTimeoutSec}s` + (this.diag.length > 0 ? `; transport stderr tail: ${this.diag}` : "")));
339
- }, initTimeoutSec * 1e3);
340
- const waiter = () => {
341
- clearTimeout(timer);
342
- reject(/* @__PURE__ */ new Error(`[E_SESSION_DIED] remote pty session '${displayKey(this.opts.key)}' died before initializing` + (this.diag.length > 0 ? `; transport stderr tail: ${this.diag}` : "")));
343
- };
344
- this.deathWaiters.push(waiter);
345
- const parser = createNonceFrameParser(initNonce, { onFrame: () => {
346
- clearTimeout(timer);
347
- this.deathWaiters = this.deathWaiters.filter((w) => w !== waiter);
348
- if (this.state === "disposed") {
349
- reject(/* @__PURE__ */ new Error(`[E_SESSION_DISPOSED] remote pty session '${displayKey(this.opts.key)}' disposed during init`));
350
- return;
351
- }
352
- this.everReady = true;
353
- this.state = "ready";
354
- this.resetIdleTimer();
355
- resolve$1();
356
- } });
357
- this.onChunk = (c) => parser.feed(c);
358
- this.write(buildInitCommand(initNonce));
359
- });
360
- }
361
- markDead() {
362
- if (this.state === "disposed") {
363
- const waiters$1 = this.deathWaiters;
364
- this.deathWaiters = [];
365
- for (const w of waiters$1) w();
366
- return;
367
- }
368
- this.state = "dead";
369
- this.startPromise = null;
370
- this.clearIdleTimer();
371
- const waiters = this.deathWaiters;
372
- this.deathWaiters = [];
373
- for (const w of waiters) w();
374
- }
375
- resetIdleTimer() {
376
- this.clearIdleTimer();
377
- this.idleTimer = setTimeout(() => void this.dispose(), this.opts.idleTtlSec * 1e3);
378
- this.idleTimer.unref();
379
- }
380
- clearIdleTimer() {
381
- if (this.idleTimer !== null) {
382
- clearTimeout(this.idleTimer);
383
- this.idleTimer = null;
384
- }
385
- }
386
- killTree() {
387
- const pid = this.proc?.pid;
388
- this.proc = null;
389
- if (pid === void 0) return;
390
- try {
391
- process.kill(-pid, "SIGTERM");
392
- } catch {}
393
- setTimeout(() => {
394
- try {
395
- process.kill(-pid, "SIGKILL");
396
- } catch {}
397
- }, 2e3).unref();
398
- }
399
- };
400
- /** 会话池:键 → 会话。意外死亡的会话留在池内(下次 dispatch 带 reconnect 提示)。 */
401
- var PtyPool = class {
402
- sessions = /* @__PURE__ */ new Map();
403
- constructor(defaults) {
404
- this.defaults = defaults;
405
- }
406
- get size() {
407
- return this.sessions.size;
408
- }
409
- /** status 面:键上的会话快照(无会话 = undefined → "none — dials on first exec")。 */
410
- inspect(key) {
411
- return this.sessions.get(key)?.snapshot;
412
- }
413
- /** roster 面:池内全部会话(key = `${sessionKey}|t:<target>` 或 `${sessionKey}|p:<label>`)。 */
414
- list() {
415
- return [...this.sessions.entries()].map(([key, s]) => ({
416
- key,
417
- snapshot: s.snapshot
418
- }));
419
- }
420
- /** 池内会话本体(driver 判「有/无 + origin」用;status/roster 面走 inspect/list)。
421
- * disposed 视同出池 —— 与 getOrCreate 的替换条件同源,两处不得漂移。 */
422
- get(key) {
423
- const s = this.sessions.get(key);
424
- return s === void 0 || s.sessionState === "disposed" ? void 0 : s;
425
- }
426
- getOrCreate(key, argv, origin) {
427
- let s = this.sessions.get(key);
428
- if (s === void 0 || s.sessionState === "disposed") {
429
- s = new PtySession({
430
- key,
431
- argv,
432
- origin,
433
- ...this.defaults,
434
- onDead: () => this.sessions.delete(key)
435
- });
436
- this.sessions.set(key, s);
437
- }
438
- return s;
439
- }
440
- async disposeAll() {
441
- await Promise.all([...this.sessions.values()].map((s) => s.dispose()));
442
- this.sessions.clear();
443
- }
444
- };
445
-
446
- //#endregion
447
- //#region src/remote/target.ts
448
- var TargetFormatError = class extends Error {
449
- code = "E_TARGET_FORMAT";
450
- constructor(message) {
451
- super(message);
452
- this.name = "TargetFormatError";
453
- }
454
- };
455
- /** 显式协议选择器(Ruling P16):可扩展新协议——加一个词即一条新传输腿。 */
456
- const PREFIX_RE = /^(docker|incus|ssh):(.+)$/;
457
- /** spec §二.2 智能路由(Ruling P18):显式选择器 > ssh 缺省;无别名表面——容器一律显式前缀,发现走 on-demand probe。 */
458
- function resolveTarget(target) {
459
- const raw = target.trim();
460
- if (raw.length === 0) throw new TargetFormatError("[E_TARGET_FORMAT] remote: empty target");
461
- const direct = PREFIX_RE.exec(raw);
462
- if (direct !== null) {
463
- if (direct[1] === "ssh") return {
464
- kind: "ssh",
465
- host: direct[2]
466
- };
467
- return {
468
- kind: direct[1],
469
- container: direct[2]
470
- };
471
- }
472
- return {
473
- kind: "ssh",
474
- host: raw
475
- };
476
- }
477
-
478
- //#endregion
479
- //#region src/remote/status.ts
480
- function oneLine$1(s) {
481
- return s.trim().split(/\r?\n/).filter(Boolean).at(-1) ?? "";
482
- }
483
- /**
484
- * On-demand 探测(Ruling 17):调用瞬间拨一次,双重超时(ssh ConnectTimeout
485
- * 5s + 外层 hard 10s),结果即当时事实。绝不缓存、绝不在 boot 时扫。
486
- */
487
- async function probeTarget(plan, opts = {}) {
488
- const ct = opts.connectTimeoutSec ?? 5;
489
- const hard = opts.hardTimeoutSec ?? 10;
490
- const runner = opts.runner ?? runOneShot;
491
- const started = Date.now();
492
- const r = await runner(plan.kind === "ssh" ? [
493
- "ssh",
494
- "-o",
495
- "BatchMode=yes",
496
- "-o",
497
- `ConnectTimeout=${ct}`,
498
- "-T",
499
- "--",
500
- plan.host,
501
- "true"
502
- ] : plan.kind === "docker" ? [
503
- "docker",
504
- "inspect",
505
- "--format",
506
- "{{.State.Status}}",
507
- plan.container
508
- ] : [
509
- "incus",
510
- "list",
511
- plan.container,
512
- "--format",
513
- "csv",
514
- "--columns",
515
- "ns"
516
- ], { timeoutSec: hard });
517
- if (plan.kind === "ssh") {
518
- if (r.exit === 0 && !r.timedOut) return {
519
- state: "reachable",
520
- rttMs: Date.now() - started
521
- };
522
- return {
523
- state: "unreachable",
524
- detail: r.timedOut ? `probe timed out after ${hard}s` : oneLine$1(r.stderr) || `ssh exited ${r.exit}`
525
- };
526
- }
527
- if (plan.kind === "docker") {
528
- if (r.exit === 0 && !r.timedOut) return {
529
- state: "container",
530
- status: r.stdout.trim()
531
- };
532
- return {
533
- state: "error",
534
- detail: oneLine$1(r.stderr) || `docker inspect exited ${r.exit}`
535
- };
536
- }
537
- const row = r.stdout.trim().split(/\r?\n/).find((l) => l.split(",")[0] === plan.container);
538
- if (r.exit === 0 && !r.timedOut && row !== void 0) return {
539
- state: "container",
540
- status: row.split(",")[1]?.trim() ?? "unknown"
541
- };
542
- if (r.exit === 0 && !r.timedOut) return {
543
- state: "error",
544
- detail: `incus list has no container named '${plan.container}'`
545
- };
546
- return {
547
- state: "error",
548
- detail: oneLine$1(r.stderr) || `incus exited ${r.exit}`
549
- };
550
- }
551
- function renderProbe(p) {
552
- switch (p.state) {
553
- case "reachable": return `probe: reachable in ${p.rttMs}ms (just now, on demand)`;
554
- case "unreachable": return `probe: unreachable — ${p.detail}`;
555
- case "error": return `probe: error — ${p.detail}`;
556
- case "container": return `probe: container ${p.status} (just now, on demand)`;
557
- }
558
- }
559
- /**
560
- * 唯一偏离 brief 处:brief 的 renderSession 测试以不含 `pid` 的三字段字面量直呼本函数,而
561
- * SessionSnapshot.pid 为必填 → 按测试意图(会话层词汇只由 state/busy/idleMs 决定)收窄为
562
- * 结构子集;传完整 SessionSnapshot 仍然成立,运行时语义零变化。
563
- */
564
- function renderSession(s) {
565
- if (s === void 0 || s.state === "cold" || s.state === "starting" || s.state === "disposed") return "session: none — dials on first exec";
566
- if (s.state === "dead") return "session: died — next exec cold-starts a fresh shell";
567
- if (s.busy) return "session: busy (a command is running)";
568
- return `session: idle ${Math.round((s.idleMs ?? 0) / 1e3)}s (connected)`;
569
- }
570
- /** PTY 会话状态行(BYO-PTY 面):无会话 = 这个 label 下没有活会话,且**不会自建**——
571
- * 与 transport target 的 "dials on first exec" 是两回事,故不复用那句。 */
572
- function renderPtySession(s) {
573
- return s === void 0 ? "session: none — no live PTY under this label" : renderSession(s);
574
- }
575
-
576
- //#endregion
577
- //#region src/remote/ssh-config.ts
578
- /** Per-entry Host-line pattern lists — module-private, so the public entry shape stays exactly as declared. */
579
- const PATTERNS = /* @__PURE__ */ new WeakMap();
580
- /** `~` / `~/` prefix → real home directory (IdentityFile only). */
581
- function expandHome(path$1) {
582
- if (path$1 === "~") return homedir();
583
- if (path$1.startsWith("~/")) return homedir() + path$1.slice(1);
584
- return path$1;
585
- }
586
- function parseSshConfig(text) {
587
- const entries = [];
588
- const skipped = [];
589
- const skippedSeen = /* @__PURE__ */ new Set();
590
- let current;
591
- const skip = (key) => {
592
- const lower = key.toLowerCase();
593
- if (!skippedSeen.has(lower)) {
594
- skippedSeen.add(lower);
595
- skipped.push(key);
596
- }
597
- };
598
- for (const rawLine of text.split(/\r?\n/)) {
599
- const line = rawLine.trim();
600
- if (line === "" || line.startsWith("#")) continue;
601
- const match = /^([^\s=]+)\s*(?:=\s*)?(.*)$/.exec(line);
602
- if (match === null) continue;
603
- const key = match[1];
604
- const value = (match[2] ?? "").trim();
605
- if (key.toLowerCase() === "host") {
606
- const patterns = value.split(/[\s,]+/).filter((p) => p !== "");
607
- if (patterns.length === 0) {
608
- skip(key);
609
- continue;
610
- }
611
- current = {
612
- host: patterns[0],
613
- identityFiles: []
614
- };
615
- PATTERNS.set(current, patterns);
616
- entries.push(current);
617
- continue;
618
- }
619
- switch (key.toLowerCase()) {
620
- case "hostname":
621
- if (current !== void 0 && current.hostName === void 0) current.hostName = value;
622
- break;
623
- case "user":
624
- if (current !== void 0 && current.user === void 0) current.user = value;
625
- break;
626
- case "port": {
627
- if (current === void 0) break;
628
- const port = /^\d+$/.test(value) ? Number.parseInt(value, 10) : void 0;
629
- if (current.port === void 0) if (port === void 0) skip(key);
630
- else current.port = port;
631
- break;
632
- }
633
- case "identityfile":
634
- if (current !== void 0) current.identityFiles.push(expandHome(value));
635
- break;
636
- case "proxyjump":
637
- if (current !== void 0 && current.proxyJump === void 0) current.proxyJump = value;
638
- break;
639
- default: skip(key);
640
- }
641
- }
642
- return {
643
- entries,
644
- skipped
645
- };
646
- }
647
-
648
- //#endregion
649
- //#region src/remote/roster.ts
650
- function oneLine(s) {
651
- return s.trim().split(/\r?\n/).filter(Boolean).at(-1) ?? "";
652
- }
653
- /** ssh config 里的字面别名(无通配、非否定的首个模式);通配块是默认值来源不是目标。 */
654
- function literalHosts(text) {
655
- const { entries } = parseSshConfig(text);
656
- const hosts = [];
657
- let wildcardBlocks = 0;
658
- for (const entry of entries) if (/[*?]/.test(entry.host) || entry.host.startsWith("!")) wildcardBlocks++;
659
- else hosts.push(entry.host);
660
- return {
661
- hosts,
662
- wildcardBlocks
663
- };
664
- }
665
- /**
666
- * Build the roster text. Sections render independently; a failing section
667
- * renders its native error (honest vocabulary: never invent, never hide).
668
- */
669
- async function renderRoster(sessions, opts = {}) {
670
- const runner = opts.runner ?? runOneShot;
671
- const readSshConfig = opts.readSshConfig ?? (async () => await readFile(join(homedir(), ".ssh", "config"), "utf8"));
672
- const hard = opts.hardTimeoutSec ?? 10;
673
- const lines = [];
674
- try {
675
- const { hosts, wildcardBlocks } = literalHosts(await readSshConfig());
676
- lines.push(`ssh hosts (~/.ssh/config): ${hosts.length > 0 ? hosts.join(", ") : "(none)"}${wildcardBlocks > 0 ? ` (+${wildcardBlocks} wildcard default blocks, not listed)` : ""}`);
677
- } catch (error) {
678
- lines.push(`ssh hosts: no readable ~/.ssh/config (${error instanceof Error ? error.message : String(error)})`);
679
- }
680
- const docker = await runner([
681
- "docker",
682
- "ps",
683
- "-a",
684
- "--format",
685
- "{{.Names}} {{.State}}"
686
- ], { timeoutSec: hard });
687
- if (docker.exit === 0) {
688
- const rows = docker.stdout.trim().split(/\r?\n/).filter(Boolean).map((l) => {
689
- const [name$1, state] = l.split(" ");
690
- return `${name$1}${state !== void 0 && state !== "" ? ` (${state})` : ""}`;
691
- });
692
- lines.push(`docker containers: ${rows.length > 0 ? rows.join(", ") : "(none)"}`);
693
- } else lines.push(`docker containers: unavailable — ${docker.timedOut ? `scan timed out after ${hard}s` : oneLine(docker.stderr) || `docker exited ${docker.exit}`}`);
694
- const incus = await runner([
695
- "incus",
696
- "list",
697
- "--format",
698
- "csv",
699
- "--columns",
700
- "ns"
701
- ], { timeoutSec: hard });
702
- if (incus.exit === 0) {
703
- const rows = incus.stdout.trim().split(/\r?\n/).filter(Boolean).map((l) => {
704
- const [name$1, state] = l.split(",");
705
- return `${name$1}${state !== void 0 && state !== "" ? ` (${state.trim()})` : ""}`;
706
- });
707
- lines.push(`incus containers: ${rows.length > 0 ? rows.join(", ") : "(none)"}`);
708
- } else lines.push(`incus containers: unavailable — ${incus.timedOut ? `scan timed out after ${hard}s` : oneLine(incus.stderr) || `incus exited ${incus.exit}`}`);
709
- lines.push(sessions.length > 0 ? `live pty sessions: ${sessions.map((s) => `${s.target} [${s.state}${s.idleSec !== null ? `, idle ${s.idleSec}s` : ""}]`).join(", ")}` : "live pty sessions: none");
710
- return lines.join("\n");
711
- }
712
-
713
- //#endregion
714
- //#region src/remote/transports.ts
715
- /** POSIX 单引号机械转义(唯一一层转义,spec §三"一层机械转义")。 */
716
- function shQuote(s) {
717
- return `'${s.replaceAll("'", `'\\''`)}'`;
718
- }
719
- /** One-shot(§五.1):不分配 tty,收尾 = 子进程退出码,零字符串扫描。 */
720
- function buildOneShotArgv(plan, cmd) {
721
- switch (plan.kind) {
722
- case "ssh": return [
723
- "ssh",
724
- "-o",
725
- "BatchMode=yes",
726
- "-T",
727
- "--",
728
- plan.host,
729
- `bash -lc ${shQuote(cmd)}`
730
- ];
731
- case "docker": return [
732
- "docker",
733
- "exec",
734
- "-i",
735
- "--",
736
- plan.container,
737
- "bash",
738
- "-lc",
739
- cmd
740
- ];
741
- case "incus": return [
742
- "incus",
743
- "exec",
744
- "--force-noninteractive",
745
- plan.container,
746
- "--",
747
- "bash",
748
- "-lc",
749
- cmd
750
- ];
751
- }
752
- }
753
- /** Persistent pty(Ruling 2):ssh/incus 走宿主管道,docker 经 script(1) 托管宿主 PTY。 */
754
- function buildPtyArgv(plan) {
755
- switch (plan.kind) {
756
- case "ssh": return [
757
- "ssh",
758
- "-tt",
759
- "-o",
760
- "BatchMode=yes",
761
- "--",
762
- plan.host,
763
- "bash"
764
- ];
765
- case "docker": return [
766
- "script",
767
- "-qfec",
768
- `stty -echo 2>/dev/null ; exec docker exec -it -- ${shQuote(plan.container)} bash`,
769
- "/dev/null"
770
- ];
771
- case "incus": return [
772
- "incus",
773
- "exec",
774
- "--force-interactive",
775
- plan.container,
776
- "--",
777
- "bash"
778
- ];
779
- }
780
- }
781
- /** BYO-PTY(§三 spawn):工具只提供 PTY 托管 + Nonce 注入 + 收帧。 */
782
- function buildSpawnArgv(spawnCommand) {
783
- return [
784
- "script",
785
- "-qfec",
786
- `stty -echo 2>/dev/null ; exec ${spawnCommand}`,
787
- "/dev/null"
788
- ];
789
- }
790
-
791
- //#endregion
792
- //#region src/remote/driver.ts
793
- /** PTY label 字符集:只禁空白 / `:` / 控制字符(roster 一行一 label,带换行的 label 渲染即烂)。 */
794
- const PTY_LABEL_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
795
- /** 双轨调度器(spec §七 Phase 2):参数校验 → 路由 → oneshot 子进程 / pty 会话池。 */
796
- var RemoteDriver = class {
797
- pool;
798
- constructor(opts = {}) {
799
- this.opts = opts;
800
- this.pool = new PtyPool({ idleTtlSec: opts.idleTtlSec ?? 600 });
801
- }
802
- async call(params, callCtx = {}) {
803
- const started = Date.now();
804
- try {
805
- const routing = this.route(params);
806
- const result = await this.execute(params, routing, callCtx);
807
- this.audit({
808
- target: routing.display,
809
- cmd: params.cmd,
810
- cwd: result.cwd ?? void 0,
811
- exit: result.exit,
812
- durationMs: Date.now() - started
813
- });
814
- return result;
815
- } catch (error) {
816
- this.audit({
817
- target: params.target ?? params.spawn ?? "?",
818
- cmd: params.cmd,
819
- error: error instanceof Error ? error.message : String(error),
820
- durationMs: Date.now() - started
821
- });
822
- throw error;
823
- }
824
- }
825
- /** Ruling 16/17:on-demand 探测 + 会话层,两行如实陈述。 */
826
- /**
827
- * Ruling P20 + PTY 候选表末位:裸名按名匹配——ssh config 字面 host → docker → incus(本地廉价扫描,
828
- * 撞名 ssh 优先),三段全不中再看池内活 PTY label,最后才是默认 ssh(交原生错误)。
829
- * 位置即优先级:现有三段一位不挪。选择器前缀的 target 不经此路径。
830
- */
831
- async resolveBareName(name$1, sessionKey, usePtyLabels = true) {
832
- const runner = this.opts.rosterRunner ?? runOneShot;
833
- const readCfg = this.opts.sshConfigReader ?? (async () => await readFile(join(homedir(), ".ssh", "config"), "utf8"));
834
- try {
835
- const { hosts } = literalHosts(await readCfg());
836
- if (hosts.some((h) => h.toLowerCase() === name$1.toLowerCase())) return {
837
- kind: "ssh",
838
- host: name$1
839
- };
840
- } catch {}
841
- const docker = await runner([
842
- "docker",
843
- "ps",
844
- "-a",
845
- "--format",
846
- "{{.Names}}"
847
- ], { timeoutSec: 10 });
848
- if (docker.exit === 0 && docker.stdout.trim().split(/\r?\n/).some((n) => n.trim().toLowerCase() === name$1.toLowerCase())) return {
849
- kind: "docker",
850
- container: name$1
851
- };
852
- const incus = await runner([
853
- "incus",
854
- "list",
855
- "--format",
856
- "csv",
857
- "--columns",
858
- "n"
859
- ], { timeoutSec: 10 });
860
- if (incus.exit === 0 && incus.stdout.trim().split(/\r?\n/).some((n) => n.split(",")[0]?.trim().toLowerCase() === name$1.toLowerCase())) return {
861
- kind: "incus",
862
- container: name$1
863
- };
864
- if (usePtyLabels && this.pool.get(`${sessionKey}|p:${name$1}`) !== void 0) return {
865
- kind: "pty",
866
- label: name$1
867
- };
868
- return {
869
- kind: "ssh",
870
- host: name$1
871
- };
872
- }
873
- /** Ruling P19:roster = 注意力入口——本地廉价扫描(ssh config/docker ps/incus list + 池内活会话),零拨号。
874
- * 活的 pty 会话按调用方 agent session 过滤(2026-10-03 裁决):ssh/docker/incus 是**公共静态配置**,
875
- * 而活会话是**操作环境**——复用别的 agent 留下的 shell 等于继承未知状态,且两个 agent 各开一条线
876
- * 的代价可忽略。BYO-PTY 天然是活的,于是自然落进这个 scope,无需另立规则。 */
877
- async roster(callCtx = {}) {
878
- const prefix = `${callCtx.sessionKey ?? "no-session"}|`;
879
- return await renderRoster(this.pool.list().filter(({ key }) => key.startsWith(prefix)).map(({ key, snapshot }) => ({
880
- target: displayKey(key),
881
- state: snapshot.state,
882
- idleSec: snapshot.idleMs !== null ? Math.round(snapshot.idleMs / 1e3) : null
883
- })), this.opts.rosterRunner !== void 0 ? { runner: this.opts.rosterRunner } : {});
884
- }
885
- async status(target, callCtx = {}) {
886
- const sessionKey = callCtx.sessionKey ?? "no-session";
887
- const label = target.startsWith("byop:") ? target.slice(5) : void 0;
888
- if (label !== void 0) return this.ptyStatus(target, label, sessionKey);
889
- const resolved = /^(docker|incus|ssh):/.test(target) ? resolveTarget(target) : await this.resolveBareName(target, sessionKey);
890
- if (resolved.kind === "pty") return this.ptyStatus(`byop:${resolved.label}`, resolved.label, sessionKey);
891
- return [
892
- `${target} — ${resolved.kind === "ssh" ? "ssh host" : `${resolved.kind} container`}`,
893
- renderProbe(await probeTarget(resolved, { runner: this.opts.probeRunner })),
894
- renderSession(this.pool.inspect(`${sessionKey}|t:${target}`))
895
- ].join("\n");
896
- }
897
- /** PTY 状态行:纯池内读取,零拨号(label 从来不是可拨目标)。 */
898
- ptyStatus(display, label, sessionKey) {
899
- return [`${display} — BYO pty session`, renderPtySession(this.pool.inspect(`${sessionKey}|p:${label}`))].join("\n");
900
- }
901
- /** Ruling 13:审计 best-effort——钩子抛错不得影响命令路径(成功被毒化成失败+双重审计)。 */
902
- audit(r) {
903
- try {
904
- this.opts.onAudit?.(r);
905
- } catch {}
906
- }
907
- route(params) {
908
- const hasTarget = params.target !== void 0 && params.target.length > 0;
909
- const hasSpawn = params.spawn !== void 0 && params.spawn.length > 0;
910
- if (!hasTarget && !hasSpawn) throw new Error("[E_PARAMS] remote: target is required (e.g. { target: \"dev4\", cmd: \"git status\" }); spawn is a modifier of a \"byop:<label>\" target and cannot stand alone");
911
- if (params.timeout !== void 0 && (!Number.isFinite(params.timeout) || params.timeout <= 0)) throw new Error(`[E_BAD_TIMEOUT] remote: timeout must be a positive number of seconds (got ${JSON.stringify(params.timeout)})`);
912
- if (params.stdin !== void 0 && (params.cmd === void 0 || params.cmd.length === 0)) throw new Error("[E_STDIN_WITHOUT_CMD] remote: stdin requires cmd");
913
- if (hasTarget && params.target.startsWith("byop:")) {
914
- const label = params.target.slice(5);
915
- if (!PTY_LABEL_RE.test(label)) throw new Error(`[E_BAD_LABEL] remote: PTY label must match ${PTY_LABEL_RE.source} (got ${JSON.stringify(label)}) — e.g. target: "byop:dev3"`);
916
- if (params.mode !== void 0 && params.mode !== "pty") throw new Error(`[E_BAD_MODE] remote: "${params.target}" is a PTY selector — mode is locked to 'pty'`);
917
- return {
918
- mode: "pty",
919
- display: params.target,
920
- pty: {
921
- label,
922
- ...hasSpawn ? { spawn: params.spawn } : {}
923
- }
924
- };
925
- }
926
- if (hasSpawn) throw new Error("[E_PARAMS] remote: spawn requires a \"byop:<label>\" target — e.g. { target: \"byop:dev3\", spawn: \"ssh dev3\", cmd: \"…\" }; it is not a standalone entry point");
927
- const mode = params.mode ?? "oneshot";
928
- const direct = /^(docker|incus|ssh):/.test(params.target);
929
- return {
930
- mode,
931
- display: params.target,
932
- ...direct ? { plan: resolveTarget(params.target) } : { bare: params.target }
933
- };
934
- }
935
- async execute(params, routing, callCtx) {
936
- const sessionKey = callCtx.sessionKey ?? "no-session";
937
- if (routing.bare !== void 0) {
938
- const resolved = await this.resolveBareName(routing.bare, sessionKey, params.mode !== "oneshot");
939
- if (resolved.kind === "pty") {
940
- routing.pty = { label: resolved.label };
941
- routing.mode = "pty";
942
- routing.display = `byop:${resolved.label}`;
943
- } else routing.plan = resolved;
944
- }
945
- const timeoutSec = params.timeout ?? this.opts.execTimeoutSec ?? 120;
946
- const cap = this.opts.maxOutputChars ?? 3e4;
947
- if (routing.pty !== void 0) return await this.ptyCall(routing.pty, params, sessionKey, timeoutSec, cap);
948
- if (routing.mode === "oneshot") {
949
- const r$1 = await runOneShot((this.opts.oneshotArgvFor ?? buildOneShotArgv)(routing.plan, params.cmd), {
950
- stdin: params.stdin,
951
- timeoutSec
952
- });
953
- const out$1 = tailWindow(r$1.stdout, cap);
954
- const err = r$1.stderr.length > 0 ? tailWindow(r$1.stderr, cap) : void 0;
955
- return {
956
- mode: "oneshot",
957
- target: routing.display,
958
- exit: r$1.exit,
959
- cwd: null,
960
- timedOut: r$1.timedOut,
961
- reconnected: false,
962
- stdout: out$1.text,
963
- ...err !== void 0 ? { stderr: err.text } : {},
964
- durationMs: r$1.durationMs,
965
- ...out$1.truncated !== void 0 ? { truncated: out$1.truncated } : {}
966
- };
967
- }
968
- const argv = (this.opts.ptyArgvFor ?? buildPtyArgv)(routing.plan);
969
- const key = `${sessionKey}|t:${routing.display}`;
970
- const r = await this.pool.getOrCreate(key, argv).dispatch(params.cmd, {
971
- stdin: params.stdin,
972
- timeoutSec
973
- });
974
- const out = tailWindow(r.output, cap);
975
- return {
976
- mode: "pty",
977
- target: routing.display,
978
- exit: r.exit,
979
- cwd: r.cwd,
980
- timedOut: r.timedOut,
981
- reconnected: r.reconnected,
982
- stdout: out.text,
983
- durationMs: r.durationMs,
984
- ...out.truncated !== void 0 ? { truncated: out.truncated } : {}
985
- };
986
- }
987
- /** BYO-PTY 通道:label 即池键(agent 前缀之外),spawn 只在 label 尚不存在时被接受。
988
- * 三分支 —— 建(无会话)/ 复用(无 spawn,或有 spawn 且与创建来源相同)/ **冲突(有 spawn 且来源不同:不执行任何命令)**。 */
989
- async ptyCall(pty, params, sessionKey, timeoutSec, cap) {
990
- const display = `byop:${pty.label}`;
991
- const key = `${sessionKey}|p:${pty.label}`;
992
- const existing = this.pool.get(key);
993
- let session = existing;
994
- let notice;
995
- if (existing !== void 0 && pty.spawn !== void 0 && existing.origin !== pty.spawn) throw new Error(`[E_LABEL_CONFLICT] remote: ${display} already exists and was created by a different command — nothing was run.\n existing spawn: ${JSON.stringify(existing.origin)}\n given spawn: ${JSON.stringify(pty.spawn)}\n To reuse it: { target: "${display}", cmd: "…" } (drop spawn — spawn only ever creates)\n To start new: pick another label, e.g. { target: "byop:${pty.label}2", spawn: ${JSON.stringify(pty.spawn)}, cmd: "…" }`);
996
- if (session === void 0) {
997
- if (pty.spawn === void 0) throw new Error(`[E_NO_SESSION] remote: no live PTY under ${display} — one exists only after a call that supplies spawn, and it is reaped after the idle TTL (600s).\n Create it: { target: "${display}", spawn: "…", cmd: "…" } (the spawn command is not retained; the label is yours to choose)`);
998
- session = this.pool.getOrCreate(key, (this.opts.spawnArgvFor ?? buildSpawnArgv)(pty.spawn), pty.spawn);
999
- } else if (pty.spawn !== void 0) notice = `[remote: ${display} already runs that exact command and is persistent — reuse it with { target: "${display}", cmd: "…" }; spawn is only needed to create.]`;
1000
- const r = await session.dispatch(params.cmd, {
1001
- stdin: params.stdin,
1002
- timeoutSec
1003
- });
1004
- const out = tailWindow(r.output, cap);
1005
- return {
1006
- mode: "pty",
1007
- target: display,
1008
- session: display,
1009
- exit: r.exit,
1010
- cwd: r.cwd,
1011
- timedOut: r.timedOut,
1012
- reconnected: r.reconnected,
1013
- stdout: out.text,
1014
- ...notice !== void 0 ? { notice } : {},
1015
- durationMs: r.durationMs,
1016
- ...out.truncated !== void 0 ? { truncated: out.truncated } : {}
1017
- };
1018
- }
1019
- async dispose() {
1020
- await this.pool.disposeAll();
1021
- }
1022
- };
1023
-
1024
- //#endregion
1025
- //#region src/remote/tool.ts
1026
- const NO_SESSION_KEY = "remote:no-session";
1027
- function createRemoteTool(driver, opts = {}) {
1028
- const getSessionKey = opts.getSessionKey ?? ((exec) => exec.agent?.id ?? NO_SESSION_KEY);
1029
- return defineTool({
1030
- name: "remote",
1031
- description: "Remote execution over three transports (ssh / docker / incus) plus named persistent BYO shells. Pick the call shape first:\n {} → roster: known target names from a local scan (no dialing)\n {target} → on-demand status probe of that one target (for \"byop:<label>\": its session state)\n {target, cmd} → run cmd — oneshot by default; mode \"pty\" for a persistent shell\n {target:\"byop:<label>\", spawn, cmd} → BYO-PTY: create the persistent shell you named <label>\n {target:\"byop:<label>\", cmd} → reuse that shell (spawn is only needed to create)\nBYO-PTY labels are yours to choose, and the label alone is the whole reuse mechanism: \"byop:dev3\" is created once with `spawn` (the command that starts an interactive shell, e.g. \"docker exec -it img bash\"), and from then on you address it as {target:\"byop:dev3\", cmd} with no spawn. Repeating the same spawn for a live label is reused and the result tells you to drop it; repeating a *different* spawn is refused with [E_LABEL_CONFLICT] and nothing runs — reuse the label, or pick a new one. A label that was never created, or was reaped after the idle TTL, answers [E_NO_SESSION]: spawn is not retained, so pass it again to re-create. A spawn that fails to come up (e.g. a bad host) leaves nothing behind either — the label stays free, so just retry with a corrected spawn. Bare names match in order — ssh config, then docker, then incus, then a live pty label (on a collision the earlier source wins; a name matching none of them goes to ssh and its native error surfaces). \"byop:<label>\" / \"docker:<name>\" / \"incus:<name>\" / \"ssh:<name>\" force a channel when you must be explicit. oneshot: stateless `bash -lc`, stdout/stderr separate, the exit code is the remote process's own. pty: one persistent shell per (agent, target) — cwd/env survive across calls, streams merge, Ctrl-C interrupts without killing the session, idle sessions are reaped after 600s (a reconnect notice precedes the fresh shell). Output is tail-truncated at ~30k chars with a \"[truncated: …]\" header — redirect bulk output to a file yourself. `stdin` feeds the command; `timeout` (seconds) interrupts then kills. Native transport errors pass through verbatim — self-correct from them. Background processes must redirect their own output (`cmd > log 2>&1 &`). Status probes report \"reachable\"/\"unreachable — <native error>\" or the factual container state plus the session layer (\"idle Ns\" / \"busy\" / \"none — dials on first exec\"), always probed at call time.",
1032
- parameters: {
1033
- target: {
1034
- type: "string",
1035
- description: "Single entry point. Bare name / IP / domain matches in order: ssh config, then docker, then incus, then a live pty label (a collision goes to the earlier source). \"byop:<label>\" / \"docker:<name>\" / \"incus:<name>\" / \"ssh:<name>\" force a channel. For \"byop:<label>\", pass spawn the first time to create it and omit spawn afterwards to reuse it. Omit cmd → status probe."
1036
- },
1037
- spawn: {
1038
- type: "string",
1039
- description: "Only valid together with a \"byop:<label>\" target, and required the first time that label is created: the full command that starts an interactive shell (e.g. \"docker exec -it img bash\"). It is not retained — pass it again if the label answers [E_NO_SESSION]. Requires cmd; mode is locked to pty; nested hops are dumb pipes (only the innermost bash frames)."
1040
- },
1041
- cmd: {
1042
- type: "string",
1043
- description: "One raw shell string parsed by the remote bash (multi-line = one compound; exit = last command's). Omit with target → status probe; omit everything → roster."
1044
- },
1045
- mode: {
1046
- type: "string",
1047
- enum: ["oneshot", "pty"],
1048
- description: "'oneshot' (default): stateless `bash -lc`, stdout/stderr separate, exit code is the process's own. 'pty': one persistent shell per (agent, target), cwd/env survive, streams merge, idle TTL 600s. A \"byop:<label>\" target locks mode to 'pty'."
1049
- },
1050
- stdin: {
1051
- type: "string",
1052
- description: "Input fed to the command. oneshot: piped to stdin. pty: written right after the command line (REPL-style) — only helps commands that read stdin there. Requires cmd."
1053
- },
1054
- timeout: {
1055
- type: "number",
1056
- description: "Per-command timeout in seconds (default 120, row-configurable). pty: Ctrl-C first, then kill; an interrupt does not kill the session."
1057
- }
1058
- },
1059
- output: {
1060
- schema: {
1061
- type: "object",
1062
- additionalProperties: false,
1063
- properties: {
1064
- kind: {
1065
- type: "string",
1066
- required: true,
1067
- enum: [
1068
- "exec",
1069
- "status",
1070
- "roster"
1071
- ]
1072
- },
1073
- text: {
1074
- type: "string",
1075
- required: true
1076
- },
1077
- exit: { oneOf: [{ type: "integer" }, { type: "null" }] },
1078
- durationMs: { type: "integer" },
1079
- cwd: { type: "string" },
1080
- stderr: { type: "string" },
1081
- timedOut: { type: "boolean" },
1082
- reconnected: { type: "boolean" },
1083
- truncated: { type: "integer" },
1084
- session: { type: "string" },
1085
- notice: { type: "string" }
1086
- }
1087
- },
1088
- render: (_args, value) => [{
1089
- type: "text",
1090
- text: renderValue(value)
1091
- }]
1092
- },
1093
- async execute(args, exec) {
1094
- const hasCmd = typeof args.cmd === "string" && args.cmd.length > 0;
1095
- const hasTarget = typeof args.target === "string" && args.target.length > 0;
1096
- const hasSpawn = typeof args.spawn === "string" && args.spawn.length > 0;
1097
- if (args.mode !== void 0 && args.mode !== "oneshot" && args.mode !== "pty") throw new Error(`[E_BAD_MODE] remote: mode must be 'oneshot' or 'pty' (got ${JSON.stringify(args.mode)})`);
1098
- if (!hasCmd) {
1099
- if (args.stdin !== void 0) throw new Error("[E_STDIN_WITHOUT_CMD] remote: stdin requires cmd — status probes take no input");
1100
- if (hasSpawn) throw new Error("[E_PARAMS] remote: spawn is an exec channel — pass cmd (there is nothing to probe for BYO-PTY)");
1101
- if (!hasTarget) return {
1102
- kind: "roster",
1103
- text: await driver.roster({ sessionKey: getSessionKey(exec) }),
1104
- exit: null,
1105
- durationMs: 0
1106
- };
1107
- return {
1108
- kind: "status",
1109
- text: await driver.status(args.target, { sessionKey: getSessionKey(exec) }),
1110
- exit: null,
1111
- durationMs: 0
1112
- };
1113
- }
1114
- const r = await driver.call({
1115
- target: args.target,
1116
- spawn: args.spawn,
1117
- cmd: args.cmd,
1118
- mode: args.mode === "oneshot" || args.mode === "pty" ? args.mode : void 0,
1119
- stdin: args.stdin,
1120
- timeout: args.timeout
1121
- }, { sessionKey: getSessionKey(exec) });
1122
- const v = {
1123
- kind: "exec",
1124
- text: r.stdout,
1125
- exit: r.exit,
1126
- durationMs: r.durationMs
1127
- };
1128
- if (r.cwd !== null) v.cwd = r.cwd;
1129
- if (r.stderr !== void 0) v.stderr = r.stderr;
1130
- if (r.timedOut) v.timedOut = true;
1131
- if (r.reconnected) v.reconnected = true;
1132
- if (r.truncated !== void 0) v.truncated = r.truncated;
1133
- if (r.session !== void 0) v.session = r.session;
1134
- if (r.notice !== void 0) v.notice = r.notice;
1135
- return v;
1136
- }
1137
- });
1138
- }
1139
- function renderValue(v) {
1140
- if (v.kind === "status" || v.kind === "roster") return v.text;
1141
- const parts = [];
1142
- if (v.reconnected === true) parts.push(RECONNECT_NOTICE);
1143
- if (typeof v.notice === "string" && v.notice.length > 0) parts.push(v.notice);
1144
- parts.push(v.text);
1145
- const secs = ((v.durationMs ?? 0) / 1e3).toFixed(1);
1146
- const markers = [];
1147
- if (v.timedOut === true) markers.push("interrupted");
1148
- if (v.truncated !== void 0) markers.push(`truncated, original ${v.truncated} chars`);
1149
- const suffix = markers.length > 0 ? ` · ${markers.join(" · ")}` : "";
1150
- const cwdTag = typeof v.cwd === "string" && v.cwd.length > 0 ? ` · cwd ${v.cwd}` : "";
1151
- const sessionTag = typeof v.session === "string" && v.session.length > 0 ? ` · ${v.session}` : "";
1152
- parts.push(`[exit ${v.exit} · ${secs}s${suffix}${cwdTag}${sessionTag}]`);
1153
- if (v.stderr !== void 0 && v.stderr.length > 0) parts.push("[stderr]", v.stderr);
1154
- return parts.join("\n");
1155
- }
1156
-
1157
- //#endregion
1158
- //#region src/remote/plugin.ts
1159
- const name = "dashr-remote";
1160
- const inject = [];
1161
- const Config = Schema.object({
1162
- execTimeoutSec: Schema.natural().min(1).default(120),
1163
- idleTtlSec: Schema.natural().min(1).default(600),
1164
- maxOutputChars: Schema.natural().min(1).default(3e4)
1165
- }).default({
1166
- execTimeoutSec: 120,
1167
- idleTtlSec: 600,
1168
- maxOutputChars: 3e4
1169
- });
1170
- /** MUST stay an arrow(RM0 plugin.ts 同注:function 声明会被 cordis 当构造器 new 掉,返回的 disposer 丢失)。 */
1171
- const apply = (ctx, config) => {
1172
- const driver = new RemoteDriver({
1173
- execTimeoutSec: config.execTimeoutSec,
1174
- idleTtlSec: config.idleTtlSec,
1175
- maxOutputChars: config.maxOutputChars
1176
- });
1177
- ctx.inject(["tools"], (toolsCtx) => {
1178
- toolsCtx.tools.register(createRemoteTool(driver, { getSessionKey: (exec) => exec.agent?.id ?? "remote:no-session" }));
1179
- });
1180
- return () => void driver.dispose();
1181
- };
1182
- var plugin_default = {
1183
- name,
1184
- inject,
1185
- Config,
1186
- apply
1187
- };
1188
-
1189
- //#endregion
1190
- export { Config, apply, plugin_default as default, inject, name };