diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3854082..c920ea8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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 }} diff --git a/.prompt-hub/memory.md b/.prompt-hub/memory.md index 9755a0d..0ceddcb 100644 --- a/.prompt-hub/memory.md +++ b/.prompt-hub/memory.md @@ -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. | diff --git a/.prompt-hub/releases.md b/.prompt-hub/releases.md index c3a2faa..ddfc9d6 100644 --- a/.prompt-hub/releases.md +++ b/.prompt-hub/releases.md @@ -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. diff --git a/.prompt-hub/version.md b/.prompt-hub/version.md index 278cbc8..6871b9e 100644 --- a/.prompt-hub/version.md +++ b/.prompt-hub/version.md @@ -1 +1 @@ -0.1.43 +0.1.44 diff --git a/README.md b/README.md index 53e26cc..fda2afa 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/manifest.json b/manifest.json index f2c5b40..12f6260 100644 --- a/manifest.json +++ b/manifest.json @@ -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", diff --git a/package-lock.json b/package-lock.json index 807b121..892e25f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index e65eedb..7540c27 100644 --- a/package.json +++ b/package.json @@ -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": { diff --git a/versions.json b/versions.json index f7d334e..02dba7f 100644 --- a/versions.json +++ b/versions.json @@ -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" }