patchwork-os 1.2.0-beta.3.canary.920 → 1.2.0-beta.3.canary.921
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/dist/bridge.js +3 -3
- package/dist/bridge.js.map +1 -1
- package/dist/commands/policyExplain.d.ts +8 -0
- package/dist/commands/policyExplain.js +2 -2
- package/dist/commands/policyExplain.js.map +1 -1
- package/dist/governance/effectivePolicy.d.ts +18 -0
- package/dist/governance/effectivePolicy.js +25 -0
- package/dist/governance/effectivePolicy.js.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +17 -2
- package/dist/recipeOrchestration.js +12 -1
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +8 -0
- package/dist/recipes/chainedRunner.js +4 -3
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +11 -1
- package/dist/recipes/yamlRunner.js +16 -6
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/runLog.d.ts +17 -1
- package/dist/runLog.js +1 -1
- package/dist/runLog.js.map +1 -1
- package/dist/server.d.ts +5 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/clipboard.d.ts +8 -0
- package/dist/tools/clipboard.js +43 -28
- package/dist/tools/clipboard.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/clipboard.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
2
|
import { ExtensionTimeoutError, } from "../extensionClient.js";
|
|
4
3
|
import { error, successStructured } from "./utils.js";
|
|
5
|
-
const execFileAsync = promisify(execFile);
|
|
6
4
|
const MAX_CLIPBOARD_BYTES = 100 * 1024; // 100 KB
|
|
7
5
|
const MAX_WRITE_BYTES = 1024 * 1024; // 1 MB (documented limit for writeClipboard)
|
|
6
|
+
/**
|
|
7
|
+
* Upper bound on one native clipboard command. Without it a child that never
|
|
8
|
+
* exits (a cold or wedged PowerShell on a loaded Windows host, a clipboard
|
|
9
|
+
* held open by another process) left the tool call pending forever, so the
|
|
10
|
+
* MCP client got no reply at all. Linux may try two tools, so the worst case
|
|
11
|
+
* is twice this.
|
|
12
|
+
*/
|
|
13
|
+
export const NATIVE_CLIPBOARD_TIMEOUT_MS = 3_000;
|
|
8
14
|
/**
|
|
9
15
|
* Truncate a string so that its UTF-8 byte length does not exceed `maxBytes`.
|
|
10
16
|
* String.slice() counts UTF-16 code units, not bytes, so for content with
|
|
@@ -23,17 +29,41 @@ function truncateToBytes(str, maxBytes) {
|
|
|
23
29
|
}
|
|
24
30
|
return str.slice(0, len);
|
|
25
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Run a native clipboard command, optionally piping `input` to stdin.
|
|
34
|
+
* Rejects (and kills the child) after NATIVE_CLIPBOARD_TIMEOUT_MS. The bound
|
|
35
|
+
* is our own timer rather than execFile's `timeout` option, because that
|
|
36
|
+
* option only settles once the killed child actually exits.
|
|
37
|
+
*/
|
|
38
|
+
function runNative(cmd, args, input) {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
let timer;
|
|
41
|
+
const proc = execFile(cmd, args, { windowsHide: true }, (err, stdout) => {
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
if (err)
|
|
44
|
+
reject(err);
|
|
45
|
+
else
|
|
46
|
+
resolve(String(stdout));
|
|
47
|
+
});
|
|
48
|
+
timer = setTimeout(() => {
|
|
49
|
+
proc.kill();
|
|
50
|
+
reject(new Error(`${cmd} timed out`));
|
|
51
|
+
}, NATIVE_CLIPBOARD_TIMEOUT_MS);
|
|
52
|
+
if (input !== undefined)
|
|
53
|
+
proc.stdin?.end(input);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
26
56
|
/** Read clipboard text using platform-native CLI tools. */
|
|
27
57
|
async function nativeReadClipboard() {
|
|
28
58
|
try {
|
|
29
59
|
if (process.platform === "darwin") {
|
|
30
|
-
const
|
|
60
|
+
const stdout = await runNative("pbpaste", []);
|
|
31
61
|
return truncateToBytes(stdout, MAX_CLIPBOARD_BYTES);
|
|
32
62
|
}
|
|
33
63
|
if (process.platform === "linux") {
|
|
34
64
|
// xclip preferred; fall back to xsel
|
|
35
65
|
try {
|
|
36
|
-
const
|
|
66
|
+
const stdout = await runNative("xclip", [
|
|
37
67
|
"-selection",
|
|
38
68
|
"clipboard",
|
|
39
69
|
"-o",
|
|
@@ -41,15 +71,12 @@ async function nativeReadClipboard() {
|
|
|
41
71
|
return truncateToBytes(stdout, MAX_CLIPBOARD_BYTES);
|
|
42
72
|
}
|
|
43
73
|
catch {
|
|
44
|
-
const
|
|
45
|
-
"--clipboard",
|
|
46
|
-
"--output",
|
|
47
|
-
]);
|
|
74
|
+
const stdout = await runNative("xsel", ["--clipboard", "--output"]);
|
|
48
75
|
return truncateToBytes(stdout, MAX_CLIPBOARD_BYTES);
|
|
49
76
|
}
|
|
50
77
|
}
|
|
51
78
|
if (process.platform === "win32") {
|
|
52
|
-
const
|
|
79
|
+
const stdout = await runNative("powershell", [
|
|
53
80
|
"-NoProfile",
|
|
54
81
|
"-Command",
|
|
55
82
|
"Get-Clipboard",
|
|
@@ -58,7 +85,7 @@ async function nativeReadClipboard() {
|
|
|
58
85
|
}
|
|
59
86
|
}
|
|
60
87
|
catch {
|
|
61
|
-
// tool not available or
|
|
88
|
+
// tool not available, clipboard empty, or timed out
|
|
62
89
|
}
|
|
63
90
|
return null;
|
|
64
91
|
}
|
|
@@ -66,38 +93,26 @@ async function nativeReadClipboard() {
|
|
|
66
93
|
async function nativeWriteClipboard(text) {
|
|
67
94
|
try {
|
|
68
95
|
if (process.platform === "darwin") {
|
|
69
|
-
await
|
|
70
|
-
const proc = execFile("pbcopy", (err) => err ? reject(err) : resolve());
|
|
71
|
-
proc.stdin?.end(text);
|
|
72
|
-
});
|
|
96
|
+
await runNative("pbcopy", [], text);
|
|
73
97
|
return true;
|
|
74
98
|
}
|
|
75
99
|
if (process.platform === "linux") {
|
|
76
|
-
const writeVia = async (cmd, args) => {
|
|
77
|
-
await new Promise((resolve, reject) => {
|
|
78
|
-
const proc = execFile(cmd, args, (err) => err ? reject(err) : resolve());
|
|
79
|
-
proc.stdin?.end(text);
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
100
|
try {
|
|
83
|
-
await
|
|
101
|
+
await runNative("xclip", ["-selection", "clipboard"], text);
|
|
84
102
|
}
|
|
85
103
|
catch {
|
|
86
|
-
await
|
|
104
|
+
await runNative("xsel", ["--clipboard", "--input"], text);
|
|
87
105
|
}
|
|
88
106
|
return true;
|
|
89
107
|
}
|
|
90
108
|
if (process.platform === "win32") {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const proc = execFile("clip", (err) => (err ? reject(err) : resolve()));
|
|
94
|
-
proc.stdin?.end(text);
|
|
95
|
-
});
|
|
109
|
+
// Use clip.exe — ships with all Windows versions
|
|
110
|
+
await runNative("clip", [], text);
|
|
96
111
|
return true;
|
|
97
112
|
}
|
|
98
113
|
}
|
|
99
114
|
catch {
|
|
100
|
-
// tool not available
|
|
115
|
+
// tool not available or timed out
|
|
101
116
|
}
|
|
102
117
|
return false;
|
|
103
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/tools/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/tools/clipboard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "1.2.0-beta.3.canary.
|
|
3
|
+
"version": "1.2.0-beta.3.canary.921",
|
|
4
4
|
"description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|