super-dsh 0.3.0-a → 0.3.0-d

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 (760) hide show
  1. package/README.md +25 -22
  2. package/cordis.patch.yml +3 -3
  3. package/package.json +20 -8
  4. package/superd-hub/dist/bundle-setup.d.ts +17 -2
  5. package/superd-hub/dist/bundle-setup.js +158 -2
  6. package/superd-hub/dist/spawn-world.js +2 -5
  7. package/superd-hub/dist/world-resolution.d.ts +6 -0
  8. package/superd-hub/dist/world-resolution.js +39 -0
  9. package/superd-hub/package.json +19 -2
  10. package/superd-hub/scripts/register-companion.mjs +100 -0
  11. package/bundles/better-dsh.tgz +0 -0
  12. package/bundles/manifest.json +0 -10
  13. package/node_modules/better-dsh/LICENSE +0 -24
  14. package/node_modules/better-dsh/README.md +0 -323
  15. package/node_modules/better-dsh/THIRD_PARTY_NOTICES.md +0 -52
  16. package/node_modules/better-dsh/cordis.patch.yml +0 -139
  17. package/node_modules/better-dsh/docs/00_adr/0001-bridge-tool-layer-not-service-layer.md +0 -14
  18. package/node_modules/better-dsh/docs/00_adr/0002-masking-is-presentation-only.md +0 -15
  19. package/node_modules/better-dsh/docs/10_plans/2026-09-23-remote-execution-framework.md +0 -236
  20. package/node_modules/better-dsh/docs/10_plans/2026-09-23-remote-framework-impl.md +0 -2083
  21. package/node_modules/better-dsh/docs/10_plans/2026-09-26-lsp-ast-reminder.md +0 -64
  22. package/node_modules/better-dsh/docs/10_plans/A2A-messaging-channel-test-archive.md +0 -256
  23. package/node_modules/better-dsh/docs/10_plans/code-mode-vs-rlm-ipython-comparison.md +0 -137
  24. package/node_modules/better-dsh/docs/10_plans/dashr-blueprint-review.md +0 -201
  25. package/node_modules/better-dsh/docs/10_plans/dashr-blueprint.md +0 -561
  26. package/node_modules/better-dsh/docs/10_plans/dashr-compaction-window-and-archive.md +0 -307
  27. package/node_modules/better-dsh/docs/10_plans/dashr-profile-layer-feasibility.md +0 -367
  28. package/node_modules/better-dsh/docs/10_plans/dashr-sandbox-escalation-semantics-gap.md +0 -171
  29. package/node_modules/better-dsh/docs/10_plans/dashr-security-sandbox-analysis.md +0 -187
  30. package/node_modules/better-dsh/docs/10_plans/dashr-surface-invariant-and-omp-imports.md +0 -97
  31. package/node_modules/better-dsh/docs/10_plans/ipython-kernel-interactive-interface-test-report.md +0 -152
  32. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft.md +0 -146
  33. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v3.md +0 -50
  34. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-IPython-Control-Prompt-draft_v4.md +0 -79
  35. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/Dash-vs-PrimeAgent-systemprompt-toolcatalog-comparison.md +0 -138
  36. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/RLM-system-prompt-injection-gap-report.md +0 -161
  37. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/V0.1.5-development-plan.md +0 -109
  38. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_dsh.md +0 -50
  39. package/node_modules/better-dsh/docs/10_plans/kernel-refactoring/actinoable-surface-to-llm-in-agent-runtime_prime.md +0 -113
  40. package/node_modules/better-dsh/docs/10_plans/recallable-compaction.md +0 -147
  41. package/node_modules/better-dsh/docs/10_plans/spike-tag-repro.mjs +0 -102
  42. package/node_modules/better-dsh/docs/10_plans/upstream-analysis.md +0 -128
  43. package/node_modules/better-dsh/docs/20_specs/agent/spec.md +0 -54
  44. package/node_modules/better-dsh/docs/20_specs/ast/spec.md +0 -57
  45. package/node_modules/better-dsh/docs/20_specs/compaction-recall/spec.md +0 -46
  46. package/node_modules/better-dsh/docs/20_specs/ctx/spec.md +0 -107
  47. package/node_modules/better-dsh/docs/20_specs/dsh/spec.md +0 -47
  48. package/node_modules/better-dsh/docs/20_specs/dvc/spec.md +0 -106
  49. package/node_modules/better-dsh/docs/20_specs/escalation-guidance/spec.md +0 -44
  50. package/node_modules/better-dsh/docs/20_specs/fs-scheme-resolution/spec.md +0 -37
  51. package/node_modules/better-dsh/docs/20_specs/hash-edit/spec.md +0 -41
  52. package/node_modules/better-dsh/docs/20_specs/http-read/spec.md +0 -73
  53. package/node_modules/better-dsh/docs/20_specs/kernel-provisioning/spec.md +0 -53
  54. package/node_modules/better-dsh/docs/20_specs/lsp/spec.md +0 -121
  55. package/node_modules/better-dsh/docs/20_specs/mobile-layout/spec.md +0 -108
  56. package/node_modules/better-dsh/docs/20_specs/model-failover/spec.md +0 -20
  57. package/node_modules/better-dsh/docs/20_specs/plugins-page-components/spec.md +0 -79
  58. package/node_modules/better-dsh/docs/20_specs/preact-ui-shell/spec.md +0 -22
  59. package/node_modules/better-dsh/docs/20_specs/repl-dispatch-resilience/spec.md +0 -21
  60. package/node_modules/better-dsh/docs/20_specs/skill/spec.md +0 -58
  61. package/node_modules/better-dsh/docs/20_specs/tool-surface/spec.md +0 -222
  62. package/node_modules/better-dsh/docs/20_specs/url-schema/spec.md +0 -148
  63. package/node_modules/better-dsh/docs/20_specs/web-trust-fence/spec.md +0 -43
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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
  98. 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
  99. package/node_modules/better-dsh/docs/50_test-reports/2026-10-06-authentication-only-web-admission-4999.md +0 -63
  100. package/node_modules/better-dsh/docs/50_test-reports/2026-10-07-better-dsh-welcome-self-contained-4999.md +0 -52
  101. 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
  102. package/node_modules/better-dsh/docs/50_test-reports/kernel-provisioning.md +0 -44
  103. package/node_modules/better-dsh/docs/50_test-reports/repl-kernel-provisioning-test-report.md +0 -87
  104. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.2-alpha.5-local-test-report.md +0 -81
  105. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.2-alpha.5-report.md +0 -93
  106. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-local-test-report.md +0 -44
  107. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.3-alpha.2-report.md +0 -110
  108. package/node_modules/better-dsh/docs/50_test-reports/upstream-dsh-0.1.5-rc.2-local-test-report.md +0 -79
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. package/node_modules/better-dsh/docs/50_test-reports/v0.2.1ef-dev-audit-report.md +0 -73
  123. 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
  124. 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
  125. 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
  126. 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
  127. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/SKILL.md +0 -147
  128. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch01-user-guide.md +0 -123
  129. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch02-plugin-basics.md +0 -127
  130. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch03-plugin-framework-practice.md +0 -120
  131. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch04-cordis-fundamentals.md +0 -129
  132. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch05-cordis-api.md +0 -115
  133. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch06-architecture.md +0 -109
  134. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch07-capability-seams.md +0 -97
  135. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch08-internals-pipelines.md +0 -111
  136. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch09-api-gateway.md +0 -106
  137. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch10-config-catalog.md +0 -97
  138. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch11-tool-catalog.md +0 -121
  139. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch12-persistence-catalog.md +0 -109
  140. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch13-subsystems-core-session.md +0 -106
  141. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch14-subsystems-agent-loop.md +0 -111
  142. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch15-subsystems-tool-execution.md +0 -106
  143. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch16-subsystems-session-data.md +0 -132
  144. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch17-subsystems-llm-streaming.md +0 -128
  145. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch18-subsystems-web-ui.md +0 -142
  146. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch19-cookbook.md +0 -149
  147. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch20-development-testing.md +0 -87
  148. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch21-postmortems.md +0 -82
  149. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/chapters/ch22-i18n.md +0 -86
  150. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/cheatsheet.md +0 -67
  151. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/glossary.md +0 -57
  152. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/skill/patterns.md +0 -88
  153. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/AGENTS.md +0 -75
  154. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/agent-lifecycle.md +0 -84
  155. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/agent-lifecycle.zh.md +0 -86
  156. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/api-gateway.md +0 -164
  157. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/api-gateway.zh.md +0 -164
  158. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/architecture.md +0 -150
  159. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/architecture.zh.md +0 -154
  160. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/capability-seams.md +0 -543
  161. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/capability-seams.zh.md +0 -545
  162. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/config-catalog.md +0 -3473
  163. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/config-catalog.zh.md +0 -3474
  164. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-package.md +0 -117
  165. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-package.zh.md +0 -119
  166. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-remote-api.md +0 -197
  167. 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
  168. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-settings-card.md +0 -102
  169. 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
  170. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-tool.md +0 -101
  171. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-tool.zh.md +0 -103
  172. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-a-vendored-package.md +0 -59
  173. 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
  174. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/adding-an-llm-adapter.md +0 -43
  175. 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
  176. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/extension-cookbook.md +0 -132
  177. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/extension-cookbook.zh.md +0 -136
  178. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cookbook/maintaining-dsh-code-review.md +0 -64
  179. 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
  180. 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
  181. 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
  182. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/context.md +0 -364
  183. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/context.zh.md +0 -366
  184. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/events.md +0 -207
  185. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/events.zh.md +0 -209
  186. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/fiber.md +0 -375
  187. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/fiber.zh.md +0 -377
  188. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/inherited.md +0 -39
  189. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/registry.md +0 -152
  190. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/registry.zh.md +0 -154
  191. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/service.md +0 -102
  192. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-api/service.zh.md +0 -104
  193. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-primer.md +0 -45
  194. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-primer.zh.md +0 -51
  195. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/01-first-plugin.md +0 -95
  196. 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
  197. 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
  198. 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
  199. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/03-services.md +0 -98
  200. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/03-services.zh.md +0 -98
  201. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/04-events.md +0 -144
  202. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/04-events.zh.md +0 -144
  203. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/05-config.md +0 -84
  204. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/05-config.zh.md +0 -84
  205. 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
  206. 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
  207. 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
  208. 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
  209. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/index.md +0 -60
  210. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/cordis-tutorial/index.zh.md +0 -62
  211. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/deepseek-llm-api-wire-extensions.md +0 -163
  212. 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
  213. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/defensive-patterns.md +0 -33
  214. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/defensive-patterns.zh.md +0 -35
  215. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/development.md +0 -167
  216. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/development.zh.md +0 -173
  217. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/event-producer-consumer.md +0 -86
  218. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/event-producer-consumer.zh.md +0 -88
  219. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/glossary.md +0 -45
  220. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/glossary.zh.md +0 -45
  221. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/graph-atlas.md +0 -22
  222. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/graph-atlas.zh.md +0 -24
  223. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/README.md +0 -60
  224. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/README.zh.md +0 -62
  225. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/style-samples.md +0 -87
  226. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/terminology.md +0 -214
  227. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-prompt.md +0 -263
  228. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-rules.md +0 -69
  229. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/i18n/translation-rules.zh.md +0 -69
  230. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/module-graph.md +0 -1411
  231. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/module-graph.zh.md +0 -1413
  232. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/persistence-catalog.md +0 -1075
  233. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/persistence-catalog.zh.md +0 -1077
  234. 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
  235. 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
  236. 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
  237. 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
  238. 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
  239. 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
  240. 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
  241. 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
  242. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/README.md +0 -18
  243. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/postmortem/README.zh.md +0 -18
  244. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/rescope.md +0 -53
  245. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/rescope.zh.md +0 -53
  246. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/README.md +0 -61
  247. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/README.zh.md +0 -61
  248. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/agent-team.md +0 -207
  249. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/agent-team.zh.md +0 -207
  250. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/approval.md +0 -170
  251. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/approval.zh.md +0 -170
  252. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/attachment.md +0 -351
  253. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/attachment.zh.md +0 -351
  254. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/client-modules.md +0 -168
  255. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/client-modules.zh.md +0 -168
  256. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/code-runtime.md +0 -195
  257. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/code-runtime.zh.md +0 -195
  258. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/commands.md +0 -219
  259. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/commands.zh.md +0 -219
  260. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/compaction.md +0 -238
  261. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/compaction.zh.md +0 -238
  262. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/conversation.md +0 -258
  263. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/conversation.zh.md +0 -258
  264. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/core.md +0 -1209
  265. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/core.zh.md +0 -1219
  266. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/credentials.md +0 -329
  267. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/credentials.zh.md +0 -329
  268. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/extensions.md +0 -382
  269. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/extensions.zh.md +0 -382
  270. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/feedback.md +0 -266
  271. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/feedback.zh.md +0 -266
  272. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/filesystem.md +0 -505
  273. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/filesystem.zh.md +0 -505
  274. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/goal.md +0 -277
  275. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/goal.zh.md +0 -277
  276. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/invariants.md +0 -88
  277. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/invariants.zh.md +0 -88
  278. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/jobs.md +0 -290
  279. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/jobs.zh.md +0 -290
  280. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/llm-streaming.md +0 -1080
  281. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/llm-streaming.zh.md +0 -1086
  282. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/lsp.md +0 -202
  283. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/lsp.zh.md +0 -202
  284. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/permission-presets.md +0 -131
  285. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/permission-presets.zh.md +0 -131
  286. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/persistence.md +0 -395
  287. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/persistence.zh.md +0 -395
  288. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/plan.md +0 -87
  289. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/plan.zh.md +0 -87
  290. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/sandbox.md +0 -220
  291. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/sandbox.zh.md +0 -220
  292. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/schedule.md +0 -192
  293. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/schedule.zh.md +0 -192
  294. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/scope.md +0 -59
  295. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/scope.zh.md +0 -59
  296. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-projection.md +0 -354
  297. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-projection.zh.md +0 -354
  298. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-query.md +0 -509
  299. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-query.zh.md +0 -509
  300. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-reference.md +0 -219
  301. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-reference.zh.md +0 -219
  302. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-telemetry.md +0 -194
  303. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-telemetry.zh.md +0 -194
  304. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-title.md +0 -204
  305. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session-title.zh.md +0 -204
  306. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session.md +0 -1155
  307. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/session.zh.md +0 -1159
  308. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/settings.md +0 -405
  309. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/settings.zh.md +0 -405
  310. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/shell.md +0 -303
  311. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/shell.zh.md +0 -303
  312. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/skills.md +0 -354
  313. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/skills.zh.md +0 -354
  314. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/slots.md +0 -175
  315. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/slots.zh.md +0 -175
  316. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/spill.md +0 -117
  317. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/spill.zh.md +0 -117
  318. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/storage.md +0 -260
  319. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/storage.zh.md +0 -260
  320. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subagent.md +0 -766
  321. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subagent.zh.md +0 -770
  322. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subprocess.md +0 -324
  323. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/subprocess.zh.md +0 -324
  324. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/system-prompt.md +0 -220
  325. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/system-prompt.zh.md +0 -220
  326. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/terminal.md +0 -184
  327. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/terminal.zh.md +0 -184
  328. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/todo.md +0 -32
  329. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/todo.zh.md +0 -32
  330. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/token-meter.md +0 -105
  331. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/token-meter.zh.md +0 -105
  332. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/tools.md +0 -720
  333. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/tools.zh.md +0 -720
  334. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/typert.md +0 -343
  335. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/typert.zh.md +0 -343
  336. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/user-questions.md +0 -178
  337. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/user-questions.zh.md +0 -178
  338. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-client.md +0 -95
  339. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-client.zh.md +0 -95
  340. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-server.md +0 -154
  341. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web-server.zh.md +0 -154
  342. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web.md +0 -206
  343. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/web.zh.md +0 -206
  344. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/webhook.md +0 -70
  345. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/webhook.zh.md +0 -70
  346. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workflow.md +0 -278
  347. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workflow.zh.md +0 -278
  348. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workspace.md +0 -321
  349. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/subsystems/workspace.zh.md +0 -321
  350. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/testing.md +0 -54
  351. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/testing.zh.md +0 -54
  352. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-catalog.md +0 -2225
  353. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-catalog.zh.md +0 -2233
  354. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-execution-pipeline.md +0 -62
  355. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/tool-execution-pipeline.zh.md +0 -64
  356. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/config.md +0 -106
  357. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/config.zh.md +0 -106
  358. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/index.md +0 -144
  359. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/index.zh.md +0 -144
  360. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/publish.md +0 -183
  361. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/publish.zh.md +0 -183
  362. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/tool.md +0 -52
  363. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/basic/tool.zh.md +0 -52
  364. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/events.md +0 -143
  365. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/events.zh.md +0 -143
  366. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/index.md +0 -137
  367. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/index.zh.md +0 -137
  368. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/service.md +0 -148
  369. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/framework/service.zh.md +0 -150
  370. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/dynamic-cordis.md +0 -15
  371. 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
  372. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/index.md +0 -155
  373. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/index.zh.md +0 -155
  374. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/develop/practice/llm-adapter.md +0 -189
  375. 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
  376. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/github-review.md +0 -102
  377. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/github-review.zh.md +0 -102
  378. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/index.md +0 -30
  379. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/index.zh.md +0 -30
  380. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/mcp-memory.md +0 -101
  381. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/mcp-memory.zh.md +0 -101
  382. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/network-proxy.md +0 -85
  383. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/network-proxy.zh.md +0 -85
  384. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/providers.md +0 -190
  385. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/providers.zh.md +0 -190
  386. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/python-sdk.md +0 -150
  387. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/python-sdk.zh.md +0 -150
  388. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/schedule.md +0 -21
  389. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/guide/schedule.zh.md +0 -21
  390. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/index.md +0 -11
  391. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/user/index.zh.md +0 -11
  392. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/web-styling.md +0 -29
  393. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/docs/web-styling.zh.md +0 -29
  394. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/site-pages-map.txt +0 -234
  395. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src/site-pages.json +0 -232
  396. package/node_modules/better-dsh/docs/80_upstream-docs-and-skills/dsh-dev-skill/src-README.md +0 -63
  397. package/node_modules/better-dsh/docs/dev-test-environment-notes.md +0 -137
  398. package/node_modules/better-dsh/docs/distro-blueprint.md +0 -81
  399. package/node_modules/better-dsh/docs/dsh-webUI-with-rlm-mode.png +0 -0
  400. package/node_modules/better-dsh/docs/repositioning-and-rebranding.md +0 -102
  401. package/node_modules/better-dsh/docs/specs/agent/spec.md +0 -54
  402. package/node_modules/better-dsh/docs/specs/ast/spec.md +0 -57
  403. package/node_modules/better-dsh/docs/specs/ast-engine-deomp/spec.md +0 -170
  404. package/node_modules/better-dsh/docs/specs/authentication-only-web-admission/spec.md +0 -51
  405. package/node_modules/better-dsh/docs/specs/compaction-recall/spec.md +0 -46
  406. package/node_modules/better-dsh/docs/specs/ctx/spec.md +0 -179
  407. package/node_modules/better-dsh/docs/specs/docs-packaging-trim/spec.md +0 -110
  408. package/node_modules/better-dsh/docs/specs/dsh/spec.md +0 -47
  409. package/node_modules/better-dsh/docs/specs/dvc/spec.md +0 -106
  410. package/node_modules/better-dsh/docs/specs/escalation-guidance/spec.md +0 -44
  411. package/node_modules/better-dsh/docs/specs/fs-scheme-resolution/spec.md +0 -37
  412. package/node_modules/better-dsh/docs/specs/hash-edit/spec.md +0 -41
  413. package/node_modules/better-dsh/docs/specs/http-read/spec.md +0 -73
  414. package/node_modules/better-dsh/docs/specs/kernel-provisioning/spec.md +0 -53
  415. package/node_modules/better-dsh/docs/specs/lsp/spec.md +0 -121
  416. package/node_modules/better-dsh/docs/specs/mobile-layout/spec.md +0 -108
  417. package/node_modules/better-dsh/docs/specs/model-failover/spec.md +0 -20
  418. package/node_modules/better-dsh/docs/specs/model-picker-ios-blur/spec.md +0 -168
  419. package/node_modules/better-dsh/docs/specs/plugins-page-components/spec.md +0 -79
  420. package/node_modules/better-dsh/docs/specs/preact-ui-shell/spec.md +0 -22
  421. package/node_modules/better-dsh/docs/specs/remote-pty-label/spec.md +0 -126
  422. package/node_modules/better-dsh/docs/specs/repl-dispatch-resilience/spec.md +0 -21
  423. package/node_modules/better-dsh/docs/specs/skill/spec.md +0 -58
  424. package/node_modules/better-dsh/docs/specs/tool-surface/spec.md +0 -222
  425. package/node_modules/better-dsh/docs/specs/url-schema/spec.md +0 -148
  426. package/node_modules/better-dsh/docs/specs/web-trust-fence/spec.md +0 -43
  427. package/node_modules/better-dsh/docs/specs/welcome-self-contained/spec.md +0 -13
  428. package/node_modules/better-dsh/docs/specs/zero-npm-runtime-deps/spec.md +0 -85
  429. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-02-ctx-navigation.md +0 -319
  430. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-03-ast-engine-deomp.md +0 -1214
  431. package/node_modules/better-dsh/docs/superpowers/plans/2026-10-03-docs-packaging-trim.md +0 -181
  432. package/node_modules/better-dsh/docs/superpowers/specs/2026-10-02-ctx-navigation-design.md +0 -209
  433. package/node_modules/better-dsh/docs/upstream-dsh-0.1.5-rc.2-report.md +0 -156
  434. package/node_modules/better-dsh/dsh-docs/AGENTS.md +0 -75
  435. package/node_modules/better-dsh/dsh-docs/agent-lifecycle.md +0 -84
  436. package/node_modules/better-dsh/dsh-docs/agent-lifecycle.zh.md +0 -86
  437. package/node_modules/better-dsh/dsh-docs/api-gateway.md +0 -164
  438. package/node_modules/better-dsh/dsh-docs/api-gateway.zh.md +0 -164
  439. package/node_modules/better-dsh/dsh-docs/architecture.md +0 -150
  440. package/node_modules/better-dsh/dsh-docs/architecture.zh.md +0 -154
  441. package/node_modules/better-dsh/dsh-docs/capability-seams.md +0 -543
  442. package/node_modules/better-dsh/dsh-docs/capability-seams.zh.md +0 -545
  443. package/node_modules/better-dsh/dsh-docs/config-catalog.md +0 -3473
  444. package/node_modules/better-dsh/dsh-docs/config-catalog.zh.md +0 -3474
  445. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-package.md +0 -117
  446. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-package.zh.md +0 -119
  447. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-remote-api.md +0 -197
  448. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-remote-api.zh.md +0 -197
  449. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-session-format-version.md +0 -109
  450. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-session-format-version.zh.md +0 -109
  451. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-settings-card.md +0 -102
  452. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-settings-card.zh.md +0 -102
  453. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-tool.md +0 -101
  454. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-tool.zh.md +0 -103
  455. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-vendored-package.md +0 -59
  456. package/node_modules/better-dsh/dsh-docs/cookbook/adding-a-vendored-package.zh.md +0 -59
  457. package/node_modules/better-dsh/dsh-docs/cookbook/adding-an-llm-adapter.md +0 -43
  458. package/node_modules/better-dsh/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +0 -43
  459. package/node_modules/better-dsh/dsh-docs/cookbook/extension-cookbook.md +0 -132
  460. package/node_modules/better-dsh/dsh-docs/cookbook/extension-cookbook.zh.md +0 -136
  461. package/node_modules/better-dsh/dsh-docs/cookbook/maintaining-dsh-code-review.md +0 -64
  462. package/node_modules/better-dsh/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +0 -64
  463. package/node_modules/better-dsh/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +0 -32
  464. package/node_modules/better-dsh/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +0 -32
  465. package/node_modules/better-dsh/dsh-docs/cordis-api/context.md +0 -364
  466. package/node_modules/better-dsh/dsh-docs/cordis-api/context.zh.md +0 -366
  467. package/node_modules/better-dsh/dsh-docs/cordis-api/events.md +0 -207
  468. package/node_modules/better-dsh/dsh-docs/cordis-api/events.zh.md +0 -209
  469. package/node_modules/better-dsh/dsh-docs/cordis-api/fiber.md +0 -375
  470. package/node_modules/better-dsh/dsh-docs/cordis-api/fiber.zh.md +0 -377
  471. package/node_modules/better-dsh/dsh-docs/cordis-api/inherited.md +0 -39
  472. package/node_modules/better-dsh/dsh-docs/cordis-api/registry.md +0 -152
  473. package/node_modules/better-dsh/dsh-docs/cordis-api/registry.zh.md +0 -154
  474. package/node_modules/better-dsh/dsh-docs/cordis-api/service.md +0 -102
  475. package/node_modules/better-dsh/dsh-docs/cordis-api/service.zh.md +0 -104
  476. package/node_modules/better-dsh/dsh-docs/cordis-primer.md +0 -45
  477. package/node_modules/better-dsh/dsh-docs/cordis-primer.zh.md +0 -51
  478. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/01-first-plugin.md +0 -95
  479. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +0 -95
  480. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +0 -98
  481. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +0 -98
  482. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/03-services.md +0 -98
  483. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/03-services.zh.md +0 -98
  484. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/04-events.md +0 -144
  485. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/04-events.zh.md +0 -144
  486. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/05-config.md +0 -84
  487. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/05-config.zh.md +0 -84
  488. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +0 -113
  489. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +0 -113
  490. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/07-into-the-harness.md +0 -108
  491. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +0 -108
  492. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/index.md +0 -60
  493. package/node_modules/better-dsh/dsh-docs/cordis-tutorial/index.zh.md +0 -62
  494. package/node_modules/better-dsh/dsh-docs/deepseek-llm-api-wire-extensions.md +0 -163
  495. package/node_modules/better-dsh/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +0 -163
  496. package/node_modules/better-dsh/dsh-docs/defensive-patterns.md +0 -33
  497. package/node_modules/better-dsh/dsh-docs/defensive-patterns.zh.md +0 -35
  498. package/node_modules/better-dsh/dsh-docs/development.md +0 -167
  499. package/node_modules/better-dsh/dsh-docs/development.zh.md +0 -173
  500. package/node_modules/better-dsh/dsh-docs/event-producer-consumer.md +0 -86
  501. package/node_modules/better-dsh/dsh-docs/event-producer-consumer.zh.md +0 -88
  502. package/node_modules/better-dsh/dsh-docs/glossary.md +0 -45
  503. package/node_modules/better-dsh/dsh-docs/glossary.zh.md +0 -45
  504. package/node_modules/better-dsh/dsh-docs/graph-atlas.md +0 -22
  505. package/node_modules/better-dsh/dsh-docs/graph-atlas.zh.md +0 -24
  506. package/node_modules/better-dsh/dsh-docs/i18n/README.md +0 -60
  507. package/node_modules/better-dsh/dsh-docs/i18n/README.zh.md +0 -62
  508. package/node_modules/better-dsh/dsh-docs/i18n/style-samples.md +0 -87
  509. package/node_modules/better-dsh/dsh-docs/i18n/terminology.md +0 -214
  510. package/node_modules/better-dsh/dsh-docs/i18n/translation-prompt.md +0 -263
  511. package/node_modules/better-dsh/dsh-docs/i18n/translation-rules.md +0 -69
  512. package/node_modules/better-dsh/dsh-docs/i18n/translation-rules.zh.md +0 -69
  513. package/node_modules/better-dsh/dsh-docs/module-graph.md +0 -1411
  514. package/node_modules/better-dsh/dsh-docs/module-graph.zh.md +0 -1413
  515. package/node_modules/better-dsh/dsh-docs/persistence-catalog.md +0 -1075
  516. package/node_modules/better-dsh/dsh-docs/persistence-catalog.zh.md +0 -1077
  517. package/node_modules/better-dsh/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +0 -113
  518. package/node_modules/better-dsh/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +0 -113
  519. package/node_modules/better-dsh/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +0 -47
  520. package/node_modules/better-dsh/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +0 -47
  521. package/node_modules/better-dsh/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +0 -53
  522. package/node_modules/better-dsh/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +0 -53
  523. package/node_modules/better-dsh/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +0 -55
  524. package/node_modules/better-dsh/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +0 -55
  525. package/node_modules/better-dsh/dsh-docs/postmortem/README.md +0 -18
  526. package/node_modules/better-dsh/dsh-docs/postmortem/README.zh.md +0 -18
  527. package/node_modules/better-dsh/dsh-docs/rescope.md +0 -53
  528. package/node_modules/better-dsh/dsh-docs/rescope.zh.md +0 -53
  529. package/node_modules/better-dsh/dsh-docs/session-format-status.md +0 -47
  530. package/node_modules/better-dsh/dsh-docs/session-format-status.zh.md +0 -47
  531. package/node_modules/better-dsh/dsh-docs/subsystems/README.md +0 -61
  532. package/node_modules/better-dsh/dsh-docs/subsystems/README.zh.md +0 -61
  533. package/node_modules/better-dsh/dsh-docs/subsystems/agent-team.md +0 -207
  534. package/node_modules/better-dsh/dsh-docs/subsystems/agent-team.zh.md +0 -207
  535. package/node_modules/better-dsh/dsh-docs/subsystems/approval.md +0 -170
  536. package/node_modules/better-dsh/dsh-docs/subsystems/approval.zh.md +0 -170
  537. package/node_modules/better-dsh/dsh-docs/subsystems/attachment.md +0 -351
  538. package/node_modules/better-dsh/dsh-docs/subsystems/attachment.zh.md +0 -351
  539. package/node_modules/better-dsh/dsh-docs/subsystems/client-modules.md +0 -168
  540. package/node_modules/better-dsh/dsh-docs/subsystems/client-modules.zh.md +0 -168
  541. package/node_modules/better-dsh/dsh-docs/subsystems/client-resources.md +0 -91
  542. package/node_modules/better-dsh/dsh-docs/subsystems/client-resources.zh.md +0 -91
  543. package/node_modules/better-dsh/dsh-docs/subsystems/code-runtime.md +0 -195
  544. package/node_modules/better-dsh/dsh-docs/subsystems/code-runtime.zh.md +0 -195
  545. package/node_modules/better-dsh/dsh-docs/subsystems/commands.md +0 -219
  546. package/node_modules/better-dsh/dsh-docs/subsystems/commands.zh.md +0 -219
  547. package/node_modules/better-dsh/dsh-docs/subsystems/compaction.md +0 -238
  548. package/node_modules/better-dsh/dsh-docs/subsystems/compaction.zh.md +0 -238
  549. package/node_modules/better-dsh/dsh-docs/subsystems/conversation.md +0 -258
  550. package/node_modules/better-dsh/dsh-docs/subsystems/conversation.zh.md +0 -258
  551. package/node_modules/better-dsh/dsh-docs/subsystems/core.md +0 -1209
  552. package/node_modules/better-dsh/dsh-docs/subsystems/core.zh.md +0 -1219
  553. package/node_modules/better-dsh/dsh-docs/subsystems/credentials.md +0 -329
  554. package/node_modules/better-dsh/dsh-docs/subsystems/credentials.zh.md +0 -329
  555. package/node_modules/better-dsh/dsh-docs/subsystems/extensions.md +0 -382
  556. package/node_modules/better-dsh/dsh-docs/subsystems/extensions.zh.md +0 -382
  557. package/node_modules/better-dsh/dsh-docs/subsystems/feedback.md +0 -266
  558. package/node_modules/better-dsh/dsh-docs/subsystems/feedback.zh.md +0 -266
  559. package/node_modules/better-dsh/dsh-docs/subsystems/filesystem.md +0 -505
  560. package/node_modules/better-dsh/dsh-docs/subsystems/filesystem.zh.md +0 -505
  561. package/node_modules/better-dsh/dsh-docs/subsystems/goal.md +0 -277
  562. package/node_modules/better-dsh/dsh-docs/subsystems/goal.zh.md +0 -277
  563. package/node_modules/better-dsh/dsh-docs/subsystems/invariants.md +0 -88
  564. package/node_modules/better-dsh/dsh-docs/subsystems/invariants.zh.md +0 -88
  565. package/node_modules/better-dsh/dsh-docs/subsystems/jobs.md +0 -290
  566. package/node_modules/better-dsh/dsh-docs/subsystems/jobs.zh.md +0 -290
  567. package/node_modules/better-dsh/dsh-docs/subsystems/llm-streaming.md +0 -1080
  568. package/node_modules/better-dsh/dsh-docs/subsystems/llm-streaming.zh.md +0 -1086
  569. package/node_modules/better-dsh/dsh-docs/subsystems/lsp.md +0 -202
  570. package/node_modules/better-dsh/dsh-docs/subsystems/lsp.zh.md +0 -202
  571. package/node_modules/better-dsh/dsh-docs/subsystems/permission-presets.md +0 -131
  572. package/node_modules/better-dsh/dsh-docs/subsystems/permission-presets.zh.md +0 -131
  573. package/node_modules/better-dsh/dsh-docs/subsystems/persistence.md +0 -395
  574. package/node_modules/better-dsh/dsh-docs/subsystems/persistence.zh.md +0 -395
  575. package/node_modules/better-dsh/dsh-docs/subsystems/plan.md +0 -87
  576. package/node_modules/better-dsh/dsh-docs/subsystems/plan.zh.md +0 -87
  577. package/node_modules/better-dsh/dsh-docs/subsystems/sandbox.md +0 -220
  578. package/node_modules/better-dsh/dsh-docs/subsystems/sandbox.zh.md +0 -220
  579. package/node_modules/better-dsh/dsh-docs/subsystems/schedule.md +0 -192
  580. package/node_modules/better-dsh/dsh-docs/subsystems/schedule.zh.md +0 -192
  581. package/node_modules/better-dsh/dsh-docs/subsystems/scope.md +0 -59
  582. package/node_modules/better-dsh/dsh-docs/subsystems/scope.zh.md +0 -59
  583. package/node_modules/better-dsh/dsh-docs/subsystems/session-projection.md +0 -354
  584. package/node_modules/better-dsh/dsh-docs/subsystems/session-projection.zh.md +0 -354
  585. package/node_modules/better-dsh/dsh-docs/subsystems/session-query.md +0 -509
  586. package/node_modules/better-dsh/dsh-docs/subsystems/session-query.zh.md +0 -509
  587. package/node_modules/better-dsh/dsh-docs/subsystems/session-reference.md +0 -219
  588. package/node_modules/better-dsh/dsh-docs/subsystems/session-reference.zh.md +0 -219
  589. package/node_modules/better-dsh/dsh-docs/subsystems/session-telemetry.md +0 -194
  590. package/node_modules/better-dsh/dsh-docs/subsystems/session-telemetry.zh.md +0 -194
  591. package/node_modules/better-dsh/dsh-docs/subsystems/session-title.md +0 -204
  592. package/node_modules/better-dsh/dsh-docs/subsystems/session-title.zh.md +0 -204
  593. package/node_modules/better-dsh/dsh-docs/subsystems/session.md +0 -1155
  594. package/node_modules/better-dsh/dsh-docs/subsystems/session.zh.md +0 -1159
  595. package/node_modules/better-dsh/dsh-docs/subsystems/settings.md +0 -405
  596. package/node_modules/better-dsh/dsh-docs/subsystems/settings.zh.md +0 -405
  597. package/node_modules/better-dsh/dsh-docs/subsystems/shell.md +0 -303
  598. package/node_modules/better-dsh/dsh-docs/subsystems/shell.zh.md +0 -303
  599. package/node_modules/better-dsh/dsh-docs/subsystems/sidebar-right.md +0 -148
  600. package/node_modules/better-dsh/dsh-docs/subsystems/sidebar-right.zh.md +0 -148
  601. package/node_modules/better-dsh/dsh-docs/subsystems/skills.md +0 -354
  602. package/node_modules/better-dsh/dsh-docs/subsystems/skills.zh.md +0 -354
  603. package/node_modules/better-dsh/dsh-docs/subsystems/slots.md +0 -175
  604. package/node_modules/better-dsh/dsh-docs/subsystems/slots.zh.md +0 -175
  605. package/node_modules/better-dsh/dsh-docs/subsystems/spill.md +0 -117
  606. package/node_modules/better-dsh/dsh-docs/subsystems/spill.zh.md +0 -117
  607. package/node_modules/better-dsh/dsh-docs/subsystems/storage.md +0 -260
  608. package/node_modules/better-dsh/dsh-docs/subsystems/storage.zh.md +0 -260
  609. package/node_modules/better-dsh/dsh-docs/subsystems/subagent.md +0 -766
  610. package/node_modules/better-dsh/dsh-docs/subsystems/subagent.zh.md +0 -770
  611. package/node_modules/better-dsh/dsh-docs/subsystems/subprocess.md +0 -324
  612. package/node_modules/better-dsh/dsh-docs/subsystems/subprocess.zh.md +0 -324
  613. package/node_modules/better-dsh/dsh-docs/subsystems/system-prompt.md +0 -220
  614. package/node_modules/better-dsh/dsh-docs/subsystems/system-prompt.zh.md +0 -220
  615. package/node_modules/better-dsh/dsh-docs/subsystems/terminal.md +0 -184
  616. package/node_modules/better-dsh/dsh-docs/subsystems/terminal.zh.md +0 -184
  617. package/node_modules/better-dsh/dsh-docs/subsystems/todo.md +0 -32
  618. package/node_modules/better-dsh/dsh-docs/subsystems/todo.zh.md +0 -32
  619. package/node_modules/better-dsh/dsh-docs/subsystems/token-meter.md +0 -105
  620. package/node_modules/better-dsh/dsh-docs/subsystems/token-meter.zh.md +0 -105
  621. package/node_modules/better-dsh/dsh-docs/subsystems/tools.md +0 -720
  622. package/node_modules/better-dsh/dsh-docs/subsystems/tools.zh.md +0 -720
  623. package/node_modules/better-dsh/dsh-docs/subsystems/typert.md +0 -343
  624. package/node_modules/better-dsh/dsh-docs/subsystems/typert.zh.md +0 -343
  625. package/node_modules/better-dsh/dsh-docs/subsystems/user-questions.md +0 -178
  626. package/node_modules/better-dsh/dsh-docs/subsystems/user-questions.zh.md +0 -178
  627. package/node_modules/better-dsh/dsh-docs/subsystems/web-client.md +0 -95
  628. package/node_modules/better-dsh/dsh-docs/subsystems/web-client.zh.md +0 -95
  629. package/node_modules/better-dsh/dsh-docs/subsystems/web-server.md +0 -154
  630. package/node_modules/better-dsh/dsh-docs/subsystems/web-server.zh.md +0 -154
  631. package/node_modules/better-dsh/dsh-docs/subsystems/web.md +0 -206
  632. package/node_modules/better-dsh/dsh-docs/subsystems/web.zh.md +0 -206
  633. package/node_modules/better-dsh/dsh-docs/subsystems/webhook.md +0 -70
  634. package/node_modules/better-dsh/dsh-docs/subsystems/webhook.zh.md +0 -70
  635. package/node_modules/better-dsh/dsh-docs/subsystems/workflow.md +0 -278
  636. package/node_modules/better-dsh/dsh-docs/subsystems/workflow.zh.md +0 -278
  637. package/node_modules/better-dsh/dsh-docs/subsystems/workspace.md +0 -321
  638. package/node_modules/better-dsh/dsh-docs/subsystems/workspace.zh.md +0 -321
  639. package/node_modules/better-dsh/dsh-docs/testing.md +0 -54
  640. package/node_modules/better-dsh/dsh-docs/testing.zh.md +0 -54
  641. package/node_modules/better-dsh/dsh-docs/tool-catalog.md +0 -2225
  642. package/node_modules/better-dsh/dsh-docs/tool-catalog.zh.md +0 -2233
  643. package/node_modules/better-dsh/dsh-docs/tool-execution-pipeline.md +0 -62
  644. package/node_modules/better-dsh/dsh-docs/tool-execution-pipeline.zh.md +0 -64
  645. package/node_modules/better-dsh/dsh-docs/user/develop/basic/config.md +0 -106
  646. package/node_modules/better-dsh/dsh-docs/user/develop/basic/config.zh.md +0 -106
  647. package/node_modules/better-dsh/dsh-docs/user/develop/basic/index.md +0 -144
  648. package/node_modules/better-dsh/dsh-docs/user/develop/basic/index.zh.md +0 -144
  649. package/node_modules/better-dsh/dsh-docs/user/develop/basic/publish.md +0 -183
  650. package/node_modules/better-dsh/dsh-docs/user/develop/basic/publish.zh.md +0 -183
  651. package/node_modules/better-dsh/dsh-docs/user/develop/basic/tool.md +0 -52
  652. package/node_modules/better-dsh/dsh-docs/user/develop/basic/tool.zh.md +0 -52
  653. package/node_modules/better-dsh/dsh-docs/user/develop/framework/events.md +0 -143
  654. package/node_modules/better-dsh/dsh-docs/user/develop/framework/events.zh.md +0 -143
  655. package/node_modules/better-dsh/dsh-docs/user/develop/framework/index.md +0 -137
  656. package/node_modules/better-dsh/dsh-docs/user/develop/framework/index.zh.md +0 -137
  657. package/node_modules/better-dsh/dsh-docs/user/develop/framework/service.md +0 -148
  658. package/node_modules/better-dsh/dsh-docs/user/develop/framework/service.zh.md +0 -150
  659. package/node_modules/better-dsh/dsh-docs/user/develop/practice/dynamic-cordis.md +0 -15
  660. package/node_modules/better-dsh/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +0 -15
  661. package/node_modules/better-dsh/dsh-docs/user/develop/practice/index.md +0 -155
  662. package/node_modules/better-dsh/dsh-docs/user/develop/practice/index.zh.md +0 -155
  663. package/node_modules/better-dsh/dsh-docs/user/develop/practice/llm-adapter.md +0 -189
  664. package/node_modules/better-dsh/dsh-docs/user/develop/practice/llm-adapter.zh.md +0 -189
  665. package/node_modules/better-dsh/dsh-docs/user/guide/github-review.md +0 -102
  666. package/node_modules/better-dsh/dsh-docs/user/guide/github-review.zh.md +0 -102
  667. package/node_modules/better-dsh/dsh-docs/user/guide/index.md +0 -30
  668. package/node_modules/better-dsh/dsh-docs/user/guide/index.zh.md +0 -30
  669. package/node_modules/better-dsh/dsh-docs/user/guide/mcp-memory.md +0 -101
  670. package/node_modules/better-dsh/dsh-docs/user/guide/mcp-memory.zh.md +0 -101
  671. package/node_modules/better-dsh/dsh-docs/user/guide/network-proxy.md +0 -85
  672. package/node_modules/better-dsh/dsh-docs/user/guide/network-proxy.zh.md +0 -85
  673. package/node_modules/better-dsh/dsh-docs/user/guide/providers.md +0 -190
  674. package/node_modules/better-dsh/dsh-docs/user/guide/providers.zh.md +0 -190
  675. package/node_modules/better-dsh/dsh-docs/user/guide/python-sdk.md +0 -150
  676. package/node_modules/better-dsh/dsh-docs/user/guide/python-sdk.zh.md +0 -150
  677. package/node_modules/better-dsh/dsh-docs/user/guide/schedule.md +0 -21
  678. package/node_modules/better-dsh/dsh-docs/user/guide/schedule.zh.md +0 -21
  679. package/node_modules/better-dsh/dsh-docs/user/index.md +0 -11
  680. package/node_modules/better-dsh/dsh-docs/user/index.zh.md +0 -11
  681. package/node_modules/better-dsh/dsh-docs/web-styling.md +0 -29
  682. package/node_modules/better-dsh/dsh-docs/web-styling.zh.md +0 -29
  683. package/node_modules/better-dsh/eval-description.md +0 -33
  684. package/node_modules/better-dsh/lib/BrowserWebSocketTransport-D1aFReu_.js +0 -4
  685. package/node_modules/better-dsh/lib/BrowserWebSocketTransport-wm99h94r.js +0 -39
  686. package/node_modules/better-dsh/lib/LaunchOptions-B874eBu2.js +0 -4
  687. package/node_modules/better-dsh/lib/LaunchOptions-kGXcZOe0.js +0 -17
  688. package/node_modules/better-dsh/lib/NodeWebSocketTransport-BRLjmu2R.js +0 -4
  689. package/node_modules/better-dsh/lib/NodeWebSocketTransport-D9ysYGLM.js +0 -3634
  690. package/node_modules/better-dsh/lib/ast-assets/ast-grep.wasm +0 -0
  691. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-bash.wasm +0 -0
  692. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-c.wasm +0 -0
  693. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-cpp.wasm +0 -0
  694. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-css.wasm +0 -0
  695. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-go.wasm +0 -0
  696. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-html.wasm +0 -0
  697. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-javascript.wasm +0 -0
  698. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-json.wasm +0 -0
  699. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-python.wasm +0 -0
  700. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-ruby.wasm +0 -0
  701. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-rust.wasm +0 -0
  702. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-tsx.wasm +0 -0
  703. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-typescript.wasm +0 -0
  704. package/node_modules/better-dsh/lib/ast-assets/tree-sitter-yaml.wasm +0 -0
  705. package/node_modules/better-dsh/lib/ast-assets/tree-sitter.wasm +0 -0
  706. package/node_modules/better-dsh/lib/bidi-BalpKaJc.js +0 -16106
  707. package/node_modules/better-dsh/lib/bundle-delivery.d.ts +0 -20
  708. package/node_modules/better-dsh/lib/bundle-delivery.js +0 -209
  709. package/node_modules/better-dsh/lib/chunk-DQxbwPpZ.js +0 -30
  710. package/node_modules/better-dsh/lib/client/index.js +0 -712
  711. package/node_modules/better-dsh/lib/compaction/index.d.ts +0 -57
  712. package/node_modules/better-dsh/lib/compaction/index.js +0 -145
  713. package/node_modules/better-dsh/lib/failover/index.d.ts +0 -59
  714. package/node_modules/better-dsh/lib/failover/index.js +0 -147
  715. package/node_modules/better-dsh/lib/fs-aware/sandbox-plugin.d.ts +0 -71
  716. package/node_modules/better-dsh/lib/fs-aware/sandbox-plugin.js +0 -249
  717. package/node_modules/better-dsh/lib/hmr.d.ts +0 -32
  718. package/node_modules/better-dsh/lib/hmr.js +0 -49
  719. package/node_modules/better-dsh/lib/index-DTDXUe6m.d.ts +0 -208
  720. package/node_modules/better-dsh/lib/index-browser-CysrjMyM.js +0 -21061
  721. package/node_modules/better-dsh/lib/index.d.ts +0 -705
  722. package/node_modules/better-dsh/lib/index.js +0 -3816
  723. package/node_modules/better-dsh/lib/kernel-bridge.py +0 -172
  724. package/node_modules/better-dsh/lib/kernel-env-D8UOWeji.js +0 -195
  725. package/node_modules/better-dsh/lib/kernel-env.d.ts +0 -80
  726. package/node_modules/better-dsh/lib/kernel-env.js +0 -3
  727. package/node_modules/better-dsh/lib/lib-C8_jXvwA.js +0 -894
  728. package/node_modules/better-dsh/lib/lsp-server-registry-BXvUTBY7.js +0 -3
  729. package/node_modules/better-dsh/lib/lsp-server-registry-CH9WNFFt.js +0 -972
  730. package/node_modules/better-dsh/lib/main-BQeFrBM1.js +0 -3
  731. package/node_modules/better-dsh/lib/main-CupOhMp5.js +0 -1432
  732. package/node_modules/better-dsh/lib/mobile/plugin.d.ts +0 -29
  733. package/node_modules/better-dsh/lib/mobile/plugin.js +0 -54
  734. package/node_modules/better-dsh/lib/native-capture-BEByDXYM.js +0 -68
  735. package/node_modules/better-dsh/lib/puppeteer-core-CSk2PtSm.js +0 -1136
  736. package/node_modules/better-dsh/lib/py-sdk-D7klhpWb.js +0 -178
  737. package/node_modules/better-dsh/lib/py-sdk.d.ts +0 -19
  738. package/node_modules/better-dsh/lib/py-sdk.js +0 -3
  739. package/node_modules/better-dsh/lib/remote/plugin.d.ts +0 -24
  740. package/node_modules/better-dsh/lib/remote/plugin.js +0 -1190
  741. package/node_modules/better-dsh/lib/url-schemes/index.d.ts +0 -88
  742. package/node_modules/better-dsh/lib/url-schemes/index.js +0 -12229
  743. package/node_modules/better-dsh/lib/util-BHL_dfV_.js +0 -2953
  744. package/node_modules/better-dsh/lib/wasm_bg-CNXhHjVg.js +0 -1291
  745. package/node_modules/better-dsh/lib/web-password.d.ts +0 -156
  746. package/node_modules/better-dsh/lib/web-password.js +0 -562
  747. package/node_modules/better-dsh/lib/web-tree-sitter-CPrPD4J2.js +0 -3440
  748. package/node_modules/better-dsh/lib/web-trust-D6gJpUMf.js +0 -393
  749. package/node_modules/better-dsh/lib/web-trust-Dej_RI2B.d.ts +0 -113
  750. package/node_modules/better-dsh/lib/web-trust.d.ts +0 -3
  751. package/node_modules/better-dsh/lib/web-trust.js +0 -4
  752. package/node_modules/better-dsh/lib/webserver.d.ts +0 -10
  753. package/node_modules/better-dsh/lib/webserver.js +0 -19
  754. package/node_modules/better-dsh/lib/welcome-notice.d.ts +0 -18
  755. package/node_modules/better-dsh/lib/welcome-notice.js +0 -59
  756. package/node_modules/better-dsh/lib/wrap-T4I0nfPM.js +0 -750
  757. package/node_modules/better-dsh/package.json +0 -430
  758. package/node_modules/better-dsh/scripts/kernel-provision.mjs +0 -35
  759. package/node_modules/better-dsh/scripts/register-bundle.mjs +0 -80
  760. 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 };