@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 @@
1
+ {"version":3,"sources":["../src/tui/theme.ts","../src/types/theme.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\r\nimport type { ThemeTokens } from '../types/theme.js';\r\nimport { DEFAULT_THEME } from '../types/theme.js';\r\nimport { readFileSync, existsSync, readdirSync } from 'fs';\r\nimport { join } from 'path';\r\n\r\n/** Quiet editorial dark theme. This is the same as DEFAULT_THEME. */\r\nexport const DARK_THEME: ThemeTokens = { ...DEFAULT_THEME };\r\n\r\n/**\r\n * Apple-inspired default palette: near-black neutral surfaces, bright grey\r\n * text, and one blue action accent. Every other hue is a system colour that\r\n * appears only when a state needs attention, so ordinary chrome never competes\r\n * with the work.\r\n *\r\n * Roles stay distinct, as in the editorial palettes: blue is the user and the\r\n * composer (the things you act on), cyan is the agent speaking, indigo is\r\n * product chrome, teal carries references, and the orange/red/green trio is\r\n * status. A token that reuses another role's hue makes the two indistinguishable\r\n * on screen, which is exactly what the calm palette exists to avoid.\r\n */\r\nexport const APPLE_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#5E5CE6',\r\n brandShimmer: '#8E8CFF',\r\n\r\n text: '#F5F5F7',\r\n inverseText: '#111113',\r\n inactive: '#6E6E73',\r\n subtle: '#98989D',\r\n suggestion: '#8E8E93',\r\n permission: '#FF9F0A',\r\n remember: '#BF5AF2',\r\n\r\n surface: '#1C1C1E',\r\n surfaceActive: '#2C2C2E',\r\n border: '#3A3A3C',\r\n selectionText: '#FFFFFF',\r\n userAccent: '#0A84FF',\r\n assistantAccent: '#64D2FF',\r\n toolRail: '#636366',\r\n\r\n success: '#30D158',\r\n error: '#FF453A',\r\n warning: '#FF9F0A',\r\n merged: '#66D4CF',\r\n\r\n promptBorder: '#0A84FF',\r\n planMode: '#BF5AF2',\r\n autoAccept: '#30D158',\r\n bashBorder: '#FF9F0A',\r\n\r\n // `default` is the quiet mode: neutral grey, so an ordinary session carries\r\n // no permission-mode signal at all.\r\n modeDefault: '#98989D',\r\n modePlan: '#BF5AF2',\r\n modeAcceptEdits: '#30D158',\r\n modeAuto: '#66D4CF',\r\n modeDontAsk: '#FF453A',\r\n modeBypass: '#FF9F0A',\r\n\r\n diffAdded: '#173A28',\r\n diffRemoved: '#3A1E22',\r\n diffAddedWord: '#24633D',\r\n diffRemovedWord: '#6B2932',\r\n diffAddedDimmed: '#122B1E',\r\n diffRemovedDimmed: '#2B181C',\r\n\r\n usageMeter: '#66D4CF',\r\n usageMeterHigh: '#FF9F0A',\r\n usageMeterCritical: '#FF453A',\r\n\r\n // The spinner is the agent speaking, so it keeps the cyan identity.\r\n shimmerPair: ['#64D2FF', '#A5E3FF'],\r\n\r\n subagentColors: [\r\n '#FF453A',\r\n '#FF9F0A',\r\n '#FFD60A',\r\n '#30D158',\r\n '#64D2FF',\r\n '#0A84FF',\r\n '#BF5AF2',\r\n '#5E5CE6',\r\n ],\r\n\r\n mdCodeBackground: '#161618',\r\n mdCodeBorder: '#3A3A3C',\r\n mdCodeText: '#F5F5F7',\r\n mdCodeKeyword: '#BF5AF2',\r\n mdCodeString: '#30D158',\r\n mdCodeComment: '#6E6E73',\r\n mdCodeNumber: '#FF9F0A',\r\n mdCodeFunction: '#64D2FF',\r\n mdCodeLineNumber: '#636366',\r\n mdInlineCodeBg: '#2C2C2E',\r\n mdInlineCodeText: '#66D4CF',\r\n // Three distinct brightness steps, none at `text`, so heading depth stays\r\n // legible without markers.\r\n mdHeadingH1: '#FFFFFF',\r\n mdHeadingH2: '#E5E5EA',\r\n mdHeading: '#AEAEB2',\r\n mdBlockquoteBorder: '#636366',\r\n mdBlockquoteText: '#98989D',\r\n mdLink: '#66D4CF',\r\n mdListMarker: '#0A84FF',\r\n mdHr: '#3A3A3C',\r\n mdTableBorder: '#3A3A3C',\r\n mdThinkBg: '#161618',\r\n mdThinkBorder: '#3A3A3C',\r\n mdThinkText: '#8E8E93',\r\n mdTurnSeparator: '#3A3A3C',\r\n mdCheckboxChecked: '#30D158',\r\n mdCheckboxUnchecked: '#6E6E73',\r\n\r\n userBg: '#202022',\r\n};\r\n\r\n/** Matched editorial palette for terminals with light backgrounds. */\r\n/**\r\n * Warm editorial light palette. Mirrors DEFAULT_THEME role for role: the same\r\n * seven hues, darkened for a light background.\r\n */\r\nexport const LIGHT_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#A45F48',\r\n brandShimmer: '#B87458',\r\n\r\n text: '#302E2A',\r\n inverseText: '#FBF7EE',\r\n inactive: '#928A7E',\r\n subtle: '#746F66',\r\n suggestion: '#8A8378',\r\n permission: '#94662B',\r\n remember: '#805F6E',\r\n\r\n surface: '#EEE8DC',\r\n surfaceActive: '#DDE6D6',\r\n border: '#C9C1B3',\r\n selectionText: '#293126',\r\n userAccent: '#A45F48',\r\n assistantAccent: '#607257',\r\n toolRail: '#A79F91',\r\n\r\n success: '#4F7746',\r\n error: '#A54F44',\r\n warning: '#94662B',\r\n merged: '#4F7B71',\r\n\r\n promptBorder: '#7C8A76',\r\n planMode: '#805F6E',\r\n autoAccept: '#4F7746',\r\n bashBorder: '#94662B',\r\n\r\n modeDefault: '#7C8A76',\r\n modePlan: '#805F6E',\r\n modeAcceptEdits: '#4F7746',\r\n modeAuto: '#4F7B71',\r\n modeDontAsk: '#A54F44',\r\n modeBypass: '#94662B',\r\n\r\n usageMeter: '#4F7B71',\r\n usageMeterHigh: '#94662B',\r\n usageMeterCritical: '#A54F44',\r\n\r\n diffAdded: '#DFECDC',\r\n diffRemoved: '#F1DDDA',\r\n diffAddedWord: '#BFD8BD',\r\n diffRemovedWord: '#E6BFBA',\r\n diffAddedDimmed: '#EAF3E9',\r\n diffRemovedDimmed: '#F7E9E7',\r\n\r\n shimmerPair: ['#607257', '#75886A'],\r\n subagentColors: [\r\n '#A54F44',\r\n '#4F7B71',\r\n '#4F7746',\r\n '#94662B',\r\n '#805F6E',\r\n '#A45F48',\r\n '#8D6277',\r\n '#607257',\r\n ],\r\n\r\n mdCodeBackground: '#E7E2D8',\r\n mdCodeBorder: '#CFC7B9',\r\n mdCodeText: '#302E2A',\r\n mdCodeKeyword: '#805F6E',\r\n mdCodeString: '#4F7746',\r\n mdCodeComment: '#8A8378',\r\n mdCodeNumber: '#94662B',\r\n mdCodeFunction: '#4F7B71',\r\n mdCodeLineNumber: '#A79F91',\r\n mdInlineCodeBg: '#E4DED2',\r\n mdInlineCodeText: '#A45F48',\r\n mdHeadingH1: '#14130F',\r\n mdHeadingH2: '#23211D',\r\n mdHeading: '#5F5B51',\r\n mdBlockquoteBorder: '#A79F91',\r\n mdBlockquoteText: '#746F66',\r\n mdLink: '#4F7B71',\r\n mdListMarker: '#7C8A76',\r\n mdHr: '#CFC7B9',\r\n mdTableBorder: '#CFC7B9',\r\n mdThinkBg: '#EEE8DC',\r\n mdThinkBorder: '#CFC7B9',\r\n mdThinkText: '#746F66',\r\n mdTurnSeparator: '#C9C1B3',\r\n mdCheckboxChecked: '#4F7746',\r\n mdCheckboxUnchecked: '#928A7E',\r\n\r\n userBg: '#F3E7DE',\r\n};\r\n\r\n/**\r\n * Soothing pastel dark palette based on Catppuccin Mocha.\r\n * Medium contrast, soft pastels, reduced eye fatigue.\r\n */\r\nexport const CATPPUCCIN_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#CBA6F7',\r\n brandShimmer: '#F5C2E7',\r\n\r\n text: '#CDD6F4',\r\n inverseText: '#11111B',\r\n inactive: '#6C7086',\r\n subtle: '#A6ADC8',\r\n suggestion: '#7F849C',\r\n permission: '#F9E2AF',\r\n remember: '#F5C2E7',\r\n\r\n surface: '#1E1E2E',\r\n surfaceActive: '#313244',\r\n border: '#45475A',\r\n selectionText: '#F5E0DC',\r\n userAccent: '#89B4FA',\r\n assistantAccent: '#B4BEFE',\r\n toolRail: '#585B70',\r\n\r\n success: '#A6E3A1',\r\n error: '#F38BA8',\r\n warning: '#F9E2AF',\r\n merged: '#94E2D5',\r\n\r\n promptBorder: '#89B4FA',\r\n planMode: '#F5C2E7',\r\n autoAccept: '#A6E3A1',\r\n bashBorder: '#FAB387',\r\n\r\n modeDefault: '#89B4FA',\r\n modePlan: '#F5C2E7',\r\n modeAcceptEdits: '#A6E3A1',\r\n modeAuto: '#94E2D5',\r\n modeDontAsk: '#F38BA8',\r\n modeBypass: '#FAB387',\r\n\r\n diffAdded: '#23342E',\r\n diffRemoved: '#3B2430',\r\n diffAddedWord: '#315444',\r\n diffRemovedWord: '#5C2C40',\r\n diffAddedDimmed: '#1B2A24',\r\n diffRemovedDimmed: '#2D1D26',\r\n\r\n usageMeter: '#94E2D5',\r\n usageMeterHigh: '#FAB387',\r\n usageMeterCritical: '#F38BA8',\r\n\r\n shimmerPair: ['#B4BEFE', '#C7CEFF'],\r\n subagentColors: [\r\n '#F38BA8',\r\n '#FAB387',\r\n '#F9E2AF',\r\n '#A6E3A1',\r\n '#94E2D5',\r\n '#89B4FA',\r\n '#CBA6F7',\r\n '#F5C2E7',\r\n ],\r\n\r\n mdCodeBackground: '#181825',\r\n mdCodeBorder: '#313244',\r\n mdCodeText: '#CDD6F4',\r\n mdCodeKeyword: '#CBA6F7',\r\n mdCodeString: '#A6E3A1',\r\n mdCodeComment: '#6C7086',\r\n mdCodeNumber: '#FAB387',\r\n mdCodeFunction: '#89B4FA',\r\n mdCodeLineNumber: '#585B70',\r\n mdInlineCodeBg: '#313244',\r\n mdInlineCodeText: '#F5C2E7',\r\n mdHeadingH1: '#F5E0DC',\r\n mdHeadingH2: '#BAC2DE',\r\n mdHeading: '#A6ADC8',\r\n mdBlockquoteBorder: '#585B70',\r\n mdBlockquoteText: '#A6ADC8',\r\n mdLink: '#89DCEB',\r\n mdListMarker: '#89B4FA',\r\n mdHr: '#45475A',\r\n mdTableBorder: '#45475A',\r\n mdThinkBg: '#181825',\r\n mdThinkBorder: '#313244',\r\n mdThinkText: '#7F849C',\r\n mdTurnSeparator: '#45475A',\r\n mdCheckboxChecked: '#A6E3A1',\r\n mdCheckboxUnchecked: '#6C7086',\r\n\r\n userBg: '#24273A',\r\n};\r\n\r\n/**\r\n * Arctic and glacial slate palette based on Nord.\r\n * Low blue-light glare, tranquil cool tones.\r\n */\r\nexport const NORD_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#88C0D0',\r\n brandShimmer: '#8FBCBB',\r\n\r\n text: '#D8DEE9',\r\n inverseText: '#2E3440',\r\n inactive: '#4C566A',\r\n subtle: '#9AA7BC',\r\n suggestion: '#616E88',\r\n permission: '#EBCB8B',\r\n remember: '#B48EAD',\r\n\r\n surface: '#2E3440',\r\n surfaceActive: '#3B4252',\r\n border: '#434C5E',\r\n selectionText: '#ECEFF4',\r\n userAccent: '#81A1C1',\r\n assistantAccent: '#8FBCBB',\r\n toolRail: '#4C566A',\r\n\r\n success: '#A3BE8C',\r\n error: '#BF616A',\r\n warning: '#EBCB8B',\r\n merged: '#88C0D0',\r\n\r\n promptBorder: '#81A1C1',\r\n planMode: '#B48EAD',\r\n autoAccept: '#A3BE8C',\r\n bashBorder: '#D08770',\r\n\r\n modeDefault: '#5E81AC',\r\n modePlan: '#B48EAD',\r\n modeAcceptEdits: '#A3BE8C',\r\n modeAuto: '#8FBCBB',\r\n modeDontAsk: '#BF616A',\r\n modeBypass: '#D08770',\r\n\r\n diffAdded: '#2A3B35',\r\n diffRemoved: '#3D2930',\r\n diffAddedWord: '#385648',\r\n diffRemovedWord: '#5E353F',\r\n diffAddedDimmed: '#23302B',\r\n diffRemovedDimmed: '#312127',\r\n\r\n usageMeter: '#81A1C1',\r\n usageMeterHigh: '#EBCB8B',\r\n usageMeterCritical: '#BF616A',\r\n\r\n shimmerPair: ['#8FBCBB', '#A3CECD'],\r\n subagentColors: [\r\n '#BF616A',\r\n '#D08770',\r\n '#EBCB8B',\r\n '#A3BE8C',\r\n '#8FBCBB',\r\n '#88C0D0',\r\n '#81A1C1',\r\n '#B48EAD',\r\n ],\r\n\r\n mdCodeBackground: '#242933',\r\n mdCodeBorder: '#3B4252',\r\n mdCodeText: '#D8DEE9',\r\n mdCodeKeyword: '#81A1C1',\r\n mdCodeString: '#A3BE8C',\r\n mdCodeComment: '#616E88',\r\n mdCodeNumber: '#B48EAD',\r\n mdCodeFunction: '#88C0D0',\r\n mdCodeLineNumber: '#4C566A',\r\n mdInlineCodeBg: '#3B4252',\r\n mdInlineCodeText: '#88C0D0',\r\n mdHeadingH1: '#ECEFF4',\r\n mdHeadingH2: '#E5E9F0',\r\n mdHeading: '#9AA7BC',\r\n mdBlockquoteBorder: '#4C566A',\r\n mdBlockquoteText: '#9AA7BC',\r\n mdLink: '#81A1C1',\r\n mdListMarker: '#88C0D0',\r\n mdHr: '#434C5E',\r\n mdTableBorder: '#434C5E',\r\n mdThinkBg: '#242933',\r\n mdThinkBorder: '#3B4252',\r\n mdThinkText: '#616E88',\r\n mdTurnSeparator: '#434C5E',\r\n mdCheckboxChecked: '#A3BE8C',\r\n mdCheckboxUnchecked: '#4C566A',\r\n\r\n userBg: '#353C4A',\r\n};\r\n\r\n/**\r\n * Warm earthy dark palette based on Gruvbox Dark.\r\n * Reduced blue light, high legibility, warm tones.\r\n */\r\nexport const GRUVBOX_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#FE8019',\r\n brandShimmer: '#FABD2F',\r\n\r\n text: '#EBDBB2',\r\n inverseText: '#282828',\r\n inactive: '#7C6F64',\r\n subtle: '#A89984',\r\n suggestion: '#928374',\r\n permission: '#FABD2F',\r\n remember: '#D3869B',\r\n\r\n surface: '#282828',\r\n surfaceActive: '#3C3836',\r\n border: '#504945',\r\n selectionText: '#FBF1C7',\r\n userAccent: '#FE8019',\r\n assistantAccent: '#8EC07C',\r\n toolRail: '#665C54',\r\n\r\n success: '#B8BB26',\r\n error: '#FB4934',\r\n warning: '#FABD2F',\r\n merged: '#83A598',\r\n\r\n promptBorder: '#83A598',\r\n planMode: '#D3869B',\r\n autoAccept: '#B8BB26',\r\n bashBorder: '#FABD2F',\r\n\r\n modeDefault: '#689D6A',\r\n modePlan: '#D3869B',\r\n modeAcceptEdits: '#B8BB26',\r\n modeAuto: '#8EC07C',\r\n modeDontAsk: '#FB4934',\r\n modeBypass: '#FE8019',\r\n\r\n diffAdded: '#2B3322',\r\n diffRemoved: '#3B2320',\r\n diffAddedWord: '#3E522C',\r\n diffRemovedWord: '#5C2B25',\r\n diffAddedDimmed: '#23291C',\r\n diffRemovedDimmed: '#2E1C1A',\r\n\r\n usageMeter: '#83A598',\r\n usageMeterHigh: '#FABD2F',\r\n usageMeterCritical: '#FB4934',\r\n\r\n shimmerPair: ['#8EC07C', '#B8BB26'],\r\n subagentColors: [\r\n '#FB4934',\r\n '#FE8019',\r\n '#FABD2F',\r\n '#B8BB26',\r\n '#8EC07C',\r\n '#83A598',\r\n '#D3869B',\r\n '#D5C4A1',\r\n ],\r\n\r\n mdCodeBackground: '#1D2021',\r\n mdCodeBorder: '#3C3836',\r\n mdCodeText: '#EBDBB2',\r\n mdCodeKeyword: '#FB4934',\r\n mdCodeString: '#B8BB26',\r\n mdCodeComment: '#928374',\r\n mdCodeNumber: '#D3869B',\r\n mdCodeFunction: '#8EC07C',\r\n mdCodeLineNumber: '#665C54',\r\n mdInlineCodeBg: '#3C3836',\r\n mdInlineCodeText: '#FE8019',\r\n mdHeadingH1: '#FBF1C7',\r\n mdHeadingH2: '#F2E5BC',\r\n mdHeading: '#D5C4A1',\r\n mdBlockquoteBorder: '#665C54',\r\n mdBlockquoteText: '#A89984',\r\n mdLink: '#83A598',\r\n mdListMarker: '#FE8019',\r\n mdHr: '#504945',\r\n mdTableBorder: '#504945',\r\n mdThinkBg: '#1D2021',\r\n mdThinkBorder: '#3C3836',\r\n mdThinkText: '#928374',\r\n mdTurnSeparator: '#504945',\r\n mdCheckboxChecked: '#B8BB26',\r\n mdCheckboxUnchecked: '#7C6F64',\r\n\r\n userBg: '#32302F',\r\n};\r\n\r\n/**\r\n * Scientifically tuned low-contrast dark palette based on Solarized Dark.\r\n * Engineered Lab color space contrast for zero eye fatigue.\r\n */\r\nexport const SOLARIZED_DARK_THEME: ThemeTokens = {\r\n ...DEFAULT_THEME,\r\n brand: '#268BD2',\r\n brandShimmer: '#2AA198',\r\n\r\n text: '#839496',\r\n inverseText: '#002B36',\r\n inactive: '#586E75',\r\n subtle: '#657B83',\r\n suggestion: '#586E75',\r\n permission: '#B58900',\r\n remember: '#D33682',\r\n\r\n surface: '#002B36',\r\n surfaceActive: '#073642',\r\n border: '#0E4B5B',\r\n selectionText: '#FDF6E3',\r\n userAccent: '#268BD2',\r\n assistantAccent: '#2AA198',\r\n toolRail: '#586E75',\r\n\r\n success: '#859900',\r\n error: '#DC322F',\r\n warning: '#B58900',\r\n merged: '#2AA198',\r\n\r\n promptBorder: '#268BD2',\r\n planMode: '#D33682',\r\n autoAccept: '#859900',\r\n bashBorder: '#CB4B16',\r\n\r\n modeDefault: '#586E75',\r\n modePlan: '#D33682',\r\n modeAcceptEdits: '#859900',\r\n modeAuto: '#2AA198',\r\n modeDontAsk: '#DC322F',\r\n modeBypass: '#CB4B16',\r\n\r\n diffAdded: '#0A3326',\r\n diffRemoved: '#36191E',\r\n diffAddedWord: '#134F3A',\r\n diffRemovedWord: '#54222A',\r\n diffAddedDimmed: '#08291F',\r\n diffRemovedDimmed: '#2B1418',\r\n\r\n usageMeter: '#2AA198',\r\n usageMeterHigh: '#B58900',\r\n usageMeterCritical: '#DC322F',\r\n\r\n shimmerPair: ['#2AA198', '#859900'],\r\n subagentColors: [\r\n '#DC322F',\r\n '#CB4B16',\r\n '#B58900',\r\n '#859900',\r\n '#2AA198',\r\n '#268BD2',\r\n '#6C71C4',\r\n '#D33682',\r\n ],\r\n\r\n mdCodeBackground: '#00212B',\r\n mdCodeBorder: '#073642',\r\n mdCodeText: '#839496',\r\n mdCodeKeyword: '#859900',\r\n mdCodeString: '#2AA198',\r\n mdCodeComment: '#586E75',\r\n mdCodeNumber: '#D33682',\r\n mdCodeFunction: '#268BD2',\r\n mdCodeLineNumber: '#586E75',\r\n mdInlineCodeBg: '#073642',\r\n mdInlineCodeText: '#2AA198',\r\n mdHeadingH1: '#FDF6E3',\r\n mdHeadingH2: '#EEE8D5',\r\n mdHeading: '#93A1A1',\r\n mdBlockquoteBorder: '#586E75',\r\n mdBlockquoteText: '#657B83',\r\n mdLink: '#6C71C4',\r\n mdListMarker: '#2AA198',\r\n mdHr: '#073642',\r\n mdTableBorder: '#073642',\r\n mdThinkBg: '#00212B',\r\n mdThinkBorder: '#073642',\r\n mdThinkText: '#586E75',\r\n mdTurnSeparator: '#073642',\r\n mdCheckboxChecked: '#859900',\r\n mdCheckboxUnchecked: '#586E75',\r\n\r\n userBg: '#073642',\r\n};\r\n\r\nexport interface ResolvedTheme {\r\n preference: string;\r\n resolvedName: string;\r\n tokens: ThemeTokens;\r\n}\r\n\r\nconst CUSTOM_THEME_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\r\n\r\n/**\r\n * React context for theme tokens.\r\n * Components that render colors read from this instead of hardcoded strings,\r\n * so custom themes can override the palette globally.\r\n */\r\nexport const ThemeContext = createContext<ThemeTokens>(DEFAULT_THEME);\r\n\r\n/**\r\n * Hook to access the current theme tokens.\r\n */\r\nexport function useTheme(): ThemeTokens {\r\n return useContext(ThemeContext);\r\n}\r\n\r\n/** Detect whether COLORFGBG reports a light terminal background. */\r\nexport function hasLightTerminalBackground(colorFgBg = process.env.COLORFGBG ?? ''): boolean {\r\n const background = Number(colorFgBg.split(';').at(-1));\r\n return background === 7 || background === 15;\r\n}\r\n\r\n/** List safe custom theme names from .book/themes. */\r\nexport function listCustomThemes(workspace: string): string[] {\r\n const themesDir = join(workspace, '.book', 'themes');\r\n try {\r\n return readdirSync(themesDir, { withFileTypes: true })\r\n .filter((entry) => entry.isFile() && entry.name.endsWith('.json'))\r\n .map((entry) => entry.name.slice(0, -'.json'.length))\r\n .filter((name) => CUSTOM_THEME_NAME.test(name))\r\n .sort((a, b) => a.localeCompare(b));\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Try to load a custom theme from .book/themes/<name>.json.\r\n * Returns the loaded theme tokens, or null if not found.\r\n */\r\nexport function loadCustomTheme(workspace: string, name: string): ThemeTokens | null {\r\n if (!CUSTOM_THEME_NAME.test(name)) return null;\r\n const themePath = join(workspace, '.book', 'themes', `${name}.json`);\r\n if (!existsSync(themePath)) return null;\r\n try {\r\n const raw = readFileSync(themePath, 'utf-8');\r\n const parsed = JSON.parse(raw) as Partial<ThemeTokens>;\r\n return { ...DEFAULT_THEME, ...parsed };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Resolve a built-in, automatic, or project theme preference into tokens. */\r\nexport function resolveTheme(\r\n workspace: string,\r\n preference: string,\r\n colorFgBg = process.env.COLORFGBG ?? '',\r\n): ResolvedTheme | null {\r\n const requested = preference.trim();\r\n const builtin = requested.toLowerCase();\r\n if (builtin === 'apple' || builtin === 'apple-dark') {\r\n return { preference: 'apple', resolvedName: 'apple', tokens: APPLE_THEME };\r\n }\r\n if (builtin === 'dark') {\r\n return { preference: 'dark', resolvedName: 'dark', tokens: DARK_THEME };\r\n }\r\n if (builtin === 'light') {\r\n return { preference: 'light', resolvedName: 'light', tokens: LIGHT_THEME };\r\n }\r\n if (builtin === 'auto') {\r\n // A dark terminal gets the default palette, not the warm editorial one, so\r\n // `auto` never looks different from a fresh install on the same screen.\r\n const isLight = hasLightTerminalBackground(colorFgBg);\r\n return {\r\n preference: 'auto',\r\n resolvedName: isLight ? 'light' : 'apple',\r\n tokens: isLight ? LIGHT_THEME : APPLE_THEME,\r\n };\r\n }\r\n if (builtin === 'catppuccin' || builtin === 'catppuccin-mocha' || builtin === 'mocha') {\r\n return { preference: 'catppuccin', resolvedName: 'catppuccin', tokens: CATPPUCCIN_THEME };\r\n }\r\n if (builtin === 'nord') {\r\n return { preference: 'nord', resolvedName: 'nord', tokens: NORD_THEME };\r\n }\r\n if (builtin === 'gruvbox' || builtin === 'gruvbox-dark') {\r\n return { preference: 'gruvbox', resolvedName: 'gruvbox', tokens: GRUVBOX_THEME };\r\n }\r\n if (builtin === 'solarized-dark' || builtin === 'solarized') {\r\n return {\r\n preference: 'solarized-dark',\r\n resolvedName: 'solarized-dark',\r\n tokens: SOLARIZED_DARK_THEME,\r\n };\r\n }\r\n if (!requested) return null;\r\n const custom = loadCustomTheme(workspace, requested);\r\n return custom ? { preference: requested, resolvedName: requested, tokens: custom } : null;\r\n}\r\n\r\nexport { DEFAULT_THEME };\r\nexport type { ThemeTokens };\r\n","/**\r\n * Theme token system matching Claude Code's color token architecture.\r\n * All values are Ink-compatible color strings (named colors, hex, rgb, ansi256, ansi:<name>).\r\n */\r\nexport interface ThemeTokens {\r\n /** Identity */\r\n brand: string;\r\n brandShimmer: string;\r\n\r\n /** Text */\r\n text: string;\r\n inverseText: string;\r\n inactive: string;\r\n subtle: string;\r\n suggestion: string;\r\n permission: string;\r\n remember: string;\r\n\r\n /** Shared TUI chrome */\r\n /**\r\n * Panel fill.\r\n *\r\n * Built-in components fill only *verbatim* content — a code block keeps\r\n * `mdCodeBackground`. Secondary content (expanded tool output, reasoning)\r\n * gets a left rail and nothing else, so no built-in currently renders this\r\n * token or `mdThinkBg`. Both stay in the contract for custom themes in\r\n * `.book/themes/*.json`.\r\n */\r\n surface: string;\r\n surfaceActive: string;\r\n border: string;\r\n selectionText: string;\r\n userAccent: string;\r\n assistantAccent: string;\r\n toolRail: string;\r\n\r\n /** Status */\r\n success: string;\r\n error: string;\r\n warning: string;\r\n merged: string;\r\n\r\n /** Mode borders */\r\n promptBorder: string;\r\n planMode: string;\r\n autoAccept: string;\r\n bashBorder: string;\r\n\r\n /** Permission mode colors (one per mode) */\r\n modeDefault: string;\r\n modePlan: string;\r\n modeAcceptEdits: string;\r\n modeAuto: string;\r\n modeDontAsk: string;\r\n modeBypass: string;\r\n\r\n /** Diff rendering */\r\n diffAdded: string;\r\n diffRemoved: string;\r\n diffAddedWord: string;\r\n diffRemovedWord: string;\r\n diffAddedDimmed: string;\r\n diffRemovedDimmed: string;\r\n\r\n /** Usage meter */\r\n usageMeter: string;\r\n usageMeterHigh: string;\r\n usageMeterCritical: string;\r\n\r\n /** Shimmer pairs for animated gradients */\r\n shimmerPair: [string, string];\r\n\r\n /** Subagent colors (8 named colors) */\r\n subagentColors: string[];\r\n\r\n /** Markdown rendering */\r\n mdCodeBackground: string;\r\n mdCodeBorder: string;\r\n mdCodeText: string;\r\n mdCodeKeyword: string;\r\n mdCodeString: string;\r\n mdCodeComment: string;\r\n mdCodeNumber: string;\r\n mdCodeFunction: string;\r\n mdCodeLineNumber: string;\r\n /**\r\n * Retained for custom theme files that still set it; inline code renders\r\n * with `mdInlineCodeText` alone and never paints a background.\r\n */\r\n mdInlineCodeBg: string;\r\n mdInlineCodeText: string;\r\n mdHeading: string;\r\n mdHeadingH1: string;\r\n mdHeadingH2: string;\r\n mdBlockquoteBorder: string;\r\n mdBlockquoteText: string;\r\n mdLink: string;\r\n mdListMarker: string;\r\n mdHr: string;\r\n mdTableBorder: string;\r\n mdThinkBg: string;\r\n mdThinkBorder: string;\r\n mdThinkText: string;\r\n mdTurnSeparator: string;\r\n mdCheckboxChecked: string;\r\n mdCheckboxUnchecked: string;\r\n\r\n /** User message background */\r\n userBg: string;\r\n}\r\n\r\n/**\r\n * Warm editorial dark palette.\r\n *\r\n * Roles are kept visually distinct on purpose: sage belongs to the agent, clay\r\n * to product chrome, teal to references, and the amber/rust/green trio to\r\n * status. A token that reuses another role's hue makes the two indistinguishable\r\n * on screen, which is exactly what this palette exists to prevent.\r\n */\r\nexport const DEFAULT_THEME: ThemeTokens = {\r\n brand: '#D3A17E',\r\n brandShimmer: '#E5BB9B',\r\n\r\n text: '#E7E1D4',\r\n inverseText: '#171815',\r\n inactive: '#6D6961',\r\n subtle: '#938E84',\r\n suggestion: '#7E7A72',\r\n permission: '#D1AA6C',\r\n remember: '#C09CAD',\r\n\r\n surface: '#20221D',\r\n surfaceActive: '#30362B',\r\n border: '#4B4D45',\r\n selectionText: '#F3EEE4',\r\n userAccent: '#D3A17E',\r\n assistantAccent: '#AFC19D',\r\n toolRail: '#5C6156',\r\n\r\n success: '#91B77C',\r\n error: '#D68174',\r\n warning: '#D1AA6C',\r\n merged: '#7FA89C',\r\n\r\n promptBorder: '#8C9A86',\r\n planMode: '#C09CAD',\r\n autoAccept: '#91B77C',\r\n bashBorder: '#D1AA6C',\r\n\r\n // `default` is the quiet mode: desaturated so the sage of an agent turn never\r\n // reads as a permission-mode signal.\r\n modeDefault: '#8C9A86',\r\n modePlan: '#C09CAD',\r\n modeAcceptEdits: '#91B77C',\r\n modeAuto: '#7FA89C',\r\n modeDontAsk: '#D68174',\r\n modeBypass: '#D1AA6C',\r\n\r\n diffAdded: '#243326',\r\n diffRemoved: '#382624',\r\n diffAddedWord: '#36523A',\r\n diffRemovedWord: '#5B3430',\r\n diffAddedDimmed: '#1D2B20',\r\n diffRemovedDimmed: '#302120',\r\n\r\n usageMeter: '#7FA89C',\r\n usageMeterHigh: '#D1AA6C',\r\n usageMeterCritical: '#D68174',\r\n\r\n // The spinner is the agent speaking, so it keeps the sage identity.\r\n shimmerPair: ['#AFC19D', '#C4D3B5'],\r\n\r\n subagentColors: [\r\n '#D68174',\r\n '#7FA89C',\r\n '#91B77C',\r\n '#D1AA6C',\r\n '#C09CAD',\r\n '#D3A17E',\r\n '#B88FA4',\r\n '#AFC19D',\r\n ],\r\n\r\n mdCodeBackground: '#1B1D1A',\r\n mdCodeBorder: '#3A3C36',\r\n mdCodeText: '#E7E1D4',\r\n mdCodeKeyword: '#C09CAD',\r\n mdCodeString: '#91B77C',\r\n mdCodeComment: '#6D6961',\r\n mdCodeNumber: '#D1AA6C',\r\n mdCodeFunction: '#7FA89C',\r\n mdCodeLineNumber: '#5C6156',\r\n mdInlineCodeBg: '#2B2C27',\r\n mdInlineCodeText: '#D3A17E',\r\n // A three-step brightness ramp, all bold. Depth is legible only if these\r\n // differ from each other *and* from `text` — otherwise a heading is\r\n // indistinguishable from a bold run in body copy.\r\n mdHeadingH1: '#F7F3EA',\r\n mdHeadingH2: '#EFEADC',\r\n mdHeading: '#B4AE9F',\r\n mdBlockquoteBorder: '#5C6156',\r\n mdBlockquoteText: '#938E84',\r\n mdLink: '#7FA89C',\r\n mdListMarker: '#8C9A86',\r\n mdHr: '#3A3C36',\r\n mdTableBorder: '#3A3C36',\r\n mdThinkBg: '#1E201C',\r\n mdThinkBorder: '#3A3C36',\r\n mdThinkText: '#7E7A72',\r\n mdTurnSeparator: '#4B4D45',\r\n mdCheckboxChecked: '#91B77C',\r\n mdCheckboxUnchecked: '#6D6961',\r\n\r\n userBg: '#262220',\r\n};\r\n"],"mappings":"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","names":[]}