diff --git a/CHANGELOG.md b/CHANGELOG.md index 73eca1d..141b1bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,14 @@ pin and a line to read before you move. ## [Unreleased] +### Changed + +- **The GitHub mark is restored.** The sidebar, settings, command center and timeline cards use + an inline Octicons SVG instead of a Lucide icon name, so removing Lucide's brand icons cannot + break the plugin. The mark inherits the host's color in light and dark themes. +- **Requires Paseo 0.13.0-beta.1 or newer.** Inline SVG icons need the 0.13 icon API; the SDK and + its client/protocol type dependencies now target 0.13.0. + ## [1.0.1] — 2026-09-12 ### Changed diff --git a/CLAUDE.md b/CLAUDE.md index 828e6e5..166e7ec 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -469,7 +469,7 @@ row that fails validation still renders as nothing rather than throwing. Still `props.navigation.openAgent({ agentId })`, run in the client bundle because the server half lives beside the daemon, which on a remote host is a different machine from the one the user is -looking at. The plugin now requires Paseo `>=0.8.0` outright, so the pre-navigation-prop fallback +looking at. The plugin now requires Paseo `>=0.13.0-beta.1` outright, so the pre-navigation-prop fallback this section used to describe is gone: every client that can run this bundle at all received the `navigation` prop with it. diff --git a/README.md b/README.md index a627008..9d78862 100644 --- a/README.md +++ b/README.md @@ -43,9 +43,9 @@ command to run and a button to copy it, rather than an error. ## Install -Requires Paseo **0.8.0 or newer** on the daemon *and* on the app, plus the +Requires Paseo **0.13.0-beta.1 or newer** on the daemon *and* on the app, plus the [`gh` CLI](https://cli.github.com/) authenticated on the daemon machine — the plugin shells out to -it and never handles a token itself. +it and never handles a token itself. Inline SVG icons require the 0.13 icon API. ```bash paseo plugin add alysnnix/paseo-github-integration diff --git a/client/board/use-board-overlays.tsx b/client/board/use-board-overlays.tsx index b7e16dc..fac8752 100644 --- a/client/board/use-board-overlays.tsx +++ b/client/board/use-board-overlays.tsx @@ -228,7 +228,7 @@ export function useBoardOverlays( * `navigateToAgent` against the host rendering the surface. * * The prop is still typed optional because hosts before 0.7.0-beta.3 passed - * nothing. This plugin now requires Paseo >=0.8.0, and each app checks that + * nothing. This plugin now requires Paseo >=0.13.0-beta.1, and each app checks that * against its *own* version before it evaluates this bundle, so every client * that can run this code passes it. The `undefined` branch therefore only * leaves the notice standing — which already names the workspace the work went diff --git a/client/icons/github.ts b/client/icons/github.ts new file mode 100644 index 0000000..83729c9 --- /dev/null +++ b/client/icons/github.ts @@ -0,0 +1,33 @@ +import type { PluginSvgIcon } from "@getpaseo/plugin/client"; + +/** + * GitHub's Octicons mark-github-16, with currentColor for the host's theme. + * Inline SVG keeps the brand mark independent of Lucide's removed brand icons. + * Source: https://github.com/primer/octicons/blob/main/icons/mark-github-16.svg + * + * MIT License + * Copyright (c) 2026 GitHub Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +export const githubIcon: PluginSvgIcon = { + svg: ` + + `, +}; diff --git a/client/timeline.tsx b/client/timeline.tsx index fd0683b..6094314 100644 --- a/client/timeline.tsx +++ b/client/timeline.tsx @@ -14,6 +14,7 @@ import { useMemo } from "react"; import { Pressable, Text, View } from "react-native"; import type { BoardTimelineItem } from "../shared/board"; +import { githubIcon } from "./icons/github"; import { openExternalUrl } from "./web"; /** @@ -81,7 +82,7 @@ export function BoardTimelineCard({ onPress={() => openExternalUrl(url)} > - + {repository} #{number} diff --git a/index.client.tsx b/index.client.tsx index 47036ea..50955ec 100644 --- a/index.client.tsx +++ b/index.client.tsx @@ -1,6 +1,7 @@ import type { PluginClientContext } from "@getpaseo/plugin/client"; import { GitHubBoard } from "./client/board/github-board"; +import { githubIcon } from "./client/icons/github"; import { BoardSettingsScreen } from "./client/settings/settings-screen"; import { BoardTimelineCard } from "./client/timeline"; import { BoardTimelineItemSchema } from "./shared/board"; @@ -26,13 +27,13 @@ export default function contribute(client: PluginClientContext) { client.addSidebarItem({ id: "board", title: "GitHub", - icon: "GitPullRequest", + icon: githubIcon, surface: "board", }); client.addSettingsScreen({ id: "board", title: "GitHub board", - icon: "GitPullRequest", + icon: githubIcon, Component: BoardSettingsScreen, }); client.addCommandCenterItem({ @@ -48,7 +49,7 @@ export default function contribute(client: PluginClientContext) { client.addCommandCenterItem({ id: "open-board", title: "Open GitHub board", - icon: "GitPullRequest", + icon: githubIcon, keywords: ["github", "issues", "pull requests", "prs", "discussions"], context: "global", onSelect(context) { diff --git a/package-lock.json b/package-lock.json index 722cb84..9467a69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "paseo-github-integration", - "version": "0.5.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "paseo-github-integration", - "version": "0.5.0", + "version": "1.0.1", "dependencies": { - "@getpaseo/plugin": "0.8.0-beta.1" + "@getpaseo/plugin": "0.13.0" }, "devDependencies": { - "@getpaseo/client": "0.8.0-beta.1", - "@getpaseo/protocol": "0.8.0-beta.1", + "@getpaseo/client": "0.13.0", + "@getpaseo/protocol": "0.13.0", "@tanstack/react-query": "^5.102.8", "@types/node": "^26.5.0", "@types/react": "~19.2.0", @@ -522,27 +522,29 @@ } }, "node_modules/@getpaseo/client": { - "version": "0.8.0-beta.1", - "resolved": "https://registry.npmjs.org/@getpaseo/client/-/client-0.8.0-beta.1.tgz", - "integrity": "sha512-+JHqeg4eCWYa3TqMNN1FLaDWpoXM6PrPArOpzfV/Qm+2Mhw/bA07QS+zjMzDpVz7QZ+z6eN/96qAbQ1eFOD6Zg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@getpaseo/client/-/client-0.13.0.tgz", + "integrity": "sha512-379gl/OHIowATqKBZugupxX6HaOPWQhkOeVnlMQNWnZ5oKbyfCTEPGSkzA8Kotvv1Uue2u+j8z2WnLXyZ9ChYQ==", "dependencies": { - "@getpaseo/protocol": "0.8.0-beta.1", - "@getpaseo/relay": "0.8.0-beta.1", + "@getpaseo/protocol": "0.13.0", + "@getpaseo/relay": "0.13.0", + "ws": "^8.20.0", "zod": "^4.4.3" } }, "node_modules/@getpaseo/plugin": { - "version": "0.8.0-beta.1", - "resolved": "https://registry.npmjs.org/@getpaseo/plugin/-/plugin-0.8.0-beta.1.tgz", - "integrity": "sha512-7/4cAfd3+GNB8rEYytFbp+Z8x/QfXlLIGMa8pcdn2YgrQUuO8Hjc3L9CGan3IoAYva/ttQn9biCOvvVWcDmMoQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@getpaseo/plugin/-/plugin-0.13.0.tgz", + "integrity": "sha512-8aGH0lf5kF9yjaM0dVsm8Awu5eB2jHhmbX9ljgf6+jttNWX3XRbRNeylg3whPoKORGrJNlpuLx3XvJMC5KSCaQ==", "dependencies": { "@agentclientprotocol/sdk": "^1.4.0", + "i18next": "^26.3.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { - "@getpaseo/client": "0.8.0-beta.1", - "@getpaseo/protocol": "0.8.0-beta.1", - "react": "~19.1.0", + "@getpaseo/client": "0.13.0", + "@getpaseo/protocol": "0.13.0", + "react": ">=19.1.0 <20", "react-native": ">=0.81.5", "zod": "^4.4.3" }, @@ -553,19 +555,22 @@ } }, "node_modules/@getpaseo/protocol": { - "version": "0.8.0-beta.1", - "resolved": "https://registry.npmjs.org/@getpaseo/protocol/-/protocol-0.8.0-beta.1.tgz", - "integrity": "sha512-7GQfNTe8cGgWPQDvY4F6CwEe75HdtPB7d+XQ+SZYRWM4IGkQhgXPM6hGFaDqut9LAweKNYllttA2FaDAJmmo+g==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@getpaseo/protocol/-/protocol-0.13.0.tgz", + "integrity": "sha512-g5Hp6QP5hV7KTCrSRBVye2+qhptwnhhLXRn6PHaS1L8PgmeRh5LvrE8PZq3HRq8B1WxflVDuV2WRB2Z3FNcvJA==", "dependencies": { "semver": "^7.8.5", "zod": "^4.4.3" } }, "node_modules/@getpaseo/relay": { - "version": "0.8.0-beta.1", - "resolved": "https://registry.npmjs.org/@getpaseo/relay/-/relay-0.8.0-beta.1.tgz", - "integrity": "sha512-aZGmgbQEU/DgPCW/zOdKce//nWiuMU1N5ikMG1q0z2acRQNPwdAok9fQO3iuNIcTENF/32azpWqgsr/qeMp5gA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@getpaseo/relay/-/relay-0.13.0.tgz", + "integrity": "sha512-Yd/RR+2hStTEtmkutwE21drjVmgz+RnQWyjmoh1++dPysp2oNsrimurnbfN0yoBJ5xXWlyuvn8Sr7CziTpkv7Q==", "dependencies": { + "@noble/ciphers": "^2.4.0", + "@noble/curves": "^2.4.0", + "@noble/hashes": "^2.4.0", "base64-js": "^1.5.1", "tweetnacl": "^1.0.3", "ws": "^8.14.2" @@ -774,6 +779,45 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@noble/ciphers": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.4.0.tgz", + "integrity": "sha512-AnjFn0Jv92laAkvMrghlFZq4qQCIN/4DxFV/eooqtC2YTjB7kBeLMS2T9KJX4Dn+ZVXLOwK0lSgqDtx9gvxtiw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.4.0.tgz", + "integrity": "sha512-P4/62zrgfH33CneE3Dn4WhJVA22YUU0eR51wKIan4NVRvwsA0YnPTwWGpNbpuacSujmSFLvyzpyuR30+fbq2Ew==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "2.4.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", + "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@oxc-project/types": { "version": "0.149.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.149.0.tgz", @@ -1779,7 +1823,7 @@ "version": "19.2.18", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -2760,7 +2804,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/debug": { @@ -3060,6 +3104,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3201,6 +3246,34 @@ "node": ">= 14" } }, + "node_modules/i18next": { + "version": "26.5.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.5.11.tgz", + "integrity": "sha512-Wc0klBPKxqZ2tL2qdAnF8xvvnWgr1IMGSY2ikTiAvaFVbz7xiFARtkoU4RidBDw1SyziGROp0qxu6qnJ7l2Wug==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": "^5 || ^6 || ^7" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5506,7 +5579,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc" @@ -5874,9 +5947,9 @@ } }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index bfc655b..f1e8f28 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,11 @@ "test": "vitest run" }, "dependencies": { - "@getpaseo/plugin": "0.8.0-beta.1" + "@getpaseo/plugin": "0.13.0" }, "devDependencies": { - "@getpaseo/client": "0.8.0-beta.1", - "@getpaseo/protocol": "0.8.0-beta.1", + "@getpaseo/client": "0.13.0", + "@getpaseo/protocol": "0.13.0", "@tanstack/react-query": "^5.102.8", "@types/node": "^26.5.0", "@types/react": "~19.2.0", diff --git a/paseo-plugin.json b/paseo-plugin.json index 4a875a5..d0e54cc 100644 --- a/paseo-plugin.json +++ b/paseo-plugin.json @@ -1,4 +1,4 @@ { "id": "github-integration", - "requirements": { "paseo": ">=0.8.0" } + "requirements": { "paseo": ">=0.13.0-beta.1" } }