@wonderwhy-er/desktop-commander 0.2.38 → 0.2.39

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 (364) hide show
  1. package/README.md +53 -2
  2. package/dist/handlers/filesystem-handlers.d.ts +5 -0
  3. package/dist/handlers/filesystem-handlers.js +14 -2
  4. package/dist/remote-device/desktop-commander-integration.js +1 -1
  5. package/dist/search-manager.js +31 -38
  6. package/dist/server.js +8 -3
  7. package/dist/terminal-manager.js +4 -2
  8. package/dist/tools/edit.js +34 -1
  9. package/dist/tools/filesystem.js +91 -3
  10. package/dist/tools/improved-process-tools.js +2 -1
  11. package/dist/ui/config-editor/app.js +840 -0
  12. package/dist/ui/config-editor/array-modal.d.ts +19 -0
  13. package/dist/ui/config-editor/array-modal.js +185 -0
  14. package/dist/ui/config-editor/config-editor-runtime.js +65 -14096
  15. package/dist/ui/config-editor/main.js +2 -0
  16. package/dist/ui/config-editor/src/App.d.ts +43 -0
  17. package/dist/ui/config-editor/src/components/layout.d.ts +4 -0
  18. package/dist/ui/config-editor/src/components/layout.js +83 -0
  19. package/dist/ui/config-editor/src/components/toolbar.d.ts +1 -0
  20. package/dist/ui/config-editor/src/components/toolbar.js +21 -0
  21. package/dist/ui/config-editor/src/config-values.d.ts +6 -0
  22. package/dist/ui/config-editor/src/config-values.js +61 -0
  23. package/dist/ui/config-editor/src/contracts.d.ts +14 -0
  24. package/dist/ui/config-editor/src/contracts.js +3 -0
  25. package/dist/ui/config-editor/src/directory-browser.d.ts +6 -0
  26. package/dist/ui/config-editor/src/directory-browser.js +71 -0
  27. package/dist/ui/config-editor/src/layout.d.ts +5 -0
  28. package/dist/ui/config-editor/src/layout.js +90 -0
  29. package/dist/ui/config-editor/src/parsing.d.ts +5 -0
  30. package/dist/ui/config-editor/src/parsing.js +50 -0
  31. package/dist/ui/config-editor/src/toolbar.d.ts +1 -0
  32. package/dist/ui/config-editor/src/toolbar.js +18 -0
  33. package/dist/ui/config-editor/src/types.d.ts +17 -0
  34. package/dist/ui/config-editor/src/types.js +3 -0
  35. package/dist/ui/config-editor/src/utils/config-values.d.ts +9 -0
  36. package/dist/ui/config-editor/src/utils/config-values.js +61 -0
  37. package/dist/ui/config-editor/src/utils/directory-browser.d.ts +31 -0
  38. package/dist/ui/config-editor/src/utils/directory-browser.js +201 -0
  39. package/dist/ui/config-editor/src/utils/parsing.d.ts +8 -0
  40. package/dist/ui/config-editor/src/utils/parsing.js +50 -0
  41. package/dist/ui/config-editor/styles.css +2 -1
  42. package/dist/ui/file-preview/{src/app.d.ts → app.d.ts} +1 -1
  43. package/dist/ui/file-preview/app.js +2020 -0
  44. package/dist/ui/file-preview/components/code-viewer.d.ts +6 -0
  45. package/dist/ui/file-preview/components/code-viewer.js +73 -0
  46. package/dist/ui/file-preview/components/highlighting.d.ts +2 -0
  47. package/dist/ui/file-preview/components/highlighting.js +54 -0
  48. package/dist/ui/file-preview/components/html-renderer.d.ts +5 -0
  49. package/dist/ui/file-preview/components/html-renderer.js +47 -0
  50. package/dist/ui/file-preview/components/markdown-renderer.d.ts +1 -0
  51. package/dist/ui/file-preview/components/markdown-renderer.js +67 -0
  52. package/dist/ui/file-preview/components/toolbar.d.ts +6 -0
  53. package/dist/ui/file-preview/components/toolbar.js +75 -0
  54. package/dist/ui/file-preview/image-preview.d.ts +3 -0
  55. package/dist/ui/file-preview/image-preview.js +21 -0
  56. package/dist/ui/file-preview/main.js +5 -0
  57. package/dist/ui/file-preview/markdown/editor.d.ts +36 -0
  58. package/dist/ui/file-preview/markdown/editor.js +643 -0
  59. package/dist/ui/file-preview/markdown/linking.d.ts +9 -0
  60. package/dist/ui/file-preview/markdown/linking.js +210 -0
  61. package/dist/ui/file-preview/markdown/outline.d.ts +7 -0
  62. package/dist/ui/file-preview/markdown/outline.js +40 -0
  63. package/dist/ui/file-preview/markdown/preview.d.ts +8 -0
  64. package/dist/ui/file-preview/markdown/preview.js +33 -0
  65. package/dist/ui/file-preview/markdown/slugify.d.ts +3 -0
  66. package/dist/ui/file-preview/markdown/slugify.js +31 -0
  67. package/dist/ui/file-preview/markdown/toc.d.ts +11 -0
  68. package/dist/ui/file-preview/markdown/toc.js +75 -0
  69. package/dist/ui/file-preview/markdown/utils.d.ts +1 -0
  70. package/dist/ui/file-preview/markdown/utils.js +15 -0
  71. package/dist/ui/file-preview/markdown/workspace-controller.d.ts +25 -0
  72. package/dist/ui/file-preview/markdown/workspace-controller.js +40 -0
  73. package/dist/ui/file-preview/preview-runtime.js +384 -26533
  74. package/dist/ui/file-preview/shared/preview-file-types.d.ts +1 -1
  75. package/dist/ui/file-preview/src/App.d.ts +4 -0
  76. package/dist/ui/file-preview/src/App.js +564 -0
  77. package/dist/ui/file-preview/src/components/CodeViewer.d.ts +6 -0
  78. package/dist/ui/file-preview/src/components/CodeViewer.js +60 -0
  79. package/dist/ui/file-preview/src/components/HtmlRenderer.d.ts +8 -0
  80. package/dist/ui/file-preview/src/components/HtmlRenderer.js +45 -0
  81. package/dist/ui/file-preview/src/components/MarkdownRenderer.d.ts +1 -0
  82. package/dist/ui/file-preview/src/components/MarkdownRenderer.js +15 -0
  83. package/dist/ui/file-preview/src/components/editor-toolbar.d.ts +15 -0
  84. package/dist/ui/file-preview/src/components/editor-toolbar.js +384 -0
  85. package/dist/ui/file-preview/src/components/markdown-editor.d.ts +29 -0
  86. package/dist/ui/file-preview/src/components/markdown-editor.js +535 -0
  87. package/dist/ui/file-preview/src/components/markdown-renderer.js +47 -9
  88. package/dist/ui/file-preview/src/directory-controller.d.ts +8 -0
  89. package/dist/ui/file-preview/src/directory-controller.js +233 -0
  90. package/dist/ui/file-preview/src/document-layout.d.ts +20 -0
  91. package/dist/ui/file-preview/src/document-layout.js +109 -0
  92. package/dist/ui/file-preview/src/document-outline.d.ts +17 -0
  93. package/dist/ui/file-preview/src/document-outline.js +97 -0
  94. package/dist/ui/file-preview/src/document-workspace.d.ts +19 -0
  95. package/dist/ui/file-preview/src/document-workspace.js +33 -0
  96. package/dist/ui/file-preview/src/file-type-handlers.d.ts +10 -0
  97. package/dist/ui/file-preview/src/file-type-handlers.js +98 -0
  98. package/dist/ui/file-preview/src/host/external-actions.d.ts +19 -0
  99. package/dist/ui/file-preview/src/host/external-actions.js +94 -0
  100. package/dist/ui/file-preview/src/host/selection-context.d.ts +9 -0
  101. package/dist/ui/file-preview/src/host/selection-context.js +106 -0
  102. package/dist/ui/file-preview/src/markdown/block-merge.d.ts +25 -0
  103. package/dist/ui/file-preview/src/markdown/block-merge.js +86 -0
  104. package/dist/ui/file-preview/src/markdown/conflict-dialog.d.ts +40 -0
  105. package/dist/ui/file-preview/src/markdown/conflict-dialog.js +163 -0
  106. package/dist/ui/file-preview/src/markdown/controller.d.ts +38 -0
  107. package/dist/ui/file-preview/src/markdown/controller.js +921 -0
  108. package/dist/ui/file-preview/src/markdown/editor.d.ts +35 -0
  109. package/dist/ui/file-preview/src/markdown/editor.js +691 -0
  110. package/dist/ui/file-preview/src/markdown/link-modal.d.ts +13 -0
  111. package/dist/ui/file-preview/src/markdown/link-modal.js +213 -0
  112. package/dist/ui/file-preview/src/markdown/linking.d.ts +16 -0
  113. package/dist/ui/file-preview/src/markdown/linking.js +228 -0
  114. package/dist/ui/file-preview/src/markdown/outline.d.ts +2 -0
  115. package/dist/ui/file-preview/src/markdown/outline.js +16 -0
  116. package/dist/ui/file-preview/src/markdown/parser.d.ts +30 -0
  117. package/dist/ui/file-preview/src/markdown/parser.js +38 -0
  118. package/dist/ui/file-preview/src/markdown/preview.d.ts +1 -0
  119. package/dist/ui/file-preview/src/markdown/preview.js +20 -0
  120. package/dist/ui/file-preview/src/markdown/raw-editor.d.ts +8 -0
  121. package/dist/ui/file-preview/src/markdown/raw-editor.js +61 -0
  122. package/dist/ui/file-preview/src/markdown/selection-toolbar.d.ts +14 -0
  123. package/dist/ui/file-preview/src/markdown/selection-toolbar.js +128 -0
  124. package/dist/ui/file-preview/src/markdown/slugify.d.ts +3 -0
  125. package/dist/ui/file-preview/src/markdown/slugify.js +31 -0
  126. package/dist/ui/file-preview/src/markdown/toc.d.ts +11 -0
  127. package/dist/ui/file-preview/src/markdown/toc.js +75 -0
  128. package/dist/ui/file-preview/src/markdown/utils.d.ts +1 -0
  129. package/dist/ui/file-preview/src/markdown/utils.js +15 -0
  130. package/dist/ui/file-preview/src/markdown-workspace/editor.d.ts +36 -0
  131. package/dist/ui/file-preview/src/markdown-workspace/editor.js +643 -0
  132. package/dist/ui/file-preview/src/markdown-workspace/linking.d.ts +9 -0
  133. package/dist/ui/file-preview/src/markdown-workspace/linking.js +210 -0
  134. package/dist/ui/file-preview/src/markdown-workspace/outline.d.ts +7 -0
  135. package/dist/ui/file-preview/src/markdown-workspace/outline.js +40 -0
  136. package/dist/ui/file-preview/src/markdown-workspace/preview.d.ts +8 -0
  137. package/dist/ui/file-preview/src/markdown-workspace/preview.js +33 -0
  138. package/dist/ui/file-preview/src/markdown-workspace/slugify.d.ts +3 -0
  139. package/dist/ui/file-preview/src/markdown-workspace/slugify.js +31 -0
  140. package/dist/ui/file-preview/src/markdown-workspace/toc.d.ts +11 -0
  141. package/dist/ui/file-preview/src/markdown-workspace/toc.js +75 -0
  142. package/dist/ui/file-preview/src/markdown-workspace/utils.d.ts +1 -0
  143. package/dist/ui/file-preview/src/markdown-workspace/utils.js +15 -0
  144. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.d.ts +25 -0
  145. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.js +40 -0
  146. package/dist/ui/file-preview/src/model.d.ts +34 -0
  147. package/dist/ui/file-preview/src/panel-actions.d.ts +17 -0
  148. package/dist/ui/file-preview/src/panel-actions.js +182 -0
  149. package/dist/ui/file-preview/src/path-utils.d.ts +6 -0
  150. package/dist/ui/file-preview/src/path-utils.js +64 -0
  151. package/dist/ui/file-preview/src/payload-utils.d.ts +11 -0
  152. package/dist/ui/file-preview/src/payload-utils.js +94 -0
  153. package/dist/ui/file-preview/styles.css +1066 -233
  154. package/dist/ui/file-preview/types.d.ts +1 -0
  155. package/dist/ui/server-integration.d.ts +13 -0
  156. package/dist/ui/server-integration.js +31 -0
  157. package/dist/ui/shared/ToolHeader.d.ts +9 -0
  158. package/dist/ui/shared/ToolHeader.js +29 -0
  159. package/dist/ui/shared/app-bootstrap.d.ts +9 -0
  160. package/dist/ui/shared/app-bootstrap.js +15 -0
  161. package/dist/ui/shared/guards.d.ts +1 -0
  162. package/dist/ui/shared/guards.js +3 -0
  163. package/dist/ui/shared/host-lifecycle.d.ts +1 -0
  164. package/dist/ui/shared/host-lifecycle.js +8 -2
  165. package/dist/ui/shared/widget-state.d.ts +6 -1
  166. package/dist/ui/shared/widget-state.js +102 -4
  167. package/dist/utils/files/base.d.ts +2 -0
  168. package/dist/utils/open-browser.js +1 -1
  169. package/dist/utils/ui-call-context.d.ts +8 -0
  170. package/dist/utils/ui-call-context.js +72 -0
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.js +1 -1
  173. package/package.json +6 -1
  174. package/dist/data/spec-kit-prompts.json +0 -123
  175. package/dist/handlers/macos-control-handlers.d.ts +0 -16
  176. package/dist/handlers/macos-control-handlers.js +0 -81
  177. package/dist/handlers/node-handlers.d.ts +0 -6
  178. package/dist/handlers/node-handlers.js +0 -73
  179. package/dist/handlers/test-crash-handler.d.ts +0 -11
  180. package/dist/handlers/test-crash-handler.js +0 -26
  181. package/dist/http-index.d.ts +0 -45
  182. package/dist/http-index.js +0 -51
  183. package/dist/http-server-auto-tunnel.js +0 -667
  184. package/dist/http-server-named-tunnel.d.ts +0 -2
  185. package/dist/http-server-named-tunnel.js +0 -167
  186. package/dist/http-server-tunnel.d.ts +0 -2
  187. package/dist/http-server-tunnel.js +0 -111
  188. package/dist/http-server.d.ts +0 -2
  189. package/dist/http-server.js +0 -270
  190. package/dist/index-oauth.d.ts +0 -2
  191. package/dist/index-oauth.js +0 -201
  192. package/dist/lib.d.ts +0 -10
  193. package/dist/lib.js +0 -10
  194. package/dist/oauth/auth-middleware.d.ts +0 -20
  195. package/dist/oauth/auth-middleware.js +0 -62
  196. package/dist/oauth/index.d.ts +0 -3
  197. package/dist/oauth/index.js +0 -3
  198. package/dist/oauth/oauth-manager.d.ts +0 -80
  199. package/dist/oauth/oauth-manager.js +0 -179
  200. package/dist/oauth/oauth-routes.d.ts +0 -3
  201. package/dist/oauth/oauth-routes.js +0 -377
  202. package/dist/oauth/provider.d.ts +0 -22
  203. package/dist/oauth/provider.js +0 -124
  204. package/dist/oauth/server.d.ts +0 -18
  205. package/dist/oauth/server.js +0 -160
  206. package/dist/oauth/types.d.ts +0 -54
  207. package/dist/oauth/types.js +0 -2
  208. package/dist/remote-device/templates/auth-success.d.ts +0 -1
  209. package/dist/remote-device/templates/auth-success.js +0 -30
  210. package/dist/setup.log +0 -275
  211. package/dist/test-setup.js +0 -14
  212. package/dist/tools/docx/builders/html-builder.d.ts +0 -17
  213. package/dist/tools/docx/builders/html-builder.js +0 -92
  214. package/dist/tools/docx/builders/image.d.ts +0 -14
  215. package/dist/tools/docx/builders/image.js +0 -84
  216. package/dist/tools/docx/builders/index.d.ts +0 -11
  217. package/dist/tools/docx/builders/index.js +0 -11
  218. package/dist/tools/docx/builders/markdown-builder.d.ts +0 -2
  219. package/dist/tools/docx/builders/markdown-builder.js +0 -260
  220. package/dist/tools/docx/builders/paragraph.d.ts +0 -12
  221. package/dist/tools/docx/builders/paragraph.js +0 -29
  222. package/dist/tools/docx/builders/table.d.ts +0 -10
  223. package/dist/tools/docx/builders/table.js +0 -138
  224. package/dist/tools/docx/builders/utils.d.ts +0 -5
  225. package/dist/tools/docx/builders/utils.js +0 -18
  226. package/dist/tools/docx/constants.d.ts +0 -32
  227. package/dist/tools/docx/constants.js +0 -61
  228. package/dist/tools/docx/converters/markdown-to-html.d.ts +0 -17
  229. package/dist/tools/docx/converters/markdown-to-html.js +0 -111
  230. package/dist/tools/docx/create.d.ts +0 -21
  231. package/dist/tools/docx/create.js +0 -386
  232. package/dist/tools/docx/dom.d.ts +0 -139
  233. package/dist/tools/docx/dom.js +0 -448
  234. package/dist/tools/docx/errors.d.ts +0 -28
  235. package/dist/tools/docx/errors.js +0 -48
  236. package/dist/tools/docx/extractors/images.d.ts +0 -14
  237. package/dist/tools/docx/extractors/images.js +0 -40
  238. package/dist/tools/docx/extractors/metadata.d.ts +0 -14
  239. package/dist/tools/docx/extractors/metadata.js +0 -64
  240. package/dist/tools/docx/extractors/sections.d.ts +0 -14
  241. package/dist/tools/docx/extractors/sections.js +0 -61
  242. package/dist/tools/docx/html.d.ts +0 -17
  243. package/dist/tools/docx/html.js +0 -111
  244. package/dist/tools/docx/index.d.ts +0 -10
  245. package/dist/tools/docx/index.js +0 -10
  246. package/dist/tools/docx/markdown.d.ts +0 -84
  247. package/dist/tools/docx/markdown.js +0 -507
  248. package/dist/tools/docx/modify.d.ts +0 -28
  249. package/dist/tools/docx/modify.js +0 -271
  250. package/dist/tools/docx/operations/handlers/index.d.ts +0 -39
  251. package/dist/tools/docx/operations/handlers/index.js +0 -152
  252. package/dist/tools/docx/operations/html-manipulator.d.ts +0 -24
  253. package/dist/tools/docx/operations/html-manipulator.js +0 -352
  254. package/dist/tools/docx/operations/index.d.ts +0 -14
  255. package/dist/tools/docx/operations/index.js +0 -61
  256. package/dist/tools/docx/operations/operation-handlers.d.ts +0 -3
  257. package/dist/tools/docx/operations/operation-handlers.js +0 -67
  258. package/dist/tools/docx/operations/preprocessor.d.ts +0 -14
  259. package/dist/tools/docx/operations/preprocessor.js +0 -44
  260. package/dist/tools/docx/operations/xml-replacer.d.ts +0 -9
  261. package/dist/tools/docx/operations/xml-replacer.js +0 -35
  262. package/dist/tools/docx/operations.d.ts +0 -13
  263. package/dist/tools/docx/operations.js +0 -13
  264. package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +0 -11
  265. package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +0 -23
  266. package/dist/tools/docx/ops/header-replace-text-exact.d.ts +0 -13
  267. package/dist/tools/docx/ops/header-replace-text-exact.js +0 -55
  268. package/dist/tools/docx/ops/index.d.ts +0 -17
  269. package/dist/tools/docx/ops/index.js +0 -70
  270. package/dist/tools/docx/ops/insert-image-after-text.d.ts +0 -24
  271. package/dist/tools/docx/ops/insert-image-after-text.js +0 -128
  272. package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +0 -12
  273. package/dist/tools/docx/ops/insert-paragraph-after-text.js +0 -74
  274. package/dist/tools/docx/ops/insert-table-after-text.d.ts +0 -19
  275. package/dist/tools/docx/ops/insert-table-after-text.js +0 -57
  276. package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +0 -12
  277. package/dist/tools/docx/ops/replace-hyperlink-url.js +0 -37
  278. package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +0 -9
  279. package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +0 -25
  280. package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +0 -21
  281. package/dist/tools/docx/ops/replace-paragraph-text-exact.js +0 -36
  282. package/dist/tools/docx/ops/replace-table-cell-text.d.ts +0 -25
  283. package/dist/tools/docx/ops/replace-table-cell-text.js +0 -85
  284. package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +0 -9
  285. package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +0 -24
  286. package/dist/tools/docx/ops/set-color-for-style.d.ts +0 -13
  287. package/dist/tools/docx/ops/set-color-for-style.js +0 -31
  288. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +0 -8
  289. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +0 -57
  290. package/dist/tools/docx/ops/table-set-cell-text.d.ts +0 -9
  291. package/dist/tools/docx/ops/table-set-cell-text.js +0 -40
  292. package/dist/tools/docx/parsers/image-extractor.d.ts +0 -18
  293. package/dist/tools/docx/parsers/image-extractor.js +0 -61
  294. package/dist/tools/docx/parsers/index.d.ts +0 -9
  295. package/dist/tools/docx/parsers/index.js +0 -9
  296. package/dist/tools/docx/parsers/paragraph-parser.d.ts +0 -2
  297. package/dist/tools/docx/parsers/paragraph-parser.js +0 -88
  298. package/dist/tools/docx/parsers/table-parser.d.ts +0 -9
  299. package/dist/tools/docx/parsers/table-parser.js +0 -72
  300. package/dist/tools/docx/parsers/xml-parser.d.ts +0 -25
  301. package/dist/tools/docx/parsers/xml-parser.js +0 -71
  302. package/dist/tools/docx/parsers/zip-reader.d.ts +0 -23
  303. package/dist/tools/docx/parsers/zip-reader.js +0 -52
  304. package/dist/tools/docx/read.d.ts +0 -27
  305. package/dist/tools/docx/read.js +0 -308
  306. package/dist/tools/docx/relationships.d.ts +0 -22
  307. package/dist/tools/docx/relationships.js +0 -76
  308. package/dist/tools/docx/structure.d.ts +0 -25
  309. package/dist/tools/docx/structure.js +0 -102
  310. package/dist/tools/docx/styled-html-parser.d.ts +0 -23
  311. package/dist/tools/docx/styled-html-parser.js +0 -1262
  312. package/dist/tools/docx/types.d.ts +0 -213
  313. package/dist/tools/docx/types.js +0 -5
  314. package/dist/tools/docx/utils/escaping.d.ts +0 -13
  315. package/dist/tools/docx/utils/escaping.js +0 -26
  316. package/dist/tools/docx/utils/images.d.ts +0 -9
  317. package/dist/tools/docx/utils/images.js +0 -26
  318. package/dist/tools/docx/utils/index.d.ts +0 -12
  319. package/dist/tools/docx/utils/index.js +0 -17
  320. package/dist/tools/docx/utils/markdown.d.ts +0 -13
  321. package/dist/tools/docx/utils/markdown.js +0 -32
  322. package/dist/tools/docx/utils/paths.d.ts +0 -15
  323. package/dist/tools/docx/utils/paths.js +0 -27
  324. package/dist/tools/docx/utils/versioning.d.ts +0 -25
  325. package/dist/tools/docx/utils/versioning.js +0 -55
  326. package/dist/tools/docx/utils.d.ts +0 -101
  327. package/dist/tools/docx/utils.js +0 -299
  328. package/dist/tools/docx/validate.d.ts +0 -33
  329. package/dist/tools/docx/validate.js +0 -49
  330. package/dist/tools/docx/validators.d.ts +0 -13
  331. package/dist/tools/docx/validators.js +0 -40
  332. package/dist/tools/docx/write.d.ts +0 -17
  333. package/dist/tools/docx/write.js +0 -88
  334. package/dist/tools/docx/xml-view-test.js +0 -63
  335. package/dist/tools/docx/xml-view.d.ts +0 -56
  336. package/dist/tools/docx/xml-view.js +0 -169
  337. package/dist/tools/docx/zip.d.ts +0 -21
  338. package/dist/tools/docx/zip.js +0 -35
  339. package/dist/tools/macos-control/ax-adapter.d.ts +0 -55
  340. package/dist/tools/macos-control/ax-adapter.js +0 -438
  341. package/dist/tools/macos-control/cdp-adapter.d.ts +0 -23
  342. package/dist/tools/macos-control/cdp-adapter.js +0 -402
  343. package/dist/tools/macos-control/orchestrator.d.ts +0 -77
  344. package/dist/tools/macos-control/orchestrator.js +0 -136
  345. package/dist/tools/macos-control/role-aliases.d.ts +0 -5
  346. package/dist/tools/macos-control/role-aliases.js +0 -34
  347. package/dist/tools/macos-control/types.d.ts +0 -129
  348. package/dist/tools/pdf-processor.d.ts +0 -1
  349. package/dist/tools/pdf-processor.js +0 -3
  350. package/dist/tools/search.d.ts +0 -32
  351. package/dist/tools/search.js +0 -202
  352. package/dist/ui/file-preview/src/app.js +0 -714
  353. package/dist/utils/crash-logger.d.ts +0 -18
  354. package/dist/utils/crash-logger.js +0 -44
  355. package/dist/utils/dedent.d.ts +0 -8
  356. package/dist/utils/dedent.js +0 -38
  357. /package/dist/ui/config-editor/{src/app.d.ts → app.d.ts} +0 -0
  358. /package/dist/{http-server-auto-tunnel.d.ts → ui/config-editor/main.d.ts} +0 -0
  359. /package/dist/ui/config-editor/src/{app.js → App.js} +0 -0
  360. /package/dist/{test-docx.d.ts → ui/file-preview/main.d.ts} +0 -0
  361. /package/dist/ui/file-preview/src/components/{toolbar.d.ts → Toolbar.d.ts} +0 -0
  362. /package/dist/ui/file-preview/src/components/{toolbar.js → Toolbar.js} +0 -0
  363. /package/dist/{tools/docx/xml-view-test.d.ts → ui/file-preview/src/model.js} +0 -0
  364. /package/dist/{tools/macos-control → ui/file-preview}/types.js +0 -0
@@ -0,0 +1,2 @@
1
+ import { bootstrapConfigEditorApp } from './app.js';
2
+ bootstrapConfigEditorApp();
@@ -0,0 +1,43 @@
1
+ export interface ConfigEntry {
2
+ key: string;
3
+ label?: string;
4
+ description?: string;
5
+ value: unknown;
6
+ valueType: 'string' | 'number' | 'boolean' | 'array' | 'null' | string;
7
+ editable: boolean;
8
+ }
9
+ export interface ConfigEditorPayload {
10
+ config?: Record<string, unknown>;
11
+ uiHints?: {
12
+ availableShells?: string[];
13
+ };
14
+ entries: ConfigEntry[];
15
+ }
16
+ export interface ConfigEditorState {
17
+ payload: ConfigEditorPayload | null;
18
+ selectedKey: string | null;
19
+ draftValue: string;
20
+ }
21
+ export type TooltipTone = 'info' | 'error' | 'success';
22
+ export interface TooltipMessage {
23
+ message: string;
24
+ tone: TooltipTone;
25
+ }
26
+ export interface ApplyConfigResult {
27
+ ok: boolean;
28
+ tooltip?: TooltipMessage;
29
+ }
30
+ type ToolCall = (name: string, args?: Record<string, unknown>) => Promise<unknown>;
31
+ type TrackConfigUiEvent = (event: string, params?: Record<string, unknown>) => void;
32
+ declare function extractPayload(result: unknown): ConfigEditorPayload | null;
33
+ export declare function createConfigEditorController(callTool: ToolCall, trackConfigUiEvent?: TrackConfigUiEvent): {
34
+ state: ConfigEditorState;
35
+ callTool: ToolCall;
36
+ extractPayload: typeof extractPayload;
37
+ setPayload: (payload: ConfigEditorPayload | null) => void;
38
+ setSelection: (key: string) => void;
39
+ setDraftValue: (value: string) => void;
40
+ apply: () => Promise<ApplyConfigResult>;
41
+ };
42
+ export declare function bootstrapConfigEditorApp(): void;
43
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { ConfigStructuredContent } from '../types.js';
2
+ export declare function getAllowedDirectoriesWarning(key: string): string;
3
+ export declare function renderConfigEditorLayout(payload: ConfigStructuredContent, selectedKey: string, isExpanded: boolean, callToolAvailable: boolean): string;
4
+ export declare function renderEmptyState(): string;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Pure rendering helpers for Config Editor body/layout sections. It converts structured config data into editable view fragments and keeps DOM generation isolated from app logic.
3
+ */
4
+ import { escapeHtml } from '../../../shared/escape-html.js';
5
+ import { formatValueForEditor } from '../utils/config-values.js';
6
+ import { renderConfigEditorToolbar } from './toolbar.js';
7
+ function renderKeyPreview(value) {
8
+ const rendered = formatValueForEditor(value).replace(/\s+/g, ' ').trim();
9
+ if (rendered.length <= 56) {
10
+ return rendered || '(empty)';
11
+ }
12
+ return `${rendered.slice(0, 56)}...`;
13
+ }
14
+ export function getAllowedDirectoriesWarning(key) {
15
+ if (key !== 'allowedDirectories') {
16
+ return '';
17
+ }
18
+ return 'Set allowedDirectories to [], to grant access to full filesystem.';
19
+ }
20
+ export function renderConfigEditorLayout(payload, selectedKey, isExpanded, callToolAvailable) {
21
+ const editableKeys = payload.editableKeys;
22
+ const selectedValue = formatValueForEditor(payload.config[selectedKey]);
23
+ return `
24
+ <main id="tool-shell" class="shell tool-shell ${isExpanded ? 'expanded' : 'collapsed'}">
25
+ ${renderConfigEditorToolbar(isExpanded, callToolAvailable)}
26
+ <section id="tool-panel" class="panel">
27
+ <div id="status" class="status hidden" role="status" aria-live="polite"></div>
28
+ <div class="editor-grid">
29
+ <aside class="key-pane">
30
+ <p class="pane-title">KEYS</p>
31
+ <div id="key-accordion" class="key-accordion">
32
+ ${editableKeys.map((key) => `
33
+ <button type="button" class="key-accordion-item ${key === selectedKey ? 'active' : ''}" data-key="${escapeHtml(key)}" aria-expanded="${key === selectedKey ? 'true' : 'false'}">
34
+ <span class="key-accordion-title">${escapeHtml(key)}</span>
35
+ <span class="key-accordion-preview">${escapeHtml(renderKeyPreview(payload.config[key]))}</span>
36
+ </button>
37
+ `).join('')}
38
+ </div>
39
+ </aside>
40
+ <section class="value-pane">
41
+ <p class="pane-title">VALUE</p>
42
+ <textarea id="config-value" rows="7">${escapeHtml(selectedValue)}</textarea>
43
+ <div id="allowed-directories-controls" class="warning-row hidden">
44
+ <button id="browse-directory" type="button" class="ghost icon-only" title="Browse directories" aria-label="Browse directories">
45
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M10 4l2 2h8v12H4V4z"></path></svg>
46
+ </button>
47
+ <div id="context-warning" class="warnings hidden"></div>
48
+ </div>
49
+ <section id="directory-browser" class="browser hidden">
50
+ <div class="browser-actions browser-actions--compact">
51
+ <button id="browser-up" type="button" class="ghost icon-only" title="Up" aria-label="Up one directory">
52
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 14l5-5 5 5z"></path></svg>
53
+ </button>
54
+ <button id="browser-refresh" type="button" class="ghost icon-only" title="Refresh" aria-label="Refresh directory list">
55
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M17.65 6.35A7.95 7.95 0 0 0 12 4V1L7 6l5 5V7a5 5 0 1 1-5 5H5a7 7 0 1 0 12.65-5.65z"></path></svg>
56
+ </button>
57
+ <button id="browser-select-current" type="button" class="icon-only" title="Add current directory" aria-label="Add current directory">
58
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M19 11h-6V5h-2v6H5v2h6v6h2v-6h6z"></path></svg>
59
+ </button>
60
+ <button id="close-browser" type="button" class="ghost icon-only" title="Close picker" aria-label="Close picker">
61
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M18.3 5.71 12 12l6.3 6.29-1.41 1.42L10.59 13.4l-6.3 6.3-1.42-1.42 6.3-6.29-6.3-6.29L4.29 4.3l6.3 6.3 6.3-6.3z"></path></svg>
62
+ </button>
63
+ </div>
64
+ <p id="browser-path" class="browser-path browser-path--compact"></p>
65
+ <div id="browser-status" class="browser-status"></div>
66
+ <div id="browser-list" class="browser-list"></div>
67
+ </section>
68
+ </section>
69
+ </div>
70
+ </section>
71
+ </main>
72
+ `;
73
+ }
74
+ export function renderEmptyState() {
75
+ return `
76
+ <main class="shell">
77
+ <section class="panel">
78
+ <h1>Config Editor</h1>
79
+ <p>No structured configuration payload is available.</p>
80
+ </section>
81
+ </main>
82
+ `;
83
+ }
@@ -0,0 +1 @@
1
+ export declare function renderConfigEditorToolbar(isExpanded: boolean, callToolAvailable: boolean): string;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Toolbar renderer and event wiring for Config Editor actions. It exposes top-level controls (refresh/save/open path flows) and keeps header interaction logic localized.
3
+ */
4
+ import { renderToolHeader } from '../../../shared/tool-header.js';
5
+ export function renderConfigEditorToolbar(isExpanded, callToolAvailable) {
6
+ return renderToolHeader({
7
+ pillLabel: 'CFG',
8
+ pillClassName: 'file-pill--json',
9
+ title: 'Config Editor',
10
+ subtitle: 'Inspect and update runtime config safely.',
11
+ badges: [],
12
+ actionsHtml: `
13
+ <button class="icon-button icon-button--primary hidden" id="apply-config" type="button" title="Apply changes" aria-label="Apply changes" ${callToolAvailable ? '' : 'disabled'}>
14
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z"></path></svg>
15
+ </button>
16
+ <button class="icon-button" id="toggle-expand" type="button" title="${isExpanded ? 'Collapse' : 'Expand'}" aria-label="${isExpanded ? 'Collapse' : 'Expand'}">${isExpanded
17
+ ? '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 14l5-5 5 5z"></path></svg>'
18
+ : '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5z"></path></svg>'}</button>
19
+ `
20
+ });
21
+ }
@@ -0,0 +1,6 @@
1
+ import type { ToolCallRequest } from './contracts.js';
2
+ export declare function serializeConfigValue(raw: string): unknown;
3
+ export declare function buildSetConfigRequest(key: string, value: unknown): ToolCallRequest;
4
+ export declare function shouldAppendArrayValue(key: string, value: unknown): boolean;
5
+ export declare function formatValueForEditor(value: unknown): string;
6
+ export declare function valueToComparableJson(raw: string): string;
@@ -0,0 +1,61 @@
1
+ export function serializeConfigValue(raw) {
2
+ const trimmed = raw.trim();
3
+ if (trimmed.length === 0) {
4
+ return '';
5
+ }
6
+ if (trimmed === 'true') {
7
+ return true;
8
+ }
9
+ if (trimmed === 'false') {
10
+ return false;
11
+ }
12
+ if (trimmed === 'null') {
13
+ return null;
14
+ }
15
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
16
+ return Number(trimmed);
17
+ }
18
+ if ((trimmed.startsWith('[') && trimmed.endsWith(']')) || (trimmed.startsWith('{') && trimmed.endsWith('}'))) {
19
+ try {
20
+ return JSON.parse(trimmed);
21
+ }
22
+ catch {
23
+ return raw;
24
+ }
25
+ }
26
+ return raw;
27
+ }
28
+ export function buildSetConfigRequest(key, value) {
29
+ return {
30
+ name: 'set_config_value',
31
+ arguments: {
32
+ key,
33
+ value
34
+ }
35
+ };
36
+ }
37
+ export function shouldAppendArrayValue(key, value) {
38
+ return (key === 'blockedCommands' || key === 'allowedDirectories') && typeof value === 'string' && value.trim().length > 0;
39
+ }
40
+ export function formatValueForEditor(value) {
41
+ if (typeof value === 'string') {
42
+ return value;
43
+ }
44
+ if (value === undefined) {
45
+ return '';
46
+ }
47
+ try {
48
+ return JSON.stringify(value, null, 2);
49
+ }
50
+ catch {
51
+ return String(value);
52
+ }
53
+ }
54
+ export function valueToComparableJson(raw) {
55
+ try {
56
+ return JSON.stringify(serializeConfigValue(raw));
57
+ }
58
+ catch {
59
+ return raw;
60
+ }
61
+ }
@@ -0,0 +1,14 @@
1
+ export interface ConfigStructuredContent {
2
+ config: Record<string, unknown>;
3
+ editableKeys: string[];
4
+ warnings?: string[];
5
+ }
6
+ export interface ToolResultShape {
7
+ structuredContent?: ConfigStructuredContent;
8
+ }
9
+ export interface ToolCallRequest {
10
+ name: string;
11
+ arguments: Record<string, unknown>;
12
+ }
13
+ export type HostCallTool = (request: ToolCallRequest) => Promise<any>;
14
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ export function isObject(value) {
2
+ return typeof value === 'object' && value !== null;
3
+ }
@@ -0,0 +1,6 @@
1
+ import type { ConfigStructuredContent } from './contracts.js';
2
+ export declare function getDefaultBrowsePath(payload: ConfigStructuredContent): string;
3
+ export declare function parseDirectoryEntries(listText: string): string[];
4
+ export declare function joinPath(basePath: string, name: string): string;
5
+ export declare function getParentPath(currentPath: string): string;
6
+ export declare function addDirectoryToEditorValue(currentRaw: string, selectedPath: string): string;
@@ -0,0 +1,71 @@
1
+ import { isObject } from './contracts.js';
2
+ import { serializeConfigValue } from './config-values.js';
3
+ export function getDefaultBrowsePath(payload) {
4
+ const configured = payload.config.allowedDirectories;
5
+ if (Array.isArray(configured) && configured.length > 0 && typeof configured[0] === 'string' && configured[0].trim().length > 0) {
6
+ return configured[0];
7
+ }
8
+ const systemInfo = payload.config.systemInfo;
9
+ if (isObject(systemInfo) && isObject(systemInfo.examplePaths) && typeof systemInfo.examplePaths.home === 'string') {
10
+ return systemInfo.examplePaths.home;
11
+ }
12
+ return '/';
13
+ }
14
+ function splitDirectoryLine(line) {
15
+ const marker = '[DIR] ';
16
+ if (!line.startsWith(marker)) {
17
+ return null;
18
+ }
19
+ return line.slice(marker.length).trim();
20
+ }
21
+ export function parseDirectoryEntries(listText) {
22
+ const lines = listText.split('\n');
23
+ const entries = [];
24
+ for (const line of lines) {
25
+ const entry = splitDirectoryLine(line.trim());
26
+ if (entry && !entry.includes('/') && !entry.includes('\\')) {
27
+ entries.push(entry);
28
+ }
29
+ }
30
+ return entries;
31
+ }
32
+ export function joinPath(basePath, name) {
33
+ if (/^[A-Za-z]:\\?$/.test(basePath)) {
34
+ return `${basePath.replace(/[\\/]+$/, '')}\\${name}`;
35
+ }
36
+ if (basePath.endsWith('/')) {
37
+ return `${basePath}${name}`;
38
+ }
39
+ if (basePath.endsWith('\\')) {
40
+ return `${basePath}${name}`;
41
+ }
42
+ return `${basePath}/${name}`;
43
+ }
44
+ export function getParentPath(currentPath) {
45
+ if (!currentPath) {
46
+ return '/';
47
+ }
48
+ if (/^[A-Za-z]:\\?$/.test(currentPath)) {
49
+ return currentPath;
50
+ }
51
+ const normalized = currentPath.replace(/[\\/]+$/, '');
52
+ if (normalized === '') {
53
+ return '/';
54
+ }
55
+ const slashIndex = Math.max(normalized.lastIndexOf('/'), normalized.lastIndexOf('\\'));
56
+ if (slashIndex <= 0) {
57
+ if (normalized.includes('\\')) {
58
+ return normalized.slice(0, slashIndex + 1) || normalized;
59
+ }
60
+ return '/';
61
+ }
62
+ return normalized.slice(0, slashIndex);
63
+ }
64
+ export function addDirectoryToEditorValue(currentRaw, selectedPath) {
65
+ const parsed = serializeConfigValue(currentRaw);
66
+ const values = Array.isArray(parsed) ? [...parsed] : [];
67
+ if (!values.includes(selectedPath)) {
68
+ values.push(selectedPath);
69
+ }
70
+ return JSON.stringify(values, null, 2);
71
+ }
@@ -0,0 +1,5 @@
1
+ import type { ConfigStructuredContent } from './contracts.js';
2
+ export declare function getAllowedDirectoriesWarning(key: string): string;
3
+ export declare function renderConfigEditorLayout(payload: ConfigStructuredContent, selectedKey: string, isExpanded: boolean, callToolAvailable: boolean): string;
4
+ export declare function renderEmptyState(): string;
5
+ export declare function escapeHtmlText(value: string): string;
@@ -0,0 +1,90 @@
1
+ import { formatValueForEditor } from './config-values.js';
2
+ import { renderConfigEditorToolbar } from './toolbar.js';
3
+ function escapeHtml(value) {
4
+ return value
5
+ .split('&').join('&amp;')
6
+ .split('<').join('&lt;')
7
+ .split('>').join('&gt;')
8
+ .split('"').join('&quot;')
9
+ .split("'").join('&#39;');
10
+ }
11
+ function renderKeyPreview(value) {
12
+ const rendered = formatValueForEditor(value).replace(/\s+/g, ' ').trim();
13
+ if (rendered.length <= 56) {
14
+ return rendered || '(empty)';
15
+ }
16
+ return `${rendered.slice(0, 56)}...`;
17
+ }
18
+ export function getAllowedDirectoriesWarning(key) {
19
+ if (key !== 'allowedDirectories') {
20
+ return '';
21
+ }
22
+ return 'Set allowedDirectories to [], to grant access to full filesystem.';
23
+ }
24
+ export function renderConfigEditorLayout(payload, selectedKey, isExpanded, callToolAvailable) {
25
+ const editableKeys = payload.editableKeys;
26
+ const selectedValue = formatValueForEditor(payload.config[selectedKey]);
27
+ return `
28
+ <main id="tool-shell" class="shell tool-shell ${isExpanded ? 'expanded' : 'collapsed'}">
29
+ ${renderConfigEditorToolbar(isExpanded, callToolAvailable)}
30
+ <section id="tool-panel" class="panel">
31
+ <div id="status" class="status hidden" role="status" aria-live="polite"></div>
32
+ <div class="editor-grid">
33
+ <aside class="key-pane">
34
+ <p class="pane-title">KEYS</p>
35
+ <div id="key-accordion" class="key-accordion">
36
+ ${editableKeys.map((key) => `
37
+ <button type="button" class="key-accordion-item ${key === selectedKey ? 'active' : ''}" data-key="${escapeHtml(key)}" aria-expanded="${key === selectedKey ? 'true' : 'false'}">
38
+ <span class="key-accordion-title">${escapeHtml(key)}</span>
39
+ <span class="key-accordion-preview">${escapeHtml(renderKeyPreview(payload.config[key]))}</span>
40
+ </button>
41
+ `).join('')}
42
+ </div>
43
+ </aside>
44
+ <section class="value-pane">
45
+ <p class="pane-title">VALUE</p>
46
+ <textarea id="config-value" rows="7">${escapeHtml(selectedValue)}</textarea>
47
+ <div id="allowed-directories-controls" class="warning-row hidden">
48
+ <button id="browse-directory" type="button" class="ghost icon-only" title="Browse directories" aria-label="Browse directories">
49
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M10 4l2 2h8v12H4V4z"></path></svg>
50
+ </button>
51
+ <div id="context-warning" class="warnings hidden"></div>
52
+ </div>
53
+ <section id="directory-browser" class="browser hidden">
54
+ <div class="browser-actions browser-actions--compact">
55
+ <button id="browser-up" type="button" class="ghost icon-only" title="Up" aria-label="Up one directory">
56
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 14l5-5 5 5z"></path></svg>
57
+ </button>
58
+ <button id="browser-refresh" type="button" class="ghost icon-only" title="Refresh" aria-label="Refresh directory list">
59
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M17.65 6.35A7.95 7.95 0 0 0 12 4V1L7 6l5 5V7a5 5 0 1 1-5 5H5a7 7 0 1 0 12.65-5.65z"></path></svg>
60
+ </button>
61
+ <button id="browser-select-current" type="button" class="icon-only" title="Add current directory" aria-label="Add current directory">
62
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M19 11h-6V5h-2v6H5v2h6v6h2v-6h6z"></path></svg>
63
+ </button>
64
+ <button id="close-browser" type="button" class="ghost icon-only" title="Close picker" aria-label="Close picker">
65
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M18.3 5.71 12 12l6.3 6.29-1.41 1.42L10.59 13.4l-6.3 6.3-1.42-1.42 6.3-6.29-6.3-6.29L4.29 4.3l6.3 6.3 6.3-6.3z"></path></svg>
66
+ </button>
67
+ </div>
68
+ <p id="browser-path" class="browser-path browser-path--compact"></p>
69
+ <div id="browser-status" class="browser-status"></div>
70
+ <div id="browser-list" class="browser-list"></div>
71
+ </section>
72
+ </section>
73
+ </div>
74
+ </section>
75
+ </main>
76
+ `;
77
+ }
78
+ export function renderEmptyState() {
79
+ return `
80
+ <main class="shell">
81
+ <section class="panel">
82
+ <h1>Config Editor</h1>
83
+ <p>No structured configuration payload is available.</p>
84
+ </section>
85
+ </main>
86
+ `;
87
+ }
88
+ export function escapeHtmlText(value) {
89
+ return escapeHtml(value);
90
+ }
@@ -0,0 +1,5 @@
1
+ import type { ConfigStructuredContent } from './contracts.js';
2
+ export declare function parseConfigStructuredContent(value: unknown): ConfigStructuredContent | undefined;
3
+ export declare function extractStructuredContent(value: unknown): ConfigStructuredContent | undefined;
4
+ export declare function unwrapToolResult(value: unknown): unknown;
5
+ export declare function extractToolText(value: unknown): string;
@@ -0,0 +1,50 @@
1
+ import { isObject } from './contracts.js';
2
+ function isConfigStructuredContent(value) {
3
+ if (!isObject(value)) {
4
+ return false;
5
+ }
6
+ return isObject(value.config) && Array.isArray(value.editableKeys);
7
+ }
8
+ export function parseConfigStructuredContent(value) {
9
+ if (!isObject(value)) {
10
+ return undefined;
11
+ }
12
+ const candidate = value;
13
+ if (isConfigStructuredContent(candidate.structuredContent)) {
14
+ return candidate.structuredContent;
15
+ }
16
+ if (isConfigStructuredContent(value)) {
17
+ return value;
18
+ }
19
+ return undefined;
20
+ }
21
+ export function extractStructuredContent(value) {
22
+ if (!isObject(value)) {
23
+ return undefined;
24
+ }
25
+ if (value.method === 'ui/notifications/tool-result') {
26
+ const params = value.params;
27
+ const candidate = isObject(params) && isObject(params.result) ? params.result : params;
28
+ return parseConfigStructuredContent(candidate);
29
+ }
30
+ return parseConfigStructuredContent(value);
31
+ }
32
+ export function unwrapToolResult(value) {
33
+ if (!isObject(value)) {
34
+ return value;
35
+ }
36
+ if (isObject(value.result)) {
37
+ return value.result;
38
+ }
39
+ return value;
40
+ }
41
+ export function extractToolText(value) {
42
+ if (!isObject(value) || !Array.isArray(value.content)) {
43
+ return '';
44
+ }
45
+ const first = value.content[0];
46
+ if (!isObject(first) || typeof first.text !== 'string') {
47
+ return '';
48
+ }
49
+ return first.text;
50
+ }
@@ -0,0 +1 @@
1
+ export declare function renderConfigEditorToolbar(isExpanded: boolean, callToolAvailable: boolean): string;
@@ -0,0 +1,18 @@
1
+ import { renderToolHeader } from '../../shared/tool-header.js';
2
+ export function renderConfigEditorToolbar(isExpanded, callToolAvailable) {
3
+ return renderToolHeader({
4
+ pillLabel: 'CFG',
5
+ pillClassName: 'file-pill--json',
6
+ title: 'Config Editor',
7
+ subtitle: 'Inspect and update runtime config safely.',
8
+ badges: [],
9
+ actionsHtml: `
10
+ <button class="icon-button icon-button--primary hidden" id="apply-config" type="button" title="Apply changes" aria-label="Apply changes" ${callToolAvailable ? '' : 'disabled'}>
11
+ <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z"></path></svg>
12
+ </button>
13
+ <button class="icon-button" id="toggle-expand" type="button" title="${isExpanded ? 'Collapse' : 'Expand'}" aria-label="${isExpanded ? 'Collapse' : 'Expand'}">${isExpanded
14
+ ? '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 14l5-5 5 5z"></path></svg>'
15
+ : '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7 10l5 5 5-5z"></path></svg>'}</button>
16
+ `
17
+ });
18
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shared type contracts for Config Editor data models and host/tool interaction payloads. These definitions prevent runtime shape drift between parser, UI state, and RPC calls.
3
+ */
4
+ export interface ConfigStructuredContent {
5
+ config: Record<string, unknown>;
6
+ editableKeys: string[];
7
+ warnings?: string[];
8
+ }
9
+ export interface ToolResultShape {
10
+ structuredContent?: ConfigStructuredContent;
11
+ }
12
+ export interface ToolCallRequest {
13
+ name: string;
14
+ arguments: Record<string, unknown>;
15
+ }
16
+ export type HostCallTool = (request: ToolCallRequest) => Promise<any>;
17
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ export function isObject(value) {
2
+ return typeof value === 'object' && value !== null;
3
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Normalization utilities for config values shown/edited in the UI. It handles stringify/parse edge cases so edits round-trip safely through tool calls.
3
+ */
4
+ import type { ToolCallRequest } from '../types.js';
5
+ export declare function serializeConfigValue(raw: string): unknown;
6
+ export declare function buildSetConfigRequest(key: string, value: unknown): ToolCallRequest;
7
+ export declare function shouldAppendArrayValue(key: string, value: unknown): boolean;
8
+ export declare function formatValueForEditor(value: unknown): string;
9
+ export declare function valueToComparableJson(raw: string): string;
@@ -0,0 +1,61 @@
1
+ export function serializeConfigValue(raw) {
2
+ const trimmed = raw.trim();
3
+ if (trimmed.length === 0) {
4
+ return '';
5
+ }
6
+ if (trimmed === 'true') {
7
+ return true;
8
+ }
9
+ if (trimmed === 'false') {
10
+ return false;
11
+ }
12
+ if (trimmed === 'null') {
13
+ return null;
14
+ }
15
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
16
+ return Number(trimmed);
17
+ }
18
+ if ((trimmed.startsWith('[') && trimmed.endsWith(']')) || (trimmed.startsWith('{') && trimmed.endsWith('}'))) {
19
+ try {
20
+ return JSON.parse(trimmed);
21
+ }
22
+ catch {
23
+ return raw;
24
+ }
25
+ }
26
+ return raw;
27
+ }
28
+ export function buildSetConfigRequest(key, value) {
29
+ return {
30
+ name: 'set_config_value',
31
+ arguments: {
32
+ key,
33
+ value
34
+ }
35
+ };
36
+ }
37
+ export function shouldAppendArrayValue(key, value) {
38
+ return (key === 'blockedCommands' || key === 'allowedDirectories') && typeof value === 'string' && value.trim().length > 0;
39
+ }
40
+ export function formatValueForEditor(value) {
41
+ if (typeof value === 'string') {
42
+ return value;
43
+ }
44
+ if (value === undefined) {
45
+ return '';
46
+ }
47
+ try {
48
+ return JSON.stringify(value, null, 2);
49
+ }
50
+ catch {
51
+ return String(value);
52
+ }
53
+ }
54
+ export function valueToComparableJson(raw) {
55
+ try {
56
+ return JSON.stringify(serializeConfigValue(raw));
57
+ }
58
+ catch {
59
+ return raw;
60
+ }
61
+ }
@@ -0,0 +1,31 @@
1
+ import type { ConfigStructuredContent } from '../types.js';
2
+ import type { HostCallTool } from '../types.js';
3
+ type StatusTone = 'info' | 'success' | 'error';
4
+ export interface DirectoryBrowserElements {
5
+ browseControls: HTMLElement | null;
6
+ browseButton: HTMLButtonElement | null;
7
+ browserPanel: HTMLElement | null;
8
+ browserPath: HTMLElement | null;
9
+ browserStatus: HTMLElement | null;
10
+ browserList: HTMLElement | null;
11
+ }
12
+ interface DirectoryBrowserControllerOptions {
13
+ callTool: HostCallTool | null;
14
+ payload: ConfigStructuredContent;
15
+ elements: DirectoryBrowserElements;
16
+ onRender?: () => void;
17
+ setStatus: (message: string, tone?: StatusTone) => void;
18
+ getEditorValue: () => string;
19
+ setEditorValue: (nextValue: string) => void;
20
+ syncApplyVisibility: () => void;
21
+ }
22
+ export interface DirectoryBrowserController {
23
+ syncControls: (activeKey: string) => void;
24
+ toggle: () => Promise<void>;
25
+ close: () => void;
26
+ refresh: () => Promise<void>;
27
+ navigateUp: () => Promise<void>;
28
+ selectCurrent: () => void;
29
+ }
30
+ export declare function createDirectoryBrowserController(options: DirectoryBrowserControllerOptions): DirectoryBrowserController;
31
+ export {};