@letrquan/book 0.2.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +2504 -0
  2. package/LICENSE +123 -0
  3. package/README.md +1383 -0
  4. package/dist/app-MOXXWEOY.js +18945 -0
  5. package/dist/app-MOXXWEOY.js.map +1 -0
  6. package/dist/chunk-24AXE6SP.js +12 -0
  7. package/dist/chunk-24AXE6SP.js.map +1 -0
  8. package/dist/chunk-3U5IBM24.js +213 -0
  9. package/dist/chunk-3U5IBM24.js.map +1 -0
  10. package/dist/chunk-574C6MQR.js +743 -0
  11. package/dist/chunk-574C6MQR.js.map +1 -0
  12. package/dist/chunk-5GDZ22YP.js +449 -0
  13. package/dist/chunk-5GDZ22YP.js.map +1 -0
  14. package/dist/chunk-5KLVH3PY.js +167 -0
  15. package/dist/chunk-5KLVH3PY.js.map +1 -0
  16. package/dist/chunk-5RDRAO4B.js +92 -0
  17. package/dist/chunk-5RDRAO4B.js.map +1 -0
  18. package/dist/chunk-7N4J557C.js +10 -0
  19. package/dist/chunk-7N4J557C.js.map +1 -0
  20. package/dist/chunk-A7JLBK2Y.js +3506 -0
  21. package/dist/chunk-A7JLBK2Y.js.map +1 -0
  22. package/dist/chunk-ANSJPYGI.js +84 -0
  23. package/dist/chunk-ANSJPYGI.js.map +1 -0
  24. package/dist/chunk-BTZZUCLI.js +264 -0
  25. package/dist/chunk-BTZZUCLI.js.map +1 -0
  26. package/dist/chunk-C7D4NJ2D.js +217 -0
  27. package/dist/chunk-C7D4NJ2D.js.map +1 -0
  28. package/dist/chunk-CAGOB2N4.js +208 -0
  29. package/dist/chunk-CAGOB2N4.js.map +1 -0
  30. package/dist/chunk-DGMQEI6Y.js +98 -0
  31. package/dist/chunk-DGMQEI6Y.js.map +1 -0
  32. package/dist/chunk-E75IPST5.js +289 -0
  33. package/dist/chunk-E75IPST5.js.map +1 -0
  34. package/dist/chunk-EYGD6X2T.js +180 -0
  35. package/dist/chunk-EYGD6X2T.js.map +1 -0
  36. package/dist/chunk-GTVB4HEM.js +765 -0
  37. package/dist/chunk-GTVB4HEM.js.map +1 -0
  38. package/dist/chunk-J7MIZ5CA.js +1907 -0
  39. package/dist/chunk-J7MIZ5CA.js.map +1 -0
  40. package/dist/chunk-KWHQ2XXL.js +626 -0
  41. package/dist/chunk-KWHQ2XXL.js.map +1 -0
  42. package/dist/chunk-L6LK2QIQ.js +657 -0
  43. package/dist/chunk-L6LK2QIQ.js.map +1 -0
  44. package/dist/chunk-MAQXCUR4.js +1007 -0
  45. package/dist/chunk-MAQXCUR4.js.map +1 -0
  46. package/dist/chunk-S4XL7HOM.js +402 -0
  47. package/dist/chunk-S4XL7HOM.js.map +1 -0
  48. package/dist/chunk-URLQAXTR.js +60 -0
  49. package/dist/chunk-URLQAXTR.js.map +1 -0
  50. package/dist/chunk-V4BOYR52.js +3504 -0
  51. package/dist/chunk-V4BOYR52.js.map +1 -0
  52. package/dist/chunk-VZQXX3WW.js +210 -0
  53. package/dist/chunk-VZQXX3WW.js.map +1 -0
  54. package/dist/chunk-WKBO5R4O.js +34 -0
  55. package/dist/chunk-WKBO5R4O.js.map +1 -0
  56. package/dist/chunk-XIFFTATU.js +15753 -0
  57. package/dist/chunk-XIFFTATU.js.map +1 -0
  58. package/dist/command-approvals-6Y57VCWZ.js +28 -0
  59. package/dist/command-approvals-6Y57VCWZ.js.map +1 -0
  60. package/dist/context-ZC5IFEAX.js +25 -0
  61. package/dist/context-ZC5IFEAX.js.map +1 -0
  62. package/dist/hook-approvals-CTUFKEJT.js +22 -0
  63. package/dist/hook-approvals-CTUFKEJT.js.map +1 -0
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.js +2582 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/interactive-assets-CCAAWVKH.js +31 -0
  68. package/dist/interactive-assets-CCAAWVKH.js.map +1 -0
  69. package/dist/job-runner.d.ts +2 -0
  70. package/dist/job-runner.js +235 -0
  71. package/dist/job-runner.js.map +1 -0
  72. package/dist/loader-4IDS2RIE.js +15 -0
  73. package/dist/loader-4IDS2RIE.js.map +1 -0
  74. package/dist/mcp-approvals-WNPH65BK.js +18 -0
  75. package/dist/mcp-approvals-WNPH65BK.js.map +1 -0
  76. package/dist/mcp-config-YIJIES2C.js +16 -0
  77. package/dist/mcp-config-YIJIES2C.js.map +1 -0
  78. package/dist/model-window-store-YFVNXCIP.js +27 -0
  79. package/dist/model-window-store-YFVNXCIP.js.map +1 -0
  80. package/dist/openai-compatible-RHZUBHV6.js +10 -0
  81. package/dist/openai-compatible-RHZUBHV6.js.map +1 -0
  82. package/dist/permission-approvals-76PVREFD.js +14 -0
  83. package/dist/permission-approvals-76PVREFD.js.map +1 -0
  84. package/dist/permissions-CHCKTFQQ.js +28 -0
  85. package/dist/permissions-CHCKTFQQ.js.map +1 -0
  86. package/dist/sandbox-CNVAQDA7.js +23 -0
  87. package/dist/sandbox-CNVAQDA7.js.map +1 -0
  88. package/dist/scrollback-LUKLIBVI.js +136 -0
  89. package/dist/scrollback-LUKLIBVI.js.map +1 -0
  90. package/dist/sdk.d.ts +4574 -0
  91. package/dist/sdk.js +665 -0
  92. package/dist/sdk.js.map +1 -0
  93. package/dist/settings-loader-M2QP5TX2.js +21 -0
  94. package/dist/settings-loader-M2QP5TX2.js.map +1 -0
  95. package/dist/settings-removed-JWWPT4WA.js +19 -0
  96. package/dist/settings-removed-JWWPT4WA.js.map +1 -0
  97. package/dist/shell-selection-V6QAYXPX.js +17 -0
  98. package/dist/shell-selection-V6QAYXPX.js.map +1 -0
  99. package/package.json +143 -0
  100. package/patches/ink+6.8.0.patch +13 -0
  101. package/scripts/apply-ink-patch.mjs +29 -0
  102. package/scripts/ink-patch.mjs +59 -0
  103. package/scripts/verify-ink-patch.mjs +11 -0
@@ -0,0 +1,657 @@
1
+ // src/tui/theme.ts
2
+ import { createContext, useContext } from "react";
3
+
4
+ // src/types/theme.ts
5
+ var DEFAULT_THEME = {
6
+ brand: "#D3A17E",
7
+ brandShimmer: "#E5BB9B",
8
+ text: "#E7E1D4",
9
+ inverseText: "#171815",
10
+ inactive: "#6D6961",
11
+ subtle: "#938E84",
12
+ suggestion: "#7E7A72",
13
+ permission: "#D1AA6C",
14
+ remember: "#C09CAD",
15
+ surface: "#20221D",
16
+ surfaceActive: "#30362B",
17
+ border: "#4B4D45",
18
+ selectionText: "#F3EEE4",
19
+ userAccent: "#D3A17E",
20
+ assistantAccent: "#AFC19D",
21
+ toolRail: "#5C6156",
22
+ success: "#91B77C",
23
+ error: "#D68174",
24
+ warning: "#D1AA6C",
25
+ merged: "#7FA89C",
26
+ promptBorder: "#8C9A86",
27
+ planMode: "#C09CAD",
28
+ autoAccept: "#91B77C",
29
+ bashBorder: "#D1AA6C",
30
+ // `default` is the quiet mode: desaturated so the sage of an agent turn never
31
+ // reads as a permission-mode signal.
32
+ modeDefault: "#8C9A86",
33
+ modePlan: "#C09CAD",
34
+ modeAcceptEdits: "#91B77C",
35
+ modeAuto: "#7FA89C",
36
+ modeDontAsk: "#D68174",
37
+ modeBypass: "#D1AA6C",
38
+ diffAdded: "#243326",
39
+ diffRemoved: "#382624",
40
+ diffAddedWord: "#36523A",
41
+ diffRemovedWord: "#5B3430",
42
+ diffAddedDimmed: "#1D2B20",
43
+ diffRemovedDimmed: "#302120",
44
+ usageMeter: "#7FA89C",
45
+ usageMeterHigh: "#D1AA6C",
46
+ usageMeterCritical: "#D68174",
47
+ // The spinner is the agent speaking, so it keeps the sage identity.
48
+ shimmerPair: ["#AFC19D", "#C4D3B5"],
49
+ subagentColors: [
50
+ "#D68174",
51
+ "#7FA89C",
52
+ "#91B77C",
53
+ "#D1AA6C",
54
+ "#C09CAD",
55
+ "#D3A17E",
56
+ "#B88FA4",
57
+ "#AFC19D"
58
+ ],
59
+ mdCodeBackground: "#1B1D1A",
60
+ mdCodeBorder: "#3A3C36",
61
+ mdCodeText: "#E7E1D4",
62
+ mdCodeKeyword: "#C09CAD",
63
+ mdCodeString: "#91B77C",
64
+ mdCodeComment: "#6D6961",
65
+ mdCodeNumber: "#D1AA6C",
66
+ mdCodeFunction: "#7FA89C",
67
+ mdCodeLineNumber: "#5C6156",
68
+ mdInlineCodeBg: "#2B2C27",
69
+ mdInlineCodeText: "#D3A17E",
70
+ // A three-step brightness ramp, all bold. Depth is legible only if these
71
+ // differ from each other *and* from `text` — otherwise a heading is
72
+ // indistinguishable from a bold run in body copy.
73
+ mdHeadingH1: "#F7F3EA",
74
+ mdHeadingH2: "#EFEADC",
75
+ mdHeading: "#B4AE9F",
76
+ mdBlockquoteBorder: "#5C6156",
77
+ mdBlockquoteText: "#938E84",
78
+ mdLink: "#7FA89C",
79
+ mdListMarker: "#8C9A86",
80
+ mdHr: "#3A3C36",
81
+ mdTableBorder: "#3A3C36",
82
+ mdThinkBg: "#1E201C",
83
+ mdThinkBorder: "#3A3C36",
84
+ mdThinkText: "#7E7A72",
85
+ mdTurnSeparator: "#4B4D45",
86
+ mdCheckboxChecked: "#91B77C",
87
+ mdCheckboxUnchecked: "#6D6961",
88
+ userBg: "#262220"
89
+ };
90
+
91
+ // src/tui/theme.ts
92
+ import { readFileSync, existsSync, readdirSync } from "fs";
93
+ import { join } from "path";
94
+ var DARK_THEME = { ...DEFAULT_THEME };
95
+ var APPLE_THEME = {
96
+ ...DEFAULT_THEME,
97
+ brand: "#5E5CE6",
98
+ brandShimmer: "#8E8CFF",
99
+ text: "#F5F5F7",
100
+ inverseText: "#111113",
101
+ inactive: "#6E6E73",
102
+ subtle: "#98989D",
103
+ suggestion: "#8E8E93",
104
+ permission: "#FF9F0A",
105
+ remember: "#BF5AF2",
106
+ surface: "#1C1C1E",
107
+ surfaceActive: "#2C2C2E",
108
+ border: "#3A3A3C",
109
+ selectionText: "#FFFFFF",
110
+ userAccent: "#0A84FF",
111
+ assistantAccent: "#64D2FF",
112
+ toolRail: "#636366",
113
+ success: "#30D158",
114
+ error: "#FF453A",
115
+ warning: "#FF9F0A",
116
+ merged: "#66D4CF",
117
+ promptBorder: "#0A84FF",
118
+ planMode: "#BF5AF2",
119
+ autoAccept: "#30D158",
120
+ bashBorder: "#FF9F0A",
121
+ // `default` is the quiet mode: neutral grey, so an ordinary session carries
122
+ // no permission-mode signal at all.
123
+ modeDefault: "#98989D",
124
+ modePlan: "#BF5AF2",
125
+ modeAcceptEdits: "#30D158",
126
+ modeAuto: "#66D4CF",
127
+ modeDontAsk: "#FF453A",
128
+ modeBypass: "#FF9F0A",
129
+ diffAdded: "#173A28",
130
+ diffRemoved: "#3A1E22",
131
+ diffAddedWord: "#24633D",
132
+ diffRemovedWord: "#6B2932",
133
+ diffAddedDimmed: "#122B1E",
134
+ diffRemovedDimmed: "#2B181C",
135
+ usageMeter: "#66D4CF",
136
+ usageMeterHigh: "#FF9F0A",
137
+ usageMeterCritical: "#FF453A",
138
+ // The spinner is the agent speaking, so it keeps the cyan identity.
139
+ shimmerPair: ["#64D2FF", "#A5E3FF"],
140
+ subagentColors: [
141
+ "#FF453A",
142
+ "#FF9F0A",
143
+ "#FFD60A",
144
+ "#30D158",
145
+ "#64D2FF",
146
+ "#0A84FF",
147
+ "#BF5AF2",
148
+ "#5E5CE6"
149
+ ],
150
+ mdCodeBackground: "#161618",
151
+ mdCodeBorder: "#3A3A3C",
152
+ mdCodeText: "#F5F5F7",
153
+ mdCodeKeyword: "#BF5AF2",
154
+ mdCodeString: "#30D158",
155
+ mdCodeComment: "#6E6E73",
156
+ mdCodeNumber: "#FF9F0A",
157
+ mdCodeFunction: "#64D2FF",
158
+ mdCodeLineNumber: "#636366",
159
+ mdInlineCodeBg: "#2C2C2E",
160
+ mdInlineCodeText: "#66D4CF",
161
+ // Three distinct brightness steps, none at `text`, so heading depth stays
162
+ // legible without markers.
163
+ mdHeadingH1: "#FFFFFF",
164
+ mdHeadingH2: "#E5E5EA",
165
+ mdHeading: "#AEAEB2",
166
+ mdBlockquoteBorder: "#636366",
167
+ mdBlockquoteText: "#98989D",
168
+ mdLink: "#66D4CF",
169
+ mdListMarker: "#0A84FF",
170
+ mdHr: "#3A3A3C",
171
+ mdTableBorder: "#3A3A3C",
172
+ mdThinkBg: "#161618",
173
+ mdThinkBorder: "#3A3A3C",
174
+ mdThinkText: "#8E8E93",
175
+ mdTurnSeparator: "#3A3A3C",
176
+ mdCheckboxChecked: "#30D158",
177
+ mdCheckboxUnchecked: "#6E6E73",
178
+ userBg: "#202022"
179
+ };
180
+ var LIGHT_THEME = {
181
+ ...DEFAULT_THEME,
182
+ brand: "#A45F48",
183
+ brandShimmer: "#B87458",
184
+ text: "#302E2A",
185
+ inverseText: "#FBF7EE",
186
+ inactive: "#928A7E",
187
+ subtle: "#746F66",
188
+ suggestion: "#8A8378",
189
+ permission: "#94662B",
190
+ remember: "#805F6E",
191
+ surface: "#EEE8DC",
192
+ surfaceActive: "#DDE6D6",
193
+ border: "#C9C1B3",
194
+ selectionText: "#293126",
195
+ userAccent: "#A45F48",
196
+ assistantAccent: "#607257",
197
+ toolRail: "#A79F91",
198
+ success: "#4F7746",
199
+ error: "#A54F44",
200
+ warning: "#94662B",
201
+ merged: "#4F7B71",
202
+ promptBorder: "#7C8A76",
203
+ planMode: "#805F6E",
204
+ autoAccept: "#4F7746",
205
+ bashBorder: "#94662B",
206
+ modeDefault: "#7C8A76",
207
+ modePlan: "#805F6E",
208
+ modeAcceptEdits: "#4F7746",
209
+ modeAuto: "#4F7B71",
210
+ modeDontAsk: "#A54F44",
211
+ modeBypass: "#94662B",
212
+ usageMeter: "#4F7B71",
213
+ usageMeterHigh: "#94662B",
214
+ usageMeterCritical: "#A54F44",
215
+ diffAdded: "#DFECDC",
216
+ diffRemoved: "#F1DDDA",
217
+ diffAddedWord: "#BFD8BD",
218
+ diffRemovedWord: "#E6BFBA",
219
+ diffAddedDimmed: "#EAF3E9",
220
+ diffRemovedDimmed: "#F7E9E7",
221
+ shimmerPair: ["#607257", "#75886A"],
222
+ subagentColors: [
223
+ "#A54F44",
224
+ "#4F7B71",
225
+ "#4F7746",
226
+ "#94662B",
227
+ "#805F6E",
228
+ "#A45F48",
229
+ "#8D6277",
230
+ "#607257"
231
+ ],
232
+ mdCodeBackground: "#E7E2D8",
233
+ mdCodeBorder: "#CFC7B9",
234
+ mdCodeText: "#302E2A",
235
+ mdCodeKeyword: "#805F6E",
236
+ mdCodeString: "#4F7746",
237
+ mdCodeComment: "#8A8378",
238
+ mdCodeNumber: "#94662B",
239
+ mdCodeFunction: "#4F7B71",
240
+ mdCodeLineNumber: "#A79F91",
241
+ mdInlineCodeBg: "#E4DED2",
242
+ mdInlineCodeText: "#A45F48",
243
+ mdHeadingH1: "#14130F",
244
+ mdHeadingH2: "#23211D",
245
+ mdHeading: "#5F5B51",
246
+ mdBlockquoteBorder: "#A79F91",
247
+ mdBlockquoteText: "#746F66",
248
+ mdLink: "#4F7B71",
249
+ mdListMarker: "#7C8A76",
250
+ mdHr: "#CFC7B9",
251
+ mdTableBorder: "#CFC7B9",
252
+ mdThinkBg: "#EEE8DC",
253
+ mdThinkBorder: "#CFC7B9",
254
+ mdThinkText: "#746F66",
255
+ mdTurnSeparator: "#C9C1B3",
256
+ mdCheckboxChecked: "#4F7746",
257
+ mdCheckboxUnchecked: "#928A7E",
258
+ userBg: "#F3E7DE"
259
+ };
260
+ var CATPPUCCIN_THEME = {
261
+ ...DEFAULT_THEME,
262
+ brand: "#CBA6F7",
263
+ brandShimmer: "#F5C2E7",
264
+ text: "#CDD6F4",
265
+ inverseText: "#11111B",
266
+ inactive: "#6C7086",
267
+ subtle: "#A6ADC8",
268
+ suggestion: "#7F849C",
269
+ permission: "#F9E2AF",
270
+ remember: "#F5C2E7",
271
+ surface: "#1E1E2E",
272
+ surfaceActive: "#313244",
273
+ border: "#45475A",
274
+ selectionText: "#F5E0DC",
275
+ userAccent: "#89B4FA",
276
+ assistantAccent: "#B4BEFE",
277
+ toolRail: "#585B70",
278
+ success: "#A6E3A1",
279
+ error: "#F38BA8",
280
+ warning: "#F9E2AF",
281
+ merged: "#94E2D5",
282
+ promptBorder: "#89B4FA",
283
+ planMode: "#F5C2E7",
284
+ autoAccept: "#A6E3A1",
285
+ bashBorder: "#FAB387",
286
+ modeDefault: "#89B4FA",
287
+ modePlan: "#F5C2E7",
288
+ modeAcceptEdits: "#A6E3A1",
289
+ modeAuto: "#94E2D5",
290
+ modeDontAsk: "#F38BA8",
291
+ modeBypass: "#FAB387",
292
+ diffAdded: "#23342E",
293
+ diffRemoved: "#3B2430",
294
+ diffAddedWord: "#315444",
295
+ diffRemovedWord: "#5C2C40",
296
+ diffAddedDimmed: "#1B2A24",
297
+ diffRemovedDimmed: "#2D1D26",
298
+ usageMeter: "#94E2D5",
299
+ usageMeterHigh: "#FAB387",
300
+ usageMeterCritical: "#F38BA8",
301
+ shimmerPair: ["#B4BEFE", "#C7CEFF"],
302
+ subagentColors: [
303
+ "#F38BA8",
304
+ "#FAB387",
305
+ "#F9E2AF",
306
+ "#A6E3A1",
307
+ "#94E2D5",
308
+ "#89B4FA",
309
+ "#CBA6F7",
310
+ "#F5C2E7"
311
+ ],
312
+ mdCodeBackground: "#181825",
313
+ mdCodeBorder: "#313244",
314
+ mdCodeText: "#CDD6F4",
315
+ mdCodeKeyword: "#CBA6F7",
316
+ mdCodeString: "#A6E3A1",
317
+ mdCodeComment: "#6C7086",
318
+ mdCodeNumber: "#FAB387",
319
+ mdCodeFunction: "#89B4FA",
320
+ mdCodeLineNumber: "#585B70",
321
+ mdInlineCodeBg: "#313244",
322
+ mdInlineCodeText: "#F5C2E7",
323
+ mdHeadingH1: "#F5E0DC",
324
+ mdHeadingH2: "#BAC2DE",
325
+ mdHeading: "#A6ADC8",
326
+ mdBlockquoteBorder: "#585B70",
327
+ mdBlockquoteText: "#A6ADC8",
328
+ mdLink: "#89DCEB",
329
+ mdListMarker: "#89B4FA",
330
+ mdHr: "#45475A",
331
+ mdTableBorder: "#45475A",
332
+ mdThinkBg: "#181825",
333
+ mdThinkBorder: "#313244",
334
+ mdThinkText: "#7F849C",
335
+ mdTurnSeparator: "#45475A",
336
+ mdCheckboxChecked: "#A6E3A1",
337
+ mdCheckboxUnchecked: "#6C7086",
338
+ userBg: "#24273A"
339
+ };
340
+ var NORD_THEME = {
341
+ ...DEFAULT_THEME,
342
+ brand: "#88C0D0",
343
+ brandShimmer: "#8FBCBB",
344
+ text: "#D8DEE9",
345
+ inverseText: "#2E3440",
346
+ inactive: "#4C566A",
347
+ subtle: "#9AA7BC",
348
+ suggestion: "#616E88",
349
+ permission: "#EBCB8B",
350
+ remember: "#B48EAD",
351
+ surface: "#2E3440",
352
+ surfaceActive: "#3B4252",
353
+ border: "#434C5E",
354
+ selectionText: "#ECEFF4",
355
+ userAccent: "#81A1C1",
356
+ assistantAccent: "#8FBCBB",
357
+ toolRail: "#4C566A",
358
+ success: "#A3BE8C",
359
+ error: "#BF616A",
360
+ warning: "#EBCB8B",
361
+ merged: "#88C0D0",
362
+ promptBorder: "#81A1C1",
363
+ planMode: "#B48EAD",
364
+ autoAccept: "#A3BE8C",
365
+ bashBorder: "#D08770",
366
+ modeDefault: "#5E81AC",
367
+ modePlan: "#B48EAD",
368
+ modeAcceptEdits: "#A3BE8C",
369
+ modeAuto: "#8FBCBB",
370
+ modeDontAsk: "#BF616A",
371
+ modeBypass: "#D08770",
372
+ diffAdded: "#2A3B35",
373
+ diffRemoved: "#3D2930",
374
+ diffAddedWord: "#385648",
375
+ diffRemovedWord: "#5E353F",
376
+ diffAddedDimmed: "#23302B",
377
+ diffRemovedDimmed: "#312127",
378
+ usageMeter: "#81A1C1",
379
+ usageMeterHigh: "#EBCB8B",
380
+ usageMeterCritical: "#BF616A",
381
+ shimmerPair: ["#8FBCBB", "#A3CECD"],
382
+ subagentColors: [
383
+ "#BF616A",
384
+ "#D08770",
385
+ "#EBCB8B",
386
+ "#A3BE8C",
387
+ "#8FBCBB",
388
+ "#88C0D0",
389
+ "#81A1C1",
390
+ "#B48EAD"
391
+ ],
392
+ mdCodeBackground: "#242933",
393
+ mdCodeBorder: "#3B4252",
394
+ mdCodeText: "#D8DEE9",
395
+ mdCodeKeyword: "#81A1C1",
396
+ mdCodeString: "#A3BE8C",
397
+ mdCodeComment: "#616E88",
398
+ mdCodeNumber: "#B48EAD",
399
+ mdCodeFunction: "#88C0D0",
400
+ mdCodeLineNumber: "#4C566A",
401
+ mdInlineCodeBg: "#3B4252",
402
+ mdInlineCodeText: "#88C0D0",
403
+ mdHeadingH1: "#ECEFF4",
404
+ mdHeadingH2: "#E5E9F0",
405
+ mdHeading: "#9AA7BC",
406
+ mdBlockquoteBorder: "#4C566A",
407
+ mdBlockquoteText: "#9AA7BC",
408
+ mdLink: "#81A1C1",
409
+ mdListMarker: "#88C0D0",
410
+ mdHr: "#434C5E",
411
+ mdTableBorder: "#434C5E",
412
+ mdThinkBg: "#242933",
413
+ mdThinkBorder: "#3B4252",
414
+ mdThinkText: "#616E88",
415
+ mdTurnSeparator: "#434C5E",
416
+ mdCheckboxChecked: "#A3BE8C",
417
+ mdCheckboxUnchecked: "#4C566A",
418
+ userBg: "#353C4A"
419
+ };
420
+ var GRUVBOX_THEME = {
421
+ ...DEFAULT_THEME,
422
+ brand: "#FE8019",
423
+ brandShimmer: "#FABD2F",
424
+ text: "#EBDBB2",
425
+ inverseText: "#282828",
426
+ inactive: "#7C6F64",
427
+ subtle: "#A89984",
428
+ suggestion: "#928374",
429
+ permission: "#FABD2F",
430
+ remember: "#D3869B",
431
+ surface: "#282828",
432
+ surfaceActive: "#3C3836",
433
+ border: "#504945",
434
+ selectionText: "#FBF1C7",
435
+ userAccent: "#FE8019",
436
+ assistantAccent: "#8EC07C",
437
+ toolRail: "#665C54",
438
+ success: "#B8BB26",
439
+ error: "#FB4934",
440
+ warning: "#FABD2F",
441
+ merged: "#83A598",
442
+ promptBorder: "#83A598",
443
+ planMode: "#D3869B",
444
+ autoAccept: "#B8BB26",
445
+ bashBorder: "#FABD2F",
446
+ modeDefault: "#689D6A",
447
+ modePlan: "#D3869B",
448
+ modeAcceptEdits: "#B8BB26",
449
+ modeAuto: "#8EC07C",
450
+ modeDontAsk: "#FB4934",
451
+ modeBypass: "#FE8019",
452
+ diffAdded: "#2B3322",
453
+ diffRemoved: "#3B2320",
454
+ diffAddedWord: "#3E522C",
455
+ diffRemovedWord: "#5C2B25",
456
+ diffAddedDimmed: "#23291C",
457
+ diffRemovedDimmed: "#2E1C1A",
458
+ usageMeter: "#83A598",
459
+ usageMeterHigh: "#FABD2F",
460
+ usageMeterCritical: "#FB4934",
461
+ shimmerPair: ["#8EC07C", "#B8BB26"],
462
+ subagentColors: [
463
+ "#FB4934",
464
+ "#FE8019",
465
+ "#FABD2F",
466
+ "#B8BB26",
467
+ "#8EC07C",
468
+ "#83A598",
469
+ "#D3869B",
470
+ "#D5C4A1"
471
+ ],
472
+ mdCodeBackground: "#1D2021",
473
+ mdCodeBorder: "#3C3836",
474
+ mdCodeText: "#EBDBB2",
475
+ mdCodeKeyword: "#FB4934",
476
+ mdCodeString: "#B8BB26",
477
+ mdCodeComment: "#928374",
478
+ mdCodeNumber: "#D3869B",
479
+ mdCodeFunction: "#8EC07C",
480
+ mdCodeLineNumber: "#665C54",
481
+ mdInlineCodeBg: "#3C3836",
482
+ mdInlineCodeText: "#FE8019",
483
+ mdHeadingH1: "#FBF1C7",
484
+ mdHeadingH2: "#F2E5BC",
485
+ mdHeading: "#D5C4A1",
486
+ mdBlockquoteBorder: "#665C54",
487
+ mdBlockquoteText: "#A89984",
488
+ mdLink: "#83A598",
489
+ mdListMarker: "#FE8019",
490
+ mdHr: "#504945",
491
+ mdTableBorder: "#504945",
492
+ mdThinkBg: "#1D2021",
493
+ mdThinkBorder: "#3C3836",
494
+ mdThinkText: "#928374",
495
+ mdTurnSeparator: "#504945",
496
+ mdCheckboxChecked: "#B8BB26",
497
+ mdCheckboxUnchecked: "#7C6F64",
498
+ userBg: "#32302F"
499
+ };
500
+ var SOLARIZED_DARK_THEME = {
501
+ ...DEFAULT_THEME,
502
+ brand: "#268BD2",
503
+ brandShimmer: "#2AA198",
504
+ text: "#839496",
505
+ inverseText: "#002B36",
506
+ inactive: "#586E75",
507
+ subtle: "#657B83",
508
+ suggestion: "#586E75",
509
+ permission: "#B58900",
510
+ remember: "#D33682",
511
+ surface: "#002B36",
512
+ surfaceActive: "#073642",
513
+ border: "#0E4B5B",
514
+ selectionText: "#FDF6E3",
515
+ userAccent: "#268BD2",
516
+ assistantAccent: "#2AA198",
517
+ toolRail: "#586E75",
518
+ success: "#859900",
519
+ error: "#DC322F",
520
+ warning: "#B58900",
521
+ merged: "#2AA198",
522
+ promptBorder: "#268BD2",
523
+ planMode: "#D33682",
524
+ autoAccept: "#859900",
525
+ bashBorder: "#CB4B16",
526
+ modeDefault: "#586E75",
527
+ modePlan: "#D33682",
528
+ modeAcceptEdits: "#859900",
529
+ modeAuto: "#2AA198",
530
+ modeDontAsk: "#DC322F",
531
+ modeBypass: "#CB4B16",
532
+ diffAdded: "#0A3326",
533
+ diffRemoved: "#36191E",
534
+ diffAddedWord: "#134F3A",
535
+ diffRemovedWord: "#54222A",
536
+ diffAddedDimmed: "#08291F",
537
+ diffRemovedDimmed: "#2B1418",
538
+ usageMeter: "#2AA198",
539
+ usageMeterHigh: "#B58900",
540
+ usageMeterCritical: "#DC322F",
541
+ shimmerPair: ["#2AA198", "#859900"],
542
+ subagentColors: [
543
+ "#DC322F",
544
+ "#CB4B16",
545
+ "#B58900",
546
+ "#859900",
547
+ "#2AA198",
548
+ "#268BD2",
549
+ "#6C71C4",
550
+ "#D33682"
551
+ ],
552
+ mdCodeBackground: "#00212B",
553
+ mdCodeBorder: "#073642",
554
+ mdCodeText: "#839496",
555
+ mdCodeKeyword: "#859900",
556
+ mdCodeString: "#2AA198",
557
+ mdCodeComment: "#586E75",
558
+ mdCodeNumber: "#D33682",
559
+ mdCodeFunction: "#268BD2",
560
+ mdCodeLineNumber: "#586E75",
561
+ mdInlineCodeBg: "#073642",
562
+ mdInlineCodeText: "#2AA198",
563
+ mdHeadingH1: "#FDF6E3",
564
+ mdHeadingH2: "#EEE8D5",
565
+ mdHeading: "#93A1A1",
566
+ mdBlockquoteBorder: "#586E75",
567
+ mdBlockquoteText: "#657B83",
568
+ mdLink: "#6C71C4",
569
+ mdListMarker: "#2AA198",
570
+ mdHr: "#073642",
571
+ mdTableBorder: "#073642",
572
+ mdThinkBg: "#00212B",
573
+ mdThinkBorder: "#073642",
574
+ mdThinkText: "#586E75",
575
+ mdTurnSeparator: "#073642",
576
+ mdCheckboxChecked: "#859900",
577
+ mdCheckboxUnchecked: "#586E75",
578
+ userBg: "#073642"
579
+ };
580
+ var CUSTOM_THEME_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
581
+ var ThemeContext = createContext(DEFAULT_THEME);
582
+ function useTheme() {
583
+ return useContext(ThemeContext);
584
+ }
585
+ function hasLightTerminalBackground(colorFgBg = process.env.COLORFGBG ?? "") {
586
+ const background = Number(colorFgBg.split(";").at(-1));
587
+ return background === 7 || background === 15;
588
+ }
589
+ function listCustomThemes(workspace) {
590
+ const themesDir = join(workspace, ".book", "themes");
591
+ try {
592
+ return readdirSync(themesDir, { withFileTypes: true }).filter((entry) => entry.isFile() && entry.name.endsWith(".json")).map((entry) => entry.name.slice(0, -".json".length)).filter((name) => CUSTOM_THEME_NAME.test(name)).sort((a, b) => a.localeCompare(b));
593
+ } catch {
594
+ return [];
595
+ }
596
+ }
597
+ function loadCustomTheme(workspace, name) {
598
+ if (!CUSTOM_THEME_NAME.test(name)) return null;
599
+ const themePath = join(workspace, ".book", "themes", `${name}.json`);
600
+ if (!existsSync(themePath)) return null;
601
+ try {
602
+ const raw = readFileSync(themePath, "utf-8");
603
+ const parsed = JSON.parse(raw);
604
+ return { ...DEFAULT_THEME, ...parsed };
605
+ } catch {
606
+ return null;
607
+ }
608
+ }
609
+ function resolveTheme(workspace, preference, colorFgBg = process.env.COLORFGBG ?? "") {
610
+ const requested = preference.trim();
611
+ const builtin = requested.toLowerCase();
612
+ if (builtin === "apple" || builtin === "apple-dark") {
613
+ return { preference: "apple", resolvedName: "apple", tokens: APPLE_THEME };
614
+ }
615
+ if (builtin === "dark") {
616
+ return { preference: "dark", resolvedName: "dark", tokens: DARK_THEME };
617
+ }
618
+ if (builtin === "light") {
619
+ return { preference: "light", resolvedName: "light", tokens: LIGHT_THEME };
620
+ }
621
+ if (builtin === "auto") {
622
+ const isLight = hasLightTerminalBackground(colorFgBg);
623
+ return {
624
+ preference: "auto",
625
+ resolvedName: isLight ? "light" : "apple",
626
+ tokens: isLight ? LIGHT_THEME : APPLE_THEME
627
+ };
628
+ }
629
+ if (builtin === "catppuccin" || builtin === "catppuccin-mocha" || builtin === "mocha") {
630
+ return { preference: "catppuccin", resolvedName: "catppuccin", tokens: CATPPUCCIN_THEME };
631
+ }
632
+ if (builtin === "nord") {
633
+ return { preference: "nord", resolvedName: "nord", tokens: NORD_THEME };
634
+ }
635
+ if (builtin === "gruvbox" || builtin === "gruvbox-dark") {
636
+ return { preference: "gruvbox", resolvedName: "gruvbox", tokens: GRUVBOX_THEME };
637
+ }
638
+ if (builtin === "solarized-dark" || builtin === "solarized") {
639
+ return {
640
+ preference: "solarized-dark",
641
+ resolvedName: "solarized-dark",
642
+ tokens: SOLARIZED_DARK_THEME
643
+ };
644
+ }
645
+ if (!requested) return null;
646
+ const custom = loadCustomTheme(workspace, requested);
647
+ return custom ? { preference: requested, resolvedName: requested, tokens: custom } : null;
648
+ }
649
+
650
+ export {
651
+ APPLE_THEME,
652
+ ThemeContext,
653
+ useTheme,
654
+ listCustomThemes,
655
+ resolveTheme
656
+ };
657
+ //# sourceMappingURL=chunk-L6LK2QIQ.js.map