@lovinka/vitrinka 1.7.1 → 1.9.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 CHANGED
@@ -3,6 +3,51 @@
3
3
  `vitrinka update` prints the sections newer than your previous version after
4
4
  updating — keep entries short and user-facing.
5
5
 
6
+ ## 1.8.3 — 2026-07-11
7
+
8
+ ### Fixed
9
+ - Interactive prompts (`install`'s operator question, any `promptLine`) strip
10
+ ANSI escape sequences and control characters — arrow-key edits no longer
11
+ persist raw `ESC[D`/`ESC[C` bytes into the operator name (which every fresh
12
+ browser adopted as its board identity). `vitrinka operator <name>` sanitizes
13
+ the same way, and the server now rejects control characters with 422.
14
+
15
+ ## 1.8.2 — 2026-07-11
16
+
17
+ ### Added
18
+ - Desktop-app flag: `~/.config/vitrinka/desktop-app` is the one canonical
19
+ "is Vitrinka.app installed" answer (content = app path). Stamped by
20
+ `apps/desktop make install`, re-synced by `install-claude` and `doctor`.
21
+ - `install-claude` adds a second **⧉ app** footer badge (only when the app is
22
+ installed) whose `vitrinka://` deep link opens the board in Vitrinka.app.
23
+ - `vitrinka open` opens the board in Vitrinka.app when installed;
24
+ `--browser` forces the browser.
25
+
26
+ ## 1.8.1 — 2026-07-11
27
+
28
+ ### Added
29
+ - `install-claude` now also wires a `SessionStart` hook
30
+ (`~/.claude/hooks/vitrinka-board-link.sh`) that puts the repo's live board
31
+ URL into session context at start — the clickable 🧷 footer badge exists
32
+ from message one instead of waiting for a board URL to be mentioned.
33
+ `vitrinka doctor` reports (and `--fix` repairs) the hook; `uninstall`
34
+ removes it.
35
+
36
+ ## 1.8.0 — 2026-07-11
37
+
38
+ ### Changed
39
+ - Skills now distribute EXCLUSIVELY as the vitrinka plugin — for Claude Code
40
+ (`claude plugin install vitrinka@lovinka`) AND Codex (`codex plugin add
41
+ vitrinka`), both from the `LEFTEQ/vitrinka` marketplace. `vitrinka install`,
42
+ `doctor --fix` and `update` install/refresh the plugin in every runtime CLI
43
+ they find; the npm package no longer bundles the skills.
44
+ - Skills layout flattened: `listen` is a first-class skill
45
+ (`/vitrinka:listen` in Claude Code, `$listen` in Codex).
46
+
47
+ ### Removed
48
+ - `vitrinka install-skills` — superseded by the plugin. `vitrinka uninstall`
49
+ still clears legacy `~/.claude/skills` copies from pre-plugin machines.
50
+
6
51
  ## 1.6.0 — 2026-07-08
7
52
 
8
53
  ### Added
package/README.md CHANGED
@@ -60,11 +60,28 @@ to wire the **Claude Code UI** — re-runnable standalone as `vitrinka install-c
60
60
  `dir │ branch │ 🧷 board │ model` line itself. Needs `jq`; degrades to
61
61
  pass-through without it, and never double-renders a board segment your own
62
62
  statusline already prints.
63
-
64
- Both steps are idempotent re-runs detect the wiring and no-op. To remove:
65
- delete `~/.claude/vitrinka-statusline.sh`, restore `statusLine.command` in
66
- `~/.claude/settings.json` to the `VITRINKA_ORIG` value (or drop the key), and
67
- remove the `footerLinksRegexes` entry whose pattern contains `/boards/`.
63
+ - **Session-start board link** — `~/.claude/hooks/vitrinka-board-link.sh`, a
64
+ `SessionStart` hook that prints the repo's live board URL into session
65
+ context at start, so the clickable footer badge exists from message one
66
+ (the statusline URL isn't clickable in every terminal). Silent no-op in
67
+ repos without a `.screenshots/.vitrinka` descriptor; needs `jq`.
68
+ - **App badge** (only when Vitrinka.app is installed) — a second
69
+ `footerLinksRegexes` entry that renders **⧉ app** next to the board badge;
70
+ its `vitrinka://` deep link opens the same board in the desktop app
71
+ (which registers only the custom scheme — https stays in the browser).
72
+
73
+ **Desktop-app flag** — `~/.config/vitrinka/desktop-app` is the ONE canonical
74
+ "is Vitrinka.app installed here" answer (content = the app path). `apps/desktop`'s
75
+ `make install` stamps it; `install-claude` and `doctor` re-sync it to reality
76
+ (and add/remove the app badge accordingly). Skills and tools should test this
77
+ flag file instead of probing `/Applications` themselves — `vitrinka open` uses
78
+ it to open boards in the app (pass `--browser` to force the browser).
79
+
80
+ All steps are idempotent — re-runs detect the wiring and no-op. To remove:
81
+ delete `~/.claude/vitrinka-statusline.sh` and `~/.claude/hooks/vitrinka-board-link.sh`,
82
+ restore `statusLine.command` in `~/.claude/settings.json` to the `VITRINKA_ORIG`
83
+ value (or drop the key), and remove the `footerLinksRegexes` entry whose pattern
84
+ contains `/boards/` plus the `hooks.SessionStart` entry running `vitrinka-board-link`.
68
85
 
69
86
  For Claude Desktop or any other MCP client, add the equivalent entry by hand:
70
87
 
package/dist/bin-mcp.js CHANGED
@@ -13,14 +13,18 @@ const sub = process.argv[2];
13
13
  if (sub === '--help' || sub === '-h') {
14
14
  process.stdout.write('vitrinka-mcp — Model Context Protocol server for vitrinka\n\n' +
15
15
  'USAGE\n' +
16
- ' vitrinka-mcp Start the MCP server over stdio (default).\n' +
16
+ ' vitrinka-mcp Start the MCP server over stdio (DEPRECATED — see below).\n' +
17
17
  ' vitrinka-mcp work … Run the unattended annotation worker (--repo <dir>).\n\n' +
18
18
  'ENV\n' +
19
19
  ' VITRINKA_BASE_URL default https://vitrinka.lovinka.com\n' +
20
20
  ' VITRINKA_TOKEN bearer token; falls back to ~/.config/vitrinka/token\n' +
21
21
  ' (required only by mutating tools; reads work without it)\n\n' +
22
+ 'DEPRECATED: the stdio server is replaced by the remote streamable-HTTP\n' +
23
+ 'endpoint the Go server hosts at /mcp — same tools, zero local processes.\n\n' +
22
24
  'REGISTER (Claude Code, user scope)\n' +
23
- ' claude mcp add --scope user vitrinka -- npx -y --package=@lovinka/vitrinka vitrinka-mcp\n');
25
+ ' claude mcp add --scope user --transport http vitrinka \\\n' +
26
+ ' https://vitrinka.lovinka.com/mcp \\\n' +
27
+ ' --header "Authorization: Bearer $(cat ~/.config/vitrinka/token)"\n');
24
28
  process.exit(0);
25
29
  }
26
30
  if (sub === 'work') {
@@ -1 +1 @@
1
- {"version":3,"file":"bin-mcp.js","sourceRoot":"","sources":["../src/bin-mcp.ts"],"names":[],"mappings":";AACA,gFAAgF;AAChF,8CAA8C;AAC9C,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,8CAA8C;AAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+DAA+D;QAC7D,SAAS;QACT,wEAAwE;QACxE,oFAAoF;QACpF,OAAO;QACP,6DAA6D;QAC7D,6EAA6E;QAC7E,mFAAmF;QACnF,sCAAsC;QACtC,6FAA6F,CAChG,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;IACnB,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5B,CAAC;KAAM,CAAC;IACN,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"bin-mcp.js","sourceRoot":"","sources":["../src/bin-mcp.ts"],"names":[],"mappings":";AACA,gFAAgF;AAChF,8CAA8C;AAC9C,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,8CAA8C;AAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+DAA+D;QAC7D,SAAS;QACT,uFAAuF;QACvF,oFAAoF;QACpF,OAAO;QACP,6DAA6D;QAC7D,6EAA6E;QAC7E,mFAAmF;QACnF,0EAA0E;QAC1E,8EAA8E;QAC9E,sCAAsC;QACtC,8DAA8D;QAC9D,2CAA2C;QAC3C,wEAAwE,CAC3E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;IACnB,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5B,CAAC;KAAM,CAAC;IACN,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC"}