pi-ssh-remote 0.1.8 → 0.1.9

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.
package/CHANGELOG.md CHANGED
@@ -18,6 +18,20 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Rel
18
18
 
19
19
  - None.
20
20
 
21
+ ## [0.1.9] - 2026-08-12
22
+
23
+ ### Added
24
+
25
+ - None.
26
+
27
+ ### Changed
28
+
29
+ - Removed the redundant `SSH remote` prefix from footer status labels.
30
+
31
+ ### Fixed
32
+
33
+ - Kept injected server memory as a single stable context prefix so tool continuations do not repeatedly move it to the end of the conversation or invalidate cached provider context.
34
+
21
35
  ## [0.1.8] - 2026-08-10
22
36
 
23
37
  ### Added
@@ -161,7 +175,8 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Rel
161
175
 
162
176
  - None.
163
177
 
164
- [Unreleased]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.8...HEAD
178
+ [Unreleased]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.9...HEAD
179
+ [0.1.9]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.8...v0.1.9
165
180
  [0.1.8]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.7...v0.1.8
166
181
  [0.1.7]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.6...v0.1.7
167
182
  [0.1.6]: https://github.com/petrichor20211/pi-ssh-remote/compare/v0.1.5...v0.1.6
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -73,7 +73,7 @@ Requires Node.js 20+. The remote server must provide Bash, SFTP, and GNU `timeou
73
73
  From this point, normal Pi operations target `/srv/project` on the remote server. The footer makes that routing explicit:
74
74
 
75
75
  ```text
76
- SSH remote H100 training server (root@gpu-box.example.com:2202):/srv/project
76
+ H100 training server (root@gpu-box.example.com:2202):/srv/project
77
77
  ```
78
78
 
79
79
  Return to local tools with:
@@ -215,13 +215,13 @@ The extension currently supports direct SSH commands with `-p`, `-l`, and `-i`.
215
215
 
216
216
  ## Releases
217
217
 
218
- Latest release: [v0.1.8](https://github.com/petrichor20211/pi-ssh-remote/releases/tag/v0.1.8)
218
+ Latest release: [v0.1.9](https://github.com/petrichor20211/pi-ssh-remote/releases/tag/v0.1.9)
219
219
 
220
220
  | Version | Date | Highlights |
221
221
  |---|---|---|
222
+ | [0.1.9](CHANGELOG.md#019---2026-08-12) | 2026-08-12 | Stable deduplicated server-memory context and shorter footer labels |
222
223
  | [0.1.8](CHANGELOG.md#018---2026-08-10) | 2026-08-10 | Explicit private-key login, cross-port server memory, and the shorter `remote` tool name |
223
224
  | [0.1.7](CHANGELOG.md#017---2026-08-05) | 2026-08-05 | Session-aware SSH workspace restoration for new, forked, and resumed sessions |
224
- | [0.1.6](CHANGELOG.md#016---2026-08-05) | 2026-08-05 | Bounded remote reads, streamed command output, and per-turn output budgets |
225
225
 
226
226
  See [CHANGELOG.md](CHANGELOG.md) for the complete release history, including additions, behavior changes, and bug fixes.
227
227
 
package/README.zh-CN.md CHANGED
@@ -39,7 +39,7 @@ ssh user@host "cd /path && ..."
39
39
  插件会把当前远程目录和服务器信息写入 Pi 的上下文,并显示在底部状态栏:
40
40
 
41
41
  ```text
42
- SSH remote H100 训练机 (root@gpu-box.example.com:2202):/srv/project
42
+ H100 训练机 (root@gpu-box.example.com:2202):/srv/project
43
43
  ```
44
44
 
45
45
  这样无论是用户还是 Agent,都能随时确认当前操作发生在本地还是远端,减少误操作。
@@ -294,13 +294,13 @@ Pi 会通过插件提供的 `remote` 工具完成这些操作。
294
294
 
295
295
  ## 版本发布
296
296
 
297
- 最新版本:[v0.1.8](https://github.com/petrichor20211/pi-ssh-remote/releases/tag/v0.1.8)
297
+ 最新版本:[v0.1.9](https://github.com/petrichor20211/pi-ssh-remote/releases/tag/v0.1.9)
298
298
 
299
299
  | 版本 | 日期 | 主要内容 |
300
300
  |---|---|---|
301
+ | [0.1.9](CHANGELOG.md#019---2026-08-12) | 2026-08-12 | 稳定且去重的服务器记忆上下文与更短的状态栏标签 |
301
302
  | [0.1.8](CHANGELOG.md#018---2026-08-10) | 2026-08-10 | 显式私钥登录、跨端口服务器记忆与更短的 `remote` 工具名 |
302
303
  | [0.1.7](CHANGELOG.md#017---2026-08-05) | 2026-08-05 | 新建、分叉和恢复 session 时自动恢复对应 SSH 工作区 |
303
- | [0.1.6](CHANGELOG.md#016---2026-08-05) | 2026-08-05 | 有界远端读取、流式命令输出与每轮输出预算 |
304
304
 
305
305
  完整的新增内容、行为变更和 Bug 修复记录请查看 [CHANGELOG.md](CHANGELOG.md)。
306
306
 
package/index.ts CHANGED
@@ -931,8 +931,8 @@ export default function sshRemoteExtension(pi: ExtensionAPI) {
931
931
  const status = (ctx: any) => {
932
932
  currentCtx = ctx;
933
933
  if (!remote) ctx.ui.setStatus("ssh-remote", undefined);
934
- else if (routeRemoteTools) ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("accent", `SSH remote ${endpointDisplayLabel(remote)}:${remote.cwd}`));
935
- else ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("accent", `SSH remote tunnel ${[...forwardServers.keys()].join(",") || endpointDisplayLabel(remote)}`));
934
+ else if (routeRemoteTools) ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("accent", `${endpointDisplayLabel(remote)}:${remote.cwd}`));
935
+ else ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("accent", `tunnel ${[...forwardServers.keys()].join(",") || endpointDisplayLabel(remote)}`));
936
936
  };
937
937
 
938
938
  const attachClient = (state: RemoteState) => {
@@ -940,7 +940,7 @@ export default function sshRemoteExtension(pi: ExtensionAPI) {
940
940
  client.on("close", () => {
941
941
  if (remote?.client !== client) return;
942
942
  if (currentCtx) {
943
- currentCtx.ui.setStatus("ssh-remote", currentCtx.ui.theme.fg("warning", `SSH remote reconnecting ${endpointDisplayLabel(state)}…`));
943
+ currentCtx.ui.setStatus("ssh-remote", currentCtx.ui.theme.fg("warning", `reconnecting ${endpointDisplayLabel(state)}…`));
944
944
  }
945
945
  void reconnectRemote().catch((error) => {
946
946
  if (currentCtx) currentCtx.ui.notify(`SSH remote automatic reconnection failed: ${(error as Error).message}`, "error");
@@ -1055,7 +1055,7 @@ export default function sshRemoteExtension(pi: ExtensionAPI) {
1055
1055
  }
1056
1056
 
1057
1057
  let password = getCachedPassword(parsed);
1058
- ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("warning", `SSH remote connecting ${endpointDisplayLabel(parsed)}…`));
1058
+ ctx.ui.setStatus("ssh-remote", ctx.ui.theme.fg("warning", `connecting ${endpointDisplayLabel(parsed)}…`));
1059
1059
  try {
1060
1060
  let authentication = parsed.identityFile
1061
1061
  ? await privateKeyAuthentication(parsed, ctx)
@@ -1679,14 +1679,17 @@ export default function sshRemoteExtension(pi: ExtensionAPI) {
1679
1679
  if (!remote || !routeRemoteTools) return undefined;
1680
1680
  const content = serverMemoryContext(remote);
1681
1681
  if (!content) return undefined;
1682
+ const messages = event.messages.filter((message) =>
1683
+ message.role !== "custom" || message.customType !== "ssh-remote-server-memory"
1684
+ );
1682
1685
  return {
1683
- messages: [...event.messages, {
1686
+ messages: [{
1684
1687
  role: "custom",
1685
1688
  customType: "ssh-remote-server-memory",
1686
1689
  content,
1687
1690
  display: false,
1688
1691
  timestamp: Date.now(),
1689
- }],
1692
+ }, ...messages],
1690
1693
  };
1691
1694
  });
1692
1695
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-ssh-remote",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Persistent remote SSH workspaces for Pi.",
5
5
  "type": "module",
6
6
  "author": "Yutong Bian",