waterplane 0.1.22 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/npm-shrinkwrap.json +2 -2
  3. package/package.json +1 -1
  4. package/packages/extensions/android-apps/waterplane-plugin.json +4 -1
  5. package/packages/extensions/copilot-usage/waterplane-plugin.json +7 -2
  6. package/packages/extensions/desktop/waterplane-plugin.json +5 -0
  7. package/packages/extensions/ocr/waterplane-plugin.json +5 -1
  8. package/packages/extensions/requirements/waterplane-plugin.json +3 -3
  9. package/packages/extensions/scorecard/waterplane-plugin.json +2 -1
  10. package/packages/extensions/token-stats/waterplane-plugin.json +4 -3
  11. package/packages/host/dist/backends/index.js +12 -1
  12. package/packages/host/dist/backends/index.js.map +1 -1
  13. package/packages/host/dist/binguard.d.ts +13 -1
  14. package/packages/host/dist/binguard.js +28 -2
  15. package/packages/host/dist/binguard.js.map +1 -1
  16. package/packages/host/dist/plugins/pluginassets.d.ts +17 -0
  17. package/packages/host/dist/plugins/pluginassets.js +27 -1
  18. package/packages/host/dist/plugins/pluginassets.js.map +1 -1
  19. package/packages/host/dist/plugins/pluginregistry.d.ts +3 -1
  20. package/packages/host/dist/plugins/pluginregistry.js +8 -1
  21. package/packages/host/dist/plugins/pluginregistry.js.map +1 -1
  22. package/packages/host/dist/routes/apisystem.js +14 -0
  23. package/packages/host/dist/routes/apisystem.js.map +1 -1
  24. package/packages/host/dist/routes/apitable.d.ts +2 -0
  25. package/packages/host/dist/routes/apitable.js.map +1 -1
  26. package/packages/host/dist/server/http.js +1 -0
  27. package/packages/host/dist/server/http.js.map +1 -1
  28. package/packages/web/dist/assets/index-Csb7jynu.js +170 -0
  29. package/packages/web/dist/assets/index-Cz9Haocy.css +1 -0
  30. package/packages/web/dist/assets/{sheets-CrfRr6Um.js → sheets-CqsP9w1V.js} +64 -64
  31. package/packages/web/dist/build-id.txt +1 -1
  32. package/packages/web/dist/buildstamp.json +1 -1
  33. package/packages/web/dist/index.html +3 -3
  34. package/packages/web/dist/sw.js +2 -2
  35. package/release.json +3 -3
  36. package/packages/web/dist/assets/index-BllRvpkw.js +0 -170
  37. package/packages/web/dist/assets/index-DUiYLEts.css +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ version — so entries are grouped by the release they shipped in. A fixed secur
5
5
  vulnerability in what ships is listed under a **Security:** bullet of the release that
6
6
  fixed it, with its CVE or GHSA id when one exists.
7
7
 
8
+ ## 0.1.24
9
+
10
+ Folds 0.1.23, which was tagged but never released.
11
+
12
+ ### New
13
+
14
+ - **The installer ends with this desktop's URL and port and opens it in the browser.** It opens only when the host started, the doctor check passed and a screen is available, never over SSH. Pass `--no-open` to skip it.
15
+ - **A new session on an agent whose CLI is missing opens the Start sheet.** It lists "Use <agent>" for every agent that can start on this desktop. The failed-start card offers the same choice and sends your words along to the agent you pick. The backend list marks a missing CLI as unavailable, so the phone knows before you launch.
16
+ - **Plugin cards use coloured tags.** Stable is green, Beta orange, Experimental and failed red, Private purple, and Installed neutral.
17
+ - **Each place on a plugin card is a tap path plus what is there.** For example "Home screen › a repo's ⋯ menu". Only a place that really opens has an Open button.
18
+ - **An "About" fold on each plugin shows its README.** The READMEs now open with what the plugin does and where to find it, in plain words.
19
+ - **The Apps door is no longer listed as a second place when a launcher line opens the same sheet.** Its path names the Downloads, Build and Pull sheets, and the repo readings path uses the button's own name.
20
+
21
+ ### Fixed
22
+
23
+ - **"GitHub Copilot is not installed" no longer reads like the editor extension.** The message now says "The GitHub Copilot CLI is not installed" and names the `copilot` command that is missing from the PATH.
24
+ - **The mark & send row no longer breaks labels mid-word.** The six actions form a grid of whole words, at most three across, and the primary button fills the gap in the last row.
25
+ - **Plugin status lines are no longer shortened.** They print as the plugin wrote them, so a path like `/opt/.../copilot` is no longer cut to "copilot".
26
+
8
27
  ## 0.1.22
9
28
 
10
29
  Folds 0.1.21, which was tagged but never released.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "waterplane",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "waterplane",
9
- "version": "0.1.22",
9
+ "version": "0.1.24",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@noble/curves": "2.4.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waterplane",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "type": "module",
5
5
  "description": "waterplane — phone-native remote control for Claude Code on your PC",
6
6
  "license": "MIT",
@@ -9,5 +9,8 @@
9
9
  "host": "host/index.mts",
10
10
  "web": "web/index.ts",
11
11
  "optional": true,
12
- "autoOn": "androidRepo"
12
+ "autoOn": "androidRepo",
13
+ "places": [
14
+ "Home menu: one card per app to build, download and install"
15
+ ]
13
16
  }
@@ -6,7 +6,12 @@
6
6
  "description": "GitHub Copilot's monthly quota beside Claude's on the usage meter, read with gh's own sign-in (gh api /copilot_internal/user). Only on a desktop with copilot on PATH; nothing is read, and nothing drawn, otherwise. Its status line counts this month's premium requests from VS Code's own Copilot Chat logs on any desktop: files only, no sign-in.",
7
7
  "summary": "Shows how much of your monthly GitHub Copilot allowance you have used, next to your Claude usage.",
8
8
  "maturity": "preview",
9
- "places": ["Usage meter: a Copilot line", "Status line: Copilot requests this month"],
9
+ "places": [
10
+ "Usage meter: a \"Copilot\" segment with the percent of your monthly allowance used",
11
+ "Settings: how many Copilot requests VS Code made this month"
12
+ ],
10
13
  "host": "host/index.mts",
11
- "env": ["WATERPLANE_GH_BIN"]
14
+ "env": [
15
+ "WATERPLANE_GH_BIN"
16
+ ]
12
17
  }
@@ -22,5 +22,10 @@
22
22
  "note": "Clicks and keys from the phone reach every app on this desktop, with the same trust as typing into a session. Off: the phone can only watch.",
23
23
  "default": false
24
24
  }
25
+ ],
26
+ "places": [
27
+ "Home menu: \"Desktop\" opens the live view of this computer's screen",
28
+ "Session header: a Desktop tab with the live view of this computer",
29
+ "Settings: let the phone click and type on this computer (off by default)"
25
30
  ]
26
31
  }
@@ -9,5 +9,9 @@
9
9
  "host": "host/index.mts",
10
10
  "web": "web/index.ts",
11
11
  "assets": "assets",
12
- "optional": true
12
+ "optional": true,
13
+ "places": [
14
+ "Annotator: the words under a highlight, box or circle go into your note",
15
+ "Settings: whether the text reader is downloading, ready or failed"
16
+ ]
13
17
  }
@@ -4,10 +4,10 @@
4
4
  "version": "0.1.0",
5
5
  "apiVersion": "2.0",
6
6
  "description": "A repo's requirements list, rebuilt from the person's prompts and the commits: the setup row that says how far behind it is, the one-time set up, and a sheet that lists the items (cut by status and area) with an update that goes through the backlog.",
7
- "summary": "Keeps a list of what each repo is expected to do, rebuilt from your prompts and its commits.",
7
+ "summary": "Keeps a list of what each repo should do, rebuilt from your prompts and its commits.",
8
8
  "places": [
9
- "Repo menu: requirements",
10
- "Repo readings: the requirements row"
9
+ "Repo menu: the requirements list with its count, cut by status and area",
10
+ "Repo readings: how far behind the list is, and a button to update it"
11
11
  ],
12
12
  "maturity": "stable",
13
13
  "host": "host/index.mts",
@@ -6,7 +6,8 @@
6
6
  "description": "Shows the public OpenSSF Scorecard of a repo's GitHub remote: the score, which checks lose points, and a one-tap prompt for the agent to fix one. It reads only the public Scorecard and GitHub APIs (no sign-in, no model call) and only when you look. The repo's owner/name goes to api.github.com to check it is public; a private repo's name is never sent to OpenSSF.",
7
7
  "summary": "Shows a public repo's OpenSSF security score and which checks lose points.",
8
8
  "places": [
9
- "Repo row: how many security checks fail"
9
+ "Repo row: how many security checks fail; a tap shows them",
10
+ "Repo readings: the OpenSSF Scorecard row, which opens the failing checks"
10
11
  ],
11
12
  "maturity": "stable",
12
13
  "host": "host/index.mts",
@@ -4,10 +4,11 @@
4
4
  "version": "0.1.0",
5
5
  "apiVersion": "2.0",
6
6
  "description": "Every token this desktop has used, per day, by model and by repo, for Claude's ledger and every ledger another extension draws here (one tab each, never summed), plus the two live rate-limit windows and the windows before them.",
7
- "summary": "Shows how many tokens you have used, by day, model and repo, and where your limits stand.",
7
+ "summary": "Shows how many tokens you have used by day, model and repo, and where your limits stand.",
8
8
  "places": [
9
- "Home screen: the usage meter in the top bar",
10
- "Settings: token statistics"
9
+ "Usage meter: tap it to open the token statistics, with the live limit windows",
10
+ "Settings: a token statistics row that opens the same screen",
11
+ "Token statistics: one tab per tool (Claude, Copilot, a local model)"
11
12
  ],
12
13
  "maturity": "stable",
13
14
  "web": "web/index.ts"
@@ -4,6 +4,11 @@ import { claudeEndpointBackend } from "./claude-endpoint.js";
4
4
  import { shellBackend } from "./shell.js";
5
5
  import { BACKENDS, liveIds, registerCore } from "./registry.js";
6
6
  import { derive } from "./derive.js";
7
+ import { homedir } from "node:os";
8
+ import { backendBinUnavailable } from "../binguard.js";
9
+ import { claudeBinResolution } from "../claudebin.js";
10
+ import { claudeMissingRefusal } from "../doctorclaude.js";
11
+ import { env } from "../env.js";
7
12
  export * from "./types.js";
8
13
  export * from "./registry.js";
9
14
  export { PROMPT_READERS, TRANSCRIPT_READERS, contributedReaders, registerScreenReader, registerStoreReader, screenReaderFor, storeReaderFor, namesStoreReader } from "./readers.js";
@@ -301,9 +306,11 @@ export function backendAutoAcceptsTrust(id) {
301
306
  const b = id ? BACKENDS.find((x) => x.id === id) : DEFAULT_BACKEND;
302
307
  return b?.delivery?.autoAcceptsTrust === true;
303
308
  }
309
+ const binWhy = (b) => backendBinUnavailable(b, () => claudeMissingRefusal(env("CLAUDE_BIN"), claudeBinResolution(), homedir()));
304
310
  export function backendInfos() {
305
311
  return BACKENDS.map((b) => {
306
312
  const m = MODEL_CACHE.get(b.id) ?? { aliases: [], ids: [] };
313
+ const why = m.unavailable ?? binWhy(b);
307
314
  return {
308
315
  id: b.id,
309
316
  label: b.label,
@@ -325,7 +332,11 @@ export function backendInfos() {
325
332
  ...(m.contextWindow && Object.keys(m.contextWindow).length ? { contextWindow: { ...m.contextWindow } } : {}),
326
333
  ...(m.overheadTok && Object.keys(m.overheadTok).length ? { overheadTok: { ...m.overheadTok } } : {}),
327
334
  ...(m.note ? { note: m.note } : {}) },
328
- ...(m.unavailable ? { unavailable: m.unavailable } : {}),
335
+ // A catalogue's own reason first; else a binary that is not there (copilot never installed,
336
+ // claude mid-upgrade) — so the phone offers the backends that CAN start instead of queuing
337
+ // a create the host will refuse. Computed per list, never cached: a hello or "Check again"
338
+ // sees an install that finished a minute ago.
339
+ ...(why ? { unavailable: why } : {}),
329
340
  ...(b.experimental ? { experimental: true } : {}),
330
341
  // The versions a plugin was measured on, the running one, and the drift sentence (R6).
331
342
  // Absent for a backend that declares no `measured` — every core backend (the pin holds).
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEpL,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChI,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxK,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEtH,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,YAAY,CAAC,aAAa,CAAC,CAAC;AAC5B,YAAY,CAAC,kBAAkB,CAAC,CAAC;AACjC,YAAY,CAAC,qBAAqB,CAAC,CAAC;AACpC,sFAAsF;AACtF,YAAY,CAAC,YAAY,CAAC,CAAC;AAE3B,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAE7C,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAW;IACxC,IAAI,CAAC,EAAE;QAAE,OAAO,eAAe,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,KAAK,CACb,oCAAoC,EAAE,kBAAkB,OAAO,EAAE,GAAG,CACrE,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;AAErD;;;;GAIG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAA2B,EAAE,OAAkC;IAC9G,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IAC3H,OAAO,GAAG,KAAK,oBAAoB,EAAE,iCAAiC,OAAO,kFAAkF,OAAO,oBAAoB,CAAC;AAC7L,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,UAAU,CAAC,CAAoB;IAC5C,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC1D,IAAI,CAAC,GAAkB,IAAI,CAAC;IAC5B,IAAI,CAAC;QAAC,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,CAAC,GAAG,IAAI,CAAC;IAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,mCAAmC;IACtE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAAC,CAAC;QAChD,MAAM,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QAC1D,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,sEAAsE;IACtE,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,CAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,CAAC;QACrE,8EAA8E;QAC9E,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,mFAAmF;AACnF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,QAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC1H,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,CAAgB,CAAC;QACrB,IAAI,CAAC;YAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,GAAG,IAAI,CAAC;QACjG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAA6B,EAAE,KAAyB;IAC3F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,SAAS,IAAI,eAAe,CAAC,EAAE,CAAC;IAC3C,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA6B,EAAE,KAAyB;IACxF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,IAAI,OAA0B,CAAC;IAC/B,6EAA6E;IAC7E,8EAA8E;IAC9E,gDAAgD;IAChD,IAAI,CAAC;QAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACnE,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,2DAA2D;IAC1G,6FAA6F;IAC7F,2FAA2F;IAC3F,+FAA+F;IAC/F,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,yMAAyM,CAAC;IACrQ,OAAO,GAAG,OAAO,CAAC,KAAK,mLAAmL,CAAC;AAC7M,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAwC,EAAE,MAAyB;IAClG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,2DAA2D,CAAC;AACrE,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,SAAkB;IACrD,IAAI,CAAC;QAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACxF,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,oBAAoB,CAAC,SAAkB;IACrD,IAAI,CAAC;QAAC,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC9G,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,QAA2B,EAAE,OAAkC;IAClG,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACnG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAW;IACjD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IACnE,OAAO,CAAC,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAe,EAAE;QACrC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC5D,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,uEAAuE;YACvE,kEAAkE;YAClE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,wFAAwF;YACxF,0EAA0E;YAC1E,+FAA+F;YAC/F,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAc,EAAE,CAAC,EAAE;YACzH,yEAAyE;YACzE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,4BAA4B;YAC5B,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7J,qEAAqE;gBACrE,6DAA6D;gBAC7D,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5G,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACvC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,uFAAuF;YACvF,yFAAyF;YACzF,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1G,yEAAyE;YACzE,yEAAyE;YACzE,kEAAkE;SACnE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type BackendDescriptor } from "./backends/index.js";
1
+ import type { BackendDescriptor } from "./backends/types.js";
2
2
  export interface InstallerProc {
3
3
  pid: number;
4
4
  cmd: string;
@@ -24,5 +24,17 @@ export declare function binMissingRefusal(label: string, bin: string, facts?: {
24
24
  resolves: (b: string) => boolean;
25
25
  installer: (b: string) => InstallerProc | null;
26
26
  }, ownWords?: boolean): string | null;
27
+ /**
28
+ * The program a backend runs, named as a CLI: "GitHub Copilot" alone reads as the editor
29
+ * extension a person may well have, which is not what is missing. A label that already says
30
+ * CLI ("Gemini CLI") is kept as it is.
31
+ */
32
+ export declare function cliName(label: string): string;
33
+ /**
34
+ * Why `backend` cannot start on this desktop because of its binary — the same sentence a
35
+ * session start would be refused with — or null when it is there. For the backend list, so
36
+ * the phone says it before a launch instead of after one. Never throws (a plugin's `bin()` may).
37
+ */
38
+ export declare function backendBinUnavailable(backend: Pick<BackendDescriptor, "label" | "bin">, claudeMissing: () => string | null): string | null;
27
39
  /** `binMissingRefusal` for a backend about to be launched; claude speaks its own "not installed" in `prepare`. */
28
40
  export declare function backendBinRefusal(backend: Pick<BackendDescriptor, "label" | "bin">): string | null;
@@ -14,7 +14,7 @@ import { execFileSync } from "node:child_process";
14
14
  import { existsSync } from "node:fs";
15
15
  import path from "node:path";
16
16
  import { pathHas } from "./claudebin.js";
17
- import { claudeBin } from "./backends/index.js";
17
+ import { claudeBin } from "./backends/claude.js";
18
18
  /** Package-manager verbs that replace an installed command. */
19
19
  const PM_RE = /(?:^|[\s/])(?:npm|pnpm|yarn|bun|brew|volta)(?:\.\w+)?\s+(?:-g\s+)?(?:install|i|add|update|upgrade|up|reinstall|global\s+add)\b/;
20
20
  /**
@@ -78,7 +78,33 @@ export function binMissingRefusal(label, bin, facts = { resolves: binResolves, i
78
78
  return `${installingWords(label, inst)}. Start the session again once it is done.`;
79
79
  if (ownWords)
80
80
  return null;
81
- return `${label} is not installed on this desktop — \`${bin}\` is not on the PATH the host runs with. Install it (or fix that PATH), then start the session again.`;
81
+ const cli = cliName(label);
82
+ return `The ${cli} is not installed on this desktop — its \`${bin}\` command is not on the PATH the host runs with. Install the ${cli} (or fix that PATH), then start the session again.`;
83
+ }
84
+ /**
85
+ * The program a backend runs, named as a CLI: "GitHub Copilot" alone reads as the editor
86
+ * extension a person may well have, which is not what is missing. A label that already says
87
+ * CLI ("Gemini CLI") is kept as it is.
88
+ */
89
+ export function cliName(label) {
90
+ const l = label.trim();
91
+ return /\bCLI$/i.test(l) ? l : `${l} CLI`;
92
+ }
93
+ /**
94
+ * Why `backend` cannot start on this desktop because of its binary — the same sentence a
95
+ * session start would be refused with — or null when it is there. For the backend list, so
96
+ * the phone says it before a launch instead of after one. Never throws (a plugin's `bin()` may).
97
+ */
98
+ export function backendBinUnavailable(backend, claudeMissing) {
99
+ try {
100
+ const bin = backend.bin();
101
+ if (bin === claudeBin())
102
+ return binMissingRefusal(backend.label, bin, undefined, true) ?? claudeMissing();
103
+ return binMissingRefusal(backend.label, bin);
104
+ }
105
+ catch {
106
+ return null;
107
+ }
82
108
  }
83
109
  /** `binMissingRefusal` for a backend about to be launched; claude speaks its own "not installed" in `prepare`. */
84
110
  export function backendBinRefusal(backend) {
@@ -1 +1 @@
1
- {"version":3,"file":"binguard.js","sourceRoot":"","sources":["../src/binguard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binguard.js","sourceRoot":"","sources":["../src/binguard.ts"],"names":[],"mappings":"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"}
@@ -14,3 +14,20 @@ export type AssetResult = {
14
14
  };
15
15
  /** `pluginDir` = the extension folder; `assets` = the manifest value; `name` = the URL's file segment. */
16
16
  export declare function resolveAsset(pluginName: string, pluginDir: string, assets: string | undefined, name: string): AssetResult;
17
+ /** A README is text for a phone screen; past this it is not a README a person reads there. */
18
+ export declare const README_MAX: number;
19
+ export type ReadmeResult = {
20
+ ok: true;
21
+ text: string;
22
+ } | {
23
+ ok: false;
24
+ status: 404 | 413;
25
+ error: string;
26
+ };
27
+ /**
28
+ * The extension's own `README.md`, for the Plugins screen's "Read more". Same containment as an
29
+ * asset: the file is realpath-resolved and must sit directly in the (realpath) plugin folder, so a
30
+ * symlink out is a 404, never a read. Served whether or not the plugin is running — reading about a
31
+ * plugin that is off is how a person decides to turn it on.
32
+ */
33
+ export declare function readReadme(pluginName: string, pluginDir: string): ReadmeResult;
@@ -6,7 +6,7 @@
6
6
  * in words. The name is flat (`ASSET_NAME`); the assets dir and the file are both realpath-resolved
7
7
  * and the file must stay under the dir, so a symlink out is a 404, never a read.
8
8
  */
9
- import { realpathSync, statSync } from "node:fs";
9
+ import { readFileSync, realpathSync, statSync } from "node:fs";
10
10
  import { extname, isAbsolute, join, sep } from "node:path";
11
11
  /** A flat file name: no slash, no leading dot, no `..` run can matter without a separator. */
12
12
  export const ASSET_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
@@ -41,4 +41,30 @@ export function resolveAsset(pluginName, pluginDir, assets, name) {
41
41
  return missing(`${pluginName} has no file by that name`);
42
42
  }
43
43
  }
44
+ /** A README is text for a phone screen; past this it is not a README a person reads there. */
45
+ export const README_MAX = 256 * 1024;
46
+ /**
47
+ * The extension's own `README.md`, for the Plugins screen's "Read more". Same containment as an
48
+ * asset: the file is realpath-resolved and must sit directly in the (realpath) plugin folder, so a
49
+ * symlink out is a 404, never a read. Served whether or not the plugin is running — reading about a
50
+ * plugin that is off is how a person decides to turn it on.
51
+ */
52
+ export function readReadme(pluginName, pluginDir) {
53
+ const missing = { ok: false, status: 404, error: `${pluginName} has no README` };
54
+ try {
55
+ const dir = realpathSync(pluginDir);
56
+ const file = realpathSync(join(dir, "README.md"));
57
+ if (!file.startsWith(dir + sep))
58
+ return missing;
59
+ const st = statSync(file);
60
+ if (!st.isFile())
61
+ return missing;
62
+ if (st.size > README_MAX)
63
+ return { ok: false, status: 413, error: `${pluginName}'s README is too long to show here` };
64
+ return { ok: true, text: readFileSync(file, "utf8") };
65
+ }
66
+ catch {
67
+ return missing;
68
+ }
69
+ }
44
70
  //# sourceMappingURL=pluginassets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pluginassets.js","sourceRoot":"","sources":["../../src/plugins/pluginassets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE3D,8FAA8F;AAC9F,MAAM,CAAC,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAEzD,MAAM,UAAU,GAA2B;IACzC,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;CAC9G,CAAC;AACF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAC;AAC/E,CAAC;AAMD,0GAA0G;AAC1G,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,SAAiB,EAAE,MAA0B,EAAE,IAAY;IAC1G,MAAM,OAAO,GAAG,CAAC,KAAa,EAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,GAAG,UAAU,kBAAkB,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;IACrF,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,UAAU,kBAAkB,CAAC,CAAC;IAChH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,UAAU,kBAAkB,CAAC,CAAC;QACzI,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;QAC1F,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,OAAO,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"pluginassets.js","sourceRoot":"","sources":["../../src/plugins/pluginassets.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { type PluginRoute } from "./pluginroutes.js";
6
6
  import { type ReleaseBuiltins } from "./builtin.js";
7
7
  import { PluginStreams, type StreamSink } from "./pluginstreams.js";
8
8
  import { PluginFiles, type ServedFile } from "./pluginfiles.js";
9
- import { type AssetResult } from "./pluginassets.js";
9
+ import { type AssetResult, type ReadmeResult } from "./pluginassets.js";
10
10
  import { type AutoProbes } from "./pluginauto.js";
11
11
  import type { Notify } from "../notifytypes.js";
12
12
  type Handler = (e: any) => unknown;
@@ -234,6 +234,8 @@ export declare class PluginRegistry {
234
234
  offeredFile(pluginId: string, token: string): ServedFile | null;
235
235
  /** `GET|HEAD /api/plugin/<id>/asset/<file>`: unknown plugin / no `assets` / no file ⇒ 404 in words; switched off or not running ⇒ 403. */
236
236
  assetFile(pluginId: string, file: string): AssetResult;
237
+ /** Its README.md, running or not (`readReadme`). */
238
+ readme(pluginId: string): ReadmeResult;
237
239
  route(pluginId: string, method: string, parts: readonly string[]): ((req: {
238
240
  query: Record<string, string>;
239
241
  body: unknown;
@@ -46,7 +46,7 @@ import { makeApi } from "./pluginapi.js";
46
46
  import { PluginStreams } from "./pluginstreams.js";
47
47
  import { setSetupSource } from "./setupcontrib.js";
48
48
  import { PluginFiles } from "./pluginfiles.js";
49
- import { resolveAsset } from "./pluginassets.js";
49
+ import { readReadme, resolveAsset } from "./pluginassets.js";
50
50
  import { hostStateDir } from "../branddirs.js";
51
51
  import { AUTO_PROBE_EVERY_MS, autoWhy, cachedProbe, writeProbeCache } from "./pluginauto.js";
52
52
  import { readJsonGuarded, writeJsonAtomic } from "../jsonstore.js";
@@ -533,6 +533,13 @@ export class PluginRegistry {
533
533
  return { ok: false, status: 403, error: `${e.manifest.name} is ${e.state === "off" ? "turned off" : "not running"}` };
534
534
  return resolveAsset(e.manifest.name, e.dir, e.manifest.assets, file);
535
535
  }
536
+ /** Its README.md, running or not (`readReadme`). */
537
+ readme(pluginId) {
538
+ const e = this.byId(pluginId);
539
+ if (!e)
540
+ return { ok: false, status: 404, error: "no such plugin" };
541
+ return readReadme(e.manifest.name, e.dir);
542
+ }
536
543
  route(pluginId, method, parts) {
537
544
  const e = this.byId(pluginId);
538
545
  if (!e || e.state !== "active")