pennyrouter 0.3.42 → 0.3.43

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pennyrouter",
3
- "version": "0.3.42",
3
+ "version": "0.3.43",
4
4
  "description": "Install and manage PennyRouter local coding-agent integrations.",
5
5
  "homepage": "https://pennyrouter.com",
6
6
  "bugs": {
@@ -29,6 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@xterm/addon-fit": "^0.10.0",
32
+ "@xterm/addon-unicode11": "^0.8.0",
32
33
  "@xterm/xterm": "^5.5.0",
33
34
  "node-pty": "^1.0.0",
34
35
  "ws": "^8.18.0"
package/src/launch.js CHANGED
@@ -315,7 +315,7 @@ export async function installPennyCompare() {
315
315
  await mkdir(join(destination, "reports"), { recursive: true, mode: 0o700 });
316
316
  await mkdir(pennyBinDir(), { recursive: true, mode: 0o755 });
317
317
  const modules = join(destination, "web-demo", "node_modules");
318
- for (const name of ["@xterm/addon-fit", "@xterm/xterm", "node-pty", "ws"]) {
318
+ for (const name of ["@xterm/addon-fit", "@xterm/addon-unicode11", "@xterm/xterm", "node-pty", "ws"]) {
319
319
  const target = join(modules, name);
320
320
  await mkdir(dirname(target), { recursive: true });
321
321
  await cp(await findInstalledPackage(name), target, { recursive: true });
@@ -106,6 +106,10 @@ async function main() {
106
106
  assert.equal(second.changed, false);
107
107
  assert.equal(await fileMode(pennyShimPath()), 0o755);
108
108
  assert.ok(fs.existsSync(path.join(pennyRuntimeDir(), "bin", "penny.js")));
109
+ for (const asset of ["terminal-unicode.js", "artifacts.mjs", "artifact-preview.html",
110
+ "node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js"]) {
111
+ assert.ok(fs.existsSync(path.join(pennyCompareDir(), "web-demo", asset)), `compare installs ${asset}`);
112
+ }
109
113
  assert.equal(
110
114
  fs.realpathSync(path.join(pennyBinDir(), "penny-compare")),
111
115
  fs.realpathSync(path.join(pennyCompareDir(), "penny-compare")),
@@ -0,0 +1,14 @@
1
+ // Keep the terminal's widths aligned with Claude's status-line cursor movements.
2
+ // Unicode 11 predates the coin emoji (Unicode 13), which Claude counts as two cells.
3
+ globalThis.configureCompareUnicode = function (terminal, Unicode11Addon) {
4
+ const addon = new Unicode11Addon();
5
+ addon.activate({ unicode: { register(base) {
6
+ const provider = Object.create(base);
7
+ provider.version = '11-penny';
8
+ provider.wcwidth = function (codepoint) {
9
+ return codepoint === 0x1fa99 ? 2 : base.wcwidth(codepoint);
10
+ };
11
+ terminal.unicode.register(provider);
12
+ } } });
13
+ terminal.unicode.activeVersion = '11-penny';
14
+ };