pendingyou 0.38.0 → 0.39.0
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.
- package/CHANGELOG.md +10 -0
- package/README.md +5 -2
- package/dist/presence.js +3 -2
- package/dist/terminal.js +20 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.39.0 (2026-10-25)
|
|
4
|
+
|
|
5
|
+
- In tmux, your agents' sessions now say which pane they run in, as they have in Herdr since 0.18.0: each presence
|
|
6
|
+
report carries the pane (`TMUX_PANE`, such as `%12`) and which tmux server it is (16 hex characters of a hash of the
|
|
7
|
+
computer's name and tmux's socket path, never the path itself). In a Herdr pane Herdr's is the one it says, even when
|
|
8
|
+
Herdr runs inside tmux. That's what lets an app you signed in on this computer bring the agent's tmux pane to the front
|
|
9
|
+
when you press Show on its card: the Pending You SDK's `show-in-tmux` example is one, to run on your own account.
|
|
10
|
+
Nothing else of tmux is read, and nothing is ever run in it. A Pending You from before tmux refuses the pane, and the
|
|
11
|
+
report goes again without it.
|
|
12
|
+
|
|
3
13
|
## 0.38.0 (2026-10-25)
|
|
4
14
|
|
|
5
15
|
- Show in Herdr: press it on a card in Pending You, at your desk or on your phone, and Herdr moves to the pane of the
|
package/README.md
CHANGED
|
@@ -365,7 +365,10 @@ has a Presence line for each agent.
|
|
|
365
365
|
Since 0.18.0, a session in a [Herdr](https://herdr.dev) pane also says which pane (`HERDR_PANE_ID`, such as `w2:p1`)
|
|
366
366
|
and which Herdr server (16 hex characters of a hash of the computer's name and Herdr's socket path, never the path
|
|
367
367
|
itself), so Pending You can list where each of an agent's running sessions is and the Pending You plugin for Herdr can
|
|
368
|
-
take you to it.
|
|
368
|
+
take you to it. Since 0.39.0, a session in a tmux pane says which the same way (`TMUX_PANE`, such as `%12`, and 16 hex
|
|
369
|
+
characters of a hash of the computer's name and tmux's socket path), so an app you sign in on this computer can bring
|
|
370
|
+
it to the front when you press Show on its card; in a Herdr pane, even one inside tmux, Herdr's is the one it says.
|
|
371
|
+
Anywhere else nothing of the kind is sent.
|
|
369
372
|
|
|
370
373
|
## In Herdr
|
|
371
374
|
|
|
@@ -637,7 +640,7 @@ whether the agent has a `pendingyou` MCP server and where it points. In a Herdr
|
|
|
637
640
|
Herdr's own command line, on this computer, the badges above: a card's title (redacted, 80 characters at most) and its
|
|
638
641
|
request id, never an answer or a note; `<app>-threads.json` remembers the pane each session runs in, and `herdr.json`
|
|
639
642
|
whether the badges are off. Presence there (0.18.0) also sends Pending You the pane's id and the hash that names its
|
|
640
|
-
Herdr server. With a sign-in that only hears, the hooks and
|
|
643
|
+
Herdr server, and in a tmux pane (0.39.0) the tmux pane's id and the hash that names its tmux server. With a sign-in that only hears, the hooks and
|
|
641
644
|
listeners tell this computer's handed questions from another's by its names: its hostname, the names its sign-ins by
|
|
642
645
|
code were given, a Mac's own name (`scutil --get ComputerName`) and, outside a hook, Tailscale's (`tailscale status`). For a permission prompt's card, the worker reads
|
|
643
646
|
the end of the Claude Code session's transcript only for the name the session gave Pending You, and `git remote
|
package/dist/presence.js
CHANGED
|
@@ -6,8 +6,9 @@ import { reportThreads, threadNames } from "./apps/codex-wake.js";
|
|
|
6
6
|
import { DEFAULT_ORIGIN } from "./args.js";
|
|
7
7
|
import { readCredential } from "./credentials.js";
|
|
8
8
|
import { configDir, readJson, withLock, writeWhole } from "./files.js";
|
|
9
|
-
import { herdrTarget,
|
|
9
|
+
import { herdrTarget, reportCommand } from "./herdr.js";
|
|
10
10
|
import { endPrompts, sessionName } from "./permission.js";
|
|
11
|
+
import { terminalOf } from "./terminal.js";
|
|
11
12
|
export const PRESENCE_PATH = '/mcp/cli/presence';
|
|
12
13
|
export const PRESENCE_EVERY_MS = 5 * 60_000;
|
|
13
14
|
export const LIVE_AGAIN_MS = 4 * 60_000;
|
|
@@ -67,7 +68,7 @@ export async function sendPresence(io, origin, presence, timeoutMs = SEND_MS, op
|
|
|
67
68
|
cwd: presence.cwd && presence.cwd.length <= CWD_MAX ? presence.cwd : null,
|
|
68
69
|
state: presence.state,
|
|
69
70
|
};
|
|
70
|
-
const terminal =
|
|
71
|
+
const terminal = terminalOf(io.env, io.host);
|
|
71
72
|
let body = terminal ? { ...plain, terminal } : plain;
|
|
72
73
|
const send = (force) => postJson(io, origin, PRESENCE_PATH, body, timeoutMs, {
|
|
73
74
|
app: presence.app,
|
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { isAbsolute } from 'node:path';
|
|
3
|
+
import { herdrTerminal } from "./herdr.js";
|
|
4
|
+
export const TMUX_PANE = /^%[0-9]{1,9}$/;
|
|
5
|
+
export function tmuxServer(env, host) {
|
|
6
|
+
const [socket = ''] = (env.TMUX ?? '').split(',');
|
|
7
|
+
if (!socket || !isAbsolute(socket) || /[\0\r\n]/.test(socket))
|
|
8
|
+
return null;
|
|
9
|
+
return createHash('sha256').update(`${host}${socket}`).digest('hex').slice(0, 16);
|
|
10
|
+
}
|
|
11
|
+
export function tmuxTerminal(env, host) {
|
|
12
|
+
const pane = env.TMUX_PANE ?? '';
|
|
13
|
+
if (!env.TMUX || !TMUX_PANE.test(pane))
|
|
14
|
+
return null;
|
|
15
|
+
const server = tmuxServer(env, host);
|
|
16
|
+
return { app: 'tmux', paneId: pane, ...(server ? { server } : {}) };
|
|
17
|
+
}
|
|
18
|
+
export function terminalOf(env, host) {
|
|
19
|
+
return herdrTerminal(env, host) ?? tmuxTerminal(env, host);
|
|
20
|
+
}
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.39.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pendingyou",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.39.0",
|
|
4
4
|
"description": "Pending You for your coding agents: one command sets up Claude Code, Codex, OpenCode and Pi to ask you through Pending You and hear your answers, even while they sit idle.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pendingyou",
|