cc-face 0.1.10

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 (160) hide show
  1. package/README.md +102 -0
  2. package/dist/bin/cli.d.ts +2 -0
  3. package/dist/bin/cli.js +142 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/src/config.d.ts +24 -0
  6. package/dist/src/config.js +32 -0
  7. package/dist/src/config.js.map +1 -0
  8. package/dist/src/face.d.ts +59 -0
  9. package/dist/src/face.js +493 -0
  10. package/dist/src/face.js.map +1 -0
  11. package/dist/src/frames.d.ts +1 -0
  12. package/dist/src/frames.js +6 -0
  13. package/dist/src/frames.js.map +1 -0
  14. package/dist/src/generator.d.ts +16 -0
  15. package/dist/src/generator.js +122 -0
  16. package/dist/src/generator.js.map +1 -0
  17. package/dist/src/ipc.d.ts +34 -0
  18. package/dist/src/ipc.js +203 -0
  19. package/dist/src/ipc.js.map +1 -0
  20. package/dist/src/loader.d.ts +12 -0
  21. package/dist/src/loader.js +63 -0
  22. package/dist/src/loader.js.map +1 -0
  23. package/dist/src/main.d.ts +2 -0
  24. package/dist/src/main.js +210 -0
  25. package/dist/src/main.js.map +1 -0
  26. package/dist/src/patterns.d.ts +6 -0
  27. package/dist/src/patterns.js +14 -0
  28. package/dist/src/patterns.js.map +1 -0
  29. package/dist/src/pty.d.ts +17 -0
  30. package/dist/src/pty.js +84 -0
  31. package/dist/src/pty.js.map +1 -0
  32. package/dist/src/scroll.d.ts +36 -0
  33. package/dist/src/scroll.js +56 -0
  34. package/dist/src/scroll.js.map +1 -0
  35. package/dist/src/state.d.ts +36 -0
  36. package/dist/src/state.js +164 -0
  37. package/dist/src/state.js.map +1 -0
  38. package/dist/src/theme.d.ts +15 -0
  39. package/dist/src/theme.js +51 -0
  40. package/dist/src/theme.js.map +1 -0
  41. package/dist/src/types.d.ts +60 -0
  42. package/dist/src/types.js +3 -0
  43. package/dist/src/types.js.map +1 -0
  44. package/dist/src/utils.d.ts +8 -0
  45. package/dist/src/utils.js +13 -0
  46. package/dist/src/utils.js.map +1 -0
  47. package/faces/idle/config.json +7 -0
  48. package/faces/idle/img/1.jpeg +0 -0
  49. package/faces/idle/img/10.jpeg +0 -0
  50. package/faces/idle/img/11.jpeg +0 -0
  51. package/faces/idle/img/12.jpeg +0 -0
  52. package/faces/idle/img/13.jpeg +0 -0
  53. package/faces/idle/img/14.jpeg +0 -0
  54. package/faces/idle/img/15.jpeg +0 -0
  55. package/faces/idle/img/16.jpeg +0 -0
  56. package/faces/idle/img/17.jpeg +0 -0
  57. package/faces/idle/img/18.jpeg +0 -0
  58. package/faces/idle/img/19.jpeg +0 -0
  59. package/faces/idle/img/2.jpeg +0 -0
  60. package/faces/idle/img/20.jpeg +0 -0
  61. package/faces/idle/img/21.jpeg +0 -0
  62. package/faces/idle/img/22.jpeg +0 -0
  63. package/faces/idle/img/23.jpeg +0 -0
  64. package/faces/idle/img/24.jpeg +0 -0
  65. package/faces/idle/img/25.jpeg +0 -0
  66. package/faces/idle/img/26.jpeg +0 -0
  67. package/faces/idle/img/27.jpeg +0 -0
  68. package/faces/idle/img/28.jpeg +0 -0
  69. package/faces/idle/img/29.jpeg +0 -0
  70. package/faces/idle/img/3.jpeg +0 -0
  71. package/faces/idle/img/30.jpeg +0 -0
  72. package/faces/idle/img/4.jpeg +0 -0
  73. package/faces/idle/img/5.jpeg +0 -0
  74. package/faces/idle/img/6.jpeg +0 -0
  75. package/faces/idle/img/7.jpeg +0 -0
  76. package/faces/idle/img/8.jpeg +0 -0
  77. package/faces/idle/img/9.jpeg +0 -0
  78. package/faces/listening/config.json +5 -0
  79. package/faces/listening/img/1.jpeg +0 -0
  80. package/faces/listening/img/10.jpeg +0 -0
  81. package/faces/listening/img/11.jpeg +0 -0
  82. package/faces/listening/img/12.jpeg +0 -0
  83. package/faces/listening/img/13.jpeg +0 -0
  84. package/faces/listening/img/14.jpeg +0 -0
  85. package/faces/listening/img/15.jpeg +0 -0
  86. package/faces/listening/img/16.jpeg +0 -0
  87. package/faces/listening/img/17.jpeg +0 -0
  88. package/faces/listening/img/18.jpeg +0 -0
  89. package/faces/listening/img/19.jpeg +0 -0
  90. package/faces/listening/img/2.jpeg +0 -0
  91. package/faces/listening/img/20.jpeg +0 -0
  92. package/faces/listening/img/21.jpeg +0 -0
  93. package/faces/listening/img/22.jpeg +0 -0
  94. package/faces/listening/img/23.jpeg +0 -0
  95. package/faces/listening/img/24.jpeg +0 -0
  96. package/faces/listening/img/25.jpeg +0 -0
  97. package/faces/listening/img/26.jpeg +0 -0
  98. package/faces/listening/img/27.jpeg +0 -0
  99. package/faces/listening/img/3.jpeg +0 -0
  100. package/faces/listening/img/4.jpeg +0 -0
  101. package/faces/listening/img/5.jpeg +0 -0
  102. package/faces/listening/img/6.jpeg +0 -0
  103. package/faces/listening/img/7.jpeg +0 -0
  104. package/faces/listening/img/8.jpeg +0 -0
  105. package/faces/listening/img/9.jpeg +0 -0
  106. package/faces/thinking/config.json +5 -0
  107. package/faces/thinking/img/1.jpeg +0 -0
  108. package/faces/thinking/img/10.jpeg +0 -0
  109. package/faces/thinking/img/11.jpeg +0 -0
  110. package/faces/thinking/img/12.jpeg +0 -0
  111. package/faces/thinking/img/13.jpeg +0 -0
  112. package/faces/thinking/img/14.jpeg +0 -0
  113. package/faces/thinking/img/15.jpeg +0 -0
  114. package/faces/thinking/img/16.jpeg +0 -0
  115. package/faces/thinking/img/17.jpeg +0 -0
  116. package/faces/thinking/img/18.jpeg +0 -0
  117. package/faces/thinking/img/19.jpeg +0 -0
  118. package/faces/thinking/img/2.jpeg +0 -0
  119. package/faces/thinking/img/20.jpeg +0 -0
  120. package/faces/thinking/img/3.jpeg +0 -0
  121. package/faces/thinking/img/4.jpeg +0 -0
  122. package/faces/thinking/img/5.jpeg +0 -0
  123. package/faces/thinking/img/6.jpeg +0 -0
  124. package/faces/thinking/img/7.jpeg +0 -0
  125. package/faces/thinking/img/8.jpeg +0 -0
  126. package/faces/thinking/img/9.jpeg +0 -0
  127. package/faces/typing/config.json +5 -0
  128. package/faces/typing/img/1.jpeg +0 -0
  129. package/faces/typing/img/10.jpeg +0 -0
  130. package/faces/typing/img/11.jpeg +0 -0
  131. package/faces/typing/img/12.jpeg +0 -0
  132. package/faces/typing/img/13.jpeg +0 -0
  133. package/faces/typing/img/14.jpeg +0 -0
  134. package/faces/typing/img/15.jpeg +0 -0
  135. package/faces/typing/img/16.jpeg +0 -0
  136. package/faces/typing/img/17.jpeg +0 -0
  137. package/faces/typing/img/18.jpeg +0 -0
  138. package/faces/typing/img/19.jpeg +0 -0
  139. package/faces/typing/img/2.jpeg +0 -0
  140. package/faces/typing/img/20.jpeg +0 -0
  141. package/faces/typing/img/21.jpeg +0 -0
  142. package/faces/typing/img/22.jpeg +0 -0
  143. package/faces/typing/img/23.jpeg +0 -0
  144. package/faces/typing/img/24.jpeg +0 -0
  145. package/faces/typing/img/25.jpeg +0 -0
  146. package/faces/typing/img/26.jpeg +0 -0
  147. package/faces/typing/img/27.jpeg +0 -0
  148. package/faces/typing/img/28.jpeg +0 -0
  149. package/faces/typing/img/29.jpeg +0 -0
  150. package/faces/typing/img/3.jpeg +0 -0
  151. package/faces/typing/img/30.jpeg +0 -0
  152. package/faces/typing/img/31.jpeg +0 -0
  153. package/faces/typing/img/32.jpeg +0 -0
  154. package/faces/typing/img/4.jpeg +0 -0
  155. package/faces/typing/img/5.jpeg +0 -0
  156. package/faces/typing/img/6.jpeg +0 -0
  157. package/faces/typing/img/7.jpeg +0 -0
  158. package/faces/typing/img/8.jpeg +0 -0
  159. package/faces/typing/img/9.jpeg +0 -0
  160. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ColorRole, ThemeMode, ThemeColors } from './types.js';
2
+ /**
3
+ * Detect the terminal background color from the COLORFGBG environment variable.
4
+ * Falls back to 'dark' if not set or unrecognizable.
5
+ */
6
+ export declare function detectTheme(): 'dark' | 'light';
7
+ /**
8
+ * Return the ThemeColors for the given mode.
9
+ * Resolves 'auto' via detectTheme().
10
+ */
11
+ export declare function getTheme(mode: ThemeMode): ThemeColors;
12
+ /**
13
+ * Return the ANSI escape code for the given color role.
14
+ */
15
+ export declare function colorForRole(theme: ThemeColors, role: ColorRole): string;
@@ -0,0 +1,51 @@
1
+ // ── ANSI color codes ────────────────────────────────────────────────
2
+ const DARK_THEME = {
3
+ outline: '\x1b[36m', // cyan
4
+ eye: '\x1b[97m', // bright white
5
+ mouth: '\x1b[33m', // yellow
6
+ highlight: '\x1b[95m', // bright magenta
7
+ cheek: '\x1b[91m', // bright red
8
+ bg: '', // default
9
+ reset: '\x1b[0m',
10
+ };
11
+ const LIGHT_THEME = {
12
+ outline: '\x1b[34m', // blue
13
+ eye: '\x1b[30m', // black
14
+ mouth: '\x1b[33m', // yellow
15
+ highlight: '\x1b[35m', // magenta
16
+ cheek: '\x1b[31m', // red
17
+ bg: '', // default
18
+ reset: '\x1b[0m',
19
+ };
20
+ /**
21
+ * Detect the terminal background color from the COLORFGBG environment variable.
22
+ * Falls back to 'dark' if not set or unrecognizable.
23
+ */
24
+ export function detectTheme() {
25
+ const colorfgbg = process.env.COLORFGBG;
26
+ if (!colorfgbg) {
27
+ return 'dark';
28
+ }
29
+ // COLORFGBG is typically "fg;bg" where bg >= 8 means light background
30
+ const parts = colorfgbg.split(';');
31
+ const bg = parseInt(parts[parts.length - 1], 10);
32
+ if (isNaN(bg)) {
33
+ return 'dark';
34
+ }
35
+ return bg >= 8 ? 'light' : 'dark';
36
+ }
37
+ /**
38
+ * Return the ThemeColors for the given mode.
39
+ * Resolves 'auto' via detectTheme().
40
+ */
41
+ export function getTheme(mode) {
42
+ const resolved = mode === 'auto' ? detectTheme() : mode;
43
+ return resolved === 'light' ? LIGHT_THEME : DARK_THEME;
44
+ }
45
+ /**
46
+ * Return the ANSI escape code for the given color role.
47
+ */
48
+ export function colorForRole(theme, role) {
49
+ return theme[role];
50
+ }
51
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,UAAU,GAAgB;IAC9B,OAAO,EAAE,UAAU,EAAK,OAAO;IAC/B,GAAG,EAAE,UAAU,EAAS,eAAe;IACvC,KAAK,EAAE,UAAU,EAAO,SAAS;IACjC,SAAS,EAAE,UAAU,EAAG,iBAAiB;IACzC,KAAK,EAAE,UAAU,EAAO,aAAa;IACrC,EAAE,EAAE,EAAE,EAAkB,UAAU;IAClC,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF,MAAM,WAAW,GAAgB;IAC/B,OAAO,EAAE,UAAU,EAAK,OAAO;IAC/B,GAAG,EAAE,UAAU,EAAS,QAAQ;IAChC,KAAK,EAAE,UAAU,EAAO,SAAS;IACjC,SAAS,EAAE,UAAU,EAAG,UAAU;IAClC,KAAK,EAAE,UAAU,EAAO,MAAM;IAC9B,EAAE,EAAE,EAAE,EAAkB,UAAU;IAClC,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,sEAAsE;IACtE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,IAAe;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,60 @@
1
+ export type ColorRole = 'outline' | 'eye' | 'mouth' | 'highlight' | 'cheek' | 'bg';
2
+ export interface ColorSpan {
3
+ row: number;
4
+ col: number;
5
+ len: number;
6
+ role: ColorRole;
7
+ }
8
+ export interface Frame {
9
+ art: string[];
10
+ colors?: ColorSpan[];
11
+ }
12
+ export interface AnimationConfig {
13
+ loopDuration: number;
14
+ reverse: boolean;
15
+ gap: number;
16
+ gapMin?: number;
17
+ gapMax?: number;
18
+ }
19
+ export interface Expression {
20
+ name: string;
21
+ frames: Frame[];
22
+ config: AnimationConfig;
23
+ }
24
+ export interface FaceDefinition {
25
+ name: string;
26
+ width: number;
27
+ height: number;
28
+ expressions: Record<string, Expression>;
29
+ }
30
+ export type FaceState = 'idle' | 'typing' | 'thinking' | 'listening';
31
+ export interface StateEvent {
32
+ prev: FaceState;
33
+ next: FaceState;
34
+ timestamp: number;
35
+ }
36
+ export type ThemeMode = 'dark' | 'light' | 'auto';
37
+ export interface ThemeColors {
38
+ outline: string;
39
+ eye: string;
40
+ mouth: string;
41
+ highlight: string;
42
+ cheek: string;
43
+ bg: string;
44
+ reset: string;
45
+ }
46
+ export interface IpcStateMessage {
47
+ state: FaceState;
48
+ ts: number;
49
+ shutdown?: boolean;
50
+ }
51
+ export interface CliOptions {
52
+ facePath?: string;
53
+ socketPath?: string;
54
+ theme: ThemeMode;
55
+ noFace: boolean;
56
+ displayOnly: boolean;
57
+ debug: boolean;
58
+ help: boolean;
59
+ version: boolean;
60
+ }
@@ -0,0 +1,3 @@
1
+ // ── Color & Frame Types ──────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Strip all ANSI escape sequences from a string.
3
+ *
4
+ * Handles:
5
+ * - CSI sequences `ESC [ ... letter`
6
+ * - OSC sequences `ESC ] ... BEL`
7
+ */
8
+ export declare function stripAnsi(str: string): string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Strip all ANSI escape sequences from a string.
3
+ *
4
+ * Handles:
5
+ * - CSI sequences `ESC [ ... letter`
6
+ * - OSC sequences `ESC ] ... BEL`
7
+ */
8
+ export function stripAnsi(str) {
9
+ return str
10
+ .replace(/\x1b\[[0-9;]*[A-Za-z]/g, '')
11
+ .replace(/\x1b\][^\x07]*\x07/g, '');
12
+ }
13
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG;SACP,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,7 @@
1
+ {
2
+ "loopDuration": 4000,
3
+ "reverse": true,
4
+ "gap": 0,
5
+ "gapMin": 0,
6
+ "gapMax": 0
7
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ {
2
+ "loopDuration": 5000,
3
+ "reverse": true,
4
+ "gap": 2000
5
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ {
2
+ "loopDuration": 4000,
3
+ "reverse": true,
4
+ "gap": 0
5
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ {
2
+ "loopDuration": 1000,
3
+ "reverse": false,
4
+ "gap": 0
5
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "cc-face",
3
+ "version": "0.1.10",
4
+ "description": "Animated ASCII face for Claude Code",
5
+ "type": "module",
6
+ "bin": {
7
+ "cc-face": "./dist/bin/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "faces/*/img/**",
12
+ "faces/*/config.json"
13
+ ],
14
+ "scripts": {
15
+ "postinstall": "chmod +x node_modules/node-pty/prebuilds/darwin-*/spawn-helper 2>/dev/null || true",
16
+ "prepublishOnly": "npm run build",
17
+ "build": "tsc",
18
+ "dev": "tsx bin/cli.ts",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest"
21
+ },
22
+ "dependencies": {
23
+ "node-pty": "^1.0.0",
24
+ "sharp": "^0.34.5"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.0.0",
28
+ "tsx": "^4.19.0",
29
+ "typescript": "^5.7.0",
30
+ "vitest": "^3.0.0"
31
+ },
32
+ "license": "MIT",
33
+ "engines": {
34
+ "node": ">=18"
35
+ }
36
+ }