Document and ship every runtime-required file in each GitHub release

The plugin's panel spawns a child process and needs more than the
typical Obsidian main.js / manifest.json / styles.css triple — the
Node proxy (pty-proxy.js) and the Python PTY fallback (pty-bridge.py)
must also be present in the plugin folder, plus versions.json (for
backwards-compatible install matching) and package.json /
package-lock.json (for the optional native node-pty backend).

The release workflow already bundled all of these inside the zip but
only attached the standard triple as standalone files. Switch to
uploading every runtime-required file at the release root so users
who fix one corrupt file or pin a specific component (e.g. swapping
in a custom pty-proxy.js for debugging) can grab it directly without
re-downloading the whole zip.

Reworked the release notes body template to spell out what each file
is for and to flag that the three-file triple is NOT sufficient for
this plugin (BRAT / Obsidian auto-update only fetches those three,
which is why the bundled zip stays the recommended install path).
Mirrored the same explanation in the README `Required files` section.

Bumped manifest/version metadata to 0.1.43.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
blamouche 2026-04-27 08:51:07 +02:00
parent 67da139633
commit 7bc1ddac11
9 changed files with 44 additions and 15 deletions

View file

@ -81,13 +81,32 @@ jobs:
Then reload the plugin.
### Files required at runtime
Unlike a typical single-bundle Obsidian plugin, this plugin spawns a child process that needs auxiliary files alongside `main.js`. **All of the files listed below must end up in the plugin folder** for the panel to work — that is why the recommended install path is the bundled zip rather than the three standalone files at the bottom of the release.
- `manifest.json` — Obsidian plugin metadata (id, version, minAppVersion).
- `main.js` — bundled plugin code (TS compiled by `esbuild`).
- `styles.css` — sidebar / toolbar / dropdown styling.
- `versions.json` — maps each plugin version to its `minAppVersion` for backwards-compatible installs.
- `pty-proxy.js` — Node child process that runs the user's CLI inside a PTY (or one of its fallbacks).
- `pty-bridge.py` — Python PTY fallback used on macOS/Linux when `node-pty` is not installed.
- `package.json` and `package-lock.json` — only required if you want to opt into the native `node-pty` backend via `npm install --omit=dev`.
Each file is also attached individually below so you can replace one without re-downloading the whole zip (useful for development / debugging).
### Manual install / Obsidian auto-update
`main.js`, `manifest.json`, and `styles.css` are also attached as standalone files for compatibility with Obsidian's plugin update protocol and tools like BRAT.
`main.js`, `manifest.json`, and `styles.css` are attached as standalone files for compatibility with Obsidian's plugin update protocol and tools like BRAT — but as noted above, **those three are not sufficient on their own**. Use the zip for first install and update; the three standalone files only cover hot-patches of the bundled code, manifest, or stylesheet.
files: |
${{ env.PLUGIN_ID }}-${{ github.ref_name }}.zip
main.js
manifest.json
styles.css
versions.json
pty-proxy.js
pty-bridge.py
package.json
package-lock.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -60,3 +60,4 @@
| 2026-04-26 22:25:00 CEST | agent | Bot still flagged 2 sentence-case violations after 0.1.39. Traced via AST walk: every direct-literal UI string is sentence-case OK; the only candidates are fallback labels inside LogicalExpression (`runtime.name || "(unnamed)"`, etc.) which the local `obsidianmd/ui/sentence-case` `getStringFromNode` skips but the bot apparently walks. Capitalized every fallback (`(unnamed)`/`(unnamed runtime)`/`(no runtime)` → `(Unnamed)`/`(Unnamed runtime)`/`(No runtime)`) and re-tagged 0.1.40. | `main.ts`, `manifest.json`, `versions.json`, `package.json`, `package-lock.json`, `npm run lint`, `npm run build`, `npm test`, `.prompt-hub/version.md`, `.prompt-hub/releases.md` | success | Commit, push, annotated tag 0.1.40, user re-publishes draft release. |
| 2026-04-27 14:30:00 CEST | agent | Bot still flagged 2 sentence-case violations after 0.1.40. Traced root cause to `Codex` not being in `eslint-plugin-obsidianmd@0.2.4` DEFAULT_BRANDS (verified via Linter API on synthetic snippet — rule expected `codex` lowercase). Both `manifest.json` and `package.json` descriptions contained the word, hence 2 violations. Reworded both to drop `Codex` while preserving the multi-runtime value prop. Bumped to 0.1.41. | `manifest.json`, `package.json`, `package-lock.json`, `versions.json`, `.prompt-hub/version.md`, `.prompt-hub/releases.md` | success | Commit, push, annotated tag 0.1.41. User must publish the draft release for the bot to re-scan (bot only sees published releases). |
| 2026-04-27 08:42:00 CEST | agent | After publishing 0.1.41 the bot flagged exactly 2 lines: `main.ts:187` and `main.ts:592`, both containing `"(No runtime configured)"` passed to `createEl({text})` and `dropdown.addOption(value,label)`. Local `obsidianmd/ui/sentence-case@0.2.4` accepts this string (`{ok: true}` in both loose and strict modes); the bot's scanner appears to treat parenthesized phrases as sentence continuations and rejects the leading capital. Removed the parens entirely → `"No runtime configured"`. Bumped to 0.1.42. | `main.ts`, `manifest.json`, `versions.json`, `package.json`, `package-lock.json`, `.prompt-hub/version.md`, `.prompt-hub/releases.md` | success | Commit, push, annotated tag 0.1.42. User must publish draft release. |
| 2026-04-27 08:50:00 CEST | agent | Release workflow now uploads every runtime-required file (`pty-proxy.js`, `pty-bridge.py`, `versions.json`, `package.json`, `package-lock.json`) at the release root as standalone assets alongside the zip and the existing `main.js`/`manifest.json`/`styles.css` triple. Release notes body and README `Required files` section spell out what each file is for and warn that the standard three-file triple is not sufficient for this plugin. Bumped manifest to 0.1.43. | `.github/workflows/release.yml`, `README.md`, `manifest.json`, `versions.json`, `package.json`, `package-lock.json`, `.prompt-hub/version.md`, `.prompt-hub/releases.md` | success | Commit, push, annotated tag 0.1.43. |

View file

@ -1,5 +1,11 @@
# Releases
## 0.1.44 - 2026-04-27
- Release workflow now uploads every runtime-required file at the root of each GitHub release as a standalone asset, not only inside the zip: `manifest.json`, `main.js`, `styles.css`, `versions.json`, `pty-proxy.js`, `pty-bridge.py`, `package.json`, `package-lock.json`.
- Reworked the release notes body template to spell out what each file is for, and to make it explicit that the `main.js` / `manifest.json` / `styles.css` triple is **not sufficient on its own** for this plugin — the child-process proxy (`pty-proxy.js`) and Python fallback (`pty-bridge.py`) must also be present in the plugin folder for the panel to start.
- Mirrored the same explanation in the README `Required files` section.
- Plugin manifest bumped to 0.1.43.
## 0.1.43 - 2026-04-27
- Removed parentheses around the multi-word fallback dropdown labels: `"(No runtime configured)"``"No runtime configured"` (sidebar runtime select placeholder + settings tab dropdown). The community bot flagged the parenthesized form even though `eslint-plugin-obsidianmd@0.2.4`'s rule accepts it locally — the bot's stricter scanner appears to treat parenthesized phrases as a sentence continuation, which makes the leading capital incorrect.
- Plugin manifest bumped to 0.1.42.

View file

@ -1 +1 @@
0.1.43
0.1.44

View file

@ -58,15 +58,17 @@ Reload the plugin afterwards.
### Required files
If you assemble the plugin folder by hand, make sure these are present:
Unlike a typical single-bundle Obsidian plugin, this one spawns a child process that needs auxiliary files alongside `main.js`. **All of the files below must be present in the plugin folder.** That's why the recommended install path is the bundled zip rather than the three standalone files Obsidian's auto-update protocol normally fetches.
- `manifest.json`
- `main.js`
- `styles.css`
- `versions.json`
- `pty-proxy.js`
- `pty-bridge.py`
- `package.json` and `package-lock.json` (only needed if you plan to install `node-pty`)
- `manifest.json` — Obsidian plugin metadata (id, version, minAppVersion).
- `main.js` — bundled plugin code.
- `styles.css` — sidebar / toolbar / dropdown styling.
- `versions.json` — maps each plugin version to its `minAppVersion`.
- `pty-proxy.js` — Node child process that runs your CLI inside a PTY (or one of its fallbacks).
- `pty-bridge.py` — Python PTY fallback used on macOS/Linux when `node-pty` is not installed.
- `package.json` and `package-lock.json` — only required if you opt into the native `node-pty` backend via `npm install --omit=dev`.
Every file is also attached individually to each GitHub release (next to the zip) so you can replace one without re-downloading the whole bundle.
## Usage

View file

@ -1,7 +1,7 @@
{
"id": "any-ai-cli",
"name": "Any AI CLI",
"version": "0.1.42",
"version": "0.1.43",
"minAppVersion": "1.7.2",
"description": "Run AI coding tools like Claude in a right sidebar terminal panel, with a customizable runtime list.",
"author": "Benoit Lamouche",

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "any-ai-cli",
"version": "0.1.42",
"version": "0.1.43",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "any-ai-cli",
"version": "0.1.42",
"version": "0.1.43",
"license": "MIT",
"dependencies": {
"@xterm/addon-fit": "^0.11.0",

View file

@ -1,6 +1,6 @@
{
"name": "any-ai-cli",
"version": "0.1.42",
"version": "0.1.43",
"description": "Run AI coding tools like Claude in a right sidebar terminal panel, with a customizable runtime list.",
"main": "main.js",
"scripts": {

View file

@ -12,5 +12,6 @@
"0.1.39": "1.7.2",
"0.1.40": "1.7.2",
"0.1.41": "1.7.2",
"0.1.42": "1.7.2"
"0.1.42": "1.7.2",
"0.1.43": "1.7.2"
}