@nogataka/smart-edit 0.0.16 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/LICENSE +0 -1
  2. package/README.md +144 -67
  3. package/dist/cli.js +2 -2
  4. package/dist/devtools/generate_prompt_factory.js +5 -5
  5. package/dist/index.d.ts +33 -34
  6. package/dist/index.js +33 -34
  7. package/dist/interprompt/multilang_prompt.js +2 -2
  8. package/dist/interprompt/prompt_factory.js +2 -2
  9. package/dist/interprompt/util/class_decorators.d.ts +1 -1
  10. package/dist/interprompt/util/class_decorators.js +1 -1
  11. package/dist/{serena → smart-edit}/agent.d.ts +20 -20
  12. package/dist/{serena → smart-edit}/agent.js +43 -43
  13. package/dist/{serena → smart-edit}/analytics.d.ts +1 -1
  14. package/dist/{serena → smart-edit}/analytics.js +3 -3
  15. package/dist/smart-edit/cli.d.ts +9 -0
  16. package/dist/{serena → smart-edit}/cli.js +49 -99
  17. package/dist/{serena → smart-edit}/code_editor.d.ts +7 -7
  18. package/dist/{serena → smart-edit}/config/context_mode.d.ts +13 -13
  19. package/dist/{serena → smart-edit}/config/context_mode.js +12 -12
  20. package/dist/{serena/config/serena_config.d.ts → smart-edit/config/smart_edit_config.d.ts} +14 -14
  21. package/dist/{serena/config/serena_config.js → smart-edit/config/smart_edit_config.js} +31 -31
  22. package/dist/smart-edit/constants.d.ts +18 -0
  23. package/dist/smart-edit/constants.js +27 -0
  24. package/dist/{serena → smart-edit}/dashboard.d.ts +3 -3
  25. package/dist/{serena → smart-edit}/dashboard.js +10 -10
  26. package/dist/{serena → smart-edit}/gui_log_viewer.js +6 -6
  27. package/dist/{serena → smart-edit}/mcp.d.ts +40 -40
  28. package/dist/{serena → smart-edit}/mcp.js +38 -38
  29. package/dist/{serena → smart-edit}/project.d.ts +7 -7
  30. package/dist/{serena → smart-edit}/project.js +18 -18
  31. package/dist/{serena → smart-edit}/prompt_factory.d.ts +3 -3
  32. package/dist/{serena → smart-edit}/prompt_factory.js +1 -1
  33. package/dist/{serena → smart-edit}/resources/config/contexts/codex.yml +2 -2
  34. package/dist/{serena → smart-edit}/resources/config/contexts/context.template.yml +1 -1
  35. package/dist/{serena → smart-edit}/resources/config/contexts/ide-assistant.yml +2 -2
  36. package/dist/{serena → smart-edit}/resources/config/modes/mode.template.yml +1 -1
  37. package/dist/{serena → smart-edit}/resources/config/prompt_templates/simple_tool_outputs.yml +1 -1
  38. package/dist/smart-edit/resources/dashboard/dashboard.js +13 -0
  39. package/dist/smart-edit/resources/dashboard/index.css +1 -0
  40. package/dist/smart-edit/resources/dashboard/index.html +13 -0
  41. package/dist/{serena → smart-edit}/resources/project.template.yml +6 -6
  42. package/dist/{serena/resources/serena_config.template.yml → smart-edit/resources/smart_edit_config.template.yml} +14 -14
  43. package/dist/{serena → smart-edit}/symbol.d.ts +7 -7
  44. package/dist/{serena → smart-edit}/symbol.js +2 -2
  45. package/dist/{serena → smart-edit}/text_utils.js +2 -2
  46. package/dist/{serena → smart-edit}/tools/config_tools.d.ts +1 -1
  47. package/dist/{serena → smart-edit}/tools/config_tools.js +6 -6
  48. package/dist/{serena → smart-edit}/tools/memory_tools.d.ts +4 -4
  49. package/dist/{serena → smart-edit}/tools/memory_tools.js +5 -5
  50. package/dist/{serena → smart-edit}/tools/tools_base.d.ts +15 -15
  51. package/dist/{serena → smart-edit}/tools/tools_base.js +7 -7
  52. package/dist/{serena → smart-edit}/util/exception.d.ts +2 -2
  53. package/dist/{serena → smart-edit}/util/exception.js +2 -2
  54. package/dist/{serena → smart-edit}/util/file_system.js +3 -3
  55. package/dist/{serena → smart-edit}/util/git.js +3 -3
  56. package/dist/{serena → smart-edit}/util/inspection.d.ts +3 -3
  57. package/dist/{serena → smart-edit}/util/inspection.js +3 -3
  58. package/dist/{serena → smart-edit}/util/logging.d.ts +6 -6
  59. package/dist/{serena → smart-edit}/util/logging.js +7 -7
  60. package/dist/{serena → smart-edit}/util/shell.js +1 -1
  61. package/dist/smart-edit/version.d.ts +1 -0
  62. package/dist/{serena → smart-edit}/version.js +3 -3
  63. package/dist/{solidlsp → smart-lsp}/language_servers/autoload.js +1 -1
  64. package/dist/smart-lsp/language_servers/bash_language_server.d.ts +10 -0
  65. package/dist/{solidlsp → smart-lsp}/language_servers/bash_language_server.js +8 -8
  66. package/dist/{solidlsp → smart-lsp}/language_servers/clangd_language_server.d.ts +4 -4
  67. package/dist/{solidlsp → smart-lsp}/language_servers/clangd_language_server.js +9 -9
  68. package/dist/{solidlsp → smart-lsp}/language_servers/clojure_lsp.d.ts +4 -4
  69. package/dist/{solidlsp → smart-lsp}/language_servers/clojure_lsp.js +9 -9
  70. package/dist/{solidlsp → smart-lsp}/language_servers/common.d.ts +2 -2
  71. package/dist/{solidlsp → smart-lsp}/language_servers/common.js +1 -1
  72. package/dist/{solidlsp → smart-lsp}/language_servers/csharp_language_server.d.ts +4 -4
  73. package/dist/{solidlsp → smart-lsp}/language_servers/csharp_language_server.js +12 -12
  74. package/dist/smart-lsp/language_servers/dart_language_server.d.ts +10 -0
  75. package/dist/{solidlsp → smart-lsp}/language_servers/dart_language_server.js +13 -13
  76. package/dist/{solidlsp → smart-lsp}/language_servers/eclipse_jdtls.d.ts +4 -4
  77. package/dist/{solidlsp → smart-lsp}/language_servers/eclipse_jdtls.js +12 -12
  78. package/dist/{solidlsp → smart-lsp}/language_servers/erlang_language_server.d.ts +3 -3
  79. package/dist/{solidlsp → smart-lsp}/language_servers/erlang_language_server.js +6 -6
  80. package/dist/{solidlsp → smart-lsp}/language_servers/gopls.d.ts +3 -3
  81. package/dist/{solidlsp → smart-lsp}/language_servers/gopls.js +4 -4
  82. package/dist/{solidlsp → smart-lsp}/language_servers/intelephense.d.ts +4 -4
  83. package/dist/{solidlsp → smart-lsp}/language_servers/intelephense.js +11 -11
  84. package/dist/{solidlsp → smart-lsp}/language_servers/jedi_server.d.ts +4 -4
  85. package/dist/{solidlsp → smart-lsp}/language_servers/jedi_server.js +4 -4
  86. package/dist/{solidlsp → smart-lsp}/language_servers/kotlin_language_server.d.ts +4 -4
  87. package/dist/{solidlsp → smart-lsp}/language_servers/kotlin_language_server.js +9 -9
  88. package/dist/{solidlsp → smart-lsp}/language_servers/lua_ls.d.ts +4 -4
  89. package/dist/{solidlsp → smart-lsp}/language_servers/lua_ls.js +10 -10
  90. package/dist/{solidlsp → smart-lsp}/language_servers/nixd_language_server.d.ts +4 -4
  91. package/dist/{solidlsp → smart-lsp}/language_servers/nixd_language_server.js +7 -7
  92. package/dist/{solidlsp → smart-lsp}/language_servers/pyright_server.d.ts +4 -4
  93. package/dist/{solidlsp → smart-lsp}/language_servers/pyright_server.js +3 -3
  94. package/dist/{solidlsp → smart-lsp}/language_servers/r_language_server.d.ts +4 -4
  95. package/dist/{solidlsp → smart-lsp}/language_servers/r_language_server.js +5 -5
  96. package/dist/smart-lsp/language_servers/ruby_common.d.ts +10 -0
  97. package/dist/{solidlsp → smart-lsp}/language_servers/ruby_common.js +4 -4
  98. package/dist/{solidlsp → smart-lsp}/language_servers/ruby_lsp.d.ts +4 -4
  99. package/dist/{solidlsp → smart-lsp}/language_servers/ruby_lsp.js +10 -10
  100. package/dist/{solidlsp → smart-lsp}/language_servers/rust_analyzer.d.ts +4 -4
  101. package/dist/{solidlsp → smart-lsp}/language_servers/rust_analyzer.js +4 -4
  102. package/dist/{solidlsp → smart-lsp}/language_servers/solargraph.d.ts +4 -4
  103. package/dist/{solidlsp → smart-lsp}/language_servers/solargraph.js +10 -10
  104. package/dist/{solidlsp → smart-lsp}/language_servers/sourcekit_lsp.d.ts +4 -4
  105. package/dist/{solidlsp → smart-lsp}/language_servers/sourcekit_lsp.js +7 -7
  106. package/dist/{solidlsp → smart-lsp}/language_servers/terraform_ls.d.ts +4 -4
  107. package/dist/{solidlsp → smart-lsp}/language_servers/terraform_ls.js +14 -14
  108. package/dist/{solidlsp → smart-lsp}/language_servers/typescript_language_server.d.ts +4 -4
  109. package/dist/{solidlsp → smart-lsp}/language_servers/typescript_language_server.js +11 -11
  110. package/dist/{solidlsp → smart-lsp}/language_servers/vts_language_server.d.ts +4 -4
  111. package/dist/{solidlsp → smart-lsp}/language_servers/vts_language_server.js +10 -10
  112. package/dist/{solidlsp → smart-lsp}/language_servers/zls.d.ts +4 -4
  113. package/dist/{solidlsp → smart-lsp}/language_servers/zls.js +6 -6
  114. package/dist/{solidlsp → smart-lsp}/ls.d.ts +25 -25
  115. package/dist/{solidlsp → smart-lsp}/ls.js +19 -19
  116. package/dist/{solidlsp → smart-lsp}/ls_config.d.ts +0 -5
  117. package/dist/{solidlsp → smart-lsp}/ls_config.js +0 -5
  118. package/dist/{solidlsp → smart-lsp}/ls_exceptions.d.ts +1 -1
  119. package/dist/{solidlsp → smart-lsp}/ls_exceptions.js +2 -2
  120. package/dist/{solidlsp → smart-lsp}/ls_handler.d.ts +7 -7
  121. package/dist/{solidlsp → smart-lsp}/ls_handler.js +12 -12
  122. package/dist/{solidlsp → smart-lsp}/ls_request.d.ts +4 -4
  123. package/dist/{solidlsp → smart-lsp}/ls_request.js +3 -3
  124. package/package.json +14 -4
  125. package/dist/serena/agno.d.ts +0 -111
  126. package/dist/serena/agno.js +0 -278
  127. package/dist/serena/cli.d.ts +0 -9
  128. package/dist/serena/constants.d.ts +0 -18
  129. package/dist/serena/constants.js +0 -27
  130. package/dist/serena/resources/dashboard/dashboard.js +0 -815
  131. package/dist/serena/resources/dashboard/index.html +0 -307
  132. package/dist/serena/resources/dashboard/jquery.min.js +0 -3
  133. package/dist/serena/version.d.ts +0 -1
  134. package/dist/solidlsp/language_servers/bash_language_server.d.ts +0 -10
  135. package/dist/solidlsp/language_servers/dart_language_server.d.ts +0 -10
  136. package/dist/solidlsp/language_servers/ruby_common.d.ts +0 -10
  137. /package/dist/{serena → smart-edit}/code_editor.js +0 -0
  138. /package/dist/{serena → smart-edit}/generated/generated_prompt_factory.d.ts +0 -0
  139. /package/dist/{serena → smart-edit}/generated/generated_prompt_factory.js +0 -0
  140. /package/dist/{serena → smart-edit}/gui_log_viewer.d.ts +0 -0
  141. /package/dist/{serena → smart-edit}/resources/config/contexts/agent.yml +0 -0
  142. /package/dist/{serena → smart-edit}/resources/config/contexts/chatgpt.yml +0 -0
  143. /package/dist/{serena → smart-edit}/resources/config/contexts/desktop-app.yml +0 -0
  144. /package/dist/{serena → smart-edit}/resources/config/contexts/oaicompat-agent.yml +0 -0
  145. /package/dist/{serena → smart-edit}/resources/config/internal_modes/jetbrains.yml +0 -0
  146. /package/dist/{serena → smart-edit}/resources/config/modes/editing.yml +0 -0
  147. /package/dist/{serena → smart-edit}/resources/config/modes/interactive.yml +0 -0
  148. /package/dist/{serena → smart-edit}/resources/config/modes/no-onboarding.yml +0 -0
  149. /package/dist/{serena → smart-edit}/resources/config/modes/onboarding.yml +0 -0
  150. /package/dist/{serena → smart-edit}/resources/config/modes/one-shot.yml +0 -0
  151. /package/dist/{serena → smart-edit}/resources/config/modes/planning.yml +0 -0
  152. /package/dist/{serena → smart-edit}/resources/config/prompt_templates/system_prompt.yml +0 -0
  153. /package/dist/{serena/resources/dashboard/serena-icon-16.svg → smart-edit/resources/dashboard/smart-edit-icon-16.svg} +0 -0
  154. /package/dist/{serena/resources/dashboard/serena-icon-32.svg → smart-edit/resources/dashboard/smart-edit-icon-32.svg} +0 -0
  155. /package/dist/{serena/resources/dashboard/serena-icon-48.svg → smart-edit/resources/dashboard/smart-edit-icon-48.svg} +0 -0
  156. /package/dist/{serena/resources/dashboard/serena-logs-dark-mode.svg → smart-edit/resources/dashboard/smart-edit-logs-dark-mode.svg} +0 -0
  157. /package/dist/{serena/resources/dashboard/serena-logs.svg → smart-edit/resources/dashboard/smart-edit-logs.svg} +0 -0
  158. /package/dist/{serena → smart-edit}/text_utils.d.ts +0 -0
  159. /package/dist/{serena → smart-edit}/tools/cmd_tools.d.ts +0 -0
  160. /package/dist/{serena → smart-edit}/tools/cmd_tools.js +0 -0
  161. /package/dist/{serena → smart-edit}/tools/file_tools.d.ts +0 -0
  162. /package/dist/{serena → smart-edit}/tools/file_tools.js +0 -0
  163. /package/dist/{serena → smart-edit}/tools/index.d.ts +0 -0
  164. /package/dist/{serena → smart-edit}/tools/index.js +0 -0
  165. /package/dist/{serena → smart-edit}/tools/symbol_tools.d.ts +0 -0
  166. /package/dist/{serena → smart-edit}/tools/symbol_tools.js +0 -0
  167. /package/dist/{serena → smart-edit}/tools/workflow_tools.d.ts +0 -0
  168. /package/dist/{serena → smart-edit}/tools/workflow_tools.js +0 -0
  169. /package/dist/{serena → smart-edit}/util/class_decorators.d.ts +0 -0
  170. /package/dist/{serena → smart-edit}/util/class_decorators.js +0 -0
  171. /package/dist/{serena → smart-edit}/util/file_system.d.ts +0 -0
  172. /package/dist/{serena → smart-edit}/util/general.d.ts +0 -0
  173. /package/dist/{serena → smart-edit}/util/general.js +0 -0
  174. /package/dist/{serena → smart-edit}/util/git.d.ts +0 -0
  175. /package/dist/{serena → smart-edit}/util/shell.d.ts +0 -0
  176. /package/dist/{serena → smart-edit}/util/thread.d.ts +0 -0
  177. /package/dist/{serena → smart-edit}/util/thread.js +0 -0
  178. /package/dist/{solidlsp → smart-lsp}/language_servers/autoload.d.ts +0 -0
  179. /package/dist/{solidlsp → smart-lsp}/ls_types.d.ts +0 -0
  180. /package/dist/{solidlsp → smart-lsp}/ls_types.js +0 -0
  181. /package/dist/{solidlsp → smart-lsp}/lsp_protocol_handler/server.d.ts +0 -0
  182. /package/dist/{solidlsp → smart-lsp}/lsp_protocol_handler/server.js +0 -0
  183. /package/dist/{solidlsp → smart-lsp}/util/subprocess_util.d.ts +0 -0
  184. /package/dist/{solidlsp → smart-lsp}/util/subprocess_util.js +0 -0
  185. /package/dist/{solidlsp → smart-lsp}/util/zip.d.ts +0 -0
  186. /package/dist/{solidlsp → smart-lsp}/util/zip.js +0 -0
@@ -0,0 +1 @@
1
+ :root{--bg-primary: #f2f2f2;--bg-secondary: #ffffff;--text-primary: #1a1a1a;--text-secondary: #3d3d3d;--text-muted: #777;--border-color: #cfcfcf;--btn-primary: #2b2b2b;--btn-hover: #1e1e1e;--btn-disabled: #9c9c9c;--btn-text: #f5f5f5;--shadow: 0 2px 4px rgba(0, 0, 0, .12);--tool-highlight: #e5e5e5;--tool-highlight-text: #1a1a1a;--log-debug: #888;--log-info: #1a1a1a;--log-warning: #454545;--log-error: #111111;--stats-header: #ebebeb;--sidebar-width: 240px;--sidebar-width-collapsed: 64px;--topbar-height: 56px;--content-padding: 24px;--card-bg: var(--bg-secondary);--card-border-radius: 12px;--card-shadow: 0 2px 8px rgba(0, 0, 0, .08);--card-shadow-hover: 0 4px 16px rgba(0, 0, 0, .12);--card-padding: 20px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--font-size-xs: 11px;--font-size-sm: 13px;--font-size-base: 14px;--font-size-lg: 16px;--font-size-xl: 20px;--font-size-2xl: 24px;--status-success: #22c55e;--status-warning: #f59e0b;--status-error: #ef4444;--status-info: #3b82f6;--input-bg: var(--bg-primary);--input-border: var(--border-color);--input-focus-border: #3b82f6;--input-focus-ring: rgba(59, 130, 246, .3);--nav-item-hover: rgba(0, 0, 0, .04);--nav-item-active: rgba(59, 130, 246, .1);--nav-item-active-border: #3b82f6;--transition-fast: .15s ease;--transition-normal: .2s ease;--transition-slow: .3s ease}[data-theme=dark]{--bg-primary: #121212;--bg-secondary: #1e1e1e;--text-primary: #f1f1f1;--text-secondary: #d0d0d0;--text-muted: #9a9a9a;--border-color: #2c2c2c;--btn-primary: #ededed;--btn-hover: #d6d6d6;--btn-disabled: #4a4a4a;--btn-text: #111111;--shadow: 0 2px 4px rgba(0, 0, 0, .4);--tool-highlight: #2a2a2a;--tool-highlight-text: #f1f1f1;--log-debug: #a0a0a0;--log-info: #f1f1f1;--log-warning: #c7c7c7;--log-error: #ffffff;--stats-header: #262626;--card-bg: var(--bg-secondary);--card-shadow: 0 2px 8px rgba(0, 0, 0, .3);--card-shadow-hover: 0 4px 16px rgba(0, 0, 0, .4);--input-bg: #1a1a1a;--nav-item-hover: rgba(255, 255, 255, .04);--nav-item-active: rgba(59, 130, 246, .15)}*{box-sizing:border-box}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji";margin:0;padding:0;background-color:var(--bg-primary);color:var(--text-primary);transition:background-color .3s ease,color .3s ease;overflow:hidden;height:100vh}#root{height:100%}.header{text-align:center;margin-bottom:20px;font-size:1.5rem;font-weight:700}.log-container{background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;height:100%;min-height:400px;overflow-y:auto;overflow-x:auto;padding:var(--spacing-md);white-space:pre-wrap;font-size:12px;line-height:1.5;color:var(--text-primary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;transition:background-color .3s ease,border-color .3s ease,color .3s ease}.log-card{height:calc(100vh - var(--topbar-height) - var(--content-padding) * 2 - var(--spacing-md))}.controls{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.btn{background-color:var(--btn-primary);color:var(--btn-text);border:none;padding:8px 16px;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .3s ease}.btn:hover{background-color:var(--btn-hover)}.btn:disabled{background-color:var(--btn-disabled);color:var(--text-muted);cursor:not-allowed}.theme-toggle{display:flex;align-items:center;gap:5px;background-color:var(--bg-secondary);border:1px solid var(--border-color);border-radius:4px;padding:6px 12px;cursor:pointer;transition:background-color .3s ease,border-color .3s ease}.theme-toggle:hover{background-color:var(--border-color)}.theme-toggle .icon{font-size:16px}.log-debug{color:var(--log-debug)}.log-info{color:var(--log-info)}.log-warning{color:var(--log-warning);font-weight:600}.log-error{color:var(--log-error);font-weight:700}.log-default{color:var(--log-info)}.tool-name{background-color:var(--tool-highlight);color:var(--tool-highlight-text);font-weight:700;padding:0 2px;border-radius:2px}.loading{text-align:center;color:var(--text-muted);font-style:italic}.error-message{color:var(--log-error);text-align:center;margin:10px 0}.charts-container{display:flex;flex-wrap:wrap;gap:15px;justify-content:space-between;max-width:1400px;margin:0 auto}.chart-group{flex:1;min-width:280px;max-width:320px;text-align:center}.chart-wide{flex:0 0 100%;min-width:100%;margin-top:10px}.chart-group h3{margin:0 0 10px;color:var(--text-secondary)}.stats-summary{margin:0 auto;border-collapse:collapse;background:var(--bg-secondary);border-radius:5px;overflow:hidden;box-shadow:var(--shadow);transition:background-color .3s ease,box-shadow .3s ease}.stats-summary th,.stats-summary td{padding:10px 20px;text-align:left;border-bottom:1px solid var(--border-color);color:var(--text-primary);transition:border-color .3s ease,color .3s ease}.stats-summary th{background-color:var(--stats-header);font-weight:700;transition:background-color .3s ease}.stats-summary tr:last-child td{border-bottom:none}@media(max-width:768px){.charts-container{flex-direction:column}.chart-group,.chart-wide{min-width:auto;max-width:none}.controls{flex-direction:column;gap:5px}}.main-layout{display:flex;height:100vh;overflow:hidden}.sidebar{width:var(--sidebar-width);height:100%;background-color:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column;transition:width var(--transition-normal);flex-shrink:0;overflow:hidden}.sidebar.collapsed{width:var(--sidebar-width-collapsed)}.sidebar-header{height:var(--topbar-height);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-md);border-bottom:1px solid var(--border-color);flex-shrink:0}.sidebar-logo{display:flex;align-items:center;gap:var(--spacing-sm);font-weight:600;font-size:var(--font-size-lg);color:var(--text-primary);white-space:nowrap;overflow:hidden}.sidebar-logo-icon{width:28px;height:28px;flex-shrink:0}.sidebar.collapsed .sidebar-logo-text{display:none}.sidebar-toggle{background:none;border:none;cursor:pointer;padding:var(--spacing-xs);border-radius:4px;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;transition:background-color var(--transition-fast)}.sidebar-toggle:hover{background-color:var(--nav-item-hover)}.sidebar-nav{flex:1;padding:var(--spacing-md) var(--spacing-sm);overflow-y:auto}.nav-item{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-md);border-radius:8px;cursor:pointer;color:var(--text-secondary);transition:all var(--transition-fast);margin-bottom:var(--spacing-xs);border:none;background:none;width:100%;text-align:left;font-size:var(--font-size-base)}.nav-item:hover{background-color:var(--nav-item-hover);color:var(--text-primary)}.nav-item.active{background-color:var(--nav-item-active);color:var(--nav-item-active-border);font-weight:500}.nav-item-icon{width:20px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.nav-item-label{white-space:nowrap;overflow:hidden}.sidebar.collapsed .nav-item-label{display:none}.sidebar.collapsed .nav-item{justify-content:center;padding:var(--spacing-sm)}.sidebar-footer{padding:var(--spacing-md) var(--spacing-sm);border-top:1px solid var(--border-color)}.shutdown-btn{color:var(--status-error)!important}.shutdown-btn:hover{background-color:#ef44441a!important;color:var(--status-error)!important}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.topbar{height:var(--topbar-height);background-color:var(--bg-secondary);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding:0 var(--content-padding);flex-shrink:0}.topbar-left{display:flex;align-items:center;gap:var(--spacing-md)}.topbar-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary)}.topbar-subtitle{font-size:var(--font-size-sm);color:var(--text-muted)}.topbar-right{display:flex;align-items:center;gap:var(--spacing-md)}.connection-indicator{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm);color:var(--text-muted)}.connection-dot{width:8px;height:8px;border-radius:50%;background-color:var(--status-error)}.connection-dot.streaming{background-color:var(--status-success);animation:pulse 2s infinite}.connection-dot.polling{background-color:var(--status-warning)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.content-area{flex:1;overflow-y:auto;padding:var(--content-padding);background-color:var(--bg-primary)}.card{background-color:var(--card-bg);border-radius:var(--card-border-radius);box-shadow:var(--card-shadow);padding:var(--card-padding);transition:box-shadow var(--transition-fast)}.card:hover{box-shadow:var(--card-shadow-hover)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-md)}.card-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary);margin:0}.card-subtitle{font-size:var(--font-size-sm);color:var(--text-muted);margin:var(--spacing-xs) 0 0 0}.card-actions{display:flex;gap:var(--spacing-sm)}.card-body{color:var(--text-primary)}@media(max-width:768px){.sidebar{position:fixed;left:0;top:0;z-index:100;transform:translate(-100%);transition:transform var(--transition-normal)}.sidebar.open{transform:translate(0)}.sidebar-backdrop{position:fixed;inset:0;background-color:#00000080;z-index:99;opacity:0;visibility:hidden;transition:opacity var(--transition-normal)}.sidebar-backdrop.visible{opacity:1;visibility:visible}.topbar{padding:0 var(--spacing-md)}.content-area{padding:var(--spacing-md)}.mobile-menu-btn{display:flex;background:none;border:none;cursor:pointer;padding:var(--spacing-xs);color:var(--text-primary)}}@media(min-width:769px){.mobile-menu-btn,.sidebar-backdrop{display:none}}.log-panel{display:flex;flex-direction:column;gap:var(--spacing-md);height:100%}.log-panel-header{display:flex;flex-direction:column;gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.log-panel-controls{display:flex;align-items:center;gap:var(--spacing-sm)}.log-panel-content{flex:1;min-height:0}@media(max-width:768px){.log-panel-header{gap:var(--spacing-sm)}}.stats-panel{display:flex;flex-direction:column;gap:var(--spacing-lg)}.stats-panel-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--spacing-md)}.stats-panel-actions{display:flex;gap:var(--spacing-sm)}.stats-estimator{font-size:var(--font-size-sm);color:var(--text-muted)}.stats-empty{text-align:center;padding:var(--spacing-xl);color:var(--text-muted)}.stats-empty p{margin:0}.stats-empty-hint{font-size:var(--font-size-sm);margin-top:var(--spacing-sm)!important}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--spacing-md)}.metric-card{background-color:var(--card-bg);border-radius:var(--card-border-radius);box-shadow:var(--card-shadow);padding:var(--card-padding);transition:box-shadow var(--transition-fast)}.metric-card:hover{box-shadow:var(--card-shadow-hover)}.metric-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-sm)}.metric-card-title{font-size:var(--font-size-sm);color:var(--text-muted);font-weight:500}.metric-card-icon{color:var(--text-muted)}.metric-card-value{font-size:var(--font-size-2xl);font-weight:700;color:var(--text-primary);line-height:1.2}.metric-card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:var(--spacing-sm)}.metric-card-subtitle{font-size:var(--font-size-xs);color:var(--text-muted)}.metric-card-trend{font-size:var(--font-size-xs);font-weight:600;padding:2px 6px;border-radius:4px}.metric-card-trend.up{color:var(--status-success);background-color:#22c55e1a}.metric-card-trend.down{color:var(--status-error);background-color:#ef44441a}.metric-card-trend.neutral{color:var(--text-muted);background-color:var(--nav-item-hover)}.live-counter{font-variant-numeric:tabular-nums}.stats-charts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:var(--spacing-lg)}.stats-charts-row{width:100%}.pie-charts-row{display:flex;gap:var(--spacing-lg);justify-content:center;flex-wrap:wrap}.pie-chart-item{flex:1;min-width:250px;max-width:350px}.chart-container{position:relative;width:100%}.chart-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--text-muted);font-style:italic}@media(max-width:768px){.metrics-grid{grid-template-columns:repeat(2,1fr)}.stats-charts-grid{grid-template-columns:1fr}.pie-charts-row{flex-direction:column;align-items:center}.pie-chart-item{max-width:none;width:100%}}.session-panel{display:flex;flex-direction:column;gap:var(--spacing-lg)}.session-panel-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--spacing-lg);flex-wrap:wrap;gap:var(--spacing-md)}.session-panel-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary);margin:0}.session-panel-subtitle{font-size:var(--font-size-sm);color:var(--text-muted);margin:var(--spacing-xs) 0 0 0}.session-panel-actions{display:flex;gap:var(--spacing-sm)}.session-list{display:flex;flex-direction:column;gap:var(--spacing-md)}.session-list-empty{text-align:center;padding:var(--spacing-xl);color:var(--text-muted)}.session-list-empty p{margin:0}.session-list-empty-hint{font-size:var(--font-size-sm);margin-top:var(--spacing-sm)!important}.session-item{background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;padding:var(--spacing-md);transition:border-color var(--transition-fast)}.session-item:hover{border-color:var(--text-muted)}.session-item-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--spacing-sm)}.session-item-info{display:flex;flex-direction:column;gap:2px}.session-item-date{font-size:var(--font-size-base);font-weight:600;color:var(--text-primary)}.session-item-time{font-size:var(--font-size-sm);color:var(--text-muted)}.session-item-duration{font-size:var(--font-size-sm);color:var(--text-secondary);background-color:var(--nav-item-hover);padding:2px 8px;border-radius:4px}.session-item-project{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.session-item-stats{display:flex;gap:var(--spacing-lg);margin-bottom:var(--spacing-sm)}.session-stat{display:flex;flex-direction:column;gap:2px}.session-stat-label{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.session-stat-value{font-size:var(--font-size-base);font-weight:600;color:var(--text-primary);font-variant-numeric:tabular-nums}.session-item-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end}.session-action-btn{display:flex;align-items:center;gap:4px;padding:6px 12px;font-size:var(--font-size-sm);color:var(--text-secondary);background:none;border:1px solid var(--border-color);border-radius:4px;cursor:pointer;transition:all var(--transition-fast)}.session-action-btn:hover{color:var(--text-primary);border-color:var(--text-muted);background-color:var(--nav-item-hover)}.btn-danger{background-color:transparent;color:var(--status-error);border:1px solid var(--status-error)}.btn-danger:hover{background-color:var(--status-error);color:#fff}.export-btn{display:flex;align-items:center}@media(max-width:768px){.session-panel-header{flex-direction:column;align-items:stretch}.session-panel-actions{justify-content:flex-end}.session-item-stats{flex-wrap:wrap;gap:var(--spacing-md)}}.dashboard-overview{display:flex;flex-direction:column;gap:var(--spacing-lg)}.welcome-section{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--spacing-md)}.welcome-content{flex:1}.welcome-title{font-size:var(--font-size-xl);font-weight:600;color:var(--text-primary);margin:0 0 var(--spacing-xs) 0}.welcome-description{font-size:var(--font-size-base);color:var(--text-secondary);margin:0}.connection-badge{flex-shrink:0}.connection-status{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;font-size:var(--font-size-sm);font-weight:500}.connection-status:before{content:"";width:8px;height:8px;border-radius:50%}.connection-status.streaming{background-color:#22c55e1a;color:var(--status-success)}.connection-status.streaming:before{background-color:var(--status-success);animation:pulse 2s infinite}.connection-status.polling{background-color:#f59e0b1a;color:var(--status-warning)}.connection-status.polling:before{background-color:var(--status-warning)}.connection-status.disconnected{background-color:#ef44441a;color:var(--status-error)}.connection-status.disconnected:before{background-color:var(--status-error)}.quick-nav-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--spacing-md)}.quick-nav-card{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-md);background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;cursor:pointer;transition:all var(--transition-fast);text-align:left;width:100%}.quick-nav-card:hover{border-color:var(--input-focus-border);background-color:var(--nav-item-active)}.quick-nav-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;background-color:var(--nav-item-active);color:var(--input-focus-border);flex-shrink:0}.quick-nav-content{flex:1;min-width:0}.quick-nav-title{font-size:var(--font-size-base);font-weight:600;color:var(--text-primary);margin:0}.quick-nav-description{font-size:var(--font-size-sm);color:var(--text-muted);margin:4px 0 0}.quick-nav-arrow{color:var(--text-muted);flex-shrink:0;transition:transform var(--transition-fast)}.quick-nav-card:hover .quick-nav-arrow{transform:translate(4px);color:var(--input-focus-border)}@media(max-width:768px){.welcome-section{flex-direction:column}.quick-nav-grid{grid-template-columns:1fr}}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-input-icon{position:absolute;left:12px;color:var(--text-muted);pointer-events:none;display:flex;align-items:center}.search-input{width:100%;padding:8px 36px;border:1px solid var(--input-border);border-radius:6px;background-color:var(--input-bg);color:var(--text-primary);font-size:var(--font-size-sm);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.search-input:focus{outline:none;border-color:var(--input-focus-border);box-shadow:0 0 0 3px var(--input-focus-ring)}.search-input::placeholder{color:var(--text-muted)}.search-input-clear{position:absolute;right:8px;display:flex;align-items:center;justify-content:center;padding:4px;border:none;background:none;color:var(--text-muted);cursor:pointer;border-radius:4px;transition:color var(--transition-fast),background-color var(--transition-fast)}.search-input-clear:hover{color:var(--text-primary);background-color:var(--nav-item-hover)}.dropdown{position:relative;display:inline-block;min-width:140px}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;border:1px solid var(--input-border);border-radius:6px;background-color:var(--input-bg);color:var(--text-primary);font-size:var(--font-size-sm);cursor:pointer;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.dropdown-trigger:hover{border-color:var(--text-muted)}.dropdown-trigger:focus{outline:none;border-color:var(--input-focus-border);box-shadow:0 0 0 3px var(--input-focus-ring)}.dropdown-text{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-arrow{display:flex;align-items:center;margin-left:8px;color:var(--text-muted);transition:transform var(--transition-fast)}.dropdown-arrow.open{transform:rotate(180deg)}.dropdown-menu{position:absolute;top:100%;left:0;right:0;margin-top:4px;padding:4px;border:1px solid var(--border-color);border-radius:6px;background-color:var(--bg-secondary);box-shadow:var(--card-shadow);z-index:100;max-height:240px;overflow-y:auto}.dropdown-clear{display:block;width:100%;padding:6px 8px;border:none;background:none;color:var(--status-info);font-size:var(--font-size-xs);text-align:left;cursor:pointer;border-bottom:1px solid var(--border-color);margin-bottom:4px}.dropdown-clear:hover{text-decoration:underline}.dropdown-options{display:flex;flex-direction:column;gap:2px}.dropdown-option{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:4px;cursor:pointer;transition:background-color var(--transition-fast)}.dropdown-option:hover{background-color:var(--nav-item-hover)}.dropdown-option input[type=checkbox],.dropdown-option input[type=radio]{margin:0;accent-color:var(--input-focus-border)}.dropdown-option-label{font-size:var(--font-size-sm);color:var(--text-primary)}.log-filter-bar{display:flex;align-items:center;gap:var(--spacing-md);flex-wrap:wrap}.log-filter-search{flex:1;min-width:200px;max-width:300px}.log-filter-dropdowns{display:flex;align-items:center;gap:var(--spacing-sm)}.log-filter-clear{padding:8px 12px;font-size:var(--font-size-sm)}.icon-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:1px solid var(--input-border);border-radius:6px;background-color:var(--input-bg);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast)}.icon-btn:hover{border-color:var(--text-muted);color:var(--text-primary);background-color:var(--nav-item-hover)}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.reload-btn.spinning svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.filter-stats{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);color:var(--text-muted)}.filter-stats-count{font-weight:600;color:var(--text-primary)}@media(max-width:768px){.log-filter-bar{flex-direction:column;align-items:stretch}.log-filter-search{max-width:none}.log-filter-dropdowns{flex-wrap:wrap}.dropdown{flex:1;min-width:120px}}
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Smart Edit Dashboard</title>
7
+ <script type="module" crossorigin src="/dashboard/dashboard.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/dashboard/index.css">
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
@@ -28,7 +28,7 @@ read_only: false
28
28
  # * `check_onboarding_performed`: Checks whether project onboarding was already performed.
29
29
  # * `create_text_file`: Creates/overwrites a file in the project directory.
30
30
  # * `delete_lines`: Deletes a range of lines within a file.
31
- # * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
31
+ # * `delete_memory`: Deletes a memory from Smart-Edit's project-specific memory store.
32
32
  # * `execute_shell_command`: Executes a shell command.
33
33
  # * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
34
34
  # * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
@@ -42,22 +42,22 @@ read_only: false
42
42
  # * `insert_at_line`: Inserts content at a given line in a file.
43
43
  # * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
44
44
  # * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
45
- # * `list_memories`: Lists memories in Serena's project-specific memory store.
45
+ # * `list_memories`: Lists memories in Smart-Edit's project-specific memory store.
46
46
  # * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
47
47
  # * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
48
48
  # * `read_file`: Reads a file within the project directory.
49
- # * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
50
- # * `remove_project`: Removes a project from the Serena configuration.
49
+ # * `read_memory`: Reads the memory with the given name from Smart-Edit's project-specific memory store.
50
+ # * `remove_project`: Removes a project from the Smart-Edit configuration.
51
51
  # * `replace_lines`: Replaces a range of lines within a file with new content.
52
52
  # * `replace_symbol_body`: Replaces the full definition of a symbol.
53
- # * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
53
+ # * `restart_language_server`: Restarts the language server, may be necessary when edits not through Smart-Edit happen.
54
54
  # * `search_for_pattern`: Performs a search for a pattern in the project.
55
55
  # * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
56
56
  # * `switch_modes`: Activates modes by providing a list of their names
57
57
  # * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
58
58
  # * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
59
59
  # * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
60
- # * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
60
+ # * `write_memory`: Writes a named memory (for future reference) to Smart-Edit's project-specific memory store.
61
61
  excluded_tools: []
62
62
 
63
63
  # initial prompt for the project. It will always be given to the LLM upon activating the project
@@ -1,5 +1,5 @@
1
1
  gui_log_window: False
2
- # whether to open a graphical window with Serena's logs.
2
+ # whether to open a graphical window with Smart-Edit's logs.
3
3
  # This is mainly supported on Windows and (partly) on Linux; not available on macOS.
4
4
  # If you want to see the logs in a web browser, use the `web_dashboard` option instead.
5
5
  # Limitations: doesn't seem to work with the community version of Claude Desktop for Linux
@@ -9,35 +9,35 @@ gui_log_window: False
9
9
  # especially when using the agno playground, since the tool calls are not always shown,
10
10
  # and the input params are never shown in the agno UI.
11
11
  # When used as MCP server for Claude Desktop, the logs are primarily for troubleshooting.
12
- # Note: unfortunately, the various entities starting the Serena server or agent do so in
12
+ # Note: unfortunately, the various entities starting the Smart-Edit server or agent do so in
13
13
  # mysterious ways, often starting multiple instances of the process without shutting down
14
14
  # previous instances. This can lead to multiple log windows being opened, and only the last
15
- # window being updated. Since we can't control how agno or Claude Desktop start Serena,
15
+ # window being updated. Since we can't control how agno or Claude Desktop start Smart-Edit,
16
16
  # we have to live with this limitation for now.
17
17
 
18
18
  web_dashboard: True
19
- # whether to open the Serena web dashboard (which will be accessible through your web browser) that
20
- # shows Serena's current session logs - as an alternative to the GUI log window which
19
+ # whether to open the Smart-Edit web dashboard (which will be accessible through your web browser) that
20
+ # shows Smart-Edit's current session logs - as an alternative to the GUI log window which
21
21
  # is supported on all platforms.
22
22
 
23
23
  web_dashboard_open_on_launch: True
24
- # whether to open a browser window with the web dashboard when Serena starts (provided that web_dashboard
24
+ # whether to open a browser window with the web dashboard when Smart-Edit starts (provided that web_dashboard
25
25
  # is enabled). If set to False, you can still open the dashboard manually by navigating to
26
- # http://localhost:24282/dashboard/ in your web browser (24282 = 0x5EDA, SErena DAshboard).
26
+ # http://localhost:24282/dashboard/ in your web browser.
27
27
  # If you have multiple instances running, a higher port will be used; try port 24283, 24284, etc.
28
28
 
29
29
  log_level: 20
30
30
  # the minimum log level for the GUI log window and the dashboard (10 = debug, 20 = info, 30 = warning, 40 = error)
31
31
 
32
32
  trace_lsp_communication: False
33
- # whether to trace the communication between Serena and the language servers.
33
+ # whether to trace the communication between Smart-Edit and the language servers.
34
34
  # This is useful for debugging language server issues.
35
35
 
36
36
  ls_specific_settings: {}
37
37
  # Added on 23.08.2025
38
38
  # Advanced configuration option allowing to configure language server implementation specific options. Maps the language
39
39
  # (same entry as in project.yml) to the options.
40
- # Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available.
40
+ # Have a look at the docstring of the constructors of the LS implementations within smart-lsp (e.g., for C# or PHP) to see which options are available.
41
41
  # No documentation on options means no options are available.
42
42
  #
43
43
 
@@ -51,9 +51,9 @@ included_optional_tools: []
51
51
  # list of optional tools (which are disabled by default) to be included
52
52
 
53
53
  jetbrains: False
54
- # whether to enable JetBrains mode and use tools based on the Serena JetBrains IDE plugin
54
+ # whether to enable JetBrains mode and use tools based on the Smart-Edit JetBrains IDE plugin
55
55
  # instead of language server-based tools
56
- # NOTE: The plugin is yet unreleased. This is for Serena developers only.
56
+ # NOTE: The plugin is yet unreleased. This is for Smart-Edit developers only.
57
57
 
58
58
 
59
59
  default_max_tool_answer_chars: 150000
@@ -73,13 +73,13 @@ token_count_estimator: TIKTOKEN_GPT4O
73
73
  # and rate limits may apply.
74
74
 
75
75
 
76
- # MANAGED BY SERENA, KEEP AT THE BOTTOM OF THE YAML AND DON'T EDIT WITHOUT NEED
76
+ # MANAGED BY SMART-EDIT, KEEP AT THE BOTTOM OF THE YAML AND DON'T EDIT WITHOUT NEED
77
77
  # The list of registered projects.
78
- # To add a project, within a chat, simply ask Serena to "activate the project /path/to/project" or,
78
+ # To add a project, within a chat, simply ask Smart-Edit to "activate the project /path/to/project" or,
79
79
  # if the project was previously added, "activate the project <project name>".
80
80
  # By default, the project's name will be the name of the directory containing the project, but you may change it
81
81
  # by editing the (auto-generated) project configuration file `/path/project/project/.smart-edit/project.yml` file.
82
82
  # If you want to maintain full control of the project configuration, create the project.yml file manually and then
83
- # instruct Serena to activate the project by its path for first-time activation.
83
+ # instruct Smart-Edit to activate the project by its path for first-time activation.
84
84
  # NOTE: Make sure there are no name collisions in the names of registered projects.
85
85
  projects: []
@@ -1,5 +1,5 @@
1
- import type { SerenaAgent } from './agent.js';
2
- import type { SolidLanguageServer, ReferenceInSymbol, UnifiedSymbolInformation } from '../solidlsp/ls.js';
1
+ import type { SmartEditAgent } from './agent.js';
2
+ import type { SmartLanguageServer, ReferenceInSymbol, UnifiedSymbolInformation } from '../smart-lsp/ls.js';
3
3
  export interface LspPosition {
4
4
  line: number;
5
5
  character: number;
@@ -167,11 +167,11 @@ export interface FindSymbolOptions {
167
167
  export declare class LanguageServerSymbolRetriever {
168
168
  private _langServer;
169
169
  private readonly agent;
170
- constructor(langServer: SolidLanguageServer, agent?: SerenaAgent | null);
171
- setLanguageServer(langServer: SolidLanguageServer): void;
172
- set_language_server(langServer: SolidLanguageServer): void;
173
- getLanguageServer(): SolidLanguageServer;
174
- get_language_server(): SolidLanguageServer;
170
+ constructor(langServer: SmartLanguageServer, agent?: SmartEditAgent | null);
171
+ setLanguageServer(langServer: SmartLanguageServer): void;
172
+ set_language_server(langServer: SmartLanguageServer): void;
173
+ getLanguageServer(): SmartLanguageServer;
174
+ get_language_server(): SmartLanguageServer;
175
175
  findByName(namePath: string, options?: FindSymbolOptions): LanguageServerSymbol[];
176
176
  find_by_name(namePath: string, includeBody?: boolean, includeKinds?: number[] | SymbolKind[], excludeKinds?: number[] | SymbolKind[], substringMatching?: boolean, withinRelativePath?: string | null): LanguageServerSymbol[];
177
177
  getDocumentSymbols(relativePath: string): LanguageServerSymbol[];
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path';
2
- import { createSerenaLogger } from './util/logging.js';
3
- const { logger } = createSerenaLogger({ name: 'smart-edit.symbol', emitToConsole: false, level: 'info' });
2
+ import { createSmartEditLogger } from './util/logging.js';
3
+ const { logger } = createSmartEditLogger({ name: 'smart-edit.symbol', emitToConsole: false, level: 'info' });
4
4
  export var SymbolKind;
5
5
  (function (SymbolKind) {
6
6
  SymbolKind[SymbolKind["File"] = 1] = "File";
@@ -1,7 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { createSerenaLogger } from './util/logging.js';
4
- const { logger: log } = createSerenaLogger({ name: 'smart-edit.text_utils' });
3
+ import { createSmartEditLogger } from './util/logging.js';
4
+ const { logger: log } = createSmartEditLogger({ name: 'smart-edit.text_utils' });
5
5
  export var LineType;
6
6
  (function (LineType) {
7
7
  LineType["MATCH"] = "match";
@@ -23,7 +23,7 @@ export declare class ActivateProjectTool extends Tool {
23
23
  }
24
24
  export declare class RemoveProjectTool extends Tool {
25
25
  static readonly markers: Set<"does-not-require-active-project" | "optional">;
26
- static readonly description = "Removes a project from the Serena configuration.";
26
+ static readonly description = "Removes a project from the Smart-Edit configuration.";
27
27
  static readonly inputSchema: z.ZodObject<{
28
28
  project_name: z.ZodString;
29
29
  }, "strip", z.ZodTypeAny, {
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { SerenaAgentMode } from '../config/context_mode.js';
2
+ import { SmartEditAgentMode } from '../config/context_mode.js';
3
3
  import { Tool, ToolMarkerDoesNotRequireActiveProject, ToolMarkerOptional } from './tools_base.js';
4
4
  function stringifyUnknown(value, fallback = 'unknown') {
5
5
  if (value === undefined || value === null) {
@@ -112,7 +112,7 @@ export class ActivateProjectTool extends Tool {
112
112
  `Created and activated a new project with name '${projectName}' at ${activeProject.projectRoot}, language: ${language}. ` +
113
113
  "You can activate this project later by name.\n";
114
114
  if (projectYamlPath) {
115
- result += `The project's Serena configuration is in ${projectYamlPath}. In particular, you may want to edit the project name and the initial prompt.`;
115
+ result += `The project's Smart-Edit configuration is in ${projectYamlPath}. In particular, you may want to edit the project name and the initial prompt.`;
116
116
  }
117
117
  }
118
118
  else {
@@ -134,14 +134,14 @@ export class ActivateProjectTool extends Tool {
134
134
  }
135
135
  export class RemoveProjectTool extends Tool {
136
136
  static markers = new Set([ToolMarkerDoesNotRequireActiveProject, ToolMarkerOptional]);
137
- static description = 'Removes a project from the Serena configuration.';
137
+ static description = 'Removes a project from the Smart-Edit configuration.';
138
138
  static inputSchema = z.object({
139
139
  project_name: z.string().min(1, 'project_name must not be empty')
140
140
  });
141
141
  async apply(args) {
142
- const config = this.agent.serenaConfig;
142
+ const config = this.agent.smartEditConfig;
143
143
  if (typeof config.removeProject !== 'function') {
144
- throw new Error('Removing projects is not supported by the active Serena configuration.');
144
+ throw new Error('Removing projects is not supported by the active Smart-Edit configuration.');
145
145
  }
146
146
  await Promise.resolve(config.removeProject.call(config, args.project_name));
147
147
  return `Successfully removed project '${args.project_name}' from configuration.`;
@@ -154,7 +154,7 @@ export class SwitchModesTool extends Tool {
154
154
  modes: z.array(z.string().min(1, 'mode name must not be empty')).min(1, 'at least one mode must be provided')
155
155
  });
156
156
  async apply(args) {
157
- const modeInstances = args.modes.map((modeName) => SerenaAgentMode.load(modeName));
157
+ const modeInstances = args.modes.map((modeName) => SmartEditAgentMode.load(modeName));
158
158
  await Promise.resolve(this.agent.setModes(modeInstances));
159
159
  let result = `Successfully activated modes: ${modeInstances.map((mode) => mode.name).join(', ')}` + '\n';
160
160
  result += modeInstances.map((mode) => mode.prompt).join('\n') + '\n';
@@ -11,7 +11,7 @@ interface MemoryNameInput {
11
11
  }
12
12
  export declare class WriteMemoryTool extends Tool {
13
13
  static readonly markers: Set<"can-edit">;
14
- static readonly description = "Writes a named markdown memory entry to Serena's project-specific memory store.";
14
+ static readonly description = "Writes a named markdown memory entry to Smart-Edit's project-specific memory store.";
15
15
  static readonly inputSchema: z.ZodObject<{
16
16
  memory_name: z.ZodString;
17
17
  content: z.ZodString;
@@ -28,7 +28,7 @@ export declare class WriteMemoryTool extends Tool {
28
28
  apply(args: WriteMemoryInput): Promise<string>;
29
29
  }
30
30
  export declare class ReadMemoryTool extends Tool {
31
- static readonly description = "Reads the content of a memory file from Serena's project-specific memory store.";
31
+ static readonly description = "Reads the content of a memory file from Smart-Edit's project-specific memory store.";
32
32
  static readonly inputSchema: z.ZodObject<{
33
33
  memory_file_name: z.ZodString;
34
34
  max_answer_chars: z.ZodOptional<z.ZodNumber>;
@@ -42,12 +42,12 @@ export declare class ReadMemoryTool extends Tool {
42
42
  apply(args: MemoryNameInput): Promise<string>;
43
43
  }
44
44
  export declare class ListMemoriesTool extends Tool {
45
- static readonly description = "Lists the available memories in Serena's project-specific memory store as a JSON array.";
45
+ static readonly description = "Lists the available memories in Smart-Edit's project-specific memory store as a JSON array.";
46
46
  apply(_args?: Record<string, unknown>): Promise<string>;
47
47
  }
48
48
  export declare class DeleteMemoryTool extends Tool {
49
49
  static readonly markers: Set<"can-edit">;
50
- static readonly description = "Deletes a memory file from Serena's project-specific memory store.";
50
+ static readonly description = "Deletes a memory file from Smart-Edit's project-specific memory store.";
51
51
  static readonly inputSchema: z.ZodObject<{
52
52
  memory_file_name: z.ZodString;
53
53
  }, "strip", z.ZodTypeAny, {
@@ -73,7 +73,7 @@ async function callDeleteMemory(manager, name) {
73
73
  }
74
74
  export class WriteMemoryTool extends Tool {
75
75
  static markers = new Set([ToolMarkerCanEdit]);
76
- static description = "Writes a named markdown memory entry to Serena's project-specific memory store.";
76
+ static description = "Writes a named markdown memory entry to Smart-Edit's project-specific memory store.";
77
77
  static inputSchema = z.object({
78
78
  memory_name: z.string().min(1, 'memory_name must not be empty'),
79
79
  content: z.string(),
@@ -87,7 +87,7 @@ export class WriteMemoryTool extends Tool {
87
87
  const { memory_name, content, max_answer_chars = -1 } = args;
88
88
  let limit = max_answer_chars;
89
89
  if (limit === -1) {
90
- limit = this.agent.serenaConfig.defaultMaxToolAnswerChars;
90
+ limit = this.agent.smartEditConfig.defaultMaxToolAnswerChars;
91
91
  }
92
92
  if (limit <= 0) {
93
93
  throw new Error(`max_answer_chars must be positive or -1; got ${limit}`);
@@ -100,7 +100,7 @@ export class WriteMemoryTool extends Tool {
100
100
  }
101
101
  }
102
102
  export class ReadMemoryTool extends Tool {
103
- static description = "Reads the content of a memory file from Serena's project-specific memory store.";
103
+ static description = "Reads the content of a memory file from Smart-Edit's project-specific memory store.";
104
104
  static inputSchema = z.object({
105
105
  memory_file_name: z.string().min(1, 'memory_file_name must not be empty'),
106
106
  max_answer_chars: z
@@ -115,7 +115,7 @@ export class ReadMemoryTool extends Tool {
115
115
  }
116
116
  }
117
117
  export class ListMemoriesTool extends Tool {
118
- static description = "Lists the available memories in Serena's project-specific memory store as a JSON array.";
118
+ static description = "Lists the available memories in Smart-Edit's project-specific memory store as a JSON array.";
119
119
  async apply(_args = {}) {
120
120
  const memories = await callListMemories(this.memoriesManager);
121
121
  return JSON.stringify(memories);
@@ -123,7 +123,7 @@ export class ListMemoriesTool extends Tool {
123
123
  }
124
124
  export class DeleteMemoryTool extends Tool {
125
125
  static markers = new Set([ToolMarkerCanEdit]);
126
- static description = "Deletes a memory file from Serena's project-specific memory store.";
126
+ static description = "Deletes a memory file from Smart-Edit's project-specific memory store.";
127
127
  static inputSchema = z.object({
128
128
  memory_file_name: z.string().min(1, 'memory_file_name must not be empty')
129
129
  });
@@ -1,8 +1,8 @@
1
1
  import { type ZodTypeAny } from 'zod';
2
- import type { SerenaAgentMode } from '../config/context_mode.js';
3
- import type { Language } from '../../solidlsp/ls_config.js';
4
- import type { SerenaPromptFactory } from '../prompt_factory.js';
5
- import type { SolidLanguageServer } from '../../solidlsp/ls.js';
2
+ import type { SmartEditAgentMode } from '../config/context_mode.js';
3
+ import type { Language } from '../../smart-lsp/ls_config.js';
4
+ import type { SmartEditPromptFactory } from '../prompt_factory.js';
5
+ import type { SmartLanguageServer } from '../../smart-lsp/ls.js';
6
6
  import type { LanguageServerSymbolRetriever } from '../symbol.js';
7
7
  import type { LanguageServerCodeEditor } from '../code_editor.js';
8
8
  import type { LinesRead } from '../agent.js';
@@ -14,7 +14,7 @@ export declare const ToolMarkerOptional: "optional";
14
14
  export declare const ToolMarkerSymbolicRead: "symbolic-read";
15
15
  export declare const ToolMarkerSymbolicEdit: "symbolic-edit";
16
16
  export type ToolMarker = typeof ToolMarkerCanEdit | typeof ToolMarkerDoesNotRequireActiveProject | typeof ToolMarkerOptional | typeof ToolMarkerSymbolicRead | typeof ToolMarkerSymbolicEdit;
17
- export interface SerenaConfigLike {
17
+ export interface SmartEditConfigLike {
18
18
  defaultMaxToolAnswerChars: number;
19
19
  toolTimeout: number;
20
20
  projectNames: string[];
@@ -34,7 +34,7 @@ export interface ProjectLike {
34
34
  isNewlyCreated?: boolean;
35
35
  pathToProjectYml?: () => string;
36
36
  }
37
- export type PromptFactoryLike = SerenaPromptFactory;
37
+ export type PromptFactoryLike = SmartEditPromptFactory;
38
38
  export interface MemoriesManagerLike {
39
39
  listMemories(): string[] | Promise<string[]> | Iterable<unknown> | Promise<Iterable<unknown>>;
40
40
  list_memories?(): string[] | Promise<string[]> | Iterable<unknown> | Promise<Iterable<unknown>>;
@@ -46,7 +46,7 @@ export interface MemoriesManagerLike {
46
46
  delete_memory?(name: string): string | Promise<string>;
47
47
  }
48
48
  export type LinesReadLike = LinesRead;
49
- export type LanguageServerLike = SolidLanguageServer;
49
+ export type LanguageServerLike = SmartLanguageServer;
50
50
  export type CodeEditorLike = LanguageServerCodeEditor;
51
51
  export type LanguageServerSymbolRetrieverLike = LanguageServerSymbolRetriever;
52
52
  export interface IssueTaskMetadata {
@@ -57,10 +57,10 @@ export interface AgentTaskHandle<T> {
57
57
  timeout?: number;
58
58
  }): Promise<T>;
59
59
  }
60
- export interface SerenaAgentLike {
60
+ export interface SmartEditAgentLike {
61
61
  readonly promptFactory: PromptFactoryLike;
62
62
  readonly memoriesManager: MemoriesManagerLike | null;
63
- readonly serenaConfig: SerenaConfigLike;
63
+ readonly smartEditConfig: SmartEditConfigLike;
64
64
  readonly languageServer: LanguageServerLike | null;
65
65
  readonly linesRead: LinesReadLike | null;
66
66
  getProjectRoot(): string;
@@ -72,7 +72,7 @@ export interface SerenaAgentLike {
72
72
  isLanguageServerRunning(): boolean;
73
73
  resetLanguageServer(): void | Promise<void>;
74
74
  activateProjectFromPathOrName(project: string): Promise<ProjectLike>;
75
- setModes(modes: SerenaAgentMode[]): void | Promise<void>;
75
+ setModes(modes: SmartEditAgentMode[]): void | Promise<void>;
76
76
  getCurrentConfigOverview(): string | Promise<string>;
77
77
  createLanguageServerSymbolRetriever(): LanguageServerSymbolRetrieverLike;
78
78
  createCodeEditor(): CodeEditorLike;
@@ -91,10 +91,10 @@ export interface ToolExecutionOptions {
91
91
  catchExceptions?: boolean;
92
92
  maxAnswerChars?: number;
93
93
  }
94
- export type ToolClass<T extends Tool = Tool> = (new (agent: SerenaAgentLike) => T) & typeof Tool;
94
+ export type ToolClass<T extends Tool = Tool> = (new (agent: SmartEditAgentLike) => T) & typeof Tool;
95
95
  export declare abstract class Component {
96
- protected readonly agent: SerenaAgentLike;
97
- constructor(agent: SerenaAgentLike);
96
+ protected readonly agent: SmartEditAgentLike;
97
+ constructor(agent: SmartEditAgentLike);
98
98
  getProjectRoot(): string;
99
99
  protected get promptFactory(): PromptFactoryLike;
100
100
  protected get memoriesManager(): MemoriesManagerLike;
@@ -129,13 +129,13 @@ declare class EditedFileContextImpl {
129
129
  private readonly absolutePath;
130
130
  private readonly originalContent;
131
131
  private updatedContent;
132
- constructor(relativePath: string, agent: SerenaAgentLike);
132
+ constructor(relativePath: string, agent: SmartEditAgentLike);
133
133
  getOriginalContent(): string;
134
134
  setUpdatedContent(content: string): void;
135
135
  commit(): Promise<void>;
136
136
  }
137
137
  export declare class EditedFileContext {
138
- static use<T>(relativePath: string, agent: SerenaAgentLike, handler: (context: EditedFileContextImpl) => Promise<T> | T): Promise<T>;
138
+ static use<T>(relativePath: string, agent: SmartEditAgentLike, handler: (context: EditedFileContextImpl) => Promise<T> | T): Promise<T>;
139
139
  }
140
140
  declare class ToolRegistryImpl {
141
141
  private readonly toolMap;
@@ -1,9 +1,9 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { z } from 'zod';
4
- import { createSerenaLogger } from '../util/logging.js';
4
+ import { createSmartEditLogger } from '../util/logging.js';
5
5
  import { singleton } from '../util/class_decorators.js';
6
- const { logger: log } = createSerenaLogger({ name: 'smart-edit.tools.base' });
6
+ const { logger: log } = createSmartEditLogger({ name: 'smart-edit.tools.base' });
7
7
  export function assertIsBufferEncoding(value) {
8
8
  if (!Buffer.isEncoding(value)) {
9
9
  throw new Error(`Unsupported file encoding '${value}'`);
@@ -42,7 +42,7 @@ function describeError(error) {
42
42
  return String(error);
43
43
  }
44
44
  }
45
- function isSolidLspTerminationError(error) {
45
+ function isSmartLspTerminationError(error) {
46
46
  if (typeof error !== 'object' || error === null) {
47
47
  return false;
48
48
  }
@@ -144,7 +144,7 @@ export class Tool extends Component {
144
144
  _limitLength(result, maxAnswerChars) {
145
145
  let limit = maxAnswerChars;
146
146
  if (limit === -1 || limit === undefined || limit === null) {
147
- limit = this.agent.serenaConfig.defaultMaxToolAnswerChars;
147
+ limit = this.agent.smartEditConfig.defaultMaxToolAnswerChars;
148
148
  }
149
149
  if (limit <= 0) {
150
150
  throw new Error(`Must be positive or the default (-1), got: maxAnswerChars=${limit}`);
@@ -178,7 +178,7 @@ export class Tool extends Component {
178
178
  if (!this.hasMarker(ToolMarkerDoesNotRequireActiveProject)) {
179
179
  const activeProject = this.agent.getActiveProject();
180
180
  if (!activeProject) {
181
- const projects = this.agent.serenaConfig.projectNames;
181
+ const projects = this.agent.smartEditConfig.projectNames;
182
182
  return [
183
183
  `Error: No active project. Ask the user to provide the project path or to select a project from this list of known projects:`,
184
184
  projects.join(', ') || '(none)'
@@ -195,7 +195,7 @@ export class Tool extends Component {
195
195
  result = typeof output === 'string' ? output : String(output);
196
196
  }
197
197
  catch (error) {
198
- if (isSolidLspTerminationError(error)) {
198
+ if (isSmartLspTerminationError(error)) {
199
199
  log.error(`Language server terminated while executing tool (${describeError(error)}). Restarting the language server and retrying ...`);
200
200
  await Promise.resolve(this.agent.resetLanguageServer());
201
201
  const retryOutput = await Promise.resolve(applyFn(validatedArgs));
@@ -234,7 +234,7 @@ export class Tool extends Component {
234
234
  }
235
235
  };
236
236
  const future = this.agent.issueTask(task, { name: this.constructor.name });
237
- return future.result({ timeout: this.agent.serenaConfig.toolTimeout });
237
+ return future.result({ timeout: this.agent.smartEditConfig.toolTimeout });
238
238
  }
239
239
  }
240
240
  class EditedFileContextImpl {
@@ -1,6 +1,6 @@
1
- import type { SerenaLogger } from './logging.js';
1
+ import type { SmartEditLogger } from './logging.js';
2
2
  export interface ShowFatalExceptionOptions {
3
- logger?: SerenaLogger;
3
+ logger?: SmartEditLogger;
4
4
  printToStderr?: boolean;
5
5
  }
6
6
  export declare function evaluateHeadlessEnvironment(env: NodeJS.ProcessEnv, platform: NodeJS.Platform, release: string, fileExists: (path: string) => boolean): boolean;
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import os from 'node:os';
3
- import { createSerenaLogger } from './logging.js';
4
- const { logger: consoleLogger } = createSerenaLogger({ level: 'debug' });
3
+ import { createSmartEditLogger } from './logging.js';
4
+ const { logger: consoleLogger } = createSmartEditLogger({ level: 'debug' });
5
5
  export function evaluateHeadlessEnvironment(env, platform, release, fileExists) {
6
6
  if (platform === 'win32') {
7
7
  return false;
@@ -2,11 +2,11 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { performance } from 'node:perf_hooks';
4
4
  import ignore from 'ignore';
5
- import { createSerenaLogger } from './logging.js';
6
- const { logger: fileSystemLogger } = createSerenaLogger({
5
+ import { createSmartEditLogger } from './logging.js';
6
+ const { logger: fileSystemLogger } = createSmartEditLogger({
7
7
  level: 'debug',
8
8
  emitToConsole: false,
9
- name: 'SerenaFileSystem'
9
+ name: 'SmartEditFileSystem'
10
10
  });
11
11
  export function scanDirectory(targetPath, recursive = false, relativeTo, isIgnoredDir, isIgnoredFile) {
12
12
  const ignoreDir = isIgnoredDir ?? (() => false);
@@ -1,9 +1,9 @@
1
- import { createSerenaLogger } from './logging.js';
1
+ import { createSmartEditLogger } from './logging.js';
2
2
  import { subprocessCheckOutput } from './shell.js';
3
- const { logger: gitLogger } = createSerenaLogger({
3
+ const { logger: gitLogger } = createSmartEditLogger({
4
4
  level: 'debug',
5
5
  emitToConsole: false,
6
- name: 'SerenaGit'
6
+ name: 'SmartEditGit'
7
7
  });
8
8
  export async function getGitStatus(options = {}) {
9
9
  try {
@@ -6,7 +6,7 @@ export interface RegisterSubclassOptions {
6
6
  base?: Constructor<unknown>;
7
7
  }
8
8
  /**
9
- * サブクラスをレジストリに登録します。TypeScript では Python のように __subclasses__() が無いため、
9
+ * サブクラスをレジストリに登録します。
10
10
  * 各クラス定義側からこの関数を呼び出して静的メタデータを構築します。
11
11
  */
12
12
  export declare function registerSubclass<T>(derived: Constructor<T>, options?: RegisterSubclassOptions): void;
@@ -30,8 +30,8 @@ export interface DetermineLanguageOptions {
30
30
  languages?: Iterable<LanguageInput>;
31
31
  includeExperimental?: boolean;
32
32
  }
33
- type LanguageInput = ProgrammingLanguageDefinition | SolidLanguageLike;
34
- interface SolidLanguageLike {
33
+ type LanguageInput = ProgrammingLanguageDefinition | SmartLanguageLike;
34
+ interface SmartLanguageLike {
35
35
  toString(): string;
36
36
  getSourceFnMatcher?: () => unknown;
37
37
  getSourceFilenameMatcher?: () => unknown;
@@ -2,7 +2,7 @@ import path from 'node:path';
2
2
  import { findAllNonIgnoredFiles } from './file_system.js';
3
3
  const subclassRegistry = new Map();
4
4
  /**
5
- * サブクラスをレジストリに登録します。TypeScript では Python のように __subclasses__() が無いため、
5
+ * サブクラスをレジストリに登録します。
6
6
  * 各クラス定義側からこの関数を呼び出して静的メタデータを構築します。
7
7
  */
8
8
  export function registerSubclass(derived, options) {
@@ -141,7 +141,7 @@ function normalizeLanguageInput(input, includeExperimental) {
141
141
  experimental: input.experimental ?? false
142
142
  };
143
143
  }
144
- if (isSolidLanguageLike(input)) {
144
+ if (isSmartLanguageLike(input)) {
145
145
  const experimental = typeof input.isExperimental === 'function' ? input.isExperimental() : false;
146
146
  if (!includeExperimental && experimental) {
147
147
  return undefined;
@@ -208,7 +208,7 @@ function isProgrammingLanguageDefinition(value) {
208
208
  candidate.matcher !== null &&
209
209
  typeof candidate.matcher.isRelevantFilename === 'function');
210
210
  }
211
- function isSolidLanguageLike(value) {
211
+ function isSmartLanguageLike(value) {
212
212
  if (!value || typeof value !== 'object') {
213
213
  return false;
214
214
  }