pinglet-cli 0.6.2 → 0.8.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/dist/i18n.js CHANGED
@@ -19,6 +19,7 @@ Usage: pinglet <command>
19
19
  post "message" [--category <c>] Post a message (login required; reading is anonymous)
20
20
  doctor Diagnose install / cache / server status
21
21
  ping Preview a message
22
+ hud [options] Configure the statusline HUD (preset / layout / show / hide / order)
22
23
 
23
24
  Internal commands (called by the integration):
24
25
  statusline Claude Code statusLine hook
@@ -104,6 +105,37 @@ Internal commands (called by the integration):
104
105
  "slash.postDesc": "Post a message to Pinglet so it shows in other developers' terminals",
105
106
  "slash.loginDesc": "Link your Pinglet account (GitHub or Google login in the browser; --github/--google to choose)",
106
107
  "slash.logoutDesc": "Sign out of Pinglet (revoke this session and unlink this device)",
108
+ "slash.hudDesc": "Configure the Pinglet statusline HUD (e.g. --preset full, --hide usage, --layout compact)",
109
+ // ---- hud
110
+ "hud.usage": `Usage: pinglet hud [options] (the leading -- is optional: "hud essential", "hud hide memory" also work)
111
+ --preset full|essential|minimal Start from a preset (full = everything, minimal = model + context bar)
112
+ --layout expanded|compact One element per line, or everything on one line
113
+ --show a,b --hide a,b Toggle elements: model, project, context, usage, model-scoped-usage, prompt-cache, cache-hit,
114
+ memory, tools, skills, agents, todos, advisor, session-name, duration, cost, speed,
115
+ effort, session-tokens, compactions, git, git-dirty, git-ahead-behind, git-files,
116
+ token-breakdown, usage-bar, reset-label, usage-compact
117
+ --order project,context,... Line order (expanded): project, context, usage, promptCache, memory, tools, skills,
118
+ agents, todos — omit an element to hide its line
119
+ --first-line model,project,... Segment order inside the first line (model, project, advisor, sessionName, duration, cost, speed)
120
+ --path-levels 1|2|3|full How many directory segments to show
121
+ --separators on|off --git on|off
122
+ --on | --off Turn the HUD on/off (the "coding along" line stays)
123
+ --reset Back to defaults
124
+ Advanced keys (colors, thresholds, mergeGroups) live in ~/.pinglet/config.json under "hud".`,
125
+ "hud.current": "Current HUD settings:",
126
+ "hud.saved": "✓ HUD settings saved (applies on the next statusline refresh):",
127
+ "hud.savedQuiet": (p) => `✓ HUD settings saved — layout: ${p.layout}, enabled: ${p.enabled}`,
128
+ "hud.preview": "Preview:",
129
+ "hud.previewEmpty": "(HUD is off — nothing to show)",
130
+ "hud.badPreset": (p) => `unknown preset "${p.value}" (full | essential | minimal)`,
131
+ "hud.badLayout": (p) => `unknown layout "${p.value}" (expanded | compact)`,
132
+ "hud.badToggle": (p) => `unknown element "${p.value}"`,
133
+ "hud.badOrder": (p) => `invalid --order${p.value ? ` (unknown: ${p.value})` : ""} — use project, context, usage, promptCache, memory, tools, skills, agents, todos`,
134
+ "hud.badFirstLine": (p) => `invalid --first-line (unknown: ${p.value}) — use model, project, advisor, sessionName, duration, cost, speed`,
135
+ "hud.badPathLevels": (p) => `invalid --path-levels "${p.value}" (1 | 2 | 3 | full)`,
136
+ "hud.badOnOff": (p) => `${p.flag} expects on or off`,
137
+ "hud.unknownArg": (p) => `unknown option "${p.value}"`,
138
+ "doctor.hud": (p) => `HUD: ${p.enabled} (${p.layout}) — change with \`pinglet hud\``,
107
139
  };
108
140
  const ko = {
109
141
  "cli.help": (p) => `pinglet v${p.version} — AI가 생각하는 동안 만나는 개발자 메시지 네트워크
@@ -120,6 +152,7 @@ const ko = {
120
152
  post "메시지" [--category <c>] 메시지 작성 (로그인 필요, 읽기는 익명 가능)
121
153
  doctor 설치/캐시/서버 상태 진단
122
154
  ping 메시지 미리보기
155
+ hud [옵션] statusline HUD 설정 (프리셋 / 레이아웃 / 표시 / 숨김 / 순서)
123
156
 
124
157
  내부 명령 (integration이 호출):
125
158
  statusline Claude Code statusLine hook
@@ -198,6 +231,36 @@ const ko = {
198
231
  "slash.postDesc": "메시지를 Pinglet에 등록해 다른 개발자들의 터미널에 표시",
199
232
  "slash.loginDesc": "Pinglet 계정 연결 (브라우저에서 GitHub 또는 Google 로그인, --github/--google로 지정 가능)",
200
233
  "slash.logoutDesc": "Pinglet 로그인 해제 (서버 세션 폐기·이 기기의 계정 연결 해제)",
234
+ "slash.hudDesc": "Pinglet statusline HUD 설정 (예: --preset full, --hide usage, --layout compact)",
235
+ "hud.usage": `사용법: pinglet hud [옵션] (-- 는 생략해도 됩니다: "hud essential", "hud hide memory" 도 동작)
236
+ --preset full|essential|minimal 프리셋에서 시작 (full = 전부, minimal = 모델 + 컨텍스트 바)
237
+ --layout expanded|compact 요소마다 한 줄 / 전부 한 줄
238
+ --show a,b --hide a,b 요소 켜기/끄기: model, project, context, usage, model-scoped-usage, prompt-cache, cache-hit,
239
+ memory, tools, skills, agents, todos, advisor, session-name, duration, cost, speed,
240
+ effort, session-tokens, compactions, git, git-dirty, git-ahead-behind, git-files,
241
+ token-breakdown, usage-bar, reset-label, usage-compact
242
+ --order project,context,... 줄 순서 (expanded): project, context, usage, promptCache, memory, tools, skills,
243
+ agents, todos — 뺀 요소는 줄이 사라진다
244
+ --first-line model,project,... 첫 줄 안의 세그먼트 순서 (model, project, advisor, sessionName, duration, cost, speed)
245
+ --path-levels 1|2|3|full 경로를 몇 단계까지 보여줄지
246
+ --separators on|off --git on|off
247
+ --on | --off HUD 켜기/끄기 ("함께 코딩 중" 줄은 유지)
248
+ --reset 기본값으로
249
+ 색상·임계값·mergeGroups 등 고급 키는 ~/.pinglet/config.json의 "hud"에서 직접 편집한다.`,
250
+ "hud.current": "현재 HUD 설정:",
251
+ "hud.saved": "✓ HUD 설정을 저장했습니다 (다음 statusline 갱신부터 적용):",
252
+ "hud.savedQuiet": (p) => `✓ HUD 설정 저장 — layout: ${p.layout}, enabled: ${p.enabled}`,
253
+ "hud.preview": "미리보기:",
254
+ "hud.previewEmpty": "(HUD가 꺼져 있어 표시할 내용이 없습니다)",
255
+ "hud.badPreset": (p) => `알 수 없는 프리셋 "${p.value}" (full | essential | minimal)`,
256
+ "hud.badLayout": (p) => `알 수 없는 레이아웃 "${p.value}" (expanded | compact)`,
257
+ "hud.badToggle": (p) => `알 수 없는 요소 "${p.value}"`,
258
+ "hud.badOrder": (p) => `--order 값이 잘못됐습니다${p.value ? ` (알 수 없음: ${p.value})` : ""} — project, context, usage, promptCache, memory, tools, skills, agents, todos 중에서`,
259
+ "hud.badFirstLine": (p) => `--first-line 값이 잘못됐습니다 (알 수 없음: ${p.value}) — model, project, advisor, sessionName, duration, cost, speed 중에서`,
260
+ "hud.badPathLevels": (p) => `--path-levels 값이 잘못됐습니다 "${p.value}" (1 | 2 | 3 | full)`,
261
+ "hud.badOnOff": (p) => `${p.flag}는 on 또는 off를 받습니다`,
262
+ "hud.unknownArg": (p) => `알 수 없는 옵션 "${p.value}"`,
263
+ "doctor.hud": (p) => `HUD: ${p.enabled} (${p.layout}) — 변경은 \`pinglet hud\``,
201
264
  };
202
265
  const ja = {
203
266
  "cli.help": (p) => `pinglet v${p.version} — AIが考えている間に出会う開発者メッセージネットワーク
@@ -214,6 +277,7 @@ const ja = {
214
277
  post "メッセージ" [--category <c>] メッセージ投稿 (ログイン必要、閲覧は匿名可)
215
278
  doctor インストール/キャッシュ/サーバー状態を診断
216
279
  ping メッセージのプレビュー
280
+ hud [オプション] statusline HUD 設定(プリセット / レイアウト / 表示 / 非表示 / 順序)
217
281
 
218
282
  内部コマンド (integration が呼び出す):
219
283
  statusline Claude Code statusLine hook
@@ -292,6 +356,36 @@ const ja = {
292
356
  "slash.postDesc": "メッセージを Pinglet に投稿して他の開発者のターミナルに表示",
293
357
  "slash.loginDesc": "Pinglet アカウント連携 (ブラウザで GitHub または Google ログイン、--github/--google で指定可)",
294
358
  "slash.logoutDesc": "Pinglet ログアウト (サーバーセッション失効・この端末のアカウント連携解除)",
359
+ "slash.hudDesc": "Pinglet statusline HUD の設定(例: --preset full, --hide usage, --layout compact)",
360
+ "hud.usage": `使い方: pinglet hud [オプション] (先頭の -- は省略可: "hud essential", "hud hide memory" も動作)
361
+ --preset full|essential|minimal プリセットから始める(full = すべて, minimal = モデル + コンテキストバー)
362
+ --layout expanded|compact 要素ごとに1行 / すべて1行
363
+ --show a,b --hide a,b 要素の表示/非表示: model, project, context, usage, model-scoped-usage, prompt-cache, cache-hit,
364
+ memory, tools, skills, agents, todos, advisor, session-name, duration, cost, speed,
365
+ effort, session-tokens, compactions, git, git-dirty, git-ahead-behind, git-files,
366
+ token-breakdown, usage-bar, reset-label, usage-compact
367
+ --order project,context,... 行の順序(expanded): project, context, usage, promptCache, memory, tools, skills,
368
+ agents, todos — 省いた要素の行は消える
369
+ --first-line model,project,... 1行目のセグメント順(model, project, advisor, sessionName, duration, cost, speed)
370
+ --path-levels 1|2|3|full パスを何階層まで表示するか
371
+ --separators on|off --git on|off
372
+ --on | --off HUD のオン/オフ(「一緒にコーディング中」の行は残る)
373
+ --reset 既定値に戻す
374
+ 色・しきい値・mergeGroups などの上級キーは ~/.pinglet/config.json の "hud" を直接編集する。`,
375
+ "hud.current": "現在の HUD 設定:",
376
+ "hud.saved": "✓ HUD 設定を保存しました(次の statusline 更新から反映):",
377
+ "hud.savedQuiet": (p) => `✓ HUD 設定を保存 — layout: ${p.layout}, enabled: ${p.enabled}`,
378
+ "hud.preview": "プレビュー:",
379
+ "hud.previewEmpty": "(HUD がオフのため表示する内容がありません)",
380
+ "hud.badPreset": (p) => `不明なプリセット "${p.value}" (full | essential | minimal)`,
381
+ "hud.badLayout": (p) => `不明なレイアウト "${p.value}" (expanded | compact)`,
382
+ "hud.badToggle": (p) => `不明な要素 "${p.value}"`,
383
+ "hud.badOrder": (p) => `--order が不正です${p.value ? `(不明: ${p.value})` : ""} — project, context, usage, promptCache, memory, tools, skills, agents, todos から指定`,
384
+ "hud.badFirstLine": (p) => `--first-line が不正です(不明: ${p.value})— model, project, advisor, sessionName, duration, cost, speed から指定`,
385
+ "hud.badPathLevels": (p) => `--path-levels が不正です "${p.value}" (1 | 2 | 3 | full)`,
386
+ "hud.badOnOff": (p) => `${p.flag} は on または off を受け取ります`,
387
+ "hud.unknownArg": (p) => `不明なオプション "${p.value}"`,
388
+ "doctor.hud": (p) => `HUD: ${p.enabled} (${p.layout}) — 変更は \`pinglet hud\``,
295
389
  };
296
390
  const tables = { en, ko, ja };
297
391
  function t(key, params = {}) {
package/dist/render.js CHANGED
@@ -4,6 +4,7 @@ exports.detectLocale = detectLocale;
4
4
  exports.supportsUnicode = supportsUnicode;
5
5
  exports.sanitizeForTerminal = sanitizeForTerminal;
6
6
  exports.formatPing = formatPing;
7
+ exports.formatNewsLink = formatNewsLink;
7
8
  exports.formatOnlineNow = formatOnlineNow;
8
9
  /**
9
10
  * statusline 표시 언어. 시스템 언어를 먼저 보고(사용자가 실제로 읽는
@@ -53,6 +54,9 @@ function sanitizeForTerminal(text) {
53
54
  }
54
55
  /** 작성자 닉네임 없이 메시지만 표시한다 (spinner verb용). */
55
56
  function formatPing(message) {
57
+ if (message.contentType === "NEWS") {
58
+ return `${supportsUnicode() ? "📰" : "[news]"} ${sanitizeForTerminal(message.text)}`;
59
+ }
56
60
  const sponsored = message.contentType === "SPONSORED" ? "[AD] " : "";
57
61
  const text = sanitizeForTerminal(message.text);
58
62
  if (supportsUnicode()) {
@@ -60,6 +64,17 @@ function formatPing(message) {
60
64
  }
61
65
  return `[ping] ${sponsored}"${text}"`;
62
66
  }
67
+ /**
68
+ * statusline용 뉴스 한 줄: 제목을 OSC 8 하이퍼링크로 감싸 클릭하면 원문으로 간다.
69
+ * 제목은 감싸기 전에 sanitize한다 — 완성된 escape를 sanitize에 넣으면 시퀀스가 지워진다.
70
+ * url은 fetchFeed의 safeLinkUrl을 통과한 값만 온다. 없으면 제목만 보여준다.
71
+ */
72
+ function formatNewsLink(title, url) {
73
+ const text = `${supportsUnicode() ? "📰" : "[news]"} ${sanitizeForTerminal(title)}`;
74
+ if (!url)
75
+ return text;
76
+ return `\u001b]8;;${url}\u001b\\${text}\u001b]8;;\u001b\\`;
77
+ }
63
78
  /** statusline용: 지금 함께 켜져 있는 다른 터미널 수 한 줄. */
64
79
  function formatOnlineNow(othersCount) {
65
80
  const n = othersCount;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinglet-cli",
3
- "version": "0.6.2",
3
+ "version": "0.8.0",
4
4
  "description": "Short messages from other developers shown in your Claude Code spinner while the AI thinks — zero tokens, never reads your code. Claude Code / Codex integration",
5
5
  "license": "MIT",
6
6
  "repository": {