Add README, LICENSE, fix manifest id for community plugin submission

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kry-kylewhittle 2026-06-12 16:40:34 +01:00
parent 537eab4783
commit a12605116c
6 changed files with 1932 additions and 140 deletions

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Kyle Whittle
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.

79
README.md Normal file
View file

@ -0,0 +1,79 @@
# GitHub Repo Tools
An Obsidian plugin that puts a GitHub repository panel in your sidebar — monitor staleness, manage branches, stage and commit files, and track pull requests without leaving Obsidian.
> **Desktop only.** Requires git to be installed and a local clone of the repository you want to monitor.
---
## Features
### Local repo status
- Shows your current branch and a dropdown to switch branches
- Detects uncommitted changes with an expandable file list
- Shows how many commits you are behind the remote with a one-click Pull button
- Ribbon icon badge turns red when your local repo is behind
### Git operations
Fetch, Pull, Push, and Create Branch from the action bar. All operations run against the local clone you configure.
### Commit modal
Stage individual files by checkbox, write a commit message, and commit (or commit + push) in one step.
### PR dashboard
- **My PRs** — open PRs you authored
- **Awaiting My Review** — PRs where you are a requested reviewer
- **All Open PRs** — collapsible list of everyone else's PRs
- New activity badge on PRs that have been updated since you last opened them
- One-click to open any PR in the browser
### Create PR workflow
Smart PR creation from the sidebar:
1. If you have uncommitted changes, prompts you to commit first
2. Pushes the branch if it hasn't been pushed yet
3. Opens a modal pre-filled with a title derived from your branch name
### Status bar
Compact summary in the Obsidian status bar: sync status, uncommitted file count, open PR counts, and review request count.
---
## Setup
1. Install the plugin and enable it.
2. Open **Settings → GitHub Repo Tools**.
3. Set **Local repo path** — the absolute path to your local git clone (or use the Browse button).
4. Set your **GitHub personal access token** — a classic PAT with `repo` scope is sufficient. The plugin will auto-detect the repo owner/name and your GitHub username from the token and remote URL.
---
## Settings
| Setting | Default | Description |
|---|---|---|
| Local repo path | — | Absolute path to your local git clone |
| GitHub personal access token | — | Classic PAT with `repo` scope |
| Staleness check | On | Check if local repo is behind remote |
| PR dashboard | On | Show open PRs in the sidebar |
| PR activity alerts | On | Highlight PRs with new activity |
| Review requests | On | Show PRs where you are a requested reviewer |
| Status bar item | On | Show compact summary in the status bar |
| Auto-open sidebar on startup | On | Open the panel when Obsidian launches |
| Show draft PRs | On | Include draft PRs in the list |
| Poll interval | 15 min | How often to refresh automatically |
| Track branch | (current branch) | Remote branch to compare against for staleness |
---
## Requirements
- Obsidian 0.15.0 or later
- macOS, Windows, or Linux desktop (not mobile)
- git installed and available on the system PATH
- A GitHub personal access token with `repo` scope
---
## License
MIT

1015
main.ts

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
{
"id": "obsidian-github-tools",
"name": "GitHub Wiki Tools",
"id": "github-repo-tools",
"name": "GitHub Repo Tools",
"version": "1.0.0",
"minAppVersion": "0.15.0",
"description": "Monitor your GitHub wiki repo — staleness alerts, PR dashboard, and activity notifications.",
"description": "Monitor a GitHub repo — staleness alerts, PR dashboard, and activity notifications.",
"author": "Kyle Whittle",
"authorUrl": "",
"authorUrl": "https://github.com/kry-kylewhittle",
"isDesktopOnly": true
}

579
package-lock.json generated Normal file
View file

@ -0,0 +1,579 @@
{
"name": "obsidian-github-tools",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "obsidian-github-tools",
"version": "1.0.0",
"license": "MIT",
"devDependencies": {
"@types/node": "^16.11.6",
"builtin-modules": "^3.3.0",
"esbuild": "0.17.3",
"obsidian": "latest",
"tslib": "2.4.0",
"typescript": "4.7.4"
}
},
"node_modules/@codemirror/state": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.0.tgz",
"integrity": "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@marijn/find-cluster-break": "^1.0.0"
}
},
"node_modules/@codemirror/view": {
"version": "6.38.6",
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz",
"integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@codemirror/state": "^6.5.0",
"crelt": "^1.0.6",
"style-mod": "^4.1.0",
"w3c-keyname": "^2.2.4"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.3.tgz",
"integrity": "sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz",
"integrity": "sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.3.tgz",
"integrity": "sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz",
"integrity": "sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz",
"integrity": "sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz",
"integrity": "sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz",
"integrity": "sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz",
"integrity": "sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz",
"integrity": "sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz",
"integrity": "sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz",
"integrity": "sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz",
"integrity": "sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ==",
"cpu": [
"mips64el"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz",
"integrity": "sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz",
"integrity": "sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz",
"integrity": "sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz",
"integrity": "sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz",
"integrity": "sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz",
"integrity": "sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz",
"integrity": "sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz",
"integrity": "sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz",
"integrity": "sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz",
"integrity": "sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@marijn/find-cluster-break": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
"integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/codemirror": {
"version": "5.60.8",
"resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz",
"integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/tern": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "16.18.126",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz",
"integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/tern": {
"version": "0.23.9",
"resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz",
"integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "*"
}
},
"node_modules/builtin-modules": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/crelt": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
"integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
"dev": true,
"license": "MIT"
},
"node_modules/esbuild": {
"version": "0.17.3",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz",
"integrity": "sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/android-arm": "0.17.3",
"@esbuild/android-arm64": "0.17.3",
"@esbuild/android-x64": "0.17.3",
"@esbuild/darwin-arm64": "0.17.3",
"@esbuild/darwin-x64": "0.17.3",
"@esbuild/freebsd-arm64": "0.17.3",
"@esbuild/freebsd-x64": "0.17.3",
"@esbuild/linux-arm": "0.17.3",
"@esbuild/linux-arm64": "0.17.3",
"@esbuild/linux-ia32": "0.17.3",
"@esbuild/linux-loong64": "0.17.3",
"@esbuild/linux-mips64el": "0.17.3",
"@esbuild/linux-ppc64": "0.17.3",
"@esbuild/linux-riscv64": "0.17.3",
"@esbuild/linux-s390x": "0.17.3",
"@esbuild/linux-x64": "0.17.3",
"@esbuild/netbsd-x64": "0.17.3",
"@esbuild/openbsd-x64": "0.17.3",
"@esbuild/sunos-x64": "0.17.3",
"@esbuild/win32-arm64": "0.17.3",
"@esbuild/win32-ia32": "0.17.3",
"@esbuild/win32-x64": "0.17.3"
}
},
"node_modules/moment": {
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/obsidian": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.13.1.tgz",
"integrity": "sha512-qtTEA2pmhJzhuhJqzbBFRYhpIOqvW+krDYjtFynv66KbxBbumHBlsJfWw3I4jtnK/6fZwbQhCrmmDdRwXmX56w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/codemirror": "5.60.8",
"moment": "2.29.4"
},
"peerDependencies": {
"@codemirror/state": "6.5.0",
"@codemirror/view": "6.38.6"
}
},
"node_modules/style-mod": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz",
"integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==",
"dev": true,
"license": "MIT"
},
"node_modules/tslib": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
"dev": true,
"license": "0BSD"
},
"node_modules/typescript": {
"version": "4.7.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
"integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/w3c-keyname": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
"integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
"dev": true,
"license": "MIT"
}
}
}

View file

@ -29,6 +29,27 @@
background: var(--background-modifier-hover);
}
/* ── Ribbon icon alert badge ─────────────────────────────────────────────── */
.gwt-ribbon-alert {
position: relative;
}
.gwt-ribbon-alert::after {
content: "";
position: absolute;
top: 4px;
right: 4px;
width: 8px;
height: 8px;
background: var(--color-orange);
border-radius: 50%;
border: 2px solid var(--background-primary);
pointer-events: none;
}
/* ── Section layout ──────────────────────────────────────────────────────── */
.gwt-section {
margin-bottom: 16px;
}
@ -48,21 +69,303 @@
.gwt-label {
color: var(--text-muted);
margin-right: 4px;
}
/* ── Branch selector ─────────────────────────────────────────────────────── */
.gwt-branch-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.gwt-branch-select {
flex: 1;
font-size: 12px;
padding: 2px 4px;
border-radius: 4px;
background: var(--background-secondary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
cursor: pointer;
}
.gwt-branch-select:focus {
outline: none;
border-color: var(--interactive-accent);
}
/* ── Action bar ──────────────────────────────────────────────────────────── */
.gwt-action-bar {
display: flex;
gap: 4px;
margin-bottom: 10px;
}
.gwt-action-btn {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
padding: 5px 2px;
border-radius: 4px;
cursor: pointer;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
color: var(--text-muted);
font-size: 10px;
}
.gwt-action-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.gwt-action-btn .svg-icon {
width: 14px;
height: 14px;
}
.gwt-action-label {
font-size: 10px;
line-height: 1;
}
/* ── Commit inline button ────────────────────────────────────────────────── */
.gwt-commit-inline-btn {
margin-left: auto;
font-size: 11px;
padding: 1px 7px;
vertical-align: middle;
}
/* ── Modal: file list ────────────────────────────────────────────────────── */
.gwt-modal-file-list {
max-height: 200px;
overflow-y: auto;
margin: 4px 0 12px;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 4px;
}
.gwt-modal-file-item {
display: flex;
align-items: center;
gap: 8px;
padding: 3px 4px;
border-radius: 3px;
cursor: pointer;
font-size: 12px;
font-family: var(--font-monospace);
}
.gwt-modal-file-item:hover {
background: var(--background-modifier-hover);
}
.gwt-modal-select-all {
font-size: 11px;
color: var(--text-muted);
display: flex;
gap: 10px;
margin-bottom: 2px;
}
.gwt-modal-select-all a {
cursor: pointer;
color: var(--interactive-accent);
text-decoration: none;
}
.gwt-modal-select-all a:hover {
text-decoration: underline;
}
.gwt-modal-textarea {
width: 100%;
font-size: 13px;
padding: 6px 8px;
border-radius: 4px;
background: var(--background-secondary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
resize: vertical;
font-family: inherit;
box-sizing: border-box;
margin-top: 4px;
}
.gwt-modal-textarea:focus {
outline: none;
border-color: var(--interactive-accent);
}
.gwt-modal-from-hint {
font-size: 12px;
color: var(--text-muted);
margin: 0 0 10px;
font-family: var(--font-monospace);
}
/* ── New branch buttons ──────────────────────────────────────────────────── */
.gwt-new-branch-row {
display: flex;
gap: 6px;
margin-bottom: 8px;
}
.gwt-btn-sm {
font-size: 11px;
padding: 2px 6px;
border-radius: 3px;
cursor: pointer;
white-space: nowrap;
flex: 1;
}
/* ── New branch modal ────────────────────────────────────────────────────── */
.gwt-modal h3 {
margin-top: 0;
margin-bottom: 12px;
}
.gwt-modal-hint {
font-size: 12px;
color: var(--text-muted);
margin-bottom: 12px;
}
.gwt-modal-row {
display: flex;
flex-direction: column;
gap: 4px;
margin-bottom: 12px;
}
.gwt-modal-label {
font-size: 12px;
color: var(--text-muted);
font-weight: 500;
}
.gwt-modal-select,
.gwt-modal-input {
width: 100%;
font-size: 13px;
padding: 4px 8px;
border-radius: 4px;
background: var(--background-secondary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
}
.gwt-modal-select:focus,
.gwt-modal-input:focus {
outline: none;
border-color: var(--interactive-accent);
}
.gwt-modal-btns {
display: flex;
gap: 8px;
justify-content: flex-end;
margin-top: 4px;
}
/* ── Uncommitted files ───────────────────────────────────────────────────── */
.gwt-files-details {
margin-bottom: 8px;
}
.gwt-files-summary {
cursor: pointer;
font-size: 12px;
user-select: none;
padding: 2px 0;
list-style: none;
}
.gwt-files-summary::-webkit-details-marker {
display: none;
}
.gwt-files-summary::before {
content: "▶ ";
font-size: 10px;
transition: transform 0.1s;
}
details[open] .gwt-files-summary::before {
content: "▼ ";
}
.gwt-files-list {
margin-top: 6px;
padding-left: 8px;
}
.gwt-file-row {
display: flex;
align-items: baseline;
gap: 8px;
font-size: 11px;
font-family: var(--font-monospace);
padding: 1px 0;
}
.gwt-file-status {
font-weight: 700;
min-width: 16px;
text-align: center;
font-size: 10px;
}
.gwt-status-M { color: var(--color-yellow); }
.gwt-status-A { color: var(--color-green); }
.gwt-status-D { color: var(--color-red); }
.gwt-status-R { color: var(--color-blue); }
.gwt-status-untracked { color: var(--text-muted); }
.gwt-status-UU { color: var(--color-orange); }
.gwt-file-path {
color: var(--text-muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* ── Behind / pull ───────────────────────────────────────────────────────── */
.gwt-behind-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
}
.gwt-behind-label {
color: var(--color-yellow);
font-size: 12px;
flex: 1;
}
.gwt-warning {
color: var(--color-orange);
}
.gwt-behind {
display: flex;
align-items: center;
gap: 8px;
color: var(--color-yellow);
}
.gwt-ok {
color: var(--color-green);
font-size: 12px;
}
.gwt-btn {
@ -70,8 +373,49 @@
padding: 2px 8px;
cursor: pointer;
border-radius: 3px;
white-space: nowrap;
}
.gwt-btn-pull {
background: var(--interactive-accent);
color: var(--text-on-accent);
border: none;
}
.gwt-btn-pull:hover {
filter: brightness(1.1);
}
/* ── Collapsible PR section ──────────────────────────────────────────────── */
.gwt-pr-collapsible-summary {
cursor: pointer;
list-style: none;
user-select: none;
}
.gwt-pr-collapsible-summary::-webkit-details-marker {
display: none;
}
.gwt-pr-collapsible-summary h5 {
display: inline-flex;
align-items: center;
gap: 4px;
}
.gwt-pr-collapsible-summary h5::before {
content: "▶";
font-size: 9px;
color: var(--text-faint);
}
details[open] .gwt-pr-collapsible-summary h5::before {
content: "▼";
}
/* ── PR list ─────────────────────────────────────────────────────────────── */
.gwt-pr {
margin-bottom: 6px;
padding: 6px 8px;
@ -90,6 +434,7 @@
color: var(--text-normal);
margin-bottom: 2px;
line-height: 1.4;
font-size: 13px;
}
.gwt-pr-link:hover {
@ -110,6 +455,8 @@
font-style: italic;
}
/* ── Misc ────────────────────────────────────────────────────────────────── */
.gwt-empty {
font-size: 12px;
color: var(--text-faint);
@ -118,6 +465,7 @@
.gwt-muted {
color: var(--text-muted);
font-size: 12px;
}
.gwt-error {
@ -126,3 +474,11 @@
margin-bottom: 8px;
word-break: break-word;
}
.gwt-status-bar {
cursor: pointer;
}
.gwt-status-bar:hover {
color: var(--text-normal);
}