prompsit-cli 26.612.1400 → 26.612.1525

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/README.md CHANGED
@@ -23,7 +23,7 @@ prompsit # Interactive REPL
23
23
  > Run `prompsit` with no arguments to enter the **interactive REPL** with tab completion, command history, and bundled example files in `~/.prompsit/examples/`.
24
24
 
25
25
  > [!IMPORTANT]
26
- > Requires Node.js 22+. On Linux, use a Node version manager such as `nvm` or configure npm to use a user-owned prefix; do not use `sudo npm install -g`.
26
+ > Requires Node.js 22.19+. On Linux, use a Node version manager such as `nvm` or configure npm to use a user-owned prefix; do not use `sudo npm install -g`.
27
27
 
28
28
  **Update:** `npm install -g prompsit-cli@latest`
29
29
  **Uninstall:** `npm uninstall -g prompsit-cli`
@@ -141,7 +141,7 @@ Run `prompsit login` without arguments. The CLI starts the Google device-flow si
141
141
  <details>
142
142
  <summary><b>Linux install fails with EACCES?</b></summary>
143
143
 
144
- This is usually an npm prefix permissions issue, not a Prompsit CLI issue. The preferred fix is to install Node.js 22+ with a version manager such as `nvm`, `fnm`, or Volta. If you use system Node/npm, configure a user-owned npm prefix:
144
+ This is usually an npm prefix permissions issue, not a Prompsit CLI issue. The preferred fix is to install Node.js 22.19+ with a version manager such as `nvm`, `fnm`, or Volta. If you use system Node/npm, configure a user-owned npm prefix:
145
145
 
146
146
  ```bash
147
147
  mkdir -p ~/.local
@@ -60,7 +60,7 @@ prompsit login -a "EMAIL" -s "SECRET"
60
60
 
61
61
  ### Linux Install Notes
62
62
 
63
- Prompsit CLI requires Node.js 22+. Prefer a Node version manager (`nvm`, `fnm`, or Volta). If a system Node/npm install raises `EACCES` on global install, configure a user-owned prefix and retry without sudo:
63
+ Prompsit CLI requires Node.js 22.19+. Prefer a Node version manager (`nvm`, `fnm`, or Volta). If a system Node/npm install raises `EACCES` on global install, configure a user-owned prefix and retry without sudo:
64
64
 
65
65
  ```bash
66
66
  mkdir -p ~/.local
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/runtime/clipboard.ts"],"names":[],"mappings":"AAyGA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAC5B;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CA8B1E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB/D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBrE"}
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/runtime/clipboard.ts"],"names":[],"mappings":"AAyGA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAC5B;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CA8B1E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB/D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBrE"}
@@ -1,7 +1,7 @@
1
1
  // See API-502: Cross-platform clipboard access.
2
2
  //
3
3
  // Leaf module -- no internal repl/ imports.
4
- // Windows: koffi FFI for instant read/write (~0ms).
4
+ // Windows: clip.exe (write) + powershell.exe Get-Clipboard (read).
5
5
  // WSL: clip.exe (write) + powershell.exe Get-Clipboard (read).
6
6
  // macOS: pbpaste / pbcopy.
7
7
  // Linux: wl-paste / wl-copy (Wayland) → xclip → xsel (X11).
@@ -145,8 +145,11 @@ export async function probeSystemClipboard() {
145
145
  export async function getClipboardText() {
146
146
  try {
147
147
  if (isWindowsPlatform()) {
148
- const { readClipboardNative } = await import("./clipboard-win32.js");
149
- return readClipboardNative() ?? "";
148
+ return await runClipboardCommand("powershell.exe", [
149
+ "-NoProfile",
150
+ "-Command",
151
+ "Get-Clipboard",
152
+ ]);
150
153
  }
151
154
  if (isWSL()) {
152
155
  return await runClipboardCommand("powershell.exe", ["-NoProfile", "-c", "Get-Clipboard"]);
@@ -168,8 +171,8 @@ export async function getClipboardText() {
168
171
  export async function setClipboardText(text) {
169
172
  try {
170
173
  if (isWindowsPlatform()) {
171
- const { writeClipboardNative } = await import("./clipboard-win32.js");
172
- return writeClipboardNative(text) ?? false;
174
+ await runClipboardCommand("clip.exe", [], text);
175
+ return true;
173
176
  }
174
177
  if (isWSL()) {
175
178
  await runClipboardCommand("clip.exe", [], text);
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/runtime/clipboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/runtime/clipboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prompsit-cli",
3
- "version": "26.612.1400",
3
+ "version": "26.612.1525",
4
4
  "description": "CLI for the Prompsit Translation API",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Prompsit Language Engineering, S.L.",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "type": "module",
24
24
  "engines": {
25
- "node": ">=22"
25
+ "node": ">=22.19.0"
26
26
  },
27
27
  "bin": {
28
28
  "prompsit": "./dist/index.js"
@@ -30,14 +30,12 @@
30
30
  "files": [
31
31
  "dist",
32
32
  "examples",
33
- "assets",
34
- "scripts/check-node-version.cjs"
33
+ "assets"
35
34
  ],
36
35
  "publishConfig": {
37
36
  "access": "public"
38
37
  },
39
38
  "scripts": {
40
- "preinstall": "node scripts/check-node-version.cjs",
41
39
  "prepare": "node -e \"const p=require('path');const f=require('fs');const t=p.join('node_modules','.bin','tsc');f.existsSync(p.join('node_modules','typescript'))?require('child_process').execSync(t+' --build',{stdio:'inherit'}):void 0\"",
42
40
  "build": "tsc --build",
43
41
  "release": "npm version --no-git-tag-version \"$(date +%y.%m%d.%H%M)\" --allow-same-version && npm run build && npm publish",
@@ -61,7 +59,7 @@
61
59
  },
62
60
  "dependencies": {
63
61
  "@commander-js/extra-typings": "^14.0.0",
64
- "@earendil-works/pi-tui": "^0.74.2",
62
+ "@earendil-works/pi-tui": "^0.75.5",
65
63
  "chalk": "^5.6.2",
66
64
  "cli-table3": "^0.6.5",
67
65
  "eventsource-client": "^1.2.0",
@@ -72,9 +70,6 @@
72
70
  "smol-toml": "^1.6.0",
73
71
  "zod": "^4.3.6"
74
72
  },
75
- "optionalDependencies": {
76
- "koffi": "^2.15.1"
77
- },
78
73
  "devDependencies": {
79
74
  "@eslint/js": "^10.0.1",
80
75
  "@types/node": "^25.3.1",
@@ -1,13 +0,0 @@
1
- /**
2
- * Read text from system clipboard using Win32 API via koffi FFI.
3
- * Returns `null` if koffi is unavailable (caller should fall back).
4
- * Returns `""` if clipboard is empty or has no text format.
5
- */
6
- export declare function readClipboardNative(): string | null;
7
- /**
8
- * Write text to system clipboard using Win32 API via koffi FFI.
9
- * Returns `null` if koffi is unavailable (caller should fall back).
10
- * Returns `true`/`false` for success/failure.
11
- */
12
- export declare function writeClipboardNative(text: string): boolean | null;
13
- //# sourceMappingURL=clipboard-win32.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard-win32.d.ts","sourceRoot":"","sources":["../../src/runtime/clipboard-win32.ts"],"names":[],"mappings":"AAoFA;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAmBnD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA+BjE"}
@@ -1,132 +0,0 @@
1
- // Native Windows clipboard read/write via koffi FFI.
2
- // Eliminates ~1000ms PowerShell startup overhead.
3
- // Pattern: same as pi-tui's enableWindowsVTInput() in terminal.js —
4
- // dynamic require("koffi"), lazy init, try/catch wrapper.
5
- // Uses createRequire because the project is ESM-only.
6
- /* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unsafe-return */
7
- import { createRequire } from "node:module";
8
- let _initialized = false;
9
- let _koffi = null;
10
- // Shared
11
- let _OpenClipboard = null;
12
- let _CloseClipboard = null;
13
- let _GlobalLock = null;
14
- let _GlobalUnlock = null;
15
- // Read
16
- let _GetClipboardData = null;
17
- // Write
18
- let _EmptyClipboard = null;
19
- let _SetClipboardData = null;
20
- let _GlobalAlloc = null;
21
- let _GlobalFree = null;
22
- let _RtlMoveMemory = null;
23
- const CF_UNICODETEXT = 13;
24
- const GMEM_MOVEABLE = 0x00_02;
25
- function init() {
26
- if (_initialized)
27
- return _OpenClipboard !== null;
28
- _initialized = true;
29
- try {
30
- const esmRequire = createRequire(import.meta.url);
31
- const koffi = esmRequire("koffi");
32
- _koffi = koffi;
33
- const user32 = koffi.load("user32.dll");
34
- const kernel32 = koffi.load("kernel32.dll");
35
- // Shared
36
- _OpenClipboard = user32.func("bool __stdcall OpenClipboard(void *)");
37
- _CloseClipboard = user32.func("bool __stdcall CloseClipboard()");
38
- _GlobalLock = kernel32.func("void * __stdcall GlobalLock(void *)");
39
- _GlobalUnlock = kernel32.func("bool __stdcall GlobalUnlock(void *)");
40
- // Read
41
- _GetClipboardData = user32.func("void * __stdcall GetClipboardData(uint32_t)");
42
- // Write
43
- _EmptyClipboard = user32.func("bool __stdcall EmptyClipboard()");
44
- _SetClipboardData = user32.func("void * __stdcall SetClipboardData(uint32_t, void *)");
45
- _GlobalAlloc = kernel32.func("void * __stdcall GlobalAlloc(uint32_t, size_t)");
46
- _GlobalFree = kernel32.func("void * __stdcall GlobalFree(void *)");
47
- _RtlMoveMemory = kernel32.func("void __stdcall RtlMoveMemory(void *, const void *, size_t)");
48
- return true;
49
- }
50
- catch {
51
- return false;
52
- }
53
- }
54
- /** Guard: all FFI functions loaded. */
55
- function ready() {
56
- return !!(init() &&
57
- _koffi &&
58
- _OpenClipboard &&
59
- _CloseClipboard &&
60
- _GlobalLock &&
61
- _GlobalUnlock &&
62
- _GetClipboardData &&
63
- _EmptyClipboard &&
64
- _SetClipboardData &&
65
- _GlobalAlloc &&
66
- _GlobalFree &&
67
- _RtlMoveMemory);
68
- }
69
- /**
70
- * Read text from system clipboard using Win32 API via koffi FFI.
71
- * Returns `null` if koffi is unavailable (caller should fall back).
72
- * Returns `""` if clipboard is empty or has no text format.
73
- */
74
- export function readClipboardNative() {
75
- if (!ready())
76
- return null;
77
- if (!_OpenClipboard(null))
78
- return null;
79
- try {
80
- const hData = _GetClipboardData(CF_UNICODETEXT);
81
- if (!hData)
82
- return "";
83
- const ptr = _GlobalLock(hData);
84
- if (!ptr)
85
- return "";
86
- try {
87
- return _koffi.decode(ptr, "char16", -1);
88
- }
89
- finally {
90
- _GlobalUnlock(hData);
91
- }
92
- }
93
- finally {
94
- _CloseClipboard();
95
- }
96
- }
97
- /**
98
- * Write text to system clipboard using Win32 API via koffi FFI.
99
- * Returns `null` if koffi is unavailable (caller should fall back).
100
- * Returns `true`/`false` for success/failure.
101
- */
102
- export function writeClipboardNative(text) {
103
- if (!ready())
104
- return null;
105
- const buf = Buffer.from(text + "\0", "utf16le");
106
- if (!_OpenClipboard(null))
107
- return null;
108
- try {
109
- _EmptyClipboard();
110
- const hMem = _GlobalAlloc(GMEM_MOVEABLE, buf.length);
111
- if (!hMem)
112
- return false;
113
- const ptr = _GlobalLock(hMem);
114
- if (!ptr) {
115
- _GlobalFree(hMem);
116
- return false;
117
- }
118
- _RtlMoveMemory(ptr, buf, buf.length);
119
- _GlobalUnlock(hMem);
120
- const result = _SetClipboardData(CF_UNICODETEXT, hMem);
121
- if (!result) {
122
- _GlobalFree(hMem);
123
- return false;
124
- }
125
- // SetClipboardData success → clipboard owns the memory, do NOT GlobalFree
126
- return true;
127
- }
128
- finally {
129
- _CloseClipboard();
130
- }
131
- }
132
- //# sourceMappingURL=clipboard-win32.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard-win32.js","sourceRoot":"","sources":["../../src/runtime/clipboard-win32.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- // Preinstall gate: abort npm install if Node.js version is too old.
2
- // Must be plain CJS with var-only syntax to parse on ANY Node.js version.
3
- // No dependencies available at preinstall time — ANSI codes for color.
4
- "use strict";
5
-
6
- var REQUIRED_MAJOR = 22;
7
- var current = process.versions.node;
8
- var major = parseInt(current.split(".")[0], 10);
9
-
10
- if (major < REQUIRED_MAJOR) {
11
- var RED = "\x1b[31m";
12
- var YELLOW = "\x1b[33m";
13
- var BOLD = "\x1b[1m";
14
- var RESET = "\x1b[0m";
15
-
16
- var lines = [
17
- "",
18
- RED + BOLD + "ERROR: Node.js " + REQUIRED_MAJOR + "+ is required to install prompsit-cli" + RESET,
19
- RED + " Current version: " + current + RESET,
20
- "",
21
- YELLOW + "How to upgrade:" + RESET,
22
- ];
23
-
24
- if (process.platform === "win32") {
25
- lines.push(" winget install OpenJS.NodeJS.LTS");
26
- lines.push(" -- or download from https://nodejs.org/");
27
- } else if (process.platform === "darwin") {
28
- lines.push(" brew install node@22");
29
- lines.push(" -- or: nvm install 22");
30
- } else {
31
- lines.push(" nvm install 22");
32
- lines.push(" -- or: curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -");
33
- lines.push(" sudo apt-get install -y nodejs");
34
- }
35
-
36
- lines.push("");
37
- process.stderr.write(lines.join("\n") + "\n");
38
- process.exit(1);
39
- }