claude-pager 0.3.20 → 0.3.24

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.
Files changed (39) hide show
  1. package/dist/channels/ntfy/provider.d.ts.map +1 -1
  2. package/dist/channels/ntfy/provider.js +11 -2
  3. package/dist/channels/ntfy/provider.js.map +1 -1
  4. package/dist/channels/telegram/provider.d.ts.map +1 -1
  5. package/dist/channels/telegram/provider.js +35 -10
  6. package/dist/channels/telegram/provider.js.map +1 -1
  7. package/dist/daemon/__tests__/server.test.js +27 -1
  8. package/dist/daemon/__tests__/server.test.js.map +1 -1
  9. package/dist/daemon/index.d.ts.map +1 -1
  10. package/dist/daemon/index.js +3 -0
  11. package/dist/daemon/index.js.map +1 -1
  12. package/dist/daemon/server.d.ts.map +1 -1
  13. package/dist/daemon/server.js +24 -4
  14. package/dist/daemon/server.js.map +1 -1
  15. package/dist/daemon/terminal.d.ts +2 -0
  16. package/dist/daemon/terminal.d.ts.map +1 -1
  17. package/dist/daemon/terminal.js +22 -0
  18. package/dist/daemon/terminal.js.map +1 -1
  19. package/dist/dashboard/html.d.ts +1 -1
  20. package/dist/dashboard/html.d.ts.map +1 -1
  21. package/dist/dashboard/html.js +269 -22
  22. package/dist/dashboard/html.js.map +1 -1
  23. package/dist/sessions/__tests__/events.test.js +24 -0
  24. package/dist/sessions/__tests__/events.test.js.map +1 -1
  25. package/dist/sessions/events.d.ts +2 -0
  26. package/dist/sessions/events.d.ts.map +1 -1
  27. package/dist/sessions/events.js +14 -2
  28. package/dist/sessions/events.js.map +1 -1
  29. package/dist/types.d.ts +1 -0
  30. package/dist/types.d.ts.map +1 -1
  31. package/dist/utils/__tests__/ask-user-question.test.d.ts +2 -0
  32. package/dist/utils/__tests__/ask-user-question.test.d.ts.map +1 -0
  33. package/dist/utils/__tests__/ask-user-question.test.js +75 -0
  34. package/dist/utils/__tests__/ask-user-question.test.js.map +1 -0
  35. package/dist/utils/ask-user-question.d.ts +13 -0
  36. package/dist/utils/ask-user-question.d.ts.map +1 -0
  37. package/dist/utils/ask-user-question.js +65 -0
  38. package/dist/utils/ask-user-question.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-question.d.ts","sourceRoot":"","sources":["../../src/utils/ask-user-question.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,EAAE,GAAG,IAAI,CAwB5F;AAID,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,YAAY,SAAM,GAAG,MAAM,CAiBlG"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ // Helpers shared by the dashboard, Telegram and ntfy channels to detect and
3
+ // pretty-render Claude Code's AskUserQuestion tool input. That tool serialises
4
+ // a multi-question multi-option wizard into a single JSON blob in tool_input,
5
+ // which is unreadable and — worse — pairs with the regular Allow/Deny buttons
6
+ // that look like an answer but actually only let the picker open in the tmux
7
+ // pane. Surfacing the structure + a warning is the safe minimum.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isAskUserQuestion = isAskUserQuestion;
10
+ exports.parseAskUserQuestion = parseAskUserQuestion;
11
+ exports.formatAskUserQuestionText = formatAskUserQuestionText;
12
+ function isAskUserQuestion(toolName) {
13
+ return toolName === 'AskUserQuestion';
14
+ }
15
+ function parseAskUserQuestion(toolInput) {
16
+ if (!toolInput)
17
+ return null;
18
+ try {
19
+ const obj = JSON.parse(toolInput);
20
+ if (!Array.isArray(obj.questions))
21
+ return null;
22
+ const out = [];
23
+ for (const raw of obj.questions) {
24
+ const q = raw;
25
+ if (typeof q.question !== 'string')
26
+ continue;
27
+ const options = [];
28
+ if (Array.isArray(q.options)) {
29
+ for (const opt of q.options) {
30
+ const o = opt;
31
+ if (typeof o.label === 'string') {
32
+ options.push({ label: o.label, description: typeof o.description === 'string' ? o.description : undefined });
33
+ }
34
+ }
35
+ }
36
+ out.push({ header: typeof q.header === 'string' ? q.header : undefined, question: q.question, options });
37
+ }
38
+ return out.length > 0 ? out : null;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ // Plain-text rendering for ntfy and any other text channel. Caps descriptions
45
+ // to a short snippet to keep notifications skimmable.
46
+ function formatAskUserQuestionText(questions, maxDescChars = 140) {
47
+ return questions.map((q, qi) => {
48
+ const lines = [];
49
+ if (q.header)
50
+ lines.push(`[${q.header}]`);
51
+ lines.push(`Q${qi + 1}. ${q.question}`);
52
+ q.options.forEach((o, oi) => {
53
+ let line = ` ${oi + 1}) ${o.label}`;
54
+ if (o.description) {
55
+ const snippet = o.description.length > maxDescChars
56
+ ? o.description.slice(0, maxDescChars).trim() + '…'
57
+ : o.description;
58
+ line += ` — ${snippet}`;
59
+ }
60
+ lines.push(line);
61
+ });
62
+ return lines.join('\n');
63
+ }).join('\n\n');
64
+ }
65
+ //# sourceMappingURL=ask-user-question.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-question.js","sourceRoot":"","sources":["../../src/utils/ask-user-question.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-pager",
3
- "version": "0.3.20",
3
+ "version": "0.3.24",
4
4
  "description": "Remote notification and response relay for Claude Code CLI sessions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",