wezard 2.6.0 → 2.6.1

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.
@@ -0,0 +1,50 @@
1
+ import { parseTmuxVersion, runTmux } from "./spawn-tmux.js";
2
+ /** One instance per daemon: all mirror/peer/receipt pastes share the legacy lock. */
3
+ export const createTmuxBufferPaster = (run = runTmux) => {
4
+ let version;
5
+ let queue = Promise.resolve();
6
+ let seq = 0;
7
+ const locked = (fn) => {
8
+ const result = queue.then(fn);
9
+ queue = result.then(() => undefined, () => undefined);
10
+ return result;
11
+ };
12
+ return async (target, text) => {
13
+ // Never let an absent target select tmux's current pane implicitly.
14
+ if (!target.trim())
15
+ return { ok: false, reason: "tmux paste requires a target pane" };
16
+ const probe = await (version ??= run(["-V"]));
17
+ if (!probe.ok) {
18
+ version = undefined; // A transient probe failure must not poison future deliveries.
19
+ return { ok: false, reason: `tmux version probe failed: ${probe.stderr.trim() || probe.code}` };
20
+ }
21
+ // Match spawn's treatment of next/suffixed versions and unknown version strings.
22
+ const named = parseTmuxVersion(probe.stdout) >= 3.0;
23
+ const paste = async () => {
24
+ const buffer = named ? ["-b", `wezard-${process.pid}-${++seq}`] : [];
25
+ let consumed = false;
26
+ try {
27
+ const loaded = await run(["load-buffer", ...buffer, "-"], { stdin: text });
28
+ if (!loaded.ok)
29
+ return { ok: false, reason: `tmux load-buffer failed: ${loaded.stderr.slice(-200) || loaded.code}` };
30
+ const pasted = await run(["paste-buffer", ...buffer, "-p", "-d", "-t", target]);
31
+ if (!pasted.ok)
32
+ return { ok: false, reason: `tmux paste-buffer failed: ${pasted.stderr.slice(-200)}` };
33
+ consumed = true;
34
+ return { ok: true };
35
+ }
36
+ finally {
37
+ // A failed/expired client may have loaded its buffer. Named buffers do
38
+ // not age out; best-effort cleanup must preserve the original error.
39
+ if (named && !consumed)
40
+ await run(["delete-buffer", ...buffer]).catch(() => undefined);
41
+ }
42
+ };
43
+ // tmux 1.8's -b takes a numeric index, not a custom name. Only legacy
44
+ // load→paste pairs serialize; modern named buffers retain cross-pane concurrency.
45
+ // This lock covers this daemon's writers, not external tmux clipboard clients.
46
+ return named ? paste() : locked(paste);
47
+ };
48
+ };
49
+ export const pasteTmuxBuffer = createTmuxBufferPaster();
50
+ //# sourceMappingURL=tmux-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux-buffer.js","sourceRoot":"","sources":["../../daemon/tmux-buffer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wezard",
3
- "version": "2.6.0",
3
+ "version": "2.6.1",
4
4
  "description": "Bridge Claude Code and WeCom: PreToolUse approval cards + bidirectional tmux session mirror with image paste",
5
5
  "type": "module",
6
6
  "license": "MIT",