diff --git a/catalog.json b/catalog.json index 79dfc14..61410cb 100644 --- a/catalog.json +++ b/catalog.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "providerId": "official", "name": "PI-Desktop Official Plugins", - "updatedAt": "2026-09-20T17:49:14Z", + "updatedAt": "2026-10-06T15:15:25Z", "homepage": "https://github.com/vastsa/pi-desktop-plugins", "plugins": [ { @@ -432,13 +432,13 @@ "safetyNotes": "\u4fbf\u7b7e\u6570\u636e\u4ec5\u5b58\u4e8e\u63d2\u4ef6\u81ea\u5df1\u7684 settings \u4e2d\uff0c\u4e0d\u8bbf\u95ee\u5de5\u4f5c\u533a\u6216\u7f51\u7edc\uff1b\u70b9\u51fb\u4fbf\u7b7e\u5185\u7684\u5916\u90e8\u94fe\u63a5\u4f1a\u6253\u5f00\u7cfb\u7edf\u6d4f\u89c8\u5668\u3002", "versions": [ { - "version": "0.1.5", - "publishedAt": "2026-09-12T17:13:25Z", - "changelog": "Release 0.1.5: reserves space for the host window-control capsule so top-right panel actions no longer overlap it. Release 0.1.4: gives the panel an explicit full-height page surface and keeps the host window-control capsule synchronized with live theme changes. Release 0.1.3: migrates the panel to v3 paint-through chrome so top-band controls remain clickable without the legacy 46px blank area. Release 0.1.2: refreshes the sticky-notes panel chrome, controls, focus states, dialogs, and compact responsive spacing. Release 0.1.1: adapts the panel to PI-Desktop's cross-platform 46px host drag band and minimal three-button window-control capsule. First release: multiple notes, Markdown preview/editing, task lists, highlights, image paste, and recycle bin.", + "version": "0.1.6", + "publishedAt": "2026-10-06T15:15:25Z", + "changelog": "Release 0.1.6: leads every agent-tool description with explicit when-to-use trigger conditions and example phrasings (including Chinese), so the agent picks the right sticky-note tool from the user's goal; purge_note now states it must never serve an ordinary delete request. Release 0.1.5: reserves space for the host window-control capsule so top-right panel actions no longer overlap it. Release 0.1.4: gives the panel an explicit full-height page surface and keeps the host window-control capsule synchronized with live theme changes. Release 0.1.3: migrates the panel to v3 paint-through chrome so top-band controls remain clickable without the legacy 46px blank area. Release 0.1.2: refreshes the sticky-notes panel chrome, controls, focus states, dialogs, and compact responsive spacing. Release 0.1.1: adapts the panel to PI-Desktop's cross-platform 46px host drag band and minimal three-button window-control capsule. First release: multiple notes, Markdown preview/editing, task lists, highlights, image paste, and recycle bin.", "minPiDesktop": ">=0.7.1", - "shasum": "816ea81e1b029f7534b0600feabcdf4b272f36b9082679bcad658888ae73fae5", - "url": "packages/pi.bianqian-0.1.5.piplug", - "sizeBytes": 1064430, + "shasum": "7980707fabf25e7427775feb3681f34eb80e82af5df7b349cf0df0ac5560c9e0", + "url": "packages/pi.bianqian-0.1.6.piplug", + "sizeBytes": 1065975, "permissions": [ "ui.panel", "agent.tool.register", @@ -938,13 +938,13 @@ "safetyNotes": "SSH credentials are never persisted by this plugin. Passwords entered in the panel are held in memory for at most 30 minutes and private-key contents stay outside the plugin. Authentication is delegated to the local OpenSSH client. The panel stores only connection metadata in plugin settings; AI tools can connect to configured hosts and execute remote shell commands, so PI-Desktop's high-risk tool policy must remain enabled.", "versions": [ { - "version": "0.1.5", - "publishedAt": "2026-09-13T07:10:40Z", - "changelog": "Release 0.1.5: restores ProgramData in PI-Desktop's minimal Windows plugin environment so OpenSSH no longer exits 255 silently before connecting; adds a real OpenSSH startup regression test. Release 0.1.4: closes the askpass broker lifecycle boundary so an unload cannot start a new SSH child after the broker has been cleaned up. Release 0.1.3: keeps OpenSSH transport diagnostics visible on Windows instead of suppressing banner-exchange errors behind exit 255, preserves non-default config files for imported aliases without bypassing system config for the default file, detaches an alias when its explicit connection fields are edited, prevents one-shot commands from inheriting plugin stdin, passes special-character passwords through a one-shot local askpass broker without placing them in the ssh process environment, and preserves missing-client diagnostics through the panel bridge. Release 0.1.2: imports concrete hosts from the local OpenSSH config, preserves aliases for complete SSH behavior, adds identity-file selection, surfaces OpenSSH diagnostics instead of a bare exit 255, inherits Windows system environment so ssh.exe can run, and stops leftover ssh processes from throwing on quit. Release 0.1.1: strengthens destructive-command filtering and makes one-time dangerous-command approval available only from the SSH Manager panel. Release 0.1.0: adds local SSH host profiles, strict host-key verification, OpenSSH key/agent and transient password authentication, bounded remote command execution, a focused management panel, and an AI skill describing safe SSH workflows.", + "version": "0.1.6", + "publishedAt": "2026-10-06T15:15:25Z", + "changelog": "Release 0.1.6: leads every agent-tool description with explicit when-to-use trigger conditions and example phrasings (including Chinese), and states the override boundary \u2014 AI cannot authorize a blocked command, only the panel's one-time approval can. Release 0.1.5: restores ProgramData in PI-Desktop's minimal Windows plugin environment so OpenSSH no longer exits 255 silently before connecting; adds a real OpenSSH startup regression test. Release 0.1.4: closes the askpass broker lifecycle boundary so an unload cannot start a new SSH child after the broker has been cleaned up. Release 0.1.3: keeps OpenSSH transport diagnostics visible on Windows instead of suppressing banner-exchange errors behind exit 255, preserves non-default config files for imported aliases without bypassing system config for the default file, detaches an alias when its explicit connection fields are edited, prevents one-shot commands from inheriting plugin stdin, passes special-character passwords through a one-shot local askpass broker without placing them in the ssh process environment, and preserves missing-client diagnostics through the panel bridge. Release 0.1.2: imports concrete hosts from the local OpenSSH config, preserves aliases for complete SSH behavior, adds identity-file selection, surfaces OpenSSH diagnostics instead of a bare exit 255, inherits Windows system environment so ssh.exe can run, and stops leftover ssh processes from throwing on quit. Release 0.1.1: strengthens destructive-command filtering and makes one-time dangerous-command approval available only from the SSH Manager panel. Release 0.1.0: adds local SSH host profiles, strict host-key verification, OpenSSH key/agent and transient password authentication, bounded remote command execution, a focused management panel, and an AI skill describing safe SSH workflows.", "minPiDesktop": ">=0.2.9", - "shasum": "02dfeca1840ea9d8a572bc01a1913800bed68ee97b36a5a92ecd7f9fe9817067", - "url": "packages/pi.ssh-manager-0.1.5.piplug", - "sizeBytes": 146730, + "shasum": "3c2eb91e4d295015514aad707cf1020b2eef30d1adfb20e71e2c8b60a15658f6", + "url": "packages/pi.ssh-manager-0.1.6.piplug", + "sizeBytes": 147655, "permissions": [ "ui.panel", "agent.tool.register", diff --git a/packages/pi.bianqian-0.1.6.piplug b/packages/pi.bianqian-0.1.6.piplug new file mode 100644 index 0000000..9bb68ad Binary files /dev/null and b/packages/pi.bianqian-0.1.6.piplug differ diff --git a/packages/pi.ssh-manager-0.1.6.piplug b/packages/pi.ssh-manager-0.1.6.piplug new file mode 100644 index 0000000..7b29ffe Binary files /dev/null and b/packages/pi.ssh-manager-0.1.6.piplug differ diff --git a/plugins/pi.bianqian/manifest.json b/plugins/pi.bianqian/manifest.json index 8dd3fc4..b4a75fa 100644 --- a/plugins/pi.bianqian/manifest.json +++ b/plugins/pi.bianqian/manifest.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "id": "pi.bianqian", "name": "便签", - "version": "0.1.5", + "version": "0.1.6", "description": "Markdown 桌面便签:多便签管理、实时预览、任务列表勾选、荧光笔高亮与回收站。Sticky notes with Markdown preview, task lists, text highlights and recycle bin.", "i18n": { "en": { @@ -43,7 +43,7 @@ "agentTools": [ { "name": "list_notes", - "description": "List all sticky notes with title, snippet, color and timestamps; deleted notes are included only when includeDeleted is true.", + "description": "Use when the user wants to see or review their sticky notes, e.g. \"列出我的便签\", \"看看我记过什么\", \"list my sticky notes\". Lists all sticky notes with title, snippet, color and timestamps; deleted notes appear only when includeDeleted is true.", "risk": "low", "schema": { "type": "object", @@ -52,7 +52,7 @@ }, { "name": "get_note", - "description": "Read one sticky note's full markdown content by id.", + "description": "Use when the user wants the full content of one note whose id is already known, e.g. \"把那条便签的原文给我\", \"show that note in full\". Reads one sticky note's full markdown content by id; prefer search_notes when the id is unknown.", "risk": "low", "schema": { "type": "object", @@ -62,7 +62,7 @@ }, { "name": "search_notes", - "description": "Search sticky notes by title, snippet or content (case-insensitive substring).", + "description": "Use when the user looks for a note by keyword or topic without an id, e.g. \"找一下我记过的关于部署的便签\", \"find the note about the deploy\". Case-insensitive substring search over title, snippet and content.", "risk": "low", "schema": { "type": "object", @@ -72,7 +72,7 @@ }, { "name": "create_note", - "description": "Create a new sticky note with optional markdown content and color. The title is derived from the content's first heading or line.", + "description": "Use when the user asks to jot down, record or remember something as a sticky note, e.g. \"记一下:周五三点开会\", \"帮我记着这个地址\", \"jot this down in a note\". Not for structured todos (use pi.todo) or goals (use pi.goal-x). Creates a note with optional markdown content and color; the title derives from the first heading or line.", "risk": "medium", "schema": { "type": "object", @@ -84,7 +84,7 @@ }, { "name": "update_note", - "description": "Update a sticky note's content, color or mode. Content changes re-derive the title automatically.", + "description": "Use when the user asks to edit, extend or correct an existing note, e.g. \"把那条便签补一行端口号\", \"edit the note to add the port\". Updates content, color or mode; content changes re-derive the title.", "risk": "medium", "schema": { "type": "object", @@ -99,7 +99,7 @@ }, { "name": "delete_note", - "description": "Move a sticky note to the recycle bin (soft delete; restorable via restore_note).", + "description": "Use when the user asks to remove a note they no longer need, e.g. \"把这条便签删了\", \"delete the old note\". Soft-deletes to the recycle bin (restorable via restore_note), so prefer it over purge_note.", "risk": "medium", "schema": { "type": "object", @@ -109,7 +109,7 @@ }, { "name": "restore_note", - "description": "Restore a soft-deleted sticky note from the recycle bin.", + "description": "Use when the user wants a recently deleted note back, e.g. \"刚才删错了一条,恢复一下\", \"restore the note I deleted\". Restores a soft-deleted note from the recycle bin.", "risk": "medium", "schema": { "type": "object", @@ -119,7 +119,7 @@ }, { "name": "purge_note", - "description": "Permanently delete a sticky note. This cannot be undone.", + "description": "Use only when the user explicitly asks to permanently destroy a note, e.g. \"彻底删掉这条,不用恢复\", \"purge it permanently\". Never use for an ordinary delete request — that is delete_note. Permanently deletes and cannot be undone.", "risk": "high", "schema": { "type": "object", @@ -132,7 +132,7 @@ "permissions": ["ui.panel", "agent.tool.register", "agent.prompt.inject", "shell.openExternal"], "engines": { "piDesktop": ">=0.7.1" }, "categories": ["productivity", "community"], - "changelog": "Release 0.1.5: reserves space for the host window-control capsule so top-right panel actions no longer overlap it. Release 0.1.4: gives the panel an explicit full-height page surface and keeps the host window-control capsule synchronized with live theme changes. Release 0.1.3: migrates the panel to v3 paint-through chrome so top-band controls remain clickable without the legacy 46px blank area. Release 0.1.2: refreshes the sticky-notes panel chrome, controls, focus states, dialogs, and compact responsive spacing. Release 0.1.1: adapts the panel to PI-Desktop's cross-platform 46px host drag band and minimal three-button window-control capsule. First release: multiple notes, Markdown preview/editing, task lists, highlights, image paste, and recycle bin.", + "changelog": "Release 0.1.6: leads every agent-tool description with explicit when-to-use trigger conditions and example phrasings (including Chinese), so the agent picks the right sticky-note tool from the user's goal; purge_note now states it must never serve an ordinary delete request. Release 0.1.5: reserves space for the host window-control capsule so top-right panel actions no longer overlap it. Release 0.1.4: gives the panel an explicit full-height page surface and keeps the host window-control capsule synchronized with live theme changes. Release 0.1.3: migrates the panel to v3 paint-through chrome so top-band controls remain clickable without the legacy 46px blank area. Release 0.1.2: refreshes the sticky-notes panel chrome, controls, focus states, dialogs, and compact responsive spacing. Release 0.1.1: adapts the panel to PI-Desktop's cross-platform 46px host drag band and minimal three-button window-control capsule. First release: multiple notes, Markdown preview/editing, task lists, highlights, image paste, and recycle bin.", "safetyNotes": "便签数据仅存于插件自己的 settings 中,不访问工作区或网络;点击便签内的外部链接会打开系统浏览器。", "activationEvents": ["onCommand:bianqian.open", "onCommand:bianqian.new", "onStartup"] } diff --git a/plugins/pi.ssh-manager/manifest.json b/plugins/pi.ssh-manager/manifest.json index eb110f5..5611842 100644 --- a/plugins/pi.ssh-manager/manifest.json +++ b/plugins/pi.ssh-manager/manifest.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "id": "pi.ssh-manager", "name": "SSH Manager", - "version": "0.1.5", + "version": "0.1.6", "description": "A local-first SSH host manager for PI-Desktop with local OpenSSH config import, identity-file selection, and bounded high-risk commands.", "i18n": { "en": { @@ -21,7 +21,7 @@ "developer-tools", "official" ], - "changelog": "Release 0.1.5: restores ProgramData in PI-Desktop's minimal Windows plugin environment so OpenSSH no longer exits 255 silently before connecting; adds a real OpenSSH startup regression test. Release 0.1.4: closes the askpass broker lifecycle boundary so an unload cannot start a new SSH child after the broker has been cleaned up. Release 0.1.3: keeps OpenSSH transport diagnostics visible on Windows instead of suppressing banner-exchange errors behind exit 255, preserves non-default config files for imported aliases without bypassing system config for the default file, detaches an alias when its explicit connection fields are edited, prevents one-shot commands from inheriting plugin stdin, passes special-character passwords through a one-shot local askpass broker without placing them in the ssh process environment, and preserves missing-client diagnostics through the panel bridge. Release 0.1.2: imports concrete hosts from the local OpenSSH config, preserves aliases for complete SSH behavior, adds identity-file selection, surfaces OpenSSH diagnostics instead of a bare exit 255, inherits Windows system environment so ssh.exe can run, and stops leftover ssh processes from throwing on quit. Release 0.1.1: strengthens destructive-command filtering and makes one-time dangerous-command approval available only from the SSH Manager panel. Release 0.1.0: adds local SSH host profiles, strict host-key verification, OpenSSH key/agent and transient password authentication, bounded remote command execution, a focused management panel, and an AI skill describing safe SSH workflows.", + "changelog": "Release 0.1.6: leads every agent-tool description with explicit when-to-use trigger conditions and example phrasings (including Chinese), and states the override boundary — AI cannot authorize a blocked command, only the panel's one-time approval can. Release 0.1.5: restores ProgramData in PI-Desktop's minimal Windows plugin environment so OpenSSH no longer exits 255 silently before connecting; adds a real OpenSSH startup regression test. Release 0.1.4: closes the askpass broker lifecycle boundary so an unload cannot start a new SSH child after the broker has been cleaned up. Release 0.1.3: keeps OpenSSH transport diagnostics visible on Windows instead of suppressing banner-exchange errors behind exit 255, preserves non-default config files for imported aliases without bypassing system config for the default file, detaches an alias when its explicit connection fields are edited, prevents one-shot commands from inheriting plugin stdin, passes special-character passwords through a one-shot local askpass broker without placing them in the ssh process environment, and preserves missing-client diagnostics through the panel bridge. Release 0.1.2: imports concrete hosts from the local OpenSSH config, preserves aliases for complete SSH behavior, adds identity-file selection, surfaces OpenSSH diagnostics instead of a bare exit 255, inherits Windows system environment so ssh.exe can run, and stops leftover ssh processes from throwing on quit. Release 0.1.1: strengthens destructive-command filtering and makes one-time dangerous-command approval available only from the SSH Manager panel. Release 0.1.0: adds local SSH host profiles, strict host-key verification, OpenSSH key/agent and transient password authentication, bounded remote command execution, a focused management panel, and an AI skill describing safe SSH workflows.", "safetyNotes": "SSH credentials are never persisted by this plugin. Passwords entered in the panel are held in memory for at most 30 minutes and private-key contents stay outside the plugin. Authentication is delegated to the local OpenSSH client. The panel stores only connection metadata in plugin settings; AI tools can connect to configured hosts and execute remote shell commands, so PI-Desktop's high-risk tool policy must remain enabled.", "main": "main.js", "ui": { @@ -52,7 +52,7 @@ "agentTools": [ { "name": "ssh_list_hosts", - "description": "List configured SSH host metadata without returning credential paths or secrets.", + "description": "Use when the user asks which SSH hosts or servers are available, e.g. \"我配了哪些服务器\", \"which SSH hosts are configured\". Lists configured host metadata without returning credential paths or secrets.", "risk": "low", "schema": { "type": "object", @@ -61,7 +61,7 @@ }, { "name": "ssh_connect", - "description": "Connect to a configured SSH host using local OpenSSH key, agent, config, or transient panel-password authentication.", + "description": "Use when the user wants to open a session to one of their configured SSH hosts, e.g. \"连一下我的测试服务器\", \"connect to the prod box\". Only configured host profiles are addressable — never fabricate a profile_id. Authenticates via local OpenSSH key, agent, config, or transient panel password.", "risk": "high", "schema": { "type": "object", @@ -86,7 +86,7 @@ }, { "name": "ssh_execute", - "description": "Execute one bounded remote shell command on a configured SSH host; conservative filtering blocks dangerous commands and AI cannot authorize an override.", + "description": "Use when the user asks to run a command or check something on an SSH host, e.g. \"看看服务器磁盘还剩多少\", \"run df -h on the server\", \"查一下服务状态\". One bounded command per call; mutating or dangerous commands are statically blocked and AI cannot authorize an override — direct the user to the panel's one-time approval instead. Not for interactive shell sessions.", "risk": "high", "schema": { "type": "object", @@ -125,7 +125,7 @@ }, { "name": "ssh_disconnect", - "description": "Forget a logical SSH session; no remote process is left running by the plugin.", + "description": "Use when the user asks to close or clean up an SSH session, e.g. \"断开服务器连接\", \"close the SSH session\". Forgets the logical session; no remote process is left running.", "risk": "low", "schema": { "type": "object", diff --git a/tests/bianqian.test.mjs b/tests/bianqian.test.mjs index a8b3fd0..9843f81 100644 --- a/tests/bianqian.test.mjs +++ b/tests/bianqian.test.mjs @@ -65,7 +65,7 @@ function makeNote(overrides = {}) { test("manifest declares the expected identity, permissions and contributions", () => { assert.equal(manifest.schemaVersion, 1); assert.equal(manifest.id, "pi.bianqian"); - assert.equal(manifest.version, "0.1.5"); + assert.equal(manifest.version, "0.1.6"); assert.match(manifest.engines.piDesktop, /^>=/); assert.equal(manifest.ui.panel, "renderer/index.html"); assert.deepEqual(manifest.permissions, [ diff --git a/tests/ssh-manager.test.mjs b/tests/ssh-manager.test.mjs index 775225f..aae6f3f 100644 --- a/tests/ssh-manager.test.mjs +++ b/tests/ssh-manager.test.mjs @@ -90,7 +90,7 @@ function resolveAvailableWindowsSshCommand() { test("manifest declares a high-risk SSH agent surface with the smallest plugin permissions", () => { assert.equal(manifest.schemaVersion, 1); assert.equal(manifest.id, "pi.ssh-manager"); - assert.equal(manifest.version, "0.1.5"); + assert.equal(manifest.version, "0.1.6"); assert.equal(manifest.ui.panel, "renderer/index.html"); assert.deepEqual(manifest.permissions, [ "ui.panel",