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