@bastani/atomic 0.9.29-alpha.2 → 0.9.30-alpha.1

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 (111) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/web-access/package.json +1 -1
  7. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  8. package/dist/builtin/workflows/package.json +1 -1
  9. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  10. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  11. package/dist/core/extensions/loader-virtual-modules.js +6 -0
  12. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  13. package/dist/core/http-dispatcher.d.ts +1 -1
  14. package/dist/core/http-dispatcher.d.ts.map +1 -1
  15. package/dist/core/http-dispatcher.js +2 -1
  16. package/dist/core/http-dispatcher.js.map +1 -1
  17. package/dist/core/key-id-schema.d.ts +6 -0
  18. package/dist/core/key-id-schema.d.ts.map +1 -0
  19. package/dist/core/key-id-schema.js +16 -0
  20. package/dist/core/key-id-schema.js.map +1 -0
  21. package/dist/core/keybindings-schema.d.ts +4 -0
  22. package/dist/core/keybindings-schema.d.ts.map +1 -0
  23. package/dist/core/keybindings-schema.js +20 -0
  24. package/dist/core/keybindings-schema.js.map +1 -0
  25. package/dist/core/keybindings.d.ts +226 -79
  26. package/dist/core/keybindings.d.ts.map +1 -1
  27. package/dist/core/keybindings.js +25 -20
  28. package/dist/core/keybindings.js.map +1 -1
  29. package/dist/core/model-config.d.ts +685 -164
  30. package/dist/core/model-config.d.ts.map +1 -1
  31. package/dist/core/model-config.js +22 -176
  32. package/dist/core/model-config.js.map +1 -1
  33. package/dist/core/project-trust.d.ts.map +1 -1
  34. package/dist/core/project-trust.js +2 -1
  35. package/dist/core/project-trust.js.map +1 -1
  36. package/dist/core/settings-defaults.d.ts +80 -0
  37. package/dist/core/settings-defaults.d.ts.map +1 -0
  38. package/dist/core/settings-defaults.js +81 -0
  39. package/dist/core/settings-defaults.js.map +1 -0
  40. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  41. package/dist/core/settings-manager-basic-accessors.js +34 -29
  42. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  43. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  44. package/dist/core/settings-manager-resource-accessors.js +10 -9
  45. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  46. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  47. package/dist/core/settings-manager-ui-accessors.js +26 -18
  48. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  49. package/dist/core/settings-schema.d.ts +292 -0
  50. package/dist/core/settings-schema.d.ts.map +1 -0
  51. package/dist/core/settings-schema.js +403 -0
  52. package/dist/core/settings-schema.js.map +1 -0
  53. package/dist/core/settings-types.d.ts +2 -181
  54. package/dist/core/settings-types.d.ts.map +1 -1
  55. package/dist/core/settings-types.js.map +1 -1
  56. package/dist/extensions/codemode/index.d.ts.map +1 -1
  57. package/dist/extensions/codemode/index.js +2 -1
  58. package/dist/extensions/codemode/index.js.map +1 -1
  59. package/dist/extensions/codemode/tool.d.ts +1 -1
  60. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  61. package/dist/extensions/codemode/tool.js +2 -1
  62. package/dist/extensions/codemode/tool.js.map +1 -1
  63. package/dist/extensions/herdr/index.d.ts.map +1 -1
  64. package/dist/extensions/herdr/index.js +4 -1
  65. package/dist/extensions/herdr/index.js.map +1 -1
  66. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  67. package/dist/modes/interactive/components/settings-selector-items.js +2 -4
  68. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  69. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  70. package/dist/modes/interactive/components/settings-selector-submenus.js +2 -1
  71. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  72. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -1
  73. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -1
  74. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -1
  75. package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -1
  76. package/dist/modes/interactive/theme/dark.json +1 -1
  77. package/dist/modes/interactive/theme/light.json +1 -1
  78. package/dist/modes/interactive/theme/theme-class.d.ts +3 -12
  79. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  80. package/dist/modes/interactive/theme/theme-class.js +2 -9
  81. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  82. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  83. package/dist/modes/interactive/theme/theme-loading.js +3 -21
  84. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  85. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
  86. package/dist/modes/interactive/theme/theme-parse.js +3 -0
  87. package/dist/modes/interactive/theme/theme-parse.js.map +1 -1
  88. package/dist/modes/interactive/theme/theme-schema.d.ts +5 -224
  89. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  90. package/dist/modes/interactive/theme/theme-schema.js +47 -72
  91. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  92. package/dist/modes/interactive/theme/theme-tokens.d.ts +262 -0
  93. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
  94. package/dist/modes/interactive/theme/theme-tokens.js +126 -0
  95. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
  96. package/docs/compaction/reference.md +1 -1
  97. package/docs/compaction.md +2 -2
  98. package/docs/keybindings.md +2 -0
  99. package/docs/models.md +2 -0
  100. package/docs/providers.md +1 -1
  101. package/docs/settings.md +2 -0
  102. package/docs/themes/reference.md +2 -2
  103. package/docs/themes.md +3 -1
  104. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  105. package/npm-shrinkwrap.json +32 -32
  106. package/package.json +5 -3
  107. package/schemas/keybindings.schema.json +413 -0
  108. package/schemas/models.schema.json +1178 -0
  109. package/schemas/settings.schema.json +940 -0
  110. package/schemas/theme.schema.json +369 -0
  111. package/dist/modes/interactive/theme/theme-schema.json +0 -361
@@ -1 +1 @@
1
- {"version":3,"file":"theme-loading.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-loading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAkB,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,KAAK,EAA4D,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGjF,IAAI,cAAqD,CAAC;AAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;AAOlD,MAAM,UAAU,gBAAgB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC7D,SAAS;YACV,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,cAAc,GAAG,MAAM,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,OAAO,2BAA2B,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,2BAA2B;IAC1C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAE,EAAE;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvD,kBAAkB;IAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACnG,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC3B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,SAAS;QACV,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;YACpE,gCAAgC;QACjC,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,IAAI,IAAI,KAAK,iBAAiB;QAC7B,OAAO;YACN,IAAI;YACJ,MAAM,EAAE,yBAAyB,CAAC;gBACjC,GAAG,iBAAiB,EAAE;gBACtB,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,cAAc,EAAE,gBAAgB,EAAE;aAClC,CAAC,CAAC,MAAM;SACT,CAAC;IACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,eAAe,EAAE,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,0CAA0C,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,SAAoB,EAAE,IAAgB,EAAE,UAAmB,EAAE,GAAkB;IACnG,MAAM,SAAS,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB;QAClD,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC;QAChE,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,QAAQ,GAAwC,EAAyC,CAAC;IAChG,MAAM,QAAQ,GAAqC,EAAsC,CAAC;IAC1F,MAAM,WAAW,GAAgB,IAAI,GAAG,CAAC;QACxC,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,eAAe;QACf,aAAa;KACb,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3D,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAc,CAAC,GAAG,KAAK,CAAC;QAClC,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,GAAiB,CAAC,GAAG,KAAK,CAAC;QACrC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE;QAC/C,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU;QACV,gBAAgB,EAAE,gBAAsF;QACxG,GAAG;KACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAgB;IACpE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,OAAe,EAAE,IAAgB;IACxF,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAgB;IACvD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,yBAAyB,CAAC;YAC3C,GAAG,iBAAiB,EAAE;YACtB,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,cAAc,EAAE,gBAAgB,EAAE;SAClC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,eAAe,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC;IACxB,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC;QACJ,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe;IAClD,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAY;IAC5D,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getCustomThemesDir, getThemesDir } from \"../../../config.js\";\nimport { type ColorMode, detectColorMode, resolveThemeColors } from \"./color-utils.ts\";\nimport { generateSystemThemeColors, SYSTEM_THEME_NAME } from \"./system-theme.js\";\nimport { areTerminalColorsPending, getTerminalColors, getTerminalTheme } from \"./terminal-colors.js\";\nimport { Theme, type ThemeBg, type ThemeColor, type WorkingIndicatorTone } from \"./theme-class.ts\";\nimport { assertThemeNameIsValid, parseThemeJsonContent } from \"./theme-parse.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\n\nlet BUILTIN_THEMES: Record<string, ThemeJson> | undefined;\nconst registeredThemes = new Map<string, Theme>();\n\nexport interface ThemeInfo {\n\tname: string;\n\tpath: string | undefined;\n}\n\nexport function getBuiltinThemes(): Record<string, ThemeJson> {\n\tif (!BUILTIN_THEMES) {\n\t\tconst themesDir = getThemesDir();\n\t\tconst themes: Record<string, ThemeJson> = {};\n\t\tfor (const file of fs.readdirSync(themesDir).sort()) {\n\t\t\tif (!file.endsWith(\".json\") || file === \"theme-schema.json\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst themePath = path.join(themesDir, file);\n\t\t\tconst themeJson = parseThemeJsonContent(themePath, fs.readFileSync(themePath, \"utf-8\"));\n\t\t\tthemes[themeJson.name] = themeJson;\n\t\t}\n\t\tBUILTIN_THEMES = themes;\n\t}\n\treturn BUILTIN_THEMES;\n}\n\nexport function getAvailableThemes(): string[] {\n\treturn getAvailableThemesWithPaths().map(({ name }) => name);\n}\n\nexport function getAvailableThemesWithPaths(): ThemeInfo[] {\n\tconst themesDir = getThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tconst seen = new Set<string>();\n\tconst addTheme = (info: ThemeInfo) => {\n\t\tif (seen.has(info.name)) return;\n\t\tseen.add(info.name);\n\t\tresult.push(info);\n\t};\n\taddTheme({ name: SYSTEM_THEME_NAME, path: undefined });\n\n\t// Built-in themes\n\tfor (const name of Object.keys(getBuiltinThemes())) {\n\t\taddTheme({ name, path: path.join(themesDir, `${name}.json`) });\n\t}\n\n\t// Custom themes\n\tfor (const info of getCustomThemeInfos()) {\n\t\taddTheme(info);\n\t}\n\n\tfor (const [name, theme] of registeredThemes.entries()) {\n\t\taddTheme({ name, path: theme.sourcePath });\n\t}\n\n\treturn result.sort((a, b) =>\n\t\ta.name === SYSTEM_THEME_NAME ? -1 : b.name === SYSTEM_THEME_NAME ? 1 : a.name.localeCompare(b.name),\n\t);\n}\n\nfunction getCustomThemeInfos(): ThemeInfo[] {\n\tconst customThemesDir = getCustomThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tif (!fs.existsSync(customThemesDir)) {\n\t\treturn result;\n\t}\n\n\tfor (const file of fs.readdirSync(customThemesDir)) {\n\t\tif (!file.endsWith(\".json\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst themePath = path.join(customThemesDir, file);\n\t\ttry {\n\t\t\tconst customTheme = loadThemeFromPath(themePath);\n\t\t\tif (customTheme.name) {\n\t\t\t\tresult.push({ name: customTheme.name, path: themePath });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid themes are ignored here; the resource loader reports them\n\t\t\t// during normal startup/reload.\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function loadThemeJson(name: string): ThemeJson {\n\tif (name === SYSTEM_THEME_NAME)\n\t\treturn {\n\t\t\tname,\n\t\t\tcolors: generateSystemThemeColors({\n\t\t\t\t...getTerminalColors(),\n\t\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\t\tappearanceHint: getTerminalTheme(),\n\t\t\t}).colors,\n\t\t};\n\tconst builtinThemes = getBuiltinThemes();\n\tif (name in builtinThemes) {\n\t\treturn builtinThemes[name];\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme?.sourcePath) {\n\t\tconst content = fs.readFileSync(registeredTheme.sourcePath, \"utf-8\");\n\t\treturn parseThemeJsonContent(registeredTheme.sourcePath, content);\n\t}\n\tif (registeredTheme) {\n\t\tthrow new Error(`Theme \"${name}\" does not have a source path for export`);\n\t}\n\tconst customThemesDir = getCustomThemesDir();\n\tconst themePath = path.join(customThemesDir, `${name}.json`);\n\tif (!fs.existsSync(themePath)) {\n\t\tthrow new Error(`Theme not found: ${name}`);\n\t}\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn parseThemeJsonContent(name, content);\n}\n\nfunction createTheme(themeJson: ThemeJson, mode?: ColorMode, sourcePath?: string, dim?: ThemeColor[]): Theme {\n\tconst colorMode = mode ?? detectColorMode();\n\tconst resolvedColors = resolveThemeColors(themeJson.colors, themeJson.vars);\n\tconst workingIndicator = themeJson.workingIndicator\n\t\t? resolveThemeColors(themeJson.workingIndicator, themeJson.vars)\n\t\t: undefined;\n\tconst fgColors: Record<ThemeColor, string | number> = {} as Record<ThemeColor, string | number>;\n\tconst bgColors: Record<ThemeBg, string | number> = {} as Record<ThemeBg, string | number>;\n\tconst bgColorKeys: Set<string> = new Set([\n\t\t\"selectedBg\",\n\t\t\"scrollbarThumb\",\n\t\t\"searchMatchBg\",\n\t\t\"userMessageBg\",\n\t\t\"customMessageBg\",\n\t\t\"toolPendingBg\",\n\t\t\"toolSuccessBg\",\n\t\t\"toolErrorBg\",\n\t]);\n\tfor (const [key, value] of Object.entries(resolvedColors)) {\n\t\tif (bgColorKeys.has(key)) {\n\t\t\tbgColors[key as ThemeBg] = value;\n\t\t} else {\n\t\t\tfgColors[key as ThemeColor] = value;\n\t\t}\n\t}\n\treturn new Theme(fgColors, bgColors, colorMode, {\n\t\tname: themeJson.name,\n\t\tsourcePath,\n\t\tworkingIndicator: workingIndicator as Partial<Record<WorkingIndicatorTone, string | number>> | undefined,\n\t\tdim,\n\t});\n}\n\nexport function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme {\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn loadThemeFromContent(themePath, content, mode);\n}\n\nexport function loadThemeFromContent(themePath: string, content: string, mode?: ColorMode): Theme {\n\tconst themeJson = parseThemeJsonContent(themePath, content);\n\treturn createTheme(themeJson, mode, themePath);\n}\n\nexport function loadTheme(name: string, mode?: ColorMode): Theme {\n\tif (name === SYSTEM_THEME_NAME) {\n\t\tconst generated = generateSystemThemeColors({\n\t\t\t...getTerminalColors(),\n\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\tappearanceHint: getTerminalTheme(),\n\t\t});\n\t\treturn createTheme({ name, colors: generated.colors }, mode, undefined, generated.dim);\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme) {\n\t\treturn registeredTheme;\n\t}\n\tconst themeJson = loadThemeJson(name);\n\treturn createTheme(themeJson, mode);\n}\n\nexport function getThemeByName(name: string): Theme | undefined {\n\ttry {\n\t\treturn loadTheme(name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function setRegisteredThemes(themes: Theme[]): void {\n\tregisteredThemes.clear();\n\tfor (const theme of themes) {\n\t\tif (theme.name) {\n\t\t\tassertThemeNameIsValid(theme.name);\n\t\t\tregisteredThemes.set(theme.name, theme);\n\t\t}\n\t}\n}\n\nexport function setRegisteredTheme(name: string, theme: Theme): void {\n\tregisteredThemes.set(name, theme);\n}\n"]}
1
+ {"version":3,"file":"theme-loading.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-loading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAkB,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,KAAK,EAA8C,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,IAAI,cAAqD,CAAC;AAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;AAOlD,MAAM,UAAU,gBAAgB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,SAAS;YACV,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,cAAc,GAAG,MAAM,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,OAAO,2BAA2B,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,2BAA2B;IAC1C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAE,EAAE;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvD,kBAAkB;IAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACnG,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC3B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,SAAS;QACV,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oEAAoE;YACpE,gCAAgC;QACjC,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,IAAI,IAAI,KAAK,iBAAiB;QAC7B,OAAO;YACN,IAAI;YACJ,MAAM,EAAE,yBAAyB,CAAC;gBACjC,GAAG,iBAAiB,EAAE;gBACtB,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,cAAc,EAAE,gBAAgB,EAAE;aAClC,CAAC,CAAC,MAAM;SACT,CAAC;IACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,eAAe,EAAE,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,0CAA0C,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,SAAoB,EAAE,IAAgB,EAAE,UAAmB,EAAE,GAAkB;IACnG,MAAM,SAAS,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB;QAClD,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC;QAChE,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC;IACzF,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE;QAC/C,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU;QACV,gBAAgB,EAAE,gBAAsF;QACxG,GAAG;KACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAgB;IACpE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,OAAe,EAAE,IAAgB;IACxF,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAgB;IACvD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,yBAAyB,CAAC;YAC3C,GAAG,iBAAiB,EAAE;YACtB,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,cAAc,EAAE,gBAAgB,EAAE;SAClC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,eAAe,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC;IACxB,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC;QACJ,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe;IAClD,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAY;IAC5D,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getCustomThemesDir, getThemesDir } from \"../../../config.js\";\nimport { type ColorMode, detectColorMode, resolveThemeColors } from \"./color-utils.ts\";\nimport { generateSystemThemeColors, SYSTEM_THEME_NAME } from \"./system-theme.js\";\nimport { areTerminalColorsPending, getTerminalColors, getTerminalTheme } from \"./terminal-colors.js\";\nimport { Theme, type ThemeColor, type WorkingIndicatorTone } from \"./theme-class.ts\";\nimport { assertThemeNameIsValid, parseThemeJsonContent } from \"./theme-parse.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { splitThemeColors, withThemeTokenFallbacks } from \"./theme-tokens.ts\";\n\nlet BUILTIN_THEMES: Record<string, ThemeJson> | undefined;\nconst registeredThemes = new Map<string, Theme>();\n\nexport interface ThemeInfo {\n\tname: string;\n\tpath: string | undefined;\n}\n\nexport function getBuiltinThemes(): Record<string, ThemeJson> {\n\tif (!BUILTIN_THEMES) {\n\t\tconst themesDir = getThemesDir();\n\t\tconst themes: Record<string, ThemeJson> = {};\n\t\tfor (const file of fs.readdirSync(themesDir).sort()) {\n\t\t\tif (!file.endsWith(\".json\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst themePath = path.join(themesDir, file);\n\t\t\tconst themeJson = parseThemeJsonContent(themePath, fs.readFileSync(themePath, \"utf-8\"));\n\t\t\tthemes[themeJson.name] = themeJson;\n\t\t}\n\t\tBUILTIN_THEMES = themes;\n\t}\n\treturn BUILTIN_THEMES;\n}\n\nexport function getAvailableThemes(): string[] {\n\treturn getAvailableThemesWithPaths().map(({ name }) => name);\n}\n\nexport function getAvailableThemesWithPaths(): ThemeInfo[] {\n\tconst themesDir = getThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tconst seen = new Set<string>();\n\tconst addTheme = (info: ThemeInfo) => {\n\t\tif (seen.has(info.name)) return;\n\t\tseen.add(info.name);\n\t\tresult.push(info);\n\t};\n\taddTheme({ name: SYSTEM_THEME_NAME, path: undefined });\n\n\t// Built-in themes\n\tfor (const name of Object.keys(getBuiltinThemes())) {\n\t\taddTheme({ name, path: path.join(themesDir, `${name}.json`) });\n\t}\n\n\t// Custom themes\n\tfor (const info of getCustomThemeInfos()) {\n\t\taddTheme(info);\n\t}\n\n\tfor (const [name, theme] of registeredThemes.entries()) {\n\t\taddTheme({ name, path: theme.sourcePath });\n\t}\n\n\treturn result.sort((a, b) =>\n\t\ta.name === SYSTEM_THEME_NAME ? -1 : b.name === SYSTEM_THEME_NAME ? 1 : a.name.localeCompare(b.name),\n\t);\n}\n\nfunction getCustomThemeInfos(): ThemeInfo[] {\n\tconst customThemesDir = getCustomThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tif (!fs.existsSync(customThemesDir)) {\n\t\treturn result;\n\t}\n\n\tfor (const file of fs.readdirSync(customThemesDir)) {\n\t\tif (!file.endsWith(\".json\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst themePath = path.join(customThemesDir, file);\n\t\ttry {\n\t\t\tconst customTheme = loadThemeFromPath(themePath);\n\t\t\tif (customTheme.name) {\n\t\t\t\tresult.push({ name: customTheme.name, path: themePath });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid themes are ignored here; the resource loader reports them\n\t\t\t// during normal startup/reload.\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function loadThemeJson(name: string): ThemeJson {\n\tif (name === SYSTEM_THEME_NAME)\n\t\treturn {\n\t\t\tname,\n\t\t\tcolors: generateSystemThemeColors({\n\t\t\t\t...getTerminalColors(),\n\t\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\t\tappearanceHint: getTerminalTheme(),\n\t\t\t}).colors,\n\t\t};\n\tconst builtinThemes = getBuiltinThemes();\n\tif (name in builtinThemes) {\n\t\treturn builtinThemes[name];\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme?.sourcePath) {\n\t\tconst content = fs.readFileSync(registeredTheme.sourcePath, \"utf-8\");\n\t\treturn parseThemeJsonContent(registeredTheme.sourcePath, content);\n\t}\n\tif (registeredTheme) {\n\t\tthrow new Error(`Theme \"${name}\" does not have a source path for export`);\n\t}\n\tconst customThemesDir = getCustomThemesDir();\n\tconst themePath = path.join(customThemesDir, `${name}.json`);\n\tif (!fs.existsSync(themePath)) {\n\t\tthrow new Error(`Theme not found: ${name}`);\n\t}\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn parseThemeJsonContent(name, content);\n}\n\nfunction createTheme(themeJson: ThemeJson, mode?: ColorMode, sourcePath?: string, dim?: ThemeColor[]): Theme {\n\tconst colorMode = mode ?? detectColorMode();\n\tconst resolvedColors = resolveThemeColors(themeJson.colors, themeJson.vars);\n\tconst workingIndicator = themeJson.workingIndicator\n\t\t? resolveThemeColors(themeJson.workingIndicator, themeJson.vars)\n\t\t: undefined;\n\tconst { fgColors, bgColors } = splitThemeColors(withThemeTokenFallbacks(resolvedColors));\n\treturn new Theme(fgColors, bgColors, colorMode, {\n\t\tname: themeJson.name,\n\t\tsourcePath,\n\t\tworkingIndicator: workingIndicator as Partial<Record<WorkingIndicatorTone, string | number>> | undefined,\n\t\tdim,\n\t});\n}\n\nexport function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme {\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn loadThemeFromContent(themePath, content, mode);\n}\n\nexport function loadThemeFromContent(themePath: string, content: string, mode?: ColorMode): Theme {\n\tconst themeJson = parseThemeJsonContent(themePath, content);\n\treturn createTheme(themeJson, mode, themePath);\n}\n\nexport function loadTheme(name: string, mode?: ColorMode): Theme {\n\tif (name === SYSTEM_THEME_NAME) {\n\t\tconst generated = generateSystemThemeColors({\n\t\t\t...getTerminalColors(),\n\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\tappearanceHint: getTerminalTheme(),\n\t\t});\n\t\treturn createTheme({ name, colors: generated.colors }, mode, undefined, generated.dim);\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme) {\n\t\treturn registeredTheme;\n\t}\n\tconst themeJson = loadThemeJson(name);\n\treturn createTheme(themeJson, mode);\n}\n\nexport function getThemeByName(name: string): Theme | undefined {\n\ttry {\n\t\treturn loadTheme(name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function setRegisteredThemes(themes: Theme[]): void {\n\tregisteredThemes.clear();\n\tfor (const theme of themes) {\n\t\tif (theme.name) {\n\t\t\tassertThemeNameIsValid(theme.name);\n\t\t\tregisteredThemes.set(theme.name, theme);\n\t\t}\n\t}\n}\n\nexport function setRegisteredTheme(name: string, theme: Theme): void {\n\tregisteredThemes.set(name, theme);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-parse.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAuCtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAQ/E"}
1
+ {"version":3,"file":"theme-parse.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CA0CtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAQ/E"}
@@ -6,6 +6,9 @@ export function assertThemeNameIsValid(name) {
6
6
  }
7
7
  }
8
8
  export function parseThemeJson(label, json) {
9
+ if (typeof json === "object" && json !== null && "name" in json && typeof json.name === "string") {
10
+ assertThemeNameIsValid(json.name);
11
+ }
9
12
  if (!validateThemeJson.Check(json)) {
10
13
  const errors = Array.from(validateThemeJson.Errors(json));
11
14
  const missingColors = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"theme-parse.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,UAAU,sBAAsB,CAAC,IAAY;IAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,uBAAuB,IAAI,mGAAmG,CAC9H,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAa;IAC1D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtE,MAAM,kBAAkB,GAAI,KAAK,CAAC,MAA4C,CAAC,kBAAkB,CAAC;gBAClG,KAAK,MAAM,gBAAgB,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;oBACzD,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACrC,CAAC;gBACD,SAAS;YACV,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,YAAY,GAAG,kBAAkB,KAAK,MAAM,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,oCAAoC,CAAC;YACrD,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;iBACvC,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;iBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,+DAA+D,CAAC;YAChF,YAAY,IAAI,yEAAyE,CAAC;QAC3F,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,sBAAsB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,IAAiB,CAAC;IACpC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,OAAe;IACnE,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { stripBom } from \"../../../utils/text.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { validateThemeJson } from \"./theme-schema.ts\";\n\nexport function assertThemeNameIsValid(name: string): void {\n\tif (name.includes(\"/\")) {\n\t\tthrow new Error(\n\t\t\t`Invalid theme name \"${name}\": theme names cannot contain \"/\" because it is reserved for automatic light/dark theme settings.`,\n\t\t);\n\t}\n}\n\nexport function parseThemeJson(label: string, json: unknown): ThemeJson {\n\tif (!validateThemeJson.Check(json)) {\n\t\tconst errors = Array.from(validateThemeJson.Errors(json));\n\t\tconst missingColors = new Set<string>();\n\t\tconst otherErrors: string[] = [];\n\n\t\tfor (const error of errors) {\n\t\t\tif (error.keyword === \"required\" && error.instancePath === \"/colors\") {\n\t\t\t\tconst requiredProperties = (error.params as { requiredProperties?: string[] }).requiredProperties;\n\t\t\t\tfor (const requiredProperty of requiredProperties ?? []) {\n\t\t\t\t\tmissingColors.add(requiredProperty);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst path = error.instancePath || \"/\";\n\t\t\totherErrors.push(` - ${path}: ${error.message}`);\n\t\t}\n\n\t\tlet errorMessage = `Invalid theme \"${label}\":\\n`;\n\t\tif (missingColors.size > 0) {\n\t\t\terrorMessage += \"\\nMissing required color tokens:\\n\";\n\t\t\terrorMessage += Array.from(missingColors)\n\t\t\t\t.sort()\n\t\t\t\t.map((color) => ` - ${color}`)\n\t\t\t\t.join(\"\\n\");\n\t\t\terrorMessage += '\\n\\nPlease add these colors to your theme\\'s \"colors\" object.';\n\t\t\terrorMessage += \"\\nSee the built-in themes (dark.json, light.json) for reference values.\";\n\t\t}\n\t\tif (otherErrors.length > 0) {\n\t\t\terrorMessage += `\\n\\nOther errors:\\n${otherErrors.join(\"\\n\")}`;\n\t\t}\n\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst themeJson = json as ThemeJson;\n\tassertThemeNameIsValid(themeJson.name);\n\treturn themeJson;\n}\n\nexport function parseThemeJsonContent(label: string, content: string): ThemeJson {\n\tlet json: unknown;\n\ttry {\n\t\tjson = JSON.parse(stripBom(content));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse theme ${label}: ${error}`);\n\t}\n\treturn parseThemeJson(label, json);\n}\n"]}
1
+ {"version":3,"file":"theme-parse.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { stripBom } from \"../../../utils/text.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { validateThemeJson } from \"./theme-schema.ts\";\n\nexport function assertThemeNameIsValid(name: string): void {\n\tif (name.includes(\"/\")) {\n\t\tthrow new Error(\n\t\t\t`Invalid theme name \"${name}\": theme names cannot contain \"/\" because it is reserved for automatic light/dark theme settings.`,\n\t\t);\n\t}\n}\n\nexport function parseThemeJson(label: string, json: unknown): ThemeJson {\n\tif (typeof json === \"object\" && json !== null && \"name\" in json && typeof json.name === \"string\") {\n\t\tassertThemeNameIsValid(json.name);\n\t}\n\tif (!validateThemeJson.Check(json)) {\n\t\tconst errors = Array.from(validateThemeJson.Errors(json));\n\t\tconst missingColors = new Set<string>();\n\t\tconst otherErrors: string[] = [];\n\n\t\tfor (const error of errors) {\n\t\t\tif (error.keyword === \"required\" && error.instancePath === \"/colors\") {\n\t\t\t\tconst requiredProperties = (error.params as { requiredProperties?: string[] }).requiredProperties;\n\t\t\t\tfor (const requiredProperty of requiredProperties ?? []) {\n\t\t\t\t\tmissingColors.add(requiredProperty);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst path = error.instancePath || \"/\";\n\t\t\totherErrors.push(` - ${path}: ${error.message}`);\n\t\t}\n\n\t\tlet errorMessage = `Invalid theme \"${label}\":\\n`;\n\t\tif (missingColors.size > 0) {\n\t\t\terrorMessage += \"\\nMissing required color tokens:\\n\";\n\t\t\terrorMessage += Array.from(missingColors)\n\t\t\t\t.sort()\n\t\t\t\t.map((color) => ` - ${color}`)\n\t\t\t\t.join(\"\\n\");\n\t\t\terrorMessage += '\\n\\nPlease add these colors to your theme\\'s \"colors\" object.';\n\t\t\terrorMessage += \"\\nSee the built-in themes (dark.json, light.json) for reference values.\";\n\t\t}\n\t\tif (otherErrors.length > 0) {\n\t\t\terrorMessage += `\\n\\nOther errors:\\n${otherErrors.join(\"\\n\")}`;\n\t\t}\n\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst themeJson = json as ThemeJson;\n\tassertThemeNameIsValid(themeJson.name);\n\treturn themeJson;\n}\n\nexport function parseThemeJsonContent(label: string, content: string): ThemeJson {\n\tlet json: unknown;\n\ttry {\n\t\tjson = JSON.parse(stripBom(content));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse theme ${label}: ${error}`);\n\t}\n\treturn parseThemeJson(label, json);\n}\n"]}
@@ -1,66 +1,12 @@
1
1
  import { type Static, Type } from "typebox";
2
+ import { type ThemeColorValues } from "./theme-tokens.ts";
2
3
  export declare const ColorValueSchema: Type.TUnion<[Type.TString, Type.TInteger]>;
3
4
  export type ColorValue = Static<typeof ColorValueSchema>;
4
5
  export declare const ThemeJsonSchema: Type.TObject<{
5
6
  $schema: Type.TOptional<Type.TString>;
6
7
  name: Type.TString;
7
8
  vars: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TInteger]>>>;
8
- colors: Type.TObject<{
9
- accent: Type.TUnion<[Type.TString, Type.TInteger]>;
10
- border: Type.TUnion<[Type.TString, Type.TInteger]>;
11
- borderAccent: Type.TUnion<[Type.TString, Type.TInteger]>;
12
- borderMuted: Type.TUnion<[Type.TString, Type.TInteger]>;
13
- success: Type.TUnion<[Type.TString, Type.TInteger]>;
14
- error: Type.TUnion<[Type.TString, Type.TInteger]>;
15
- warning: Type.TUnion<[Type.TString, Type.TInteger]>;
16
- muted: Type.TUnion<[Type.TString, Type.TInteger]>;
17
- dim: Type.TUnion<[Type.TString, Type.TInteger]>;
18
- text: Type.TUnion<[Type.TString, Type.TInteger]>;
19
- thinkingText: Type.TUnion<[Type.TString, Type.TInteger]>;
20
- selectedBg: Type.TUnion<[Type.TString, Type.TInteger]>;
21
- scrollbarThumb: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
22
- searchMatchBg: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
23
- searchMatchText: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
24
- userMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
25
- userMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
26
- customMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
27
- customMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
28
- customMessageLabel: Type.TUnion<[Type.TString, Type.TInteger]>;
29
- toolPendingBg: Type.TUnion<[Type.TString, Type.TInteger]>;
30
- toolSuccessBg: Type.TUnion<[Type.TString, Type.TInteger]>;
31
- toolErrorBg: Type.TUnion<[Type.TString, Type.TInteger]>;
32
- toolTitle: Type.TUnion<[Type.TString, Type.TInteger]>;
33
- toolOutput: Type.TUnion<[Type.TString, Type.TInteger]>;
34
- mdHeading: Type.TUnion<[Type.TString, Type.TInteger]>;
35
- mdLink: Type.TUnion<[Type.TString, Type.TInteger]>;
36
- mdLinkUrl: Type.TUnion<[Type.TString, Type.TInteger]>;
37
- mdCode: Type.TUnion<[Type.TString, Type.TInteger]>;
38
- mdCodeBlock: Type.TUnion<[Type.TString, Type.TInteger]>;
39
- mdCodeBlockBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
40
- mdQuote: Type.TUnion<[Type.TString, Type.TInteger]>;
41
- mdQuoteBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
42
- mdHr: Type.TUnion<[Type.TString, Type.TInteger]>;
43
- mdListBullet: Type.TUnion<[Type.TString, Type.TInteger]>;
44
- toolDiffAdded: Type.TUnion<[Type.TString, Type.TInteger]>;
45
- toolDiffRemoved: Type.TUnion<[Type.TString, Type.TInteger]>;
46
- toolDiffContext: Type.TUnion<[Type.TString, Type.TInteger]>;
47
- syntaxComment: Type.TUnion<[Type.TString, Type.TInteger]>;
48
- syntaxKeyword: Type.TUnion<[Type.TString, Type.TInteger]>;
49
- syntaxFunction: Type.TUnion<[Type.TString, Type.TInteger]>;
50
- syntaxVariable: Type.TUnion<[Type.TString, Type.TInteger]>;
51
- syntaxString: Type.TUnion<[Type.TString, Type.TInteger]>;
52
- syntaxNumber: Type.TUnion<[Type.TString, Type.TInteger]>;
53
- syntaxType: Type.TUnion<[Type.TString, Type.TInteger]>;
54
- syntaxOperator: Type.TUnion<[Type.TString, Type.TInteger]>;
55
- syntaxPunctuation: Type.TUnion<[Type.TString, Type.TInteger]>;
56
- thinkingOff: Type.TUnion<[Type.TString, Type.TInteger]>;
57
- thinkingMinimal: Type.TUnion<[Type.TString, Type.TInteger]>;
58
- thinkingLow: Type.TUnion<[Type.TString, Type.TInteger]>;
59
- thinkingMedium: Type.TUnion<[Type.TString, Type.TInteger]>;
60
- thinkingHigh: Type.TUnion<[Type.TString, Type.TInteger]>;
61
- thinkingXhigh: Type.TUnion<[Type.TString, Type.TInteger]>;
62
- bashMode: Type.TUnion<[Type.TString, Type.TInteger]>;
63
- }>;
9
+ colors: Type.TUnsafe<ThemeColorValues<string | number>>;
64
10
  workingIndicator: Type.TOptional<Type.TObject<{
65
11
  dark: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
66
12
  lift: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
@@ -80,62 +26,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
80
26
  $schema: Type.TOptional<Type.TString>;
81
27
  name: Type.TString;
82
28
  vars: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TInteger]>>>;
83
- colors: Type.TObject<{
84
- accent: Type.TUnion<[Type.TString, Type.TInteger]>;
85
- border: Type.TUnion<[Type.TString, Type.TInteger]>;
86
- borderAccent: Type.TUnion<[Type.TString, Type.TInteger]>;
87
- borderMuted: Type.TUnion<[Type.TString, Type.TInteger]>;
88
- success: Type.TUnion<[Type.TString, Type.TInteger]>;
89
- error: Type.TUnion<[Type.TString, Type.TInteger]>;
90
- warning: Type.TUnion<[Type.TString, Type.TInteger]>;
91
- muted: Type.TUnion<[Type.TString, Type.TInteger]>;
92
- dim: Type.TUnion<[Type.TString, Type.TInteger]>;
93
- text: Type.TUnion<[Type.TString, Type.TInteger]>;
94
- thinkingText: Type.TUnion<[Type.TString, Type.TInteger]>;
95
- selectedBg: Type.TUnion<[Type.TString, Type.TInteger]>;
96
- scrollbarThumb: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
97
- searchMatchBg: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
98
- searchMatchText: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
99
- userMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
100
- userMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
101
- customMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
102
- customMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
103
- customMessageLabel: Type.TUnion<[Type.TString, Type.TInteger]>;
104
- toolPendingBg: Type.TUnion<[Type.TString, Type.TInteger]>;
105
- toolSuccessBg: Type.TUnion<[Type.TString, Type.TInteger]>;
106
- toolErrorBg: Type.TUnion<[Type.TString, Type.TInteger]>;
107
- toolTitle: Type.TUnion<[Type.TString, Type.TInteger]>;
108
- toolOutput: Type.TUnion<[Type.TString, Type.TInteger]>;
109
- mdHeading: Type.TUnion<[Type.TString, Type.TInteger]>;
110
- mdLink: Type.TUnion<[Type.TString, Type.TInteger]>;
111
- mdLinkUrl: Type.TUnion<[Type.TString, Type.TInteger]>;
112
- mdCode: Type.TUnion<[Type.TString, Type.TInteger]>;
113
- mdCodeBlock: Type.TUnion<[Type.TString, Type.TInteger]>;
114
- mdCodeBlockBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
115
- mdQuote: Type.TUnion<[Type.TString, Type.TInteger]>;
116
- mdQuoteBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
117
- mdHr: Type.TUnion<[Type.TString, Type.TInteger]>;
118
- mdListBullet: Type.TUnion<[Type.TString, Type.TInteger]>;
119
- toolDiffAdded: Type.TUnion<[Type.TString, Type.TInteger]>;
120
- toolDiffRemoved: Type.TUnion<[Type.TString, Type.TInteger]>;
121
- toolDiffContext: Type.TUnion<[Type.TString, Type.TInteger]>;
122
- syntaxComment: Type.TUnion<[Type.TString, Type.TInteger]>;
123
- syntaxKeyword: Type.TUnion<[Type.TString, Type.TInteger]>;
124
- syntaxFunction: Type.TUnion<[Type.TString, Type.TInteger]>;
125
- syntaxVariable: Type.TUnion<[Type.TString, Type.TInteger]>;
126
- syntaxString: Type.TUnion<[Type.TString, Type.TInteger]>;
127
- syntaxNumber: Type.TUnion<[Type.TString, Type.TInteger]>;
128
- syntaxType: Type.TUnion<[Type.TString, Type.TInteger]>;
129
- syntaxOperator: Type.TUnion<[Type.TString, Type.TInteger]>;
130
- syntaxPunctuation: Type.TUnion<[Type.TString, Type.TInteger]>;
131
- thinkingOff: Type.TUnion<[Type.TString, Type.TInteger]>;
132
- thinkingMinimal: Type.TUnion<[Type.TString, Type.TInteger]>;
133
- thinkingLow: Type.TUnion<[Type.TString, Type.TInteger]>;
134
- thinkingMedium: Type.TUnion<[Type.TString, Type.TInteger]>;
135
- thinkingHigh: Type.TUnion<[Type.TString, Type.TInteger]>;
136
- thinkingXhigh: Type.TUnion<[Type.TString, Type.TInteger]>;
137
- bashMode: Type.TUnion<[Type.TString, Type.TInteger]>;
138
- }>;
29
+ colors: Type.TUnsafe<ThemeColorValues<string | number>>;
139
30
  workingIndicator: Type.TOptional<Type.TObject<{
140
31
  dark: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
141
32
  lift: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
@@ -153,62 +44,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
153
44
  $schema?: string | undefined;
154
45
  name: string;
155
46
  vars?: Record<string, string | number> | undefined;
156
- colors: {
157
- accent: string | number;
158
- border: string | number;
159
- borderAccent: string | number;
160
- borderMuted: string | number;
161
- success: string | number;
162
- error: string | number;
163
- warning: string | number;
164
- muted: string | number;
165
- dim: string | number;
166
- text: string | number;
167
- thinkingText: string | number;
168
- selectedBg: string | number;
169
- scrollbarThumb?: string | number | undefined;
170
- searchMatchBg?: string | number | undefined;
171
- searchMatchText?: string | number | undefined;
172
- userMessageBg: string | number;
173
- userMessageText: string | number;
174
- customMessageBg: string | number;
175
- customMessageText: string | number;
176
- customMessageLabel: string | number;
177
- toolPendingBg: string | number;
178
- toolSuccessBg: string | number;
179
- toolErrorBg: string | number;
180
- toolTitle: string | number;
181
- toolOutput: string | number;
182
- mdHeading: string | number;
183
- mdLink: string | number;
184
- mdLinkUrl: string | number;
185
- mdCode: string | number;
186
- mdCodeBlock: string | number;
187
- mdCodeBlockBorder: string | number;
188
- mdQuote: string | number;
189
- mdQuoteBorder: string | number;
190
- mdHr: string | number;
191
- mdListBullet: string | number;
192
- toolDiffAdded: string | number;
193
- toolDiffRemoved: string | number;
194
- toolDiffContext: string | number;
195
- syntaxComment: string | number;
196
- syntaxKeyword: string | number;
197
- syntaxFunction: string | number;
198
- syntaxVariable: string | number;
199
- syntaxString: string | number;
200
- syntaxNumber: string | number;
201
- syntaxType: string | number;
202
- syntaxOperator: string | number;
203
- syntaxPunctuation: string | number;
204
- thinkingOff: string | number;
205
- thinkingMinimal: string | number;
206
- thinkingLow: string | number;
207
- thinkingMedium: string | number;
208
- thinkingHigh: string | number;
209
- thinkingXhigh: string | number;
210
- bashMode: string | number;
211
- };
47
+ colors: ThemeColorValues<string | number>;
212
48
  workingIndicator?: {
213
49
  dark?: string | number | undefined;
214
50
  lift?: string | number | undefined;
@@ -226,62 +62,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
226
62
  $schema?: string | undefined;
227
63
  name: string;
228
64
  vars?: Record<string, string | number> | undefined;
229
- colors: {
230
- accent: string | number;
231
- border: string | number;
232
- borderAccent: string | number;
233
- borderMuted: string | number;
234
- success: string | number;
235
- error: string | number;
236
- warning: string | number;
237
- muted: string | number;
238
- dim: string | number;
239
- text: string | number;
240
- thinkingText: string | number;
241
- selectedBg: string | number;
242
- scrollbarThumb?: string | number | undefined;
243
- searchMatchBg?: string | number | undefined;
244
- searchMatchText?: string | number | undefined;
245
- userMessageBg: string | number;
246
- userMessageText: string | number;
247
- customMessageBg: string | number;
248
- customMessageText: string | number;
249
- customMessageLabel: string | number;
250
- toolPendingBg: string | number;
251
- toolSuccessBg: string | number;
252
- toolErrorBg: string | number;
253
- toolTitle: string | number;
254
- toolOutput: string | number;
255
- mdHeading: string | number;
256
- mdLink: string | number;
257
- mdLinkUrl: string | number;
258
- mdCode: string | number;
259
- mdCodeBlock: string | number;
260
- mdCodeBlockBorder: string | number;
261
- mdQuote: string | number;
262
- mdQuoteBorder: string | number;
263
- mdHr: string | number;
264
- mdListBullet: string | number;
265
- toolDiffAdded: string | number;
266
- toolDiffRemoved: string | number;
267
- toolDiffContext: string | number;
268
- syntaxComment: string | number;
269
- syntaxKeyword: string | number;
270
- syntaxFunction: string | number;
271
- syntaxVariable: string | number;
272
- syntaxString: string | number;
273
- syntaxNumber: string | number;
274
- syntaxType: string | number;
275
- syntaxOperator: string | number;
276
- syntaxPunctuation: string | number;
277
- thinkingOff: string | number;
278
- thinkingMinimal: string | number;
279
- thinkingLow: string | number;
280
- thinkingMedium: string | number;
281
- thinkingHigh: string | number;
282
- thinkingXhigh: string | number;
283
- bashMode: string | number;
284
- };
65
+ colors: ThemeColorValues<string | number>;
285
66
  workingIndicator?: {
286
67
  dark?: string | number | undefined;
287
68
  lift?: string | number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"theme-schema.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG5C,eAAO,MAAM,gBAAgB,4CAG3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoF1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAEvD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAC"}
1
+ {"version":3,"file":"theme-schema.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAoB,IAAI,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAgB,KAAK,gBAAgB,EAA8B,MAAM,mBAAmB,CAAC;AAmBpG,eAAO,MAAM,gBAAgB,4CAAe,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAmBzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAiD3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAEvD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAC"}
@@ -1,76 +1,41 @@
1
1
  import { Type } from "typebox";
2
2
  import { Compile } from "typebox/compile";
3
- export const ColorValueSchema = Type.Union([
4
- Type.String(), // hex "#ff0000", okhsl(H S L), var ref "primary", or empty ""
5
- Type.Integer({ minimum: 0, maximum: 255 }), // 256-color index
6
- ]);
3
+ import { THEME_TOKENS } from "./theme-tokens.js";
4
+ function colorValue(description) {
5
+ return Type.Union([
6
+ Type.String({
7
+ description: "Hex color (#RRGGBB), OKHSL color (okhsl(H S L)), variable reference, or empty string for terminal default",
8
+ }),
9
+ Type.Integer({
10
+ minimum: 0,
11
+ maximum: 255,
12
+ description: "256-color palette index (0-255)",
13
+ }),
14
+ ], description ? { description } : {});
15
+ }
16
+ export const ColorValueSchema = colorValue();
17
+ function themeTokenProperties(tokens) {
18
+ const properties = {};
19
+ for (const [name, descriptor] of Object.entries(tokens)) {
20
+ const schema = colorValue(descriptor.description);
21
+ properties[name] = descriptor.fallback === undefined ? schema : Type.Optional(schema);
22
+ }
23
+ return properties;
24
+ }
25
+ const ThemeColorsSchema = Type.Unsafe(Type.Object(themeTokenProperties(THEME_TOKENS), {
26
+ description: "Theme color definitions (scrollbarThumb and the search highlight colors are optional and fall back to compatible colors)",
27
+ additionalProperties: false,
28
+ }));
7
29
  export const ThemeJsonSchema = Type.Object({
8
- $schema: Type.Optional(Type.String()),
9
- name: Type.String(),
10
- vars: Type.Optional(Type.Record(Type.String(), ColorValueSchema)),
11
- colors: Type.Object({
12
- // Core UI (10 colors)
13
- accent: ColorValueSchema,
14
- border: ColorValueSchema,
15
- borderAccent: ColorValueSchema,
16
- borderMuted: ColorValueSchema,
17
- success: ColorValueSchema,
18
- error: ColorValueSchema,
19
- warning: ColorValueSchema,
20
- muted: ColorValueSchema,
21
- dim: ColorValueSchema,
22
- text: ColorValueSchema,
23
- thinkingText: ColorValueSchema,
24
- // Backgrounds & Content Text (11 required, 3 optional)
25
- selectedBg: ColorValueSchema,
26
- scrollbarThumb: Type.Optional(ColorValueSchema),
27
- searchMatchBg: Type.Optional(ColorValueSchema),
28
- searchMatchText: Type.Optional(ColorValueSchema),
29
- userMessageBg: ColorValueSchema,
30
- userMessageText: ColorValueSchema,
31
- customMessageBg: ColorValueSchema,
32
- customMessageText: ColorValueSchema,
33
- customMessageLabel: ColorValueSchema,
34
- toolPendingBg: ColorValueSchema,
35
- toolSuccessBg: ColorValueSchema,
36
- toolErrorBg: ColorValueSchema,
37
- toolTitle: ColorValueSchema,
38
- toolOutput: ColorValueSchema,
39
- // Markdown (10 colors)
40
- mdHeading: ColorValueSchema,
41
- mdLink: ColorValueSchema,
42
- mdLinkUrl: ColorValueSchema,
43
- mdCode: ColorValueSchema,
44
- mdCodeBlock: ColorValueSchema,
45
- mdCodeBlockBorder: ColorValueSchema,
46
- mdQuote: ColorValueSchema,
47
- mdQuoteBorder: ColorValueSchema,
48
- mdHr: ColorValueSchema,
49
- mdListBullet: ColorValueSchema,
50
- // Tool Diffs (3 colors)
51
- toolDiffAdded: ColorValueSchema,
52
- toolDiffRemoved: ColorValueSchema,
53
- toolDiffContext: ColorValueSchema,
54
- // Syntax Highlighting (9 colors)
55
- syntaxComment: ColorValueSchema,
56
- syntaxKeyword: ColorValueSchema,
57
- syntaxFunction: ColorValueSchema,
58
- syntaxVariable: ColorValueSchema,
59
- syntaxString: ColorValueSchema,
60
- syntaxNumber: ColorValueSchema,
61
- syntaxType: ColorValueSchema,
62
- syntaxOperator: ColorValueSchema,
63
- syntaxPunctuation: ColorValueSchema,
64
- // Thinking Level Borders (6 colors)
65
- thinkingOff: ColorValueSchema,
66
- thinkingMinimal: ColorValueSchema,
67
- thinkingLow: ColorValueSchema,
68
- thinkingMedium: ColorValueSchema,
69
- thinkingHigh: ColorValueSchema,
70
- thinkingXhigh: ColorValueSchema,
71
- // Bash Mode (1 color)
72
- bashMode: ColorValueSchema,
30
+ $schema: Type.Optional(Type.String({ description: "JSON schema reference" })),
31
+ name: Type.String({
32
+ pattern: "^[^/]+$",
33
+ description: "Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.",
73
34
  }),
35
+ vars: Type.Optional(Type.Record(Type.String(), ColorValueSchema, {
36
+ description: "Reusable color variables",
37
+ })),
38
+ colors: ThemeColorsSchema,
74
39
  workingIndicator: Type.Optional(Type.Object({
75
40
  dark: Type.Optional(ColorValueSchema),
76
41
  lift: Type.Optional(ColorValueSchema),
@@ -78,12 +43,22 @@ export const ThemeJsonSchema = Type.Object({
78
43
  accent: Type.Optional(ColorValueSchema),
79
44
  bright: Type.Optional(ColorValueSchema),
80
45
  peak: Type.Optional(ColorValueSchema),
46
+ }, {
47
+ description: "Optional partial six-tone palette for Atomic's ordinary working identity",
48
+ additionalProperties: false,
81
49
  })),
82
50
  export: Type.Optional(Type.Object({
83
- pageBg: Type.Optional(ColorValueSchema),
84
- cardBg: Type.Optional(ColorValueSchema),
85
- infoBg: Type.Optional(ColorValueSchema),
51
+ pageBg: Type.Optional(colorValue("Page background color")),
52
+ cardBg: Type.Optional(colorValue("Card/container background color")),
53
+ infoBg: Type.Optional(colorValue("Info sections background (system prompt, notices)")),
54
+ }, {
55
+ description: "Optional colors for HTML export (defaults derived from userMessageBg if not specified)",
56
+ additionalProperties: false,
86
57
  })),
58
+ }, {
59
+ title: "Atomic Coding Agent Theme",
60
+ description: "Theme schema for the Atomic coding agent",
61
+ additionalProperties: false,
87
62
  });
88
63
  export const validateThemeJson = Compile(ThemeJsonSchema);
89
64
  //# sourceMappingURL=theme-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-schema.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,EAAE,8DAA8D;IAC7E,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,kBAAkB;CAC9D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,sBAAsB;QACtB,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,gBAAgB;QACxB,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,gBAAgB;QACvB,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,gBAAgB;QAC9B,uDAAuD;QACvD,UAAU,EAAE,gBAAgB;QAC5B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC9C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChD,aAAa,EAAE,gBAAgB;QAC/B,eAAe,EAAE,gBAAgB;QACjC,eAAe,EAAE,gBAAgB;QACjC,iBAAiB,EAAE,gBAAgB;QACnC,kBAAkB,EAAE,gBAAgB;QACpC,aAAa,EAAE,gBAAgB;QAC/B,aAAa,EAAE,gBAAgB;QAC/B,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,gBAAgB;QAC5B,uBAAuB;QACvB,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,gBAAgB;QACxB,WAAW,EAAE,gBAAgB;QAC7B,iBAAiB,EAAE,gBAAgB;QACnC,OAAO,EAAE,gBAAgB;QACzB,aAAa,EAAE,gBAAgB;QAC/B,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,gBAAgB;QAC9B,wBAAwB;QACxB,aAAa,EAAE,gBAAgB;QAC/B,eAAe,EAAE,gBAAgB;QACjC,eAAe,EAAE,gBAAgB;QACjC,iCAAiC;QACjC,aAAa,EAAE,gBAAgB;QAC/B,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,gBAAgB;QAChC,cAAc,EAAE,gBAAgB;QAChC,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,UAAU,EAAE,gBAAgB;QAC5B,cAAc,EAAE,gBAAgB;QAChC,iBAAiB,EAAE,gBAAgB;QACnC,oCAAoC;QACpC,WAAW,EAAE,gBAAgB;QAC7B,eAAe,EAAE,gBAAgB;QACjC,WAAW,EAAE,gBAAgB;QAC7B,cAAc,EAAE,gBAAgB;QAChC,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,gBAAgB;QAC/B,sBAAsB;QACtB,QAAQ,EAAE,gBAAgB;KAC1B,CAAC;IACF,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAC9B,IAAI,CAAC,MAAM,CAAC;QACX,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACrC,CAAC,CACF;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC;QACX,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACvC,CAAC,CACF;CACD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\n\nexport const ColorValueSchema = Type.Union([\n\tType.String(), // hex \"#ff0000\", okhsl(H S L), var ref \"primary\", or empty \"\"\n\tType.Integer({ minimum: 0, maximum: 255 }), // 256-color index\n]);\n\nexport type ColorValue = Static<typeof ColorValueSchema>;\n\nexport const ThemeJsonSchema = Type.Object({\n\t$schema: Type.Optional(Type.String()),\n\tname: Type.String(),\n\tvars: Type.Optional(Type.Record(Type.String(), ColorValueSchema)),\n\tcolors: Type.Object({\n\t\t// Core UI (10 colors)\n\t\taccent: ColorValueSchema,\n\t\tborder: ColorValueSchema,\n\t\tborderAccent: ColorValueSchema,\n\t\tborderMuted: ColorValueSchema,\n\t\tsuccess: ColorValueSchema,\n\t\terror: ColorValueSchema,\n\t\twarning: ColorValueSchema,\n\t\tmuted: ColorValueSchema,\n\t\tdim: ColorValueSchema,\n\t\ttext: ColorValueSchema,\n\t\tthinkingText: ColorValueSchema,\n\t\t// Backgrounds & Content Text (11 required, 3 optional)\n\t\tselectedBg: ColorValueSchema,\n\t\tscrollbarThumb: Type.Optional(ColorValueSchema),\n\t\tsearchMatchBg: Type.Optional(ColorValueSchema),\n\t\tsearchMatchText: Type.Optional(ColorValueSchema),\n\t\tuserMessageBg: ColorValueSchema,\n\t\tuserMessageText: ColorValueSchema,\n\t\tcustomMessageBg: ColorValueSchema,\n\t\tcustomMessageText: ColorValueSchema,\n\t\tcustomMessageLabel: ColorValueSchema,\n\t\ttoolPendingBg: ColorValueSchema,\n\t\ttoolSuccessBg: ColorValueSchema,\n\t\ttoolErrorBg: ColorValueSchema,\n\t\ttoolTitle: ColorValueSchema,\n\t\ttoolOutput: ColorValueSchema,\n\t\t// Markdown (10 colors)\n\t\tmdHeading: ColorValueSchema,\n\t\tmdLink: ColorValueSchema,\n\t\tmdLinkUrl: ColorValueSchema,\n\t\tmdCode: ColorValueSchema,\n\t\tmdCodeBlock: ColorValueSchema,\n\t\tmdCodeBlockBorder: ColorValueSchema,\n\t\tmdQuote: ColorValueSchema,\n\t\tmdQuoteBorder: ColorValueSchema,\n\t\tmdHr: ColorValueSchema,\n\t\tmdListBullet: ColorValueSchema,\n\t\t// Tool Diffs (3 colors)\n\t\ttoolDiffAdded: ColorValueSchema,\n\t\ttoolDiffRemoved: ColorValueSchema,\n\t\ttoolDiffContext: ColorValueSchema,\n\t\t// Syntax Highlighting (9 colors)\n\t\tsyntaxComment: ColorValueSchema,\n\t\tsyntaxKeyword: ColorValueSchema,\n\t\tsyntaxFunction: ColorValueSchema,\n\t\tsyntaxVariable: ColorValueSchema,\n\t\tsyntaxString: ColorValueSchema,\n\t\tsyntaxNumber: ColorValueSchema,\n\t\tsyntaxType: ColorValueSchema,\n\t\tsyntaxOperator: ColorValueSchema,\n\t\tsyntaxPunctuation: ColorValueSchema,\n\t\t// Thinking Level Borders (6 colors)\n\t\tthinkingOff: ColorValueSchema,\n\t\tthinkingMinimal: ColorValueSchema,\n\t\tthinkingLow: ColorValueSchema,\n\t\tthinkingMedium: ColorValueSchema,\n\t\tthinkingHigh: ColorValueSchema,\n\t\tthinkingXhigh: ColorValueSchema,\n\t\t// Bash Mode (1 color)\n\t\tbashMode: ColorValueSchema,\n\t}),\n\tworkingIndicator: Type.Optional(\n\t\tType.Object({\n\t\t\tdark: Type.Optional(ColorValueSchema),\n\t\t\tlift: Type.Optional(ColorValueSchema),\n\t\t\tmuted: Type.Optional(ColorValueSchema),\n\t\t\taccent: Type.Optional(ColorValueSchema),\n\t\t\tbright: Type.Optional(ColorValueSchema),\n\t\t\tpeak: Type.Optional(ColorValueSchema),\n\t\t}),\n\t),\n\texport: Type.Optional(\n\t\tType.Object({\n\t\t\tpageBg: Type.Optional(ColorValueSchema),\n\t\t\tcardBg: Type.Optional(ColorValueSchema),\n\t\t\tinfoBg: Type.Optional(ColorValueSchema),\n\t\t}),\n\t),\n});\n\nexport type ThemeJson = Static<typeof ThemeJsonSchema>;\n\nexport const validateThemeJson = Compile(ThemeJsonSchema);\n"]}
1
+ {"version":3,"file":"theme-schema.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,IAAI,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAqD,MAAM,mBAAmB,CAAC;AAEpG,SAAS,UAAU,CAAC,WAAoB;IACvC,OAAO,IAAI,CAAC,KAAK,CAChB;QACC,IAAI,CAAC,MAAM,CAAC;YACX,WAAW,EACV,2GAA2G;SAC5G,CAAC;QACF,IAAI,CAAC,OAAO,CAAC;YACZ,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,iCAAiC;SAC9C,CAAC;KACF,EACD,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;AAI7C,SAAS,oBAAoB,CAAC,MAA6B;IAC1D,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAClD,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CACpC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE;IAC/C,WAAW,EACV,0HAA0H;IAC3H,oBAAoB,EAAE,KAAK;CAC3B,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CACzC;IACC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,SAAS;QAClB,WAAW,EACV,kGAAkG;KACnG,CAAC;IACF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE;QAC5C,WAAW,EAAE,0BAA0B;KACvC,CAAC,CACF;IACD,MAAM,EAAE,iBAAiB;IACzB,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAC9B,IAAI,CAAC,MAAM,CACV;QACC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACrC,EACD;QACC,WAAW,EAAE,0EAA0E;QACvF,oBAAoB,EAAE,KAAK;KAC3B,CACD,CACD;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CACV;QACC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAC1D,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;QACpE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mDAAmD,CAAC,CAAC;KACtF,EACD;QACC,WAAW,EAAE,wFAAwF;QACrG,oBAAoB,EAAE,KAAK;KAC3B,CACD,CACD;CACD,EACD;IACC,KAAK,EAAE,2BAA2B;IAClC,WAAW,EAAE,0CAA0C;IACvD,oBAAoB,EAAE,KAAK;CAC3B,CACD,CAAC;AAIF,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC","sourcesContent":["import { type Static, type TProperties, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport { THEME_TOKENS, type ThemeColorValues, type ThemeTokenDescriptors } from \"./theme-tokens.ts\";\n\nfunction colorValue(description?: string) {\n\treturn Type.Union(\n\t\t[\n\t\t\tType.String({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Hex color (#RRGGBB), OKHSL color (okhsl(H S L)), variable reference, or empty string for terminal default\",\n\t\t\t}),\n\t\t\tType.Integer({\n\t\t\t\tminimum: 0,\n\t\t\t\tmaximum: 255,\n\t\t\t\tdescription: \"256-color palette index (0-255)\",\n\t\t\t}),\n\t\t],\n\t\tdescription ? { description } : {},\n\t);\n}\n\nexport const ColorValueSchema = colorValue();\n\nexport type ColorValue = Static<typeof ColorValueSchema>;\n\nfunction themeTokenProperties(tokens: ThemeTokenDescriptors): TProperties {\n\tconst properties: TProperties = {};\n\tfor (const [name, descriptor] of Object.entries(tokens)) {\n\t\tconst schema = colorValue(descriptor.description);\n\t\tproperties[name] = descriptor.fallback === undefined ? schema : Type.Optional(schema);\n\t}\n\treturn properties;\n}\n\nconst ThemeColorsSchema = Type.Unsafe<ThemeColorValues<ColorValue>>(\n\tType.Object(themeTokenProperties(THEME_TOKENS), {\n\t\tdescription:\n\t\t\t\"Theme color definitions (scrollbarThumb and the search highlight colors are optional and fall back to compatible colors)\",\n\t\tadditionalProperties: false,\n\t}),\n);\n\nexport const ThemeJsonSchema = Type.Object(\n\t{\n\t\t$schema: Type.Optional(Type.String({ description: \"JSON schema reference\" })),\n\t\tname: Type.String({\n\t\t\tpattern: \"^[^/]+$\",\n\t\t\tdescription:\n\t\t\t\t\"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\",\n\t\t}),\n\t\tvars: Type.Optional(\n\t\t\tType.Record(Type.String(), ColorValueSchema, {\n\t\t\t\tdescription: \"Reusable color variables\",\n\t\t\t}),\n\t\t),\n\t\tcolors: ThemeColorsSchema,\n\t\tworkingIndicator: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tdark: Type.Optional(ColorValueSchema),\n\t\t\t\t\tlift: Type.Optional(ColorValueSchema),\n\t\t\t\t\tmuted: Type.Optional(ColorValueSchema),\n\t\t\t\t\taccent: Type.Optional(ColorValueSchema),\n\t\t\t\t\tbright: Type.Optional(ColorValueSchema),\n\t\t\t\t\tpeak: Type.Optional(ColorValueSchema),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdescription: \"Optional partial six-tone palette for Atomic's ordinary working identity\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\texport: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tpageBg: Type.Optional(colorValue(\"Page background color\")),\n\t\t\t\t\tcardBg: Type.Optional(colorValue(\"Card/container background color\")),\n\t\t\t\t\tinfoBg: Type.Optional(colorValue(\"Info sections background (system prompt, notices)\")),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdescription: \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t},\n\t{\n\t\ttitle: \"Atomic Coding Agent Theme\",\n\t\tdescription: \"Theme schema for the Atomic coding agent\",\n\t\tadditionalProperties: false,\n\t},\n);\n\nexport type ThemeJson = Static<typeof ThemeJsonSchema>;\n\nexport const validateThemeJson = Compile(ThemeJsonSchema);\n"]}