fix: per-user Today, native paste and drop on a local machine

- Today's spend in the status bar and the Claude Code statusline is the
  caller's own (`GET /api/pricing/cost?mine=1`, scope.ownSessionWhere), not
  every user's sum for an admin or analyst.
- A screenshot pasted into a local claude pane is sent as Claude Code's own
  image-paste key: Alt+V on Windows (Ctrl+V did nothing there), ^V elsewhere,
  and only when the machine can read its clipboard (wl-paste/xclip + a
  display on Linux), else it is uploaded (GET /api/run/native-paste {key}).
- A file manager's files pasted or dropped on a local browser go in by their
  own paths, read from the OS clipboard or the file manager's selection
  (server/lib/file-manager.js, POST /api/run/clipboard-files and
  /selected-files): no upload, no size limit. A copied image file is pasted
  by path, text that comes with a picture of it (spreadsheet cells) is
  pasted as text, Windows paths go in as `C:/…` mentions.
- Tab titles for Snapshot, Artifacts, Files and Administration.
- An npm tool AgentHub installed under ~/.local is updated there, not by its
  own updater into npm's global prefix.
This commit is contained in:
2026-10-26 11:18:05 +07:00
parent c59e196e41
commit f2f1cd9b6c
33 changed files with 1046 additions and 60 deletions
+28 -1
View File
@@ -8,7 +8,7 @@
*/
const { describe, it, beforeEach, afterEach } = require("node:test");
const assert = require("node:assert/strict");
const { desktopEnv, FORWARDED, __setExecImpl } = require("../lib/desktop-env");
const { desktopEnv, canReadClipboard, FORWARDED, __setExecImpl } = require("../lib/desktop-env");
const saved = {};
@@ -61,3 +61,30 @@ describe("desktopEnv", () => {
assert.equal(desktopEnv().WAYLAND_DISPLAY, undefined);
});
});
describe("canReadClipboard", () => {
const has =
(...names) =>
(n) =>
names.includes(n) ? `/usr/bin/${n}` : null;
it("needs wl-paste for a Wayland display, xclip for an X one", () => {
const wl = { WAYLAND_DISPLAY: "wayland-0" };
const x = { DISPLAY: ":0" };
assert.equal(canReadClipboard({ platform: "linux", env: wl, which: has("wl-paste") }), true);
assert.equal(canReadClipboard({ platform: "linux", env: wl, which: has("xclip") }), false);
assert.equal(canReadClipboard({ platform: "linux", env: x, which: has("xclip") }), true);
assert.equal(canReadClipboard({ platform: "linux", env: x, which: has() }), false);
});
it("is false with no display at all — a headless box", () => {
assert.equal(
canReadClipboard({ platform: "linux", env: {}, which: has("xclip", "wl-paste") }),
false
);
});
it("is true off Linux, where the clipboard tools are built in", () => {
assert.equal(canReadClipboard({ platform: "darwin", env: {}, which: has() }), true);
});
});