opensip-cli 0.1.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 (348) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +51 -0
  4. package/dist/api.d.ts +17 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +16 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/bootstrap/admit-tool-package.d.ts +117 -0
  9. package/dist/bootstrap/admit-tool-package.d.ts.map +1 -0
  10. package/dist/bootstrap/admit-tool-package.js +170 -0
  11. package/dist/bootstrap/admit-tool-package.js.map +1 -0
  12. package/dist/bootstrap/baseline-seams.d.ts +30 -0
  13. package/dist/bootstrap/baseline-seams.d.ts.map +1 -0
  14. package/dist/bootstrap/baseline-seams.js +156 -0
  15. package/dist/bootstrap/baseline-seams.js.map +1 -0
  16. package/dist/bootstrap/bootstrap-error.d.ts +41 -0
  17. package/dist/bootstrap/bootstrap-error.d.ts.map +1 -0
  18. package/dist/bootstrap/bootstrap-error.js +33 -0
  19. package/dist/bootstrap/bootstrap-error.js.map +1 -0
  20. package/dist/bootstrap/build-command-registration-input.d.ts +34 -0
  21. package/dist/bootstrap/build-command-registration-input.d.ts.map +1 -0
  22. package/dist/bootstrap/build-command-registration-input.js +73 -0
  23. package/dist/bootstrap/build-command-registration-input.js.map +1 -0
  24. package/dist/bootstrap/build-per-run-scope.d.ts +62 -0
  25. package/dist/bootstrap/build-per-run-scope.d.ts.map +1 -0
  26. package/dist/bootstrap/build-per-run-scope.js +152 -0
  27. package/dist/bootstrap/build-per-run-scope.js.map +1 -0
  28. package/dist/bootstrap/build-targets.d.ts +42 -0
  29. package/dist/bootstrap/build-targets.d.ts.map +1 -0
  30. package/dist/bootstrap/build-targets.js +117 -0
  31. package/dist/bootstrap/build-targets.js.map +1 -0
  32. package/dist/bootstrap/cli-defaults.d.ts +35 -0
  33. package/dist/bootstrap/cli-defaults.d.ts.map +1 -0
  34. package/dist/bootstrap/cli-defaults.js +65 -0
  35. package/dist/bootstrap/cli-defaults.js.map +1 -0
  36. package/dist/bootstrap/config-and-capabilities.d.ts +74 -0
  37. package/dist/bootstrap/config-and-capabilities.d.ts.map +1 -0
  38. package/dist/bootstrap/config-and-capabilities.js +224 -0
  39. package/dist/bootstrap/config-and-capabilities.js.map +1 -0
  40. package/dist/bootstrap/deliver-envelope.d.ts +80 -0
  41. package/dist/bootstrap/deliver-envelope.d.ts.map +1 -0
  42. package/dist/bootstrap/deliver-envelope.js +195 -0
  43. package/dist/bootstrap/deliver-envelope.js.map +1 -0
  44. package/dist/bootstrap/egress-plane.d.ts +22 -0
  45. package/dist/bootstrap/egress-plane.d.ts.map +1 -0
  46. package/dist/bootstrap/egress-plane.js +37 -0
  47. package/dist/bootstrap/egress-plane.js.map +1 -0
  48. package/dist/bootstrap/host-planes.d.ts +28 -0
  49. package/dist/bootstrap/host-planes.d.ts.map +1 -0
  50. package/dist/bootstrap/host-planes.js +152 -0
  51. package/dist/bootstrap/host-planes.js.map +1 -0
  52. package/dist/bootstrap/index.d.ts +76 -0
  53. package/dist/bootstrap/index.d.ts.map +1 -0
  54. package/dist/bootstrap/index.js +109 -0
  55. package/dist/bootstrap/index.js.map +1 -0
  56. package/dist/bootstrap/live-plane.d.ts +51 -0
  57. package/dist/bootstrap/live-plane.d.ts.map +1 -0
  58. package/dist/bootstrap/live-plane.js +72 -0
  59. package/dist/bootstrap/live-plane.js.map +1 -0
  60. package/dist/bootstrap/load-tool-capabilities.d.ts +42 -0
  61. package/dist/bootstrap/load-tool-capabilities.d.ts.map +1 -0
  62. package/dist/bootstrap/load-tool-capabilities.js +76 -0
  63. package/dist/bootstrap/load-tool-capabilities.js.map +1 -0
  64. package/dist/bootstrap/output-plane.d.ts +37 -0
  65. package/dist/bootstrap/output-plane.d.ts.map +1 -0
  66. package/dist/bootstrap/output-plane.js +114 -0
  67. package/dist/bootstrap/output-plane.js.map +1 -0
  68. package/dist/bootstrap/owning-tool-init.d.ts +32 -0
  69. package/dist/bootstrap/owning-tool-init.d.ts.map +1 -0
  70. package/dist/bootstrap/owning-tool-init.js +69 -0
  71. package/dist/bootstrap/owning-tool-init.js.map +1 -0
  72. package/dist/bootstrap/pre-action-guards.d.ts +44 -0
  73. package/dist/bootstrap/pre-action-guards.d.ts.map +1 -0
  74. package/dist/bootstrap/pre-action-guards.js +136 -0
  75. package/dist/bootstrap/pre-action-guards.js.map +1 -0
  76. package/dist/bootstrap/pre-action-hook.d.ts +68 -0
  77. package/dist/bootstrap/pre-action-hook.d.ts.map +1 -0
  78. package/dist/bootstrap/pre-action-hook.js +289 -0
  79. package/dist/bootstrap/pre-action-hook.js.map +1 -0
  80. package/dist/bootstrap/pre-action-messages.d.ts +32 -0
  81. package/dist/bootstrap/pre-action-messages.d.ts.map +1 -0
  82. package/dist/bootstrap/pre-action-messages.js +49 -0
  83. package/dist/bootstrap/pre-action-messages.js.map +1 -0
  84. package/dist/bootstrap/process-idempotency.d.ts +17 -0
  85. package/dist/bootstrap/process-idempotency.d.ts.map +1 -0
  86. package/dist/bootstrap/process-idempotency.js +20 -0
  87. package/dist/bootstrap/process-idempotency.js.map +1 -0
  88. package/dist/bootstrap/register-language-adapters.d.ts +23 -0
  89. package/dist/bootstrap/register-language-adapters.d.ts.map +1 -0
  90. package/dist/bootstrap/register-language-adapters.js +35 -0
  91. package/dist/bootstrap/register-language-adapters.js.map +1 -0
  92. package/dist/bootstrap/register-tools.d.ts +228 -0
  93. package/dist/bootstrap/register-tools.d.ts.map +1 -0
  94. package/dist/bootstrap/register-tools.js +696 -0
  95. package/dist/bootstrap/register-tools.js.map +1 -0
  96. package/dist/bootstrap/render.d.ts +27 -0
  97. package/dist/bootstrap/render.d.ts.map +1 -0
  98. package/dist/bootstrap/render.js +53 -0
  99. package/dist/bootstrap/render.js.map +1 -0
  100. package/dist/bootstrap/report.d.ts +34 -0
  101. package/dist/bootstrap/report.d.ts.map +1 -0
  102. package/dist/bootstrap/report.js +47 -0
  103. package/dist/bootstrap/report.js.map +1 -0
  104. package/dist/bootstrap/run-plane.d.ts +105 -0
  105. package/dist/bootstrap/run-plane.d.ts.map +1 -0
  106. package/dist/bootstrap/run-plane.js +190 -0
  107. package/dist/bootstrap/run-plane.js.map +1 -0
  108. package/dist/bootstrap/scope-access.d.ts +68 -0
  109. package/dist/bootstrap/scope-access.d.ts.map +1 -0
  110. package/dist/bootstrap/scope-access.js +115 -0
  111. package/dist/bootstrap/scope-access.js.map +1 -0
  112. package/dist/bootstrap/state-seams.d.ts +14 -0
  113. package/dist/bootstrap/state-seams.d.ts.map +1 -0
  114. package/dist/bootstrap/state-seams.js +26 -0
  115. package/dist/bootstrap/state-seams.js.map +1 -0
  116. package/dist/bootstrap/tool-lifecycle.d.ts +102 -0
  117. package/dist/bootstrap/tool-lifecycle.d.ts.map +1 -0
  118. package/dist/bootstrap/tool-lifecycle.js +103 -0
  119. package/dist/bootstrap/tool-lifecycle.js.map +1 -0
  120. package/dist/bootstrap/tool-trust.d.ts +49 -0
  121. package/dist/bootstrap/tool-trust.d.ts.map +1 -0
  122. package/dist/bootstrap/tool-trust.js +65 -0
  123. package/dist/bootstrap/tool-trust.js.map +1 -0
  124. package/dist/bootstrap/validate-tool.d.ts +22 -0
  125. package/dist/bootstrap/validate-tool.d.ts.map +1 -0
  126. package/dist/bootstrap/validate-tool.js +38 -0
  127. package/dist/bootstrap/validate-tool.js.map +1 -0
  128. package/dist/cli-context.d.ts +38 -0
  129. package/dist/cli-context.d.ts.map +1 -0
  130. package/dist/cli-context.js +134 -0
  131. package/dist/cli-context.js.map +1 -0
  132. package/dist/commands/agent-catalog.d.ts +45 -0
  133. package/dist/commands/agent-catalog.d.ts.map +1 -0
  134. package/dist/commands/agent-catalog.js +115 -0
  135. package/dist/commands/agent-catalog.js.map +1 -0
  136. package/dist/commands/assemble-outcome.d.ts +69 -0
  137. package/dist/commands/assemble-outcome.d.ts.map +1 -0
  138. package/dist/commands/assemble-outcome.js +121 -0
  139. package/dist/commands/assemble-outcome.js.map +1 -0
  140. package/dist/commands/clear.d.ts +32 -0
  141. package/dist/commands/clear.d.ts.map +1 -0
  142. package/dist/commands/clear.js +73 -0
  143. package/dist/commands/clear.js.map +1 -0
  144. package/dist/commands/completion.d.ts +90 -0
  145. package/dist/commands/completion.d.ts.map +1 -0
  146. package/dist/commands/completion.js +233 -0
  147. package/dist/commands/completion.js.map +1 -0
  148. package/dist/commands/configure.d.ts +32 -0
  149. package/dist/commands/configure.d.ts.map +1 -0
  150. package/dist/commands/configure.js +94 -0
  151. package/dist/commands/configure.js.map +1 -0
  152. package/dist/commands/history.d.ts +18 -0
  153. package/dist/commands/history.d.ts.map +1 -0
  154. package/dist/commands/history.js +48 -0
  155. package/dist/commands/history.js.map +1 -0
  156. package/dist/commands/host-command-specs.d.ts +49 -0
  157. package/dist/commands/host-command-specs.d.ts.map +1 -0
  158. package/dist/commands/host-command-specs.js +331 -0
  159. package/dist/commands/host-command-specs.js.map +1 -0
  160. package/dist/commands/host-subcommand-groups.d.ts +69 -0
  161. package/dist/commands/host-subcommand-groups.d.ts.map +1 -0
  162. package/dist/commands/host-subcommand-groups.js +374 -0
  163. package/dist/commands/host-subcommand-groups.js.map +1 -0
  164. package/dist/commands/index.d.ts +36 -0
  165. package/dist/commands/index.d.ts.map +1 -0
  166. package/dist/commands/index.js +36 -0
  167. package/dist/commands/index.js.map +1 -0
  168. package/dist/commands/init/config-templates.d.ts +16 -0
  169. package/dist/commands/init/config-templates.d.ts.map +1 -0
  170. package/dist/commands/init/config-templates.js +108 -0
  171. package/dist/commands/init/config-templates.js.map +1 -0
  172. package/dist/commands/init/file-classifier.d.ts +40 -0
  173. package/dist/commands/init/file-classifier.d.ts.map +1 -0
  174. package/dist/commands/init/file-classifier.js +155 -0
  175. package/dist/commands/init/file-classifier.js.map +1 -0
  176. package/dist/commands/init/language-detection.d.ts +44 -0
  177. package/dist/commands/init/language-detection.d.ts.map +1 -0
  178. package/dist/commands/init/language-detection.js +124 -0
  179. package/dist/commands/init/language-detection.js.map +1 -0
  180. package/dist/commands/init/scaffold-writer.d.ts +26 -0
  181. package/dist/commands/init/scaffold-writer.d.ts.map +1 -0
  182. package/dist/commands/init/scaffold-writer.js +102 -0
  183. package/dist/commands/init/scaffold-writer.js.map +1 -0
  184. package/dist/commands/init/state-machine.d.ts +32 -0
  185. package/dist/commands/init/state-machine.d.ts.map +1 -0
  186. package/dist/commands/init/state-machine.js +105 -0
  187. package/dist/commands/init/state-machine.js.map +1 -0
  188. package/dist/commands/init.d.ts +95 -0
  189. package/dist/commands/init.d.ts.map +1 -0
  190. package/dist/commands/init.js +209 -0
  191. package/dist/commands/init.js.map +1 -0
  192. package/dist/commands/mount-command-spec.d.ts +106 -0
  193. package/dist/commands/mount-command-spec.d.ts.map +1 -0
  194. package/dist/commands/mount-command-spec.js +313 -0
  195. package/dist/commands/mount-command-spec.js.map +1 -0
  196. package/dist/commands/mount-result-command.d.ts +71 -0
  197. package/dist/commands/mount-result-command.d.ts.map +1 -0
  198. package/dist/commands/mount-result-command.js +76 -0
  199. package/dist/commands/mount-result-command.js.map +1 -0
  200. package/dist/commands/plugin/config-edit.d.ts +20 -0
  201. package/dist/commands/plugin/config-edit.d.ts.map +1 -0
  202. package/dist/commands/plugin/config-edit.js +102 -0
  203. package/dist/commands/plugin/config-edit.js.map +1 -0
  204. package/dist/commands/plugin/domain-resolution.d.ts +38 -0
  205. package/dist/commands/plugin/domain-resolution.d.ts.map +1 -0
  206. package/dist/commands/plugin/domain-resolution.js +98 -0
  207. package/dist/commands/plugin/domain-resolution.js.map +1 -0
  208. package/dist/commands/plugin/host-dir.d.ts +42 -0
  209. package/dist/commands/plugin/host-dir.d.ts.map +1 -0
  210. package/dist/commands/plugin/host-dir.js +168 -0
  211. package/dist/commands/plugin/host-dir.js.map +1 -0
  212. package/dist/commands/plugin-host-ops.d.ts +41 -0
  213. package/dist/commands/plugin-host-ops.d.ts.map +1 -0
  214. package/dist/commands/plugin-host-ops.js +114 -0
  215. package/dist/commands/plugin-host-ops.js.map +1 -0
  216. package/dist/commands/plugin.d.ts +81 -0
  217. package/dist/commands/plugin.d.ts.map +1 -0
  218. package/dist/commands/plugin.js +287 -0
  219. package/dist/commands/plugin.js.map +1 -0
  220. package/dist/commands/render-outcome.d.ts +52 -0
  221. package/dist/commands/render-outcome.d.ts.map +1 -0
  222. package/dist/commands/render-outcome.js +55 -0
  223. package/dist/commands/render-outcome.js.map +1 -0
  224. package/dist/commands/session-show.d.ts +27 -0
  225. package/dist/commands/session-show.d.ts.map +1 -0
  226. package/dist/commands/session-show.js +166 -0
  227. package/dist/commands/session-show.js.map +1 -0
  228. package/dist/commands/shared.d.ts +107 -0
  229. package/dist/commands/shared.d.ts.map +1 -0
  230. package/dist/commands/shared.js +13 -0
  231. package/dist/commands/shared.js.map +1 -0
  232. package/dist/commands/tools/data-purge.d.ts +20 -0
  233. package/dist/commands/tools/data-purge.d.ts.map +1 -0
  234. package/dist/commands/tools/data-purge.js +59 -0
  235. package/dist/commands/tools/data-purge.js.map +1 -0
  236. package/dist/commands/tools/index.d.ts +16 -0
  237. package/dist/commands/tools/index.d.ts.map +1 -0
  238. package/dist/commands/tools/index.js +213 -0
  239. package/dist/commands/tools/index.js.map +1 -0
  240. package/dist/commands/tools/install.d.ts +24 -0
  241. package/dist/commands/tools/install.d.ts.map +1 -0
  242. package/dist/commands/tools/install.js +83 -0
  243. package/dist/commands/tools/install.js.map +1 -0
  244. package/dist/commands/tools/list.d.ts +41 -0
  245. package/dist/commands/tools/list.d.ts.map +1 -0
  246. package/dist/commands/tools/list.js +103 -0
  247. package/dist/commands/tools/list.js.map +1 -0
  248. package/dist/commands/tools/runtime-probe-entry.d.ts +14 -0
  249. package/dist/commands/tools/runtime-probe-entry.d.ts.map +1 -0
  250. package/dist/commands/tools/runtime-probe-entry.js +36 -0
  251. package/dist/commands/tools/runtime-probe-entry.js.map +1 -0
  252. package/dist/commands/tools/runtime-probe.d.ts +29 -0
  253. package/dist/commands/tools/runtime-probe.d.ts.map +1 -0
  254. package/dist/commands/tools/runtime-probe.js +66 -0
  255. package/dist/commands/tools/runtime-probe.js.map +1 -0
  256. package/dist/commands/tools/storage-contract-checks.d.ts +37 -0
  257. package/dist/commands/tools/storage-contract-checks.d.ts.map +1 -0
  258. package/dist/commands/tools/storage-contract-checks.js +91 -0
  259. package/dist/commands/tools/storage-contract-checks.js.map +1 -0
  260. package/dist/commands/tools/uninstall.d.ts +29 -0
  261. package/dist/commands/tools/uninstall.d.ts.map +1 -0
  262. package/dist/commands/tools/uninstall.js +77 -0
  263. package/dist/commands/tools/uninstall.js.map +1 -0
  264. package/dist/commands/tools/validate.d.ts +44 -0
  265. package/dist/commands/tools/validate.d.ts.map +1 -0
  266. package/dist/commands/tools/validate.js +202 -0
  267. package/dist/commands/tools/validate.js.map +1 -0
  268. package/dist/commands/uninstall/targets.d.ts +53 -0
  269. package/dist/commands/uninstall/targets.d.ts.map +1 -0
  270. package/dist/commands/uninstall/targets.js +205 -0
  271. package/dist/commands/uninstall/targets.js.map +1 -0
  272. package/dist/commands/uninstall.d.ts +88 -0
  273. package/dist/commands/uninstall.d.ts.map +1 -0
  274. package/dist/commands/uninstall.js +184 -0
  275. package/dist/commands/uninstall.js.map +1 -0
  276. package/dist/env/host-env-specs.d.ts +52 -0
  277. package/dist/env/host-env-specs.d.ts.map +1 -0
  278. package/dist/env/host-env-specs.js +129 -0
  279. package/dist/env/host-env-specs.js.map +1 -0
  280. package/dist/error-handler.d.ts +64 -0
  281. package/dist/error-handler.d.ts.map +1 -0
  282. package/dist/error-handler.js +180 -0
  283. package/dist/error-handler.js.map +1 -0
  284. package/dist/index.d.ts +21 -0
  285. package/dist/index.d.ts.map +1 -0
  286. package/dist/index.js +154 -0
  287. package/dist/index.js.map +1 -0
  288. package/dist/open-report.d.ts +40 -0
  289. package/dist/open-report.d.ts.map +1 -0
  290. package/dist/open-report.js +54 -0
  291. package/dist/open-report.js.map +1 -0
  292. package/dist/report-compose.d.ts +35 -0
  293. package/dist/report-compose.d.ts.map +1 -0
  294. package/dist/report-compose.js +103 -0
  295. package/dist/report-compose.js.map +1 -0
  296. package/dist/session-replay-registry.d.ts +20 -0
  297. package/dist/session-replay-registry.d.ts.map +1 -0
  298. package/dist/session-replay-registry.js +38 -0
  299. package/dist/session-replay-registry.js.map +1 -0
  300. package/dist/telemetry/profiling.d.ts +42 -0
  301. package/dist/telemetry/profiling.d.ts.map +1 -0
  302. package/dist/telemetry/profiling.js +160 -0
  303. package/dist/telemetry/profiling.js.map +1 -0
  304. package/dist/telemetry/sdk-init.d.ts +87 -0
  305. package/dist/telemetry/sdk-init.d.ts.map +1 -0
  306. package/dist/telemetry/sdk-init.js +235 -0
  307. package/dist/telemetry/sdk-init.js.map +1 -0
  308. package/dist/ui/App.d.ts +32 -0
  309. package/dist/ui/App.d.ts.map +1 -0
  310. package/dist/ui/App.js +35 -0
  311. package/dist/ui/App.js.map +1 -0
  312. package/dist/ui/render.d.ts +15 -0
  313. package/dist/ui/render.d.ts.map +1 -0
  314. package/dist/ui/render.js +21 -0
  315. package/dist/ui/render.js.map +1 -0
  316. package/dist/ui/result-to-view.d.ts +40 -0
  317. package/dist/ui/result-to-view.d.ts.map +1 -0
  318. package/dist/ui/result-to-view.js +389 -0
  319. package/dist/ui/result-to-view.js.map +1 -0
  320. package/dist/ui/views/init-view.d.ts +9 -0
  321. package/dist/ui/views/init-view.d.ts.map +1 -0
  322. package/dist/ui/views/init-view.js +119 -0
  323. package/dist/ui/views/init-view.js.map +1 -0
  324. package/dist/ui/views/misc-views.d.ts +18 -0
  325. package/dist/ui/views/misc-views.d.ts.map +1 -0
  326. package/dist/ui/views/misc-views.js +244 -0
  327. package/dist/ui/views/misc-views.js.map +1 -0
  328. package/dist/ui/views/plugin-view.d.ts +8 -0
  329. package/dist/ui/views/plugin-view.d.ts.map +1 -0
  330. package/dist/ui/views/plugin-view.js +135 -0
  331. package/dist/ui/views/plugin-view.js.map +1 -0
  332. package/dist/ui/views/tools-views.d.ts +12 -0
  333. package/dist/ui/views/tools-views.d.ts.map +1 -0
  334. package/dist/ui/views/tools-views.js +152 -0
  335. package/dist/ui/views/tools-views.js.map +1 -0
  336. package/dist/update-notifier.d.ts +108 -0
  337. package/dist/update-notifier.d.ts.map +1 -0
  338. package/dist/update-notifier.js +188 -0
  339. package/dist/update-notifier.js.map +1 -0
  340. package/dist/update-state.d.ts +40 -0
  341. package/dist/update-state.d.ts.map +1 -0
  342. package/dist/update-state.js +81 -0
  343. package/dist/update-state.js.map +1 -0
  344. package/dist/welcome.d.ts +53 -0
  345. package/dist/welcome.d.ts.map +1 -0
  346. package/dist/welcome.js +89 -0
  347. package/dist/welcome.js.map +1 -0
  348. package/package.json +100 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * View-model builders for the remaining result types: list-checks,
3
+ * list-recipes, history, simulation notice, report, help, and the
4
+ * clear/configure/uninstall "done" summaries. Each reproduces the visible
5
+ * output of its retired Ink component as a renderer-agnostic ViewNode.
6
+ */
7
+ import { line, group, viewTable, } from '@opensip-cli/cli-ui';
8
+ const SPACER = { kind: 'spacer' };
9
+ const SEPARATOR = { kind: 'separator' };
10
+ const SIMULATION_TOOL_TITLE = 'Simulation';
11
+ // --- list-checks ----------------------------------------------------------
12
+ export function viewListChecks(result) {
13
+ const tagGroups = new Map();
14
+ for (const check of result.checks) {
15
+ const tags = check.tags.length > 0 ? check.tags : ['untagged'];
16
+ for (const tag of tags) {
17
+ const existing = tagGroups.get(tag);
18
+ if (existing)
19
+ existing.push(check);
20
+ else
21
+ tagGroups.set(tag, [check]);
22
+ }
23
+ }
24
+ const sortedTags = [...tagGroups.entries()].sort(([a], [b]) => a.localeCompare(b));
25
+ const children = [
26
+ line([
27
+ { text: 'Available Fitness Checks', bold: true },
28
+ { text: ` (${result.totalCount} total)`, dim: true },
29
+ ]),
30
+ SPACER,
31
+ ];
32
+ for (const [tag, tagChecks] of sortedTags) {
33
+ // tagChecks is a freshly-built array owned by this function — sort in
34
+ // place (no copy): avoids both a spread-in-loop (performance-anti-patterns
35
+ // fitness check) and Array#slice (unicorn/prefer-spread eslint rule).
36
+ tagChecks.sort((a, b) => a.slug.localeCompare(b.slug));
37
+ const block = [
38
+ line([
39
+ { text: tag, tone: 'brand' },
40
+ { text: ` (${tagChecks.length})`, dim: true },
41
+ ]),
42
+ ];
43
+ for (const c of tagChecks) {
44
+ block.push(line([{ text: ` ${c.slug} ` }, { text: `— ${c.description}`, dim: true }]));
45
+ }
46
+ block.push(SPACER);
47
+ children.push(group(block, 2));
48
+ }
49
+ return group(children);
50
+ }
51
+ // --- list-recipes ---------------------------------------------------------
52
+ export function viewListRecipes(result) {
53
+ const children = [line([{ text: 'Available Recipes', bold: true }]), SPACER];
54
+ for (const r of result.recipes) {
55
+ children.push(line([
56
+ { text: ' ' },
57
+ { text: r.name, tone: 'brand' },
58
+ { text: ` — ${r.description} ` },
59
+ { text: `(${r.checkCount})`, dim: true },
60
+ ]));
61
+ }
62
+ return group(children);
63
+ }
64
+ // --- history --------------------------------------------------------------
65
+ function scoreTone(score) {
66
+ if (score >= 90)
67
+ return 'success';
68
+ if (score >= 70)
69
+ return 'warning';
70
+ return 'error';
71
+ }
72
+ function payloadCounts(payload) {
73
+ if (payload === null || typeof payload !== 'object')
74
+ return null;
75
+ const summary = payload.summary;
76
+ if (summary === null || typeof summary !== 'object')
77
+ return null;
78
+ const { passed, total } = summary;
79
+ return typeof passed === 'number' && typeof total === 'number' ? { passed, total } : null;
80
+ }
81
+ /** One table row (one span per column) for a stored session. */
82
+ function historyRow(s) {
83
+ const counts = payloadCounts(s.payload);
84
+ return [
85
+ { text: s.id, dim: true },
86
+ { text: s.tool, tone: 'brand', bold: true },
87
+ { text: new Date(s.startedAt).toLocaleString(), dim: true },
88
+ { text: `${s.score}%`, tone: scoreTone(s.score) },
89
+ { text: s.passed ? 'PASS' : 'FAIL', tone: s.passed ? 'success' : 'error' },
90
+ { text: counts ? `${counts.passed}/${counts.total}` : '—' },
91
+ { text: s.recipe ?? '', dim: true },
92
+ { text: `${(s.durationMs / 1000).toFixed(1)}s`, dim: true },
93
+ ];
94
+ }
95
+ /** Columns for the run-history table — Score/Checks/Duration right-align. */
96
+ const HISTORY_COLUMNS = [
97
+ 'Session',
98
+ 'Tool',
99
+ 'When',
100
+ { header: 'Score', align: 'right' },
101
+ 'Status',
102
+ { header: 'Checks', align: 'right' },
103
+ 'Recipe',
104
+ { header: 'Duration', align: 'right' },
105
+ ];
106
+ export function viewHistory(result) {
107
+ if (result.sessions.length === 0) {
108
+ return group([line([{ text: 'No sessions recorded yet. Run opensip fit to generate data.', dim: true }])], 2);
109
+ }
110
+ const visible = result.sessions.slice(0, 20);
111
+ return group([
112
+ line([
113
+ { text: 'Run History', bold: true },
114
+ { text: ` (${result.sessions.length} sessions)`, dim: true },
115
+ ]),
116
+ SPACER,
117
+ group([viewTable(HISTORY_COLUMNS, visible.map(historyRow))], 2),
118
+ ]);
119
+ }
120
+ // --- sim notice ------------------------------------------------------------
121
+ export function viewSimNotice(_result) {
122
+ return group([
123
+ group([
124
+ line([{ text: SIMULATION_TOOL_TITLE, tone: 'brand', bold: true }]),
125
+ SPACER,
126
+ line([{ text: 'Run scenario-based tests against your codebase.', dim: true }]),
127
+ SPACER,
128
+ SEPARATOR,
129
+ ], 2),
130
+ group([
131
+ SPACER,
132
+ line([{ text: 'Status:', tone: 'success' }, { text: ' Available in OpenSIP CLI 1.0.0.' }]),
133
+ line([{ text: ' Use opensip sim --recipes to list registered recipes.' }]),
134
+ SPACER,
135
+ line([{ text: ' → https://github.com/opensip-ai/opensip-cli/issues', dim: true }]),
136
+ ], 2),
137
+ ]);
138
+ }
139
+ // --- help -----------------------------------------------------------------
140
+ export function viewHelp() {
141
+ return group([
142
+ line([{ text: 'opensip-cli', bold: true }]),
143
+ line([{ text: 'Codebase analysis toolkit', dim: true }]),
144
+ SPACER,
145
+ line([{ text: 'Commands:', bold: true }]),
146
+ line([{ text: ' ' }, { text: 'fit', tone: 'brand' }, { text: ' Run fitness checks' }]),
147
+ line([{ text: ' ' }, { text: 'init', tone: 'brand' }, { text: ' Generate config file' }]),
148
+ line([
149
+ { text: ' ' },
150
+ { text: 'sim', tone: 'brand' },
151
+ { text: ' Run simulation scenarios' },
152
+ ]),
153
+ line([{ text: ' ' }, { text: 'plugin', tone: 'brand' }, { text: ' Manage plugins' }]),
154
+ SPACER,
155
+ line([{ text: 'Run opensip-cli <command> --help for details.', dim: true }]),
156
+ ], 2);
157
+ }
158
+ // --- report ---------------------------------------------------------------
159
+ export function viewReport(result) {
160
+ return group([
161
+ line([
162
+ { text: '✓', tone: 'success' },
163
+ { text: ' Report written to ' },
164
+ { text: result.path, bold: true },
165
+ ]),
166
+ line([
167
+ {
168
+ text: ` ${result.opened ? 'Opened in browser.' : 'Open the file in your browser to view.'}`,
169
+ dim: true,
170
+ },
171
+ ]),
172
+ ], 2);
173
+ }
174
+ // --- clear-done -----------------------------------------------------------
175
+ export function viewClearDone(result) {
176
+ if (result.action === 'empty')
177
+ return group([line([{ text: 'No session data to clear.', dim: true }])], 2);
178
+ if (result.action === 'cancelled')
179
+ return group([line([{ text: 'Cancelled. No data was deleted.', dim: true }])], 2);
180
+ const plural = result.deletedCount === 1 ? '' : 's';
181
+ return group([
182
+ line([
183
+ { text: '✓', tone: 'success' },
184
+ { text: ` ${result.deletedCount} session${plural} deleted.` },
185
+ ]),
186
+ ], 2);
187
+ }
188
+ // --- configure-done -------------------------------------------------------
189
+ export function viewConfigureDone(result) {
190
+ if (result.action === 'cancelled') {
191
+ return group([line([{ text: 'No key provided. Configuration unchanged.', dim: true }])], 2);
192
+ }
193
+ return group([
194
+ line([
195
+ { text: '✓', tone: 'success' },
196
+ { text: ' API key saved to ' },
197
+ { text: result.configPath, bold: true },
198
+ ]),
199
+ line([
200
+ { text: ' You can now use --report-to to send results to OpenSIP Cloud.', dim: true },
201
+ ]),
202
+ ], 2);
203
+ }
204
+ // --- uninstall-done -------------------------------------------------------
205
+ function formatBytes(bytes) {
206
+ if (bytes < 1024)
207
+ return `${bytes} B`;
208
+ if (bytes < 1024 * 1024)
209
+ return `${(bytes / 1024).toFixed(1)} KB`;
210
+ if (bytes < 1024 * 1024 * 1024)
211
+ return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
212
+ return `${(bytes / 1024 / 1024 / 1024).toFixed(2)} GB`;
213
+ }
214
+ export function viewUninstallDone(result) {
215
+ const sizeText = formatBytes(result.sizeBytes);
216
+ const count = result.targets.length;
217
+ const plural = count === 1 ? '' : 's';
218
+ if (result.action === 'empty')
219
+ return group([line([{ text: `Nothing to remove at ${result.rootPath}.`, dim: true }])], 2);
220
+ if (result.action === 'cancelled')
221
+ return group([line([{ text: 'Cancelled. No changes made.', dim: true }])], 2);
222
+ if (result.action === 'dry-run') {
223
+ return group([
224
+ line([
225
+ {
226
+ text: `[dry-run] No changes made. Re-run without --dry-run to remove ${count} target${plural} (${sizeText}).`,
227
+ dim: true,
228
+ },
229
+ ]),
230
+ ], 2);
231
+ }
232
+ const hint = result.mode === 'user'
233
+ ? 'To remove the CLI itself: npm uninstall -g opensip-cli'
234
+ : 'To also remove user-level config: opensip uninstall';
235
+ return group([
236
+ line([
237
+ { text: '✓', tone: 'success' },
238
+ { text: ` Removed ${count} target${plural} ` },
239
+ { text: `(${sizeText})`, dim: true },
240
+ ]),
241
+ line([{ text: ` ${hint}`, dim: true }]),
242
+ ], 2);
243
+ }
244
+ //# sourceMappingURL=misc-views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc-views.js","sourceRoot":"","sources":["../../../src/ui/views/misc-views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * plugin view-model builder — expresses each PluginResult variant
3
+ * (list / add / remove / sync) as a ViewNode.
4
+ */
5
+ import { type ViewNode } from '@opensip-cli/cli-ui';
6
+ import type { PluginResult } from '@opensip-cli/contracts';
7
+ export declare function viewPlugin(result: PluginResult): ViewNode;
8
+ //# sourceMappingURL=plugin-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-view.d.ts","sourceRoot":"","sources":["../../../src/ui/views/plugin-view.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,KAAK,EAAc,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAyJvF,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CAqBzD"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * plugin view-model builder — expresses each PluginResult variant
3
+ * (list / add / remove / sync) as a ViewNode.
4
+ */
5
+ import { line, group } from '@opensip-cli/cli-ui';
6
+ /** A short, stable prefix of the manifest hash — full hash stays in `--json`. */
7
+ function shortHash(manifestHash) {
8
+ return manifestHash.slice(0, 12);
9
+ }
10
+ function provenanceLine(p) {
11
+ const spans = [
12
+ { text: ` 🔧 ${p.id}`, tone: 'brand' },
13
+ { text: ` ${p.version}`, dim: true },
14
+ { text: ` [${p.source}]`, dim: true },
15
+ { text: ` ${shortHash(p.manifestHash)}`, dim: true },
16
+ ];
17
+ if (p.packageName !== undefined)
18
+ spans.push({ text: ` ${p.packageName}`, dim: true });
19
+ return line(spans);
20
+ }
21
+ /**
22
+ * Render the admitted-tool provenance recorded this run (launch).
23
+ * Additive section below the discovered-plugin list — empty/omitted when
24
+ * no tools were admitted (e.g. no bootstrap, isolated tests).
25
+ */
26
+ function provenanceSection(records) {
27
+ if (records.length === 0)
28
+ return [];
29
+ return [
30
+ { kind: 'spacer' },
31
+ line([{ text: 'Tools (provenance)', bold: true }]),
32
+ ...records.map(provenanceLine),
33
+ ];
34
+ }
35
+ function pluginLine(p) {
36
+ const icon = p.pluginType === 'package' ? '📦' : '📄';
37
+ return line([{ text: ` ${icon} ${p.namespace}` }, { text: ` (${p.pluginType})`, dim: true }]);
38
+ }
39
+ function domainSection(domain, plugins) {
40
+ const domainPlugins = plugins.filter((p) => p.domain === domain);
41
+ if (domainPlugins.length === 0) {
42
+ return [
43
+ line([
44
+ { text: ` ${domain}/`, dim: true },
45
+ { text: ' — no plugins installed', dim: true },
46
+ ]),
47
+ ];
48
+ }
49
+ return [
50
+ line([
51
+ { text: ` ${domain}/`, tone: 'brand' },
52
+ { text: ` (${domainPlugins.length})`, dim: true },
53
+ ]),
54
+ ...domainPlugins.map(pluginLine),
55
+ ];
56
+ }
57
+ function listView(domains, plugins, totalCount, toolProvenance) {
58
+ const orderedDomains = orderedPluginDomains(domains, plugins);
59
+ const children = [
60
+ line([{ text: 'Installed Plugins', bold: true }]),
61
+ { kind: 'spacer' },
62
+ ...orderedDomains.flatMap((domain) => domainSection(domain, plugins)),
63
+ ];
64
+ if (totalCount === 0) {
65
+ children.push({ kind: 'spacer' }, line([
66
+ {
67
+ text: ' No plugins installed. Run opensip plugin add <package> to get started.',
68
+ dim: true,
69
+ },
70
+ ]));
71
+ }
72
+ children.push(...provenanceSection(toolProvenance));
73
+ return group(children);
74
+ }
75
+ function orderedPluginDomains(declared, plugins) {
76
+ const seen = new Set();
77
+ const ordered = [];
78
+ for (const domain of [...declared, ...plugins.map((plugin) => plugin.domain)]) {
79
+ if (seen.has(domain))
80
+ continue;
81
+ seen.add(domain);
82
+ ordered.push(domain);
83
+ }
84
+ return ordered;
85
+ }
86
+ function addRemoveView(verb, failVerb, packageName, success, error) {
87
+ if (success) {
88
+ return group([line([{ text: '✔', tone: 'success' }, { text: ` ${verb} ${packageName}` }])], 2);
89
+ }
90
+ const spans = [
91
+ { text: '✗', tone: 'error' },
92
+ { text: ` Failed to ${failVerb} ${packageName}` },
93
+ ];
94
+ if (error !== undefined)
95
+ spans.push({ text: ` (${error})`, dim: true });
96
+ return group([line(spans)], 2);
97
+ }
98
+ function syncView(synced, success, errors) {
99
+ if (synced.length === 0) {
100
+ return group([line([{ text: 'No plugins declared in opensip-cli.config.yml.', dim: true }])], 2);
101
+ }
102
+ const children = [
103
+ line([{ text: 'Plugin sync', bold: true }]),
104
+ ...synced.map((entry) => line([
105
+ { text: entry.installed ? '✔' : '✗', tone: entry.installed ? 'success' : 'error' },
106
+ { text: ' ' },
107
+ { text: `${entry.domain}/`, dim: true },
108
+ { text: entry.package },
109
+ ])),
110
+ ];
111
+ if (errors && errors.length > 0) {
112
+ children.push({ kind: 'spacer' }, ...errors.map((m) => line([{ text: m, tone: 'error' }])));
113
+ }
114
+ children.push({ kind: 'spacer' }, success
115
+ ? line([{ text: 'All plugins synced successfully.', tone: 'success' }])
116
+ : line([{ text: 'One or more plugins failed to install.', tone: 'error' }]));
117
+ return group(children, 2);
118
+ }
119
+ export function viewPlugin(result) {
120
+ switch (result.type) {
121
+ case 'plugin-list': {
122
+ return listView(result.domains, result.plugins, result.totalCount, result.toolProvenance);
123
+ }
124
+ case 'plugin-add': {
125
+ return addRemoveView('Installed', 'install', result.packageName, result.success, result.error);
126
+ }
127
+ case 'plugin-remove': {
128
+ return addRemoveView('Removed', 'remove', result.packageName, result.success, result.error);
129
+ }
130
+ case 'plugin-sync': {
131
+ return syncView(result.synced, result.success, result.errors);
132
+ }
133
+ }
134
+ }
135
+ //# sourceMappingURL=plugin-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-view.js","sourceRoot":"","sources":["../../../src/ui/views/plugin-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * tools view-model builders — render the ADR-0041 tool-management results
3
+ * without executing any tool runtime code.
4
+ */
5
+ import { type ViewNode } from '@opensip-cli/cli-ui';
6
+ import type { ToolsDataPurgeResult, ToolsInstallResult, ToolsListResult, ToolsUninstallResult, ToolsValidateResult } from '@opensip-cli/contracts';
7
+ export declare function viewToolsList(result: ToolsListResult): ViewNode;
8
+ export declare function viewToolsValidate(result: ToolsValidateResult): ViewNode;
9
+ export declare function viewToolsInstall(result: ToolsInstallResult): ViewNode;
10
+ export declare function viewToolsUninstall(result: ToolsUninstallResult): ViewNode;
11
+ export declare function viewToolsDataPurge(result: ToolsDataPurgeResult): ViewNode;
12
+ //# sourceMappingURL=tools-views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-views.d.ts","sourceRoot":"","sources":["../../../src/ui/views/tools-views.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAOL,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EAEf,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;AAuFhC,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,CAY/D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,QAAQ,CAEvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,QAAQ,CAerE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAuBzE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAiBzE"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * tools view-model builders — render the ADR-0041 tool-management results
3
+ * without executing any tool runtime code.
4
+ */
5
+ import { line, group, viewTable, } from '@opensip-cli/cli-ui';
6
+ const SPACER = { kind: 'spacer' };
7
+ const TOOLS_LIST_COLUMNS = [
8
+ 'Tool',
9
+ 'Source',
10
+ 'Status',
11
+ 'Version',
12
+ 'Package',
13
+ 'Commands',
14
+ ];
15
+ const VALIDATION_COLUMNS = ['Section', 'Status', 'Detail'];
16
+ function statusTone(status) {
17
+ switch (status) {
18
+ case 'passed': {
19
+ return 'success';
20
+ }
21
+ case 'failed': {
22
+ return 'error';
23
+ }
24
+ case 'skipped': {
25
+ return 'warning';
26
+ }
27
+ }
28
+ }
29
+ function verdictTone(verdict) {
30
+ switch (verdict) {
31
+ case 'passed': {
32
+ return 'success';
33
+ }
34
+ case 'failed': {
35
+ return 'error';
36
+ }
37
+ case 'incomplete': {
38
+ return 'warning';
39
+ }
40
+ }
41
+ }
42
+ function toolsListRow(row) {
43
+ return [
44
+ { text: row.id, tone: 'brand', bold: true },
45
+ { text: row.shadowed === true ? `${row.source} (shadowed)` : row.source },
46
+ { text: row.status, tone: row.status === 'loaded' ? 'success' : 'muted' },
47
+ { text: row.version },
48
+ { text: row.packageName ?? '-', dim: row.packageName === undefined },
49
+ { text: row.commands.length === 0 ? '-' : row.commands.join(', ') },
50
+ ];
51
+ }
52
+ function validationSectionRow(section) {
53
+ return [
54
+ { text: section.name, tone: 'brand' },
55
+ { text: section.status, tone: statusTone(section.status) },
56
+ {
57
+ text: section.diagnostics.length === 0 ? '-' : section.diagnostics.join('; '),
58
+ dim: section.diagnostics.length === 0,
59
+ },
60
+ ];
61
+ }
62
+ function validationView(result, title = 'Tool validation') {
63
+ const children = [
64
+ line([
65
+ { text: title, bold: true },
66
+ { text: ` (${result.spec})`, dim: true },
67
+ ]),
68
+ line([
69
+ { text: 'Verdict: ', dim: true },
70
+ { text: result.verdict.toUpperCase(), tone: verdictTone(result.verdict), bold: true },
71
+ ...(result.toolId === undefined
72
+ ? []
73
+ : [
74
+ { text: ' Tool: ', dim: true },
75
+ { text: result.toolId, tone: 'brand' },
76
+ ]),
77
+ ]),
78
+ SPACER,
79
+ viewTable(VALIDATION_COLUMNS, result.sections.map(validationSectionRow)),
80
+ ];
81
+ return group(children, 2);
82
+ }
83
+ export function viewToolsList(result) {
84
+ if (result.tools.length === 0) {
85
+ return group([line([{ text: 'No tools found for the selected scope.', dim: true }])], 2);
86
+ }
87
+ return group([
88
+ line([
89
+ { text: 'Tools', bold: true },
90
+ { text: ` (${result.totalCount})`, dim: true },
91
+ ]),
92
+ SPACER,
93
+ group([viewTable(TOOLS_LIST_COLUMNS, result.tools.map(toolsListRow))], 2),
94
+ ]);
95
+ }
96
+ export function viewToolsValidate(result) {
97
+ return validationView(result);
98
+ }
99
+ export function viewToolsInstall(result) {
100
+ const children = [
101
+ line([
102
+ { text: result.success ? '✓' : '✗', tone: result.success ? 'success' : 'error' },
103
+ { text: result.success ? ' Installed ' : ' Failed to install ' },
104
+ { text: result.toolId ?? result.spec, tone: result.success ? 'brand' : 'default' },
105
+ { text: ` (${result.scope})`, dim: true },
106
+ ...(result.version === undefined ? [] : [{ text: ` ${result.version}`, dim: true }]),
107
+ ]),
108
+ ];
109
+ if (result.error !== undefined) {
110
+ children.push(line([{ text: ` ${result.error}`, tone: 'error' }]));
111
+ }
112
+ children.push(SPACER, validationView(result.validation, 'Validation'));
113
+ return group(children, 2);
114
+ }
115
+ export function viewToolsUninstall(result) {
116
+ if (!result.success) {
117
+ const spans = [
118
+ { text: '✗', tone: 'error' },
119
+ { text: ` Failed to uninstall ${result.target}` },
120
+ ];
121
+ if (result.error !== undefined)
122
+ spans.push({ text: ` (${result.error})`, dim: true });
123
+ return group([line(spans)], 2);
124
+ }
125
+ const removed = result.removed;
126
+ return group([
127
+ line([
128
+ { text: '✓', tone: 'success' },
129
+ { text: ' Removed ' },
130
+ { text: removed?.id ?? result.target, tone: 'brand' },
131
+ ...(removed === undefined
132
+ ? []
133
+ : [{ text: ` (${removed.packageName}, ${removed.scope})`, dim: true }]),
134
+ ]),
135
+ ], 2);
136
+ }
137
+ export function viewToolsDataPurge(result) {
138
+ return group([
139
+ line([
140
+ { text: '✓', tone: 'success' },
141
+ { text: ' Purged data for ' },
142
+ { text: result.toolId, tone: 'brand' },
143
+ ]),
144
+ line([
145
+ { text: ` ${result.sessions} session(s), `, dim: true },
146
+ { text: `${result.baselineEntries} baseline entr(ies), `, dim: true },
147
+ { text: `${result.baselineMeta ? 1 : 0} baseline marker(s), `, dim: true },
148
+ { text: `${result.stateRows} state row(s)`, dim: true },
149
+ ]),
150
+ ], 2);
151
+ }
152
+ //# sourceMappingURL=tools-views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-views.js","sourceRoot":"","sources":["../../../src/ui/views/tools-views.ts"],"names":[],"mappings":"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"}