kash-shell 0.3.16__tar.gz → 0.3.17__tar.gz

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 (300) hide show
  1. {kash_shell-0.3.16 → kash_shell-0.3.17}/PKG-INFO +1 -1
  2. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/files_command.py +2 -2
  3. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/colors.py +15 -7
  4. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/actions_model.py +2 -2
  5. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/base_styles.css.jinja +73 -16
  6. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/base_webpage.html.jinja +45 -19
  7. kash_shell-0.3.17/src/kash/web_gen/templates/simple_webpage.html.jinja +552 -0
  8. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/tabbed_webpage.html.jinja +4 -2
  9. {kash_shell-0.3.16 → kash_shell-0.3.17}/uv.lock +96 -111
  10. kash_shell-0.3.16/src/kash/web_gen/templates/simple_webpage.html.jinja +0 -48
  11. {kash_shell-0.3.16 → kash_shell-0.3.17}/.copier-answers.yml +0 -0
  12. {kash_shell-0.3.16 → kash_shell-0.3.17}/.env.template +0 -0
  13. {kash_shell-0.3.16 → kash_shell-0.3.17}/.github/workflows/ci.yml +0 -0
  14. {kash_shell-0.3.16 → kash_shell-0.3.17}/.github/workflows/publish.yml +0 -0
  15. {kash_shell-0.3.16 → kash_shell-0.3.17}/.gitignore +0 -0
  16. {kash_shell-0.3.16 → kash_shell-0.3.17}/LICENSE +0 -0
  17. {kash_shell-0.3.16 → kash_shell-0.3.17}/Makefile +0 -0
  18. {kash_shell-0.3.16 → kash_shell-0.3.17}/README.md +0 -0
  19. {kash_shell-0.3.16 → kash_shell-0.3.17}/development.md +0 -0
  20. {kash_shell-0.3.16 → kash_shell-0.3.17}/devtools/generate_readme.xsh +0 -0
  21. {kash_shell-0.3.16 → kash_shell-0.3.17}/devtools/lint.py +0 -0
  22. {kash_shell-0.3.16 → kash_shell-0.3.17}/devtools/profile_main.py +0 -0
  23. {kash_shell-0.3.16 → kash_shell-0.3.17}/installation.md +0 -0
  24. {kash_shell-0.3.16 → kash_shell-0.3.17}/publishing.md +0 -0
  25. {kash_shell-0.3.16 → kash_shell-0.3.17}/pyproject.toml +0 -0
  26. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/__init__.py +0 -0
  27. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/__main__.py +0 -0
  28. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/__init__.py +0 -0
  29. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/assistant_chat.py +0 -0
  30. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/chat.py +0 -0
  31. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/format_markdown_template.py +0 -0
  32. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/markdownify.py +0 -0
  33. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/readability.py +0 -0
  34. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/render_as_html.py +0 -0
  35. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/show_webpage.py +0 -0
  36. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/strip_html.py +0 -0
  37. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/summarize_as_bullets.py +0 -0
  38. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/tabbed_webpage_config.py +0 -0
  39. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/core/tabbed_webpage_generate.py +0 -0
  40. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/meta/write_instructions.py +0 -0
  41. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/actions/meta/write_new_action.py +0 -0
  42. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/__init__.py +0 -0
  43. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/basic_file_commands.py +0 -0
  44. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/browser_commands.py +0 -0
  45. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/debug_commands.py +0 -0
  46. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/diff_commands.py +0 -0
  47. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/general_commands.py +0 -0
  48. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/logs_commands.py +0 -0
  49. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/model_commands.py +0 -0
  50. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/reformat_command.py +0 -0
  51. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/search_command.py +0 -0
  52. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/base/show_command.py +0 -0
  53. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/extras/parse_uv_lock.py +0 -0
  54. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/extras/utils_commands.py +0 -0
  55. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/help/assistant_commands.py +0 -0
  56. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/help/doc_commands.py +0 -0
  57. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/help/help_commands.py +0 -0
  58. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/help/logo.py +0 -0
  59. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/help/welcome.py +0 -0
  60. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/workspace/selection_commands.py +0 -0
  61. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/commands/workspace/workspace_commands.py +0 -0
  62. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/__init__.py +0 -0
  63. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/capture_output.py +0 -0
  64. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/env_settings.py +0 -0
  65. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/init.py +0 -0
  66. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/lazy_imports.py +0 -0
  67. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/logger.py +0 -0
  68. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/logger_basic.py +0 -0
  69. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/logo.txt +0 -0
  70. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/server_config.py +0 -0
  71. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/settings.py +0 -0
  72. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/setup.py +0 -0
  73. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/suppress_warnings.py +0 -0
  74. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/config/text_styles.py +0 -0
  75. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/__init__.py +0 -0
  76. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/all_docs.py +0 -0
  77. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/load_actions_info.py +0 -0
  78. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/load_api_docs.py +0 -0
  79. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/load_help_topics.py +0 -0
  80. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/load_source_code.py +0 -0
  81. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/api_docs_template.md +0 -0
  82. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/assistant_instructions_template.md +0 -0
  83. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/readme_template.md +0 -0
  84. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/a1_what_is_kash.md +0 -0
  85. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/a2_installation.md +0 -0
  86. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/a3_getting_started.md +0 -0
  87. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/a4_elements.md +0 -0
  88. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/a5_tips_for_use_with_other_tools.md +0 -0
  89. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/b0_philosophy_of_kash.md +0 -0
  90. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/b1_kash_overview.md +0 -0
  91. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/b2_workspace_and_file_formats.md +0 -0
  92. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/b3_modern_shell_tool_recommendations.md +0 -0
  93. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/topics/b4_faq.md +0 -0
  94. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/warning.md +0 -0
  95. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs/markdown/welcome.md +0 -0
  96. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/docs_base.py +0 -0
  97. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/load_custom_command_info.py +0 -0
  98. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/load_faqs.py +0 -0
  99. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/load_recipe_snippets.py +0 -0
  100. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/recipes/general_system_commands.sh +0 -0
  101. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/recipes/python_dev_commands.sh +0 -0
  102. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/docs_base/recipes/tldr_standard_commands.sh +0 -0
  103. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/embeddings/cosine.py +0 -0
  104. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/embeddings/embeddings.py +0 -0
  105. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/embeddings/text_similarity.py +0 -0
  106. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/__init__.py +0 -0
  107. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/action_decorators.py +0 -0
  108. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/action_exec.py +0 -0
  109. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/action_registry.py +0 -0
  110. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/combiners.py +0 -0
  111. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/command_exec.py +0 -0
  112. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/command_registry.py +0 -0
  113. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/fetch_url_metadata.py +0 -0
  114. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/history.py +0 -0
  115. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/importing.py +0 -0
  116. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/llm_transforms.py +0 -0
  117. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/precondition_checks.py +0 -0
  118. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/precondition_registry.py +0 -0
  119. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/preconditions.py +0 -0
  120. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/resolve_args.py +0 -0
  121. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/runtime_settings.py +0 -0
  122. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec/shell_callable_action.py +0 -0
  123. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec_model/__init__.py +0 -0
  124. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec_model/args_model.py +0 -0
  125. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec_model/commands_model.py +0 -0
  126. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec_model/script_model.py +0 -0
  127. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/exec_model/shell_model.py +0 -0
  128. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/__init__.py +0 -0
  129. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/file_store.py +0 -0
  130. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/item_file_format.py +0 -0
  131. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/metadata_dirs.py +0 -0
  132. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/persisted_yaml.py +0 -0
  133. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/store_cache_warmer.py +0 -0
  134. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/file_storage/store_filenames.py +0 -0
  135. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/__init__.py +0 -0
  136. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/assistant.py +0 -0
  137. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/assistant_instructions.py +0 -0
  138. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/assistant_output.py +0 -0
  139. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/docstring_utils.py +0 -0
  140. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/function_param_info.py +0 -0
  141. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/help_embeddings.py +0 -0
  142. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/help_lookups.py +0 -0
  143. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/help_pages.py +0 -0
  144. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/help_printing.py +0 -0
  145. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/help_types.py +0 -0
  146. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/recommended_commands.py +0 -0
  147. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/help/tldr_help.py +0 -0
  148. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/__init__.py +0 -0
  149. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/clean_headings.py +0 -0
  150. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/custom_sliding_transforms.py +0 -0
  151. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/fuzzy_parsing.py +0 -0
  152. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/init_litellm.py +0 -0
  153. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llm_api_keys.py +0 -0
  154. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llm_completion.py +0 -0
  155. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llm_features.py +0 -0
  156. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llm_messages.py +0 -0
  157. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llm_names.py +0 -0
  158. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/llm_utils/llms.py +0 -0
  159. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/__init__.py +0 -0
  160. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/local_server.py +0 -0
  161. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/local_server_commands.py +0 -0
  162. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/local_server_routes.py +0 -0
  163. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/local_url_formatters.py +0 -0
  164. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/port_tools.py +0 -0
  165. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/local_server/rich_html_template.py +0 -0
  166. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/__init__.py +0 -0
  167. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_cli.py +0 -0
  168. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_main.py +0 -0
  169. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_server_commands.py +0 -0
  170. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_server_routes.py +0 -0
  171. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_server_sse.py +0 -0
  172. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/mcp/mcp_server_stdio.py +0 -0
  173. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/__init__.py +0 -0
  174. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/audio_processing.py +0 -0
  175. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/media_cache.py +0 -0
  176. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/media_services.py +0 -0
  177. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/media_tools.py +0 -0
  178. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/services/local_file_media.py +0 -0
  179. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/timestamp_citations.py +0 -0
  180. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/transcription_deepgram.py +0 -0
  181. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/transcription_format.py +0 -0
  182. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/media_base/transcription_whisper.py +0 -0
  183. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/__init__.py +0 -0
  184. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/assistant_response_model.py +0 -0
  185. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/compound_actions_model.py +0 -0
  186. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/concept_model.py +0 -0
  187. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/exec_model.py +0 -0
  188. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/graph_model.py +0 -0
  189. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/items_model.py +0 -0
  190. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/language_list.py +0 -0
  191. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/llm_actions_model.py +0 -0
  192. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/media_model.py +0 -0
  193. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/operations_model.py +0 -0
  194. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/params_model.py +0 -0
  195. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/paths_model.py +0 -0
  196. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/model/preconditions_model.py +0 -0
  197. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/__init__.py +0 -0
  198. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/completions/completion_scoring.py +0 -0
  199. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/completions/completion_types.py +0 -0
  200. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/completions/shell_completions.py +0 -0
  201. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/file_icons/color_for_format.py +0 -0
  202. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/file_icons/nerd_icons.py +0 -0
  203. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/input/__init__.py +0 -0
  204. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/input/input_prompts.py +0 -0
  205. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/input/inquirer_settings.py +0 -0
  206. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/input/param_inputs.py +0 -0
  207. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/input/shell_confirm.py +0 -0
  208. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/__init__.py +0 -0
  209. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/kerm_code_utils.py +0 -0
  210. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/kerm_codes.py +0 -0
  211. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/kmarkdown.py +0 -0
  212. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/shell_formatting.py +0 -0
  213. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/output/shell_output.py +0 -0
  214. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/shell_main.py +0 -0
  215. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/ui/__init__.py +0 -0
  216. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/ui/shell_results.py +0 -0
  217. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/ui/shell_syntax.py +0 -0
  218. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/utils/exception_printing.py +0 -0
  219. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/utils/native_utils.py +0 -0
  220. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/utils/shell_function_wrapper.py +0 -0
  221. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/shell/version.py +0 -0
  222. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/__init__.py +0 -0
  223. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/__init__.py +0 -0
  224. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/format_utils.py +0 -0
  225. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/function_inspect.py +0 -0
  226. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/import_utils.py +0 -0
  227. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/lazyobject.py +0 -0
  228. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/obj_replace.py +0 -0
  229. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/parse_key_vals.py +0 -0
  230. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/parse_shell_args.py +0 -0
  231. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/stack_traces.py +0 -0
  232. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/task_stack.py +0 -0
  233. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/type_utils.py +0 -0
  234. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/uniquifier.py +0 -0
  235. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/common/url.py +0 -0
  236. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/errors.py +0 -0
  237. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_formats/chat_format.py +0 -0
  238. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/__init__.py +0 -0
  239. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/dir_info.py +0 -0
  240. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/file_ext.py +0 -0
  241. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/file_formats.py +0 -0
  242. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/file_formats_model.py +0 -0
  243. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/file_sort_filter.py +0 -0
  244. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/file_walk.py +0 -0
  245. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/filename_parsing.py +0 -0
  246. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/ignore_files.py +0 -0
  247. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/mtime_cache.py +0 -0
  248. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/file_utils/path_utils.py +0 -0
  249. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/lang_utils/__init__.py +0 -0
  250. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/lang_utils/capitalization.py +0 -0
  251. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/rich_custom/__init__.py +0 -0
  252. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/rich_custom/ansi_cell_len.py +0 -0
  253. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/rich_custom/rich_char_transform.py +0 -0
  254. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/rich_custom/rich_indent.py +0 -0
  255. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/rich_custom/rich_markdown_fork.py +0 -0
  256. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/doc_normalization.py +0 -0
  257. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/escape_html_tags.py +0 -0
  258. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/markdown_render.py +0 -0
  259. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/markdown_utils.py +0 -0
  260. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/markdownify_utils.py +0 -0
  261. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/utils/text_handling/unified_diffs.py +0 -0
  262. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/canon_url.py +0 -0
  263. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/dir_store.py +0 -0
  264. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/file_cache_utils.py +0 -0
  265. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/file_processing.py +0 -0
  266. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/local_file_cache.py +0 -0
  267. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/web_extract.py +0 -0
  268. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/web_extract_justext.py +0 -0
  269. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/web_extract_readabilipy.py +0 -0
  270. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/web_fetch.py +0 -0
  271. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_content/web_page_model.py +0 -0
  272. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/__init__.py +0 -0
  273. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/simple_webpage.py +0 -0
  274. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/tabbed_webpage.py +0 -0
  275. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/template_render.py +0 -0
  276. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/content_styles.css.jinja +0 -0
  277. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/explain_view.html.jinja +0 -0
  278. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/web_gen/templates/item_view.html.jinja +0 -0
  279. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/__init__.py +0 -0
  280. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/param_state.py +0 -0
  281. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/selections.py +0 -0
  282. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/source_items.py +0 -0
  283. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/workspace_dirs.py +0 -0
  284. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/workspace_output.py +0 -0
  285. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/workspace_registry.py +0 -0
  286. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/workspaces/workspaces.py +0 -0
  287. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/command_nl_utils.py +0 -0
  288. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/custom_shell.py +0 -0
  289. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/customize_prompt.py +0 -0
  290. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/load_into_xonsh.py +0 -0
  291. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/shell_load_commands.py +0 -0
  292. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/shell_which.py +0 -0
  293. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/xonsh_completers.py +0 -0
  294. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/xonsh_env.py +0 -0
  295. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/xonsh_keybindings.py +0 -0
  296. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/xonsh_modern_tools.py +0 -0
  297. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xonsh_custom/xonsh_ranking_completer.py +0 -0
  298. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xontrib/fnm.py +0 -0
  299. {kash_shell-0.3.16 → kash_shell-0.3.17}/src/kash/xontrib/kash_extension.py +0 -0
  300. {kash_shell-0.3.16 → kash_shell-0.3.17}/tests/test_shell.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kash-shell
3
- Version: 0.3.16
3
+ Version: 0.3.17
4
4
  Summary: The knowledge agent shell (core)
5
5
  Project-URL: Repository, https://github.com/jlevy/kash-shell
6
6
  Author-email: Joshua Levy <joshua@cal.berkeley.edu>
@@ -64,7 +64,6 @@ def _print_listing_tallies(
64
64
  f"{EMOJI_WARN} {file_listing.files_ignored} files and {file_listing.dirs_ignored} dirs were ignored",
65
65
  style=COLOR_EXTRA,
66
66
  )
67
- cprint("(use --no_ignore to show hidden files)", style=STYLE_HINT)
68
67
 
69
68
  if file_listing.total_skipped > 0:
70
69
  cprint(
@@ -72,7 +71,8 @@ def _print_listing_tallies(
72
71
  f"at max_files={max_files}, max_depth={max_depth}, max_per_subdir={max_per_subdir}",
73
72
  style=COLOR_EXTRA,
74
73
  )
75
- cprint("(use --no_max to remove cutoff)", style=STYLE_HINT)
74
+ if file_listing.total_ignored + file_listing.total_skipped > 0:
75
+ cprint("(use --all to show all files)", style=STYLE_HINT)
76
76
 
77
77
 
78
78
  DEFAULT_MAX_PER_GROUP = 50
@@ -133,22 +133,26 @@ web_light_translucent = SimpleNamespace(
133
133
  primary=hsl_to_hex("hsl(188, 31%, 41%)"),
134
134
  primary_light=hsl_to_hex("hsl(188, 40%, 62%)"),
135
135
  secondary=hsl_to_hex("hsl(188, 12%, 28%)"),
136
+ tertiary=hsl_to_hex("hsl(188, 7%, 64%)"),
136
137
  bg=hsl_to_hex("hsla(44, 6%, 100%, 0.75)"),
137
138
  bg_solid=hsl_to_hex("hsla(44, 6%, 100%, 1)"),
138
139
  bg_header=hsl_to_hex("hsla(188, 42%, 70%, 0.2)"),
139
140
  bg_alt=hsl_to_hex("hsla(39, 24%, 90%, 0.3)"),
140
141
  bg_alt_solid=hsl_to_hex("hsla(39, 24%, 97%, 1)"),
141
142
  text=hsl_to_hex("hsl(188, 39%, 11%)"),
143
+ code=hsl_to_hex("hsl(44, 38%, 23%)"),
142
144
  border=hsl_to_hex("hsl(188, 8%, 50%)"),
143
- border_hint=hsl_to_hex("hsla(188, 8%, 72%, 0.7)"),
145
+ border_hint=hsl_to_hex("hsla(188, 8%, 72%, 0.3)"),
144
146
  border_accent=hsl_to_hex("hsla(305, 18%, 65%, 0.85)"),
145
147
  hover=hsl_to_hex("hsl(188, 12%, 84%)"),
146
- hover_bg=hsl_to_hex("hsla(188, 7%, 94%, 0.8)"),
148
+ hover_bg=hsl_to_hex("hsla(188, 12%, 94%, 0.8)"),
147
149
  hint=hsl_to_hex("hsl(188, 11%, 65%)"),
150
+ hint_gentle=hsl_to_hex("hsla(188, 11%, 65%, 0.2)"),
148
151
  tooltip_bg=hsl_to_hex("hsla(188, 6%, 37%, 0.7)"),
149
152
  popover_bg=hsl_to_hex("hsla(188, 6%, 37%, 0.7)"),
150
153
  bright=hsl_to_hex("hsl(134, 43%, 60%)"),
151
- success=hsl_to_hex("hsl(134, 43%, 60%)"),
154
+ success=hsl_to_hex("hsl(134, 70%, 37%)"),
155
+ failure=hsl_to_hex("hsl(7, 70%, 37%)"),
152
156
  selection="hsla(225, 61%, 82%, 0.80)",
153
157
  scrollbar=hsl_to_hex("hsla(189, 12%, 55%, 0.9)"),
154
158
  scrollbar_hover=hsl_to_hex("hsla(190, 12%, 38%, 0.9)"),
@@ -160,22 +164,26 @@ web_dark_translucent = SimpleNamespace(
160
164
  primary=hsl_to_hex("hsl(188, 40%, 62%)"),
161
165
  primary_light=hsl_to_hex("hsl(188, 50%, 72%)"),
162
166
  secondary=hsl_to_hex("hsl(188, 12%, 65%)"),
167
+ tertiary=hsl_to_hex("hsl(188, 7%, 40%)"),
163
168
  bg=hsl_to_hex("hsla(220, 14%, 7%, 0.95)"),
164
169
  bg_solid=hsl_to_hex("hsl(220, 14%, 7%)"),
165
170
  bg_header=hsl_to_hex("hsla(188, 42%, 20%, 0.3)"),
166
171
  bg_alt=hsl_to_hex("hsla(220, 14%, 12%, 0.5)"),
167
172
  bg_alt_solid=hsl_to_hex("hsl(220, 14%, 12%)"),
168
- text=hsl_to_hex("hsl(188, 20%, 90%)"),
173
+ text=hsl_to_hex("hsl(188, 10%, 90%)"),
174
+ code=hsl_to_hex("hsl(44, 38%, 72%)"),
169
175
  border=hsl_to_hex("hsl(188, 8%, 25%)"),
170
- border_hint=hsl_to_hex("hsla(188, 8%, 35%, 0.7)"),
176
+ border_hint=hsl_to_hex("hsla(188, 8%, 35%, 0.3)"),
171
177
  border_accent=hsl_to_hex("hsla(305, 30%, 55%, 0.85)"),
172
178
  hover=hsl_to_hex("hsl(188, 12%, 35%)"),
173
179
  hover_bg=hsl_to_hex("hsla(188, 20%, 25%, 0.4)"),
174
180
  hint=hsl_to_hex("hsl(188, 11%, 55%)"),
181
+ hint_gentle=hsl_to_hex("hsla(188, 11%, 55%, 0.2)"),
175
182
  tooltip_bg=hsl_to_hex("hsla(188, 6%, 20%, 0.9)"),
176
183
  popover_bg=hsl_to_hex("hsla(188, 6%, 20%, 0.9)"),
177
- bright=hsl_to_hex("hsl(134, 43%, 60%)"),
178
- success=hsl_to_hex("hsl(134, 43%, 60%)"),
184
+ bright=hsl_to_hex("hsl(134, 52%, 65%)"),
185
+ success=hsl_to_hex("hsl(134, 72%, 73%)"),
186
+ failure=hsl_to_hex("hsl(7, 46%, 53%)"),
179
187
  selection=hsl_to_hex("hsla(225, 61%, 40%, 0.40)"),
180
188
  scrollbar=hsl_to_hex("hsla(189, 12%, 35%, 0.9)"),
181
189
  scrollbar_hover=hsl_to_hex("hsla(190, 12%, 50%, 0.9)"),
@@ -102,9 +102,9 @@ class ActionResult:
102
102
  shell_result: ShellResult | None = None
103
103
  """Customize control of how the action's result is displayed in the shell."""
104
104
 
105
- def get_by_format(self, format: Format) -> Item:
105
+ def get_by_format(self, *formats: Format) -> Item:
106
106
  """Convenience method to get an item for actions that return multiple formats."""
107
- return next(item for item in self.items if item.format == format)
107
+ return next(item for item in self.items if item.format in formats)
108
108
 
109
109
  def has_hints(self) -> bool:
110
110
  return bool(
@@ -187,20 +187,34 @@ code {
187
187
  font-family: var(--font-mono);
188
188
  font-size: var(--font-size-mono);
189
189
  letter-spacing: -0.025em;
190
+
190
191
  transition: color 0.4s ease-in-out;
191
192
  }
193
+ /* For code inside pre we style the pre tag */
194
+ code:not(pre code) {
195
+ background-color: var(--color-bg-alt);
196
+ border-radius: 3px;
197
+ border: 1px solid var(--color-hint-gentle);
198
+ padding: 0.25em 0.2em 0.1em 0.2em;
199
+ }
200
+
201
+ /* Code block wrapper for positioning copy button */
202
+ .code-block-wrapper {
203
+ position: relative;
204
+ }
192
205
 
193
206
  /* Code blocks (pre + code) */
194
207
  pre {
195
208
  font-family: var(--font-mono);
196
209
  font-size: var(--font-size-mono);
197
210
  letter-spacing: -0.025em;
211
+
198
212
  background-color: var(--color-bg-alt);
199
- border-radius: 4px;
200
- border: 1px dotted var(--color-border-hint);
201
- padding: 0.2rem 0.2rem 0.1rem 0.2rem;
213
+ border-radius: 3px;
214
+ border: 1px solid var(--color-hint-gentle);
215
+ padding: 0.25rem 0.2rem 0.1rem 0.2rem;
202
216
  overflow-x: auto; /* Enable horizontal scrolling */
203
- position: relative; /* Create new stacking context */
217
+ margin: 0;
204
218
  transition: background-color 0.4s ease-in-out, border-color 0.4s ease-in-out;
205
219
  }
206
220
 
@@ -215,11 +229,12 @@ pre > code {
215
229
  position: absolute;
216
230
  top: 0;
217
231
  right: 0;
218
- background: var(--color-bg-alt);
232
+ margin: 1px;
233
+ background: var(--color-bg-alt-solid);
219
234
  color: var(--color-hint);
220
235
  border: none;
221
236
  border-radius: 0.25rem;
222
- padding: 0.25rem;
237
+ padding: 0;
223
238
  cursor: pointer;
224
239
  font-size: 0.75rem;
225
240
  z-index: 10;
@@ -229,7 +244,7 @@ pre > code {
229
244
  justify-content: center;
230
245
  width: 1.5rem;
231
246
  height: 1.5rem;
232
- opacity: 0.6;
247
+ opacity: 0.9;
233
248
  }
234
249
 
235
250
  .code-copy-button:hover {
@@ -240,7 +255,6 @@ pre > code {
240
255
 
241
256
  .code-copy-button.copied {
242
257
  color: var(--color-success);
243
- opacity: 1;
244
258
  }
245
259
 
246
260
  .code-copy-button svg {
@@ -337,7 +351,7 @@ hr:before {
337
351
  font-weight: var(--font-weight-sans-bold);
338
352
  text-transform: uppercase;
339
353
  letter-spacing: 0.03em;
340
- margin-top: 1.1rem;
354
+ margin-top: 1rem;
341
355
  margin-bottom: 0.8rem;
342
356
  }
343
357
  {% endblock long_text_styles %}
@@ -378,13 +392,21 @@ tbody tr:nth-child(even) {
378
392
 
379
393
  /* Container for wide tables to allow tables to break out of parent width. */
380
394
  .table-container {
381
- {# max-width: calc(100vw - 6rem); #}
382
395
  position: relative;
383
- left: 50%;
384
- transform: translateX(-50%);
385
396
  box-sizing: border-box;
386
397
  margin: 2rem 0;
387
398
  background-color: var(--color-bg-solid);
399
+ /* Default: center tables within their container */
400
+ left: 50%;
401
+ transform: translateX(-50%);
402
+ }
403
+
404
+ /* When TOC is present, simplify table container positioning */
405
+ .content-with-toc.has-toc .table-container {
406
+ /* Within grid layout, position relative to the grid column */
407
+ left: 50%;
408
+ transform: translateX(-50%);
409
+ /* Let the table width be controlled by the responsive styles */
388
410
  }
389
411
  {% endblock table_styles %}
390
412
 
@@ -438,16 +460,50 @@ sup {
438
460
 
439
461
  /* Apply shadow to long-text containers on larger screens */
440
462
  .long-text {
463
+ border: 1px solid var(--color-hint-gentle);
441
464
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 -2px 6px -1px rgba(0, 0, 0, 0.07);
442
465
  }
443
466
  /* But remove shadow when wrapped in no-shadow class */
444
467
  .no-shadow .long-text {
445
- box-shadow: none !important;
468
+ box-shadow: none;
469
+ border: none;
470
+ }
471
+ }
472
+
473
+ /* Handle TOC layouts specially - tables should bleed within their grid column */
474
+ @media (min-width: 1200px) {
475
+ /* When TOC is present, tables should bleed within the content grid column */
476
+ .content-with-toc.has-toc table {
477
+ /* Calculate available width: full viewport minus TOC column width minus margins */
478
+ width: calc(100vw - var(--toc-width, 16rem) - 8rem);
479
+ max-width: none;
480
+ }
481
+ .content-with-toc.has-toc .table-container {
482
+ width: calc(100vw - var(--toc-width, 16rem) - 8rem);
483
+ max-width: none;
484
+ }
485
+
486
+ /* But ensure tables don't exceed their grid column space */
487
+ .content-with-toc.has-toc .long-text {
488
+ /* The content area needs to allow tables to bleed beyond the text width */
489
+ overflow: visible;
490
+ }
491
+ }
492
+
493
+ /* Medium screens (768px - TOC breakpoint) - no TOC, tables should bleed but not as wide */
494
+ @media (min-width: 768px) and (max-width: 1199px) {
495
+ table {
496
+ width: calc(100vw - 6rem);
497
+ max-width: calc(100vw - 6rem);
498
+ }
499
+ .table-container {
500
+ width: calc(100vw - 6rem);
501
+ max-width: calc(100vw - 6rem);
446
502
  }
447
503
  }
448
504
 
449
505
  /* Make narrower screens more usable for lists and tables. */
450
- @media (max-width: 768px) {
506
+ @media (max-width: 767px) {
451
507
  /* Prevent horizontal scrolling on the body */
452
508
  body {
453
509
  overflow-x: hidden;
@@ -461,7 +517,7 @@ sup {
461
517
 
462
518
  /* Make table containers scrollable without affecting page layout */
463
519
  .table-container {
464
- max-width: 100%;
520
+ max-width: calc(100vw - 3rem);
465
521
  overflow-x: auto;
466
522
  transform: none;
467
523
  left: 0;
@@ -472,9 +528,10 @@ sup {
472
528
 
473
529
  table {
474
530
  font-size: var(--font-size-smaller);
475
- /* Tables can be wider than container */
531
+ /* Tables can be wider than container on mobile */
476
532
  width: auto;
477
533
  min-width: 100%;
534
+ max-width: none;
478
535
  }
479
536
 
480
537
  ul, ol {
@@ -64,43 +64,58 @@
64
64
  transition: background 0.4s ease-in-out, color 0.4s ease-in-out;
65
65
  }
66
66
 
67
- .theme-toggle {
68
- position: fixed;
69
- top: 1rem;
70
- right: 1rem;
71
- background: transparent;
67
+ .button {
72
68
  color: var(--color-hint);
69
+ background: var(--color-bg);
73
70
  border: none;
74
71
  padding: 0;
75
72
  border-radius: 0.3rem;
76
73
  cursor: pointer;
77
74
  font-size: 1rem;
78
- z-index: 100;
79
- transition: all 0.2s ease-in-out;
80
75
  display: flex;
81
76
  align-items: center;
82
77
  justify-content: center;
83
78
  width: 2.5rem;
84
79
  height: 2.5rem;
80
+
81
+ /* Separate transitions for theme vs interaction */
82
+ transition: background-color 0.4s ease-in-out,
83
+ color 0.4s ease-in-out,
84
+ transform 0.2s ease-in-out,
85
+ box-shadow 0.2s ease-in-out;
85
86
  }
86
87
 
87
- .theme-toggle:hover {
88
+ .button:hover {
88
89
  background: var(--color-hover-bg);
89
90
  color: var(--color-primary);
90
91
  }
91
92
 
92
- [data-theme="dark"] .theme-toggle {
93
+ .button svg {
94
+ width: 1rem;
95
+ height: 1rem;
96
+ transition: inherit; /* Inherit the color transition */
97
+ }
98
+
99
+ /* Dark mode styles for buttons */
100
+ [data-theme="dark"] .button {
93
101
  color: var(--color-primary-light);
94
102
  }
95
103
 
96
- [data-theme="dark"] .theme-toggle:hover {
97
- color: var(--color-bright);
104
+ [data-theme="dark"] .button:hover {
98
105
  background: var(--color-hover-bg);
106
+ color: var(--color-bright);
99
107
  }
100
108
 
101
- .theme-toggle svg {
102
- width: 1rem;
103
- height: 1rem;
109
+ /* Positioning class for fixed buttons */
110
+ .fixed-button {
111
+ position: fixed;
112
+ top: 1rem;
113
+ }
114
+
115
+ /* Specific positioning and z-index for theme toggle */
116
+ .theme-toggle {
117
+ right: 1rem;
118
+ z-index: 100;
104
119
  }
105
120
 
106
121
  {% block font_faces %}
@@ -178,7 +193,7 @@
178
193
  <body>
179
194
  {% block theme_toggle %}
180
195
  {% if show_theme_toggle %}
181
- <button class="theme-toggle" aria-label="toggle dark mode">
196
+ <button class="button fixed-button theme-toggle" aria-label="toggle dark mode">
182
197
  <i data-feather="moon"></i>
183
198
  </button>
184
199
  {% endif %}
@@ -197,11 +212,20 @@
197
212
  document.addEventListener('DOMContentLoaded', () => {
198
213
  // Add copy buttons to code blocks
199
214
  document.querySelectorAll('pre').forEach(pre => {
200
- // Skip if already has a copy button
201
- if (pre.querySelector('.code-copy-button')) {
215
+ // Skip if already has a copy button (check parent for wrapper)
216
+ if (pre.parentElement.classList.contains('code-block-wrapper')) {
202
217
  return;
203
218
  }
204
219
 
220
+ // Create wrapper div
221
+ const wrapper = document.createElement('div');
222
+ wrapper.className = 'code-block-wrapper';
223
+
224
+ // Insert wrapper before pre and move pre inside it
225
+ pre.parentNode.insertBefore(wrapper, pre);
226
+ wrapper.appendChild(pre);
227
+
228
+ // Create copy button
205
229
  const copyButton = document.createElement('button');
206
230
  copyButton.className = 'code-copy-button';
207
231
  copyButton.setAttribute('aria-label', 'Copy code');
@@ -229,7 +253,8 @@
229
253
  });
230
254
  });
231
255
 
232
- pre.appendChild(copyButton);
256
+ // Add button to wrapper, not to pre
257
+ wrapper.appendChild(copyButton);
233
258
  });
234
259
 
235
260
  // Theme toggle (if present on page)
@@ -307,8 +332,9 @@
307
332
  }
308
333
  });
309
334
 
310
- {% block scripts_extra %}{% endblock scripts_extra %}
335
+
311
336
  </script>
337
+ {% block scripts_extra %}{% endblock scripts_extra %}
312
338
  {% endblock scripts %}
313
339
 
314
340
  {% block analytics %}{% endblock analytics %}