docker-client-mx 1.35.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 (148) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/bin/docker-client-mx.js +42 -0
  4. package/build/icons/icon-1024.png +0 -0
  5. package/build/icons/icon-128.png +0 -0
  6. package/build/icons/icon-16.png +0 -0
  7. package/build/icons/icon-256.png +0 -0
  8. package/build/icons/icon-32.png +0 -0
  9. package/build/icons/icon-48.png +0 -0
  10. package/build/icons/icon-512.png +0 -0
  11. package/build/icons/icon-64.png +0 -0
  12. package/build/icons/icon.ico +0 -0
  13. package/build/icons/icon.iconset/icon_128x128.png +0 -0
  14. package/build/icons/icon.iconset/icon_128x128@2x.png +0 -0
  15. package/build/icons/icon.iconset/icon_16x16.png +0 -0
  16. package/build/icons/icon.iconset/icon_16x16@2x.png +0 -0
  17. package/build/icons/icon.iconset/icon_256x256.png +0 -0
  18. package/build/icons/icon.iconset/icon_256x256@2x.png +0 -0
  19. package/build/icons/icon.iconset/icon_32x32.png +0 -0
  20. package/build/icons/icon.iconset/icon_32x32@2x.png +0 -0
  21. package/build/icons/icon.iconset/icon_512x512.png +0 -0
  22. package/build/icons/icon.iconset/icon_512x512@2x.png +0 -0
  23. package/build/icons/icon.png +0 -0
  24. package/dist/docker-desktop-mx/browser/chunk-64WWLMUP.js +39 -0
  25. package/dist/docker-desktop-mx/browser/chunk-N4VBBC4W.js +1 -0
  26. package/dist/docker-desktop-mx/browser/favicon.ico +0 -0
  27. package/dist/docker-desktop-mx/browser/index.html +14 -0
  28. package/dist/docker-desktop-mx/browser/main-CTIRTSOI.js +5 -0
  29. package/dist/docker-desktop-mx/browser/styles-JS3HDDI4.css +1 -0
  30. package/dist-electron/api.js +10 -0
  31. package/dist-electron/api.js.map +1 -0
  32. package/dist-electron/assistant-key.js +70 -0
  33. package/dist-electron/assistant-key.js.map +1 -0
  34. package/dist-electron/assistant-models.js +19 -0
  35. package/dist-electron/assistant-models.js.map +1 -0
  36. package/dist-electron/assistant-tools.js +335 -0
  37. package/dist-electron/assistant-tools.js.map +1 -0
  38. package/dist-electron/assistant.js +302 -0
  39. package/dist-electron/assistant.js.map +1 -0
  40. package/dist-electron/attention.js +75 -0
  41. package/dist-electron/attention.js.map +1 -0
  42. package/dist-electron/channels.js +113 -0
  43. package/dist-electron/channels.js.map +1 -0
  44. package/dist-electron/compose-files.js +104 -0
  45. package/dist-electron/compose-files.js.map +1 -0
  46. package/dist-electron/compose.js +271 -0
  47. package/dist-electron/compose.js.map +1 -0
  48. package/dist-electron/container-events.js +188 -0
  49. package/dist-electron/container-events.js.map +1 -0
  50. package/dist-electron/containers.js +165 -0
  51. package/dist-electron/containers.js.map +1 -0
  52. package/dist-electron/context-menu.js +56 -0
  53. package/dist-electron/context-menu.js.map +1 -0
  54. package/dist-electron/contexts.js +346 -0
  55. package/dist-electron/contexts.js.map +1 -0
  56. package/dist-electron/crash.js +129 -0
  57. package/dist-electron/crash.js.map +1 -0
  58. package/dist-electron/diagnosis.js +338 -0
  59. package/dist-electron/diagnosis.js.map +1 -0
  60. package/dist-electron/docker-client.js +284 -0
  61. package/dist-electron/docker-client.js.map +1 -0
  62. package/dist-electron/engine.js +145 -0
  63. package/dist-electron/engine.js.map +1 -0
  64. package/dist-electron/event-store.js +146 -0
  65. package/dist-electron/event-store.js.map +1 -0
  66. package/dist-electron/events.js +132 -0
  67. package/dist-electron/events.js.map +1 -0
  68. package/dist-electron/exec.js +138 -0
  69. package/dist-electron/exec.js.map +1 -0
  70. package/dist-electron/files.js +407 -0
  71. package/dist-electron/files.js.map +1 -0
  72. package/dist-electron/health.js +92 -0
  73. package/dist-electron/health.js.map +1 -0
  74. package/dist-electron/host-overview.js +50 -0
  75. package/dist-electron/host-overview.js.map +1 -0
  76. package/dist-electron/host-shell.js +196 -0
  77. package/dist-electron/host-shell.js.map +1 -0
  78. package/dist-electron/i18n.js +58 -0
  79. package/dist-electron/i18n.js.map +1 -0
  80. package/dist-electron/image-history.js +87 -0
  81. package/dist-electron/image-history.js.map +1 -0
  82. package/dist-electron/images.js +141 -0
  83. package/dist-electron/images.js.map +1 -0
  84. package/dist-electron/ipc.js +783 -0
  85. package/dist-electron/ipc.js.map +1 -0
  86. package/dist-electron/links.js +46 -0
  87. package/dist-electron/links.js.map +1 -0
  88. package/dist-electron/logs.js +153 -0
  89. package/dist-electron/logs.js.map +1 -0
  90. package/dist-electron/main.js +494 -0
  91. package/dist-electron/main.js.map +1 -0
  92. package/dist-electron/merged-logs.js +127 -0
  93. package/dist-electron/merged-logs.js.map +1 -0
  94. package/dist-electron/navigation.js +37 -0
  95. package/dist-electron/navigation.js.map +1 -0
  96. package/dist-electron/ndjson.js +30 -0
  97. package/dist-electron/ndjson.js.map +1 -0
  98. package/dist-electron/networks.js +507 -0
  99. package/dist-electron/networks.js.map +1 -0
  100. package/dist-electron/port-conflicts.js +106 -0
  101. package/dist-electron/port-conflicts.js.map +1 -0
  102. package/dist-electron/preload.js +257 -0
  103. package/dist-electron/preload.js.map +1 -0
  104. package/dist-electron/pull.js +220 -0
  105. package/dist-electron/pull.js.map +1 -0
  106. package/dist-electron/redact.js +129 -0
  107. package/dist-electron/redact.js.map +1 -0
  108. package/dist-electron/registry-auth.js +150 -0
  109. package/dist-electron/registry-auth.js.map +1 -0
  110. package/dist-electron/renew.js +162 -0
  111. package/dist-electron/renew.js.map +1 -0
  112. package/dist-electron/restart-policy.js +58 -0
  113. package/dist-electron/restart-policy.js.map +1 -0
  114. package/dist-electron/run-command.js +146 -0
  115. package/dist-electron/run-command.js.map +1 -0
  116. package/dist-electron/run.js +151 -0
  117. package/dist-electron/run.js.map +1 -0
  118. package/dist-electron/self-update.js +163 -0
  119. package/dist-electron/self-update.js.map +1 -0
  120. package/dist-electron/servers.js +108 -0
  121. package/dist-electron/servers.js.map +1 -0
  122. package/dist-electron/settings.js +146 -0
  123. package/dist-electron/settings.js.map +1 -0
  124. package/dist-electron/ssh.js +574 -0
  125. package/dist-electron/ssh.js.map +1 -0
  126. package/dist-electron/stats.js +209 -0
  127. package/dist-electron/stats.js.map +1 -0
  128. package/dist-electron/streams.js +63 -0
  129. package/dist-electron/streams.js.map +1 -0
  130. package/dist-electron/system.js +123 -0
  131. package/dist-electron/system.js.map +1 -0
  132. package/dist-electron/terminal-transcript.js +55 -0
  133. package/dist-electron/terminal-transcript.js.map +1 -0
  134. package/dist-electron/updates.js +136 -0
  135. package/dist-electron/updates.js.map +1 -0
  136. package/dist-electron/volume-backup.js +203 -0
  137. package/dist-electron/volume-backup.js.map +1 -0
  138. package/dist-electron/volume-files.js +124 -0
  139. package/dist-electron/volume-files.js.map +1 -0
  140. package/dist-electron/volumes.js +253 -0
  141. package/dist-electron/volumes.js.map +1 -0
  142. package/dist-electron/wiring-watch.js +93 -0
  143. package/dist-electron/wiring-watch.js.map +1 -0
  144. package/dist-electron/wiring.js +71 -0
  145. package/dist-electron/wiring.js.map +1 -0
  146. package/dist-electron/wsl.js +167 -0
  147. package/dist-electron/wsl.js.map +1 -0
  148. package/package.json +125 -0
@@ -0,0 +1 @@
1
+ .xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-xs: 20rem;--container-md: 28rem;--container-xl: 36rem;--container-2xl: 42rem;--container-3xl: 48rem;--container-4xl: 56rem;--container-6xl: 72rem;--text-base: 1rem;--text-base--line-height: 1.5 ;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--tracking-tight: -.025em;--tracking-wide: .025em;--leading-relaxed: 1.625;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono);--color-ink-950: #ffffff;--color-ink-900: #fbf9f6;--color-ink-850: #f3efe9;--color-ink-800: #e8e2da;--color-ink-750: #d5dae4;--color-ink-700: #c3cad8;--color-ink-600: #9aa4b6;--color-ink-500: #78839a;--color-ink-400: #5a6579;--color-ink-300: #414a5c;--color-ink-200: #2b3341;--color-ink-100: #161b23;--color-accent: #c2552f;--color-ok: #2f7d55;--color-warn: #8a6212;--color-danger: #c0392f;--color-halt: #f59e0b;--color-stopped: #9b2c2c;--color-series-1: #2a78d6;--color-series-2: #d95926;--color-panel: #fffdfa;--breakpoint-sidebar: 900px}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:0}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.bottom-10{bottom:calc(var(--spacing) * 10)}.bottom-full{bottom:100%}.left-0{left:0}.left-2\.5{left:calc(var(--spacing) * 2.5)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-1{grid-column:span 1 / span 1}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.container{width:100%}@media(width>=900px){.container{max-width:900px}}@media(width>=40rem){.container{max-width:40rem}}@media(width>=48rem){.container{max-width:48rem}}@media(width>=64rem){.container{max-width:64rem}}@media(width>=80rem){.container{max-width:80rem}}@media(width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-4{margin:calc(var(--spacing) * 4)}.my-1{margin-block:var(--spacing)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-11{height:calc(var(--spacing) * 11)}.h-16{height:calc(var(--spacing) * 16)}.h-28{height:calc(var(--spacing) * 28)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[85vh\]{max-height:85vh}.min-h-0{min-height:0px}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-96{width:calc(var(--spacing) * 96)}.w-\[22rem\]{width:22rem}.w-\[84px\]{width:84px}.w-\[110px\]{width:110px}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[45\%\]{max-width:45%}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-md{max-width:var(--container-md)}.max-w-prose{max-width:65ch}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[3px\]{--tw-translate-x: 3px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y: -100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-\[7\.5rem_1fr_auto\]{grid-template-columns:7.5rem 1fr auto}.grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_7rem_2rem\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) 7rem 2rem}.grid-cols-\[minmax\(0\,2fr\)_auto_minmax\(0\,3fr\)_2rem\]{grid-template-columns:minmax(0,2fr) auto minmax(0,3fr) 2rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-ink-700>:not(:last-child)){border-color:var(--color-ink-700)}:where(.divide-ink-800>:not(:last-child)){border-color:var(--color-ink-800)}.self-center{align-self:center}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-dashed{--tw-border-style: dashed;border-style:dashed}.border-accent{border-color:var(--color-accent)}.border-danger{border-color:var(--color-danger)}.border-danger\/40{border-color:color-mix(in srgb,#c0392f 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-danger\/40{border-color:color-mix(in oklab,var(--color-danger) 40%,transparent)}}.border-ink-400{border-color:var(--color-ink-400)}.border-ink-700{border-color:var(--color-ink-700)}.border-ink-800{border-color:var(--color-ink-800)}.border-ok\/40{border-color:color-mix(in srgb,#2f7d55 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-ok\/40{border-color:color-mix(in oklab,var(--color-ok) 40%,transparent)}}.border-transparent{border-color:transparent}.border-warn{border-color:var(--color-warn)}.border-warn\/40{border-color:color-mix(in srgb,#8a6212 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-warn\/40{border-color:color-mix(in oklab,var(--color-warn) 40%,transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-accent\/5{background-color:color-mix(in srgb,#c2552f 5%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-accent\/5{background-color:color-mix(in oklab,var(--color-accent) 5%,transparent)}}.bg-black\/40{background-color:color-mix(in srgb,#000 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:color-mix(in srgb,#000 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-danger{background-color:var(--color-danger)}.bg-danger\/10{background-color:color-mix(in srgb,#c0392f 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-danger\/10{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.bg-halt{background-color:var(--color-halt)}.bg-ink-400{background-color:var(--color-ink-400)}.bg-ink-600{background-color:var(--color-ink-600)}.bg-ink-700{background-color:var(--color-ink-700)}.bg-ink-800{background-color:var(--color-ink-800)}.bg-ink-850{background-color:var(--color-ink-850)}.bg-ink-900{background-color:var(--color-ink-900)}.bg-ink-950{background-color:var(--color-ink-950)}.bg-ok{background-color:var(--color-ok)}.bg-ok\/10{background-color:color-mix(in srgb,#2f7d55 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-ok\/10{background-color:color-mix(in oklab,var(--color-ok) 10%,transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-series-1{background-color:var(--color-series-1)}.bg-series-2{background-color:var(--color-series-2)}.bg-stopped{background-color:var(--color-stopped)}.bg-transparent{background-color:transparent}.bg-warn\/10{background-color:color-mix(in srgb,#8a6212 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-warn\/10{background-color:color-mix(in oklab,var(--color-warn) 10%,transparent)}}.fill-accent{fill:var(--color-accent)}.fill-accent\/15{fill:color-mix(in srgb,#c2552f 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.fill-accent\/15{fill:color-mix(in oklab,var(--color-accent) 15%,transparent)}}.fill-series-1{fill:var(--color-series-1)}.fill-series-1\/15{fill:color-mix(in srgb,#2a78d6 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.fill-series-1\/15{fill:color-mix(in oklab,var(--color-series-1) 15%,transparent)}}.fill-series-2{fill:var(--color-series-2)}.fill-series-2\/15{fill:color-mix(in srgb,#d95926 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.fill-series-2\/15{fill:color-mix(in oklab,var(--color-series-2) 15%,transparent)}}.stroke-accent{stroke:var(--color-accent)}.stroke-ink-600{stroke:var(--color-ink-600)}.stroke-ink-700{stroke:var(--color-ink-700)}.stroke-panel{stroke:var(--color-panel)}.stroke-series-1{stroke:var(--color-series-1)}.stroke-series-2{stroke:var(--color-series-2)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-\[12vh\]{padding-top:12vh}.pr-1{padding-right:var(--spacing)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading, var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading, var(--text-xl--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.leading-\[1\.6\]{--tw-leading: 1.6;line-height:1.6}.leading-\[1\.7\]{--tw-leading: 1.7;line-height:1.7}.leading-relaxed{--tw-leading: var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-danger{color:var(--color-danger)}.text-ink-100{color:var(--color-ink-100)}.text-ink-200{color:var(--color-ink-200)}.text-ink-300{color:var(--color-ink-300)}.text-ink-400{color:var(--color-ink-400)}.text-ink-500{color:var(--color-ink-500)}.text-ink-600{color:var(--color-ink-600)}.text-ok{color:var(--color-ok)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0%}.opacity-70{opacity:70%}.shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_3px_color-mix\(in_oklab\,var\(--color-ok\)_28\%\,transparent\)\]{--tw-shadow: 0 0 0 3px var(--tw-shadow-color, color-mix(in srgb,#2f7d55 28%,transparent));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@supports (color: color-mix(in lab,red,red)){.shadow-\[0_0_0_3px_color-mix\(in_oklab\,var\(--color-ok\)_28\%\,transparent\)\]{--tw-shadow: 0 0 0 3px var(--tw-shadow-color, color-mix(in oklab,var(--color-ok) 28%,transparent))}}.shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[opacity\,translate\]{transition-property:opacity,translate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.duration-200{--tw-duration: .2s;transition-duration:.2s}.outline-none{--tw-outline-style: none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:100%}}.placeholder\:text-ink-500::placeholder{color:var(--color-ink-500)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0px}@media(hover:hover){.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-danger:hover{border-color:var(--color-danger)}.hover\:border-ink-500:hover{border-color:var(--color-ink-500)}.hover\:border-ink-700:hover{border-color:var(--color-ink-700)}.hover\:bg-danger:hover{background-color:var(--color-danger)}.hover\:bg-danger\/15:hover{background-color:color-mix(in srgb,#c0392f 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-danger\/15:hover{background-color:color-mix(in oklab,var(--color-danger) 15%,transparent)}}.hover\:bg-ink-750:hover{background-color:var(--color-ink-750)}.hover\:bg-ink-800:hover{background-color:var(--color-ink-800)}.hover\:bg-ink-850:hover{background-color:var(--color-ink-850)}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-danger:hover{color:var(--color-danger)}.hover\:text-ink-100:hover{color:var(--color-ink-100)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:opacity-100:focus{opacity:100%}.focus-visible\:bg-danger\/15:focus-visible{background-color:color-mix(in srgb,#c0392f 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.focus-visible\:bg-danger\/15:focus-visible{background-color:color-mix(in oklab,var(--color-danger) 15%,transparent)}}.focus-visible\:bg-ink-750:focus-visible{background-color:var(--color-ink-750)}.focus-visible\:text-ink-100:focus-visible{color:var(--color-ink-100)}.focus-visible\:outline-none:focus-visible{--tw-outline-style: none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:40%}.disabled\:opacity-50:disabled{opacity:50%}@media(hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:transparent}}.data-\[active\]\:border-accent[data-active]{border-color:var(--color-accent)}.data-\[active\]\:text-ink-100[data-active]{color:var(--color-ink-100)}.data-\[checked\]\:translate-x-\[19px\][data-checked]{--tw-translate-x: 19px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[checked\]\:border-accent[data-checked]{border-color:var(--color-accent)}.data-\[checked\]\:bg-accent[data-checked]{background-color:var(--color-accent)}.data-\[checked\]\:bg-white[data-checked]{background-color:var(--color-white)}.data-\[state\=closed\]\:translate-x-4[data-state=closed]{--tw-translate-x: calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=closed\]\:opacity-0[data-state=closed]{opacity:0%}.data-\[type\=error\]\:border-danger\/50[data-type=error]{border-color:color-mix(in srgb,#c0392f 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.data-\[type\=error\]\:border-danger\/50[data-type=error]{border-color:color-mix(in oklab,var(--color-danger) 50%,transparent)}}.data-\[type\=success\]\:border-ok\/50[data-type=success]{border-color:color-mix(in srgb,#2f7d55 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.data-\[type\=success\]\:border-ok\/50[data-type=success]{border-color:color-mix(in oklab,var(--color-ok) 50%,transparent)}}@media(width<900px){.max-sidebar\:hidden{display:none}.max-sidebar\:w-13{width:calc(var(--spacing) * 13)}}@media(width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=64rem){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@starting-style{.starting\:translate-y-2{--tw-translate-y: calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.starting\:opacity-0{opacity:0%}}}:root[data-theme=dark]{--color-ink-950: #08090b;--color-ink-900: #0b0d10;--color-ink-850: #101318;--color-ink-800: #151920;--color-ink-750: #1b2029;--color-ink-700: #232935;--color-ink-600: #323a4a;--color-ink-500: #4b566b;--color-ink-400: #6b7689;--color-ink-300: #97a1b2;--color-ink-200: #c3cad6;--color-ink-100: #e6eaf0;--color-accent: #d97757;--color-accent-soft: #f0a888;--color-ok: #4ea87a;--color-warn: #d9a13f;--color-danger: #d9584f;--color-halt: #fbbf24;--color-stopped: #b83a3a;--color-series-1: #3987e5;--color-series-2: #d95926;--color-panel: #101318}:root{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}html,body{height:100%;margin:0;background:var(--color-ink-900);color:var(--color-ink-100);font-family:Verdana,ui-sans-serif,-apple-system,SF Pro Text,Segoe UI,system-ui,sans-serif;font-size:15px;overflow:hidden}*,*:before,*:after{box-sizing:border-box}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-ink-700);border-radius:6px;border:2px solid var(--color-ink-900)}::-webkit-scrollbar-thumb:hover{background:var(--color-ink-600)}@layer components{.mx-btn{display:inline-flex;flex-shrink:0;cursor:pointer;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-ink-700);background-color:var(--color-ink-800);padding-inline:calc(var(--spacing) * 2.5);padding-block:var(--spacing);font-size:13px;--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--color-ink-200);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration));-webkit-user-select:none;user-select:none}.mx-btn:hover:not(:disabled){border-color:var(--color-ink-600);background-color:var(--color-ink-750);color:var(--color-ink-100)}.mx-btn:disabled{cursor:not-allowed;opacity:40%}.mx-focus:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:2px;outline-color:var(--color-accent)}}@property --tw-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-divide-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-ordinal{syntax: "*"; inherits: false;}@property --tw-slashed-zero{syntax: "*"; inherits: false;}@property --tw-numeric-figure{syntax: "*"; inherits: false;}@property --tw-numeric-spacing{syntax: "*"; inherits: false;}@property --tw-numeric-fraction{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-duration{syntax: "*"; inherits: false;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-divide-y-reverse: 0;--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-ordinal: initial;--tw-slashed-zero: initial;--tw-numeric-figure: initial;--tw-numeric-spacing: initial;--tw-numeric-fraction: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-duration: initial;--tw-outline-style: solid}}}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Het contract tussen main/preload en de Angular renderer.
4
+ * Bewust vrij van Node- en Electron-imports zodat beide tsconfigs dit kunnen inlezen.
5
+ *
6
+ * Alles hier is de vorm die de renderer kent. De Engine API lekt niet door tot in de
7
+ * templates: het main process vertaalt dockerode's vorm naar deze typen.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../electron/api.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureKeyStore = configureKeyStore;
4
+ exports.readApiKey = readApiKey;
5
+ exports.hasApiKey = hasApiKey;
6
+ exports.keyStoreAvailable = keyStoreAvailable;
7
+ exports.saveApiKey = saveApiKey;
8
+ exports.removeApiKey = removeApiKey;
9
+ const i18n_1 = require("./i18n");
10
+ let deps = null;
11
+ /** Wordt één keer aangeroepen door main.ts, dat de paden en safeStorage kent. */
12
+ function configureKeyStore(next) {
13
+ deps = next;
14
+ }
15
+ /** Een sleutel van de Claude API begint zo; iets anders is vrijwel zeker een plakfout. */
16
+ const KEY_PATTERN = /^sk-ant-[A-Za-z0-9_-]{20,}$/;
17
+ /** De sleutel, of `null` als er geen is of hij niet te ontsleutelen valt. Alleen voor main. */
18
+ function readApiKey() {
19
+ const data = deps?.read() ?? null;
20
+ if (deps === null || data === null || !deps.available()) {
21
+ return null;
22
+ }
23
+ try {
24
+ return deps.decrypt(data);
25
+ }
26
+ catch {
27
+ // Onder een andere gebruiker versleuteld, of het bestand is kapot. Dan is er in feite geen.
28
+ return null;
29
+ }
30
+ }
31
+ /** Of er een bruikbare sleutel is. Dit is wat de renderer te zien krijgt. */
32
+ function hasApiKey() {
33
+ return readApiKey() !== null;
34
+ }
35
+ /** Of hier een sleutel bewaard kan worden. */
36
+ function keyStoreAvailable() {
37
+ return deps?.available() === true;
38
+ }
39
+ /** Bewaart een nieuwe sleutel, na een controle op de vorm. */
40
+ function saveApiKey(key) {
41
+ const trimmed = key.trim();
42
+ if (deps === null || !deps.available()) {
43
+ return {
44
+ ok: false,
45
+ problem: (0, i18n_1.t)({
46
+ en: 'A key cannot be stored safely here: Windows offers no encryption for this user.',
47
+ nl: 'Een sleutel veilig bewaren kan hier niet: Windows biedt geen versleuteling voor deze gebruiker.',
48
+ de: 'Ein Schlüssel lässt sich hier nicht sicher speichern: Windows bietet für diesen Benutzer keine Verschlüsselung.',
49
+ fr: 'Une clé ne peut pas être stockée en sécurité ici : Windows n’offre pas de chiffrement pour cet utilisateur.',
50
+ es: 'Aquí no se puede guardar una clave de forma segura: Windows no ofrece cifrado para este usuario.',
51
+ }),
52
+ };
53
+ }
54
+ if (!KEY_PATTERN.test(trimmed)) {
55
+ return { ok: false, problem: (0, i18n_1.t)({
56
+ en: 'This does not look like a Claude API key. Those start with sk-ant-.',
57
+ nl: 'Dit lijkt geen sleutel van de Claude API. Die begint met sk-ant-.',
58
+ de: 'Das sieht nicht nach einem Claude-API-Schlüssel aus. Die beginnen mit sk-ant-.',
59
+ fr: 'Cela ne ressemble pas à une clé API Claude. Elles commencent par sk-ant-.',
60
+ es: 'Esto no parece una clave de API de Claude. Esas empiezan por sk-ant-.',
61
+ }) };
62
+ }
63
+ deps.write(deps.encrypt(trimmed));
64
+ return { ok: true };
65
+ }
66
+ /** Haalt de sleutel weg. */
67
+ function removeApiKey() {
68
+ deps?.remove();
69
+ }
70
+ //# sourceMappingURL=assistant-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-key.js","sourceRoot":"","sources":["../electron/assistant-key.ts"],"names":[],"mappings":";;AA0BA,8CAGC;AAMD,gCAcC;AAGD,8BAGC;AAGD,8CAGC;AAGD,gCA8BC;AAGD,oCAGC;AAnGD,iCAA2B;AAsB3B,IAAI,IAAI,GAAwB,IAAI,CAAC;AAErC,iFAAiF;AACjF,SAAgB,iBAAiB,CAAC,IAAyB;IAEzD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,0FAA0F;AAC1F,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAElD,+FAA+F;AAC/F,SAAgB,UAAU;IAExB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAElC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,4FAA4F;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAgB,SAAS;IAEvB,OAAO,UAAU,EAAE,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED,8CAA8C;AAC9C,SAAgB,iBAAiB;IAE/B,OAAO,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED,8DAA8D;AAC9D,SAAgB,UAAU,CAAC,GAAW;IAEpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAA,QAAC,EAAC;gBACT,EAAE,EAAE,iFAAiF;gBACrF,EAAE,EAAE,iGAAiG;gBACrG,EAAE,EAAE,iHAAiH;gBACrH,EAAE,EAAE,6GAA6G;gBACjH,EAAE,EAAE,kGAAkG;aACvG,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAA,QAAC,EAAC;gBAC7B,EAAE,EAAE,qEAAqE;gBACzE,EAAE,EAAE,mEAAmE;gBACvE,EAAE,EAAE,gFAAgF;gBACpF,EAAE,EAAE,2EAA2E;gBAC/E,EAAE,EAAE,uEAAuE;aAC5E,CAAC,EAAE,CAAC;IACP,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAElC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,4BAA4B;AAC5B,SAAgB,YAAY;IAE1B,IAAI,EAAE,MAAM,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * De modellen van Claude die de app aanbiedt.
4
+ *
5
+ * Los van assistant.ts, zodat zowel main als de instellingen de lijst kent zonder de SDK mee
6
+ * te nemen naar de renderer.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_ASSISTANT_MODEL = exports.ASSISTANT_MODELS = void 0;
10
+ exports.isAssistantModel = isAssistantModel;
11
+ /** Van het meest capabele naar het goedkoopste; dit is ook de volgorde van de keuzelijst. */
12
+ exports.ASSISTANT_MODELS = ['claude-opus-5', 'claude-sonnet-5', 'claude-haiku-4-5'];
13
+ /** Opus, tot de instellingen iets anders zeggen: een diagnose is werk waar het verschil zit. */
14
+ exports.DEFAULT_ASSISTANT_MODEL = 'claude-opus-5';
15
+ /** Of dit een model is dat de app kent. Een naam uit een oudere versie hoeft dat niet te zijn. */
16
+ function isAssistantModel(value) {
17
+ return typeof value === 'string' && exports.ASSISTANT_MODELS.includes(value);
18
+ }
19
+ //# sourceMappingURL=assistant-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-models.js","sourceRoot":"","sources":["../electron/assistant-models.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAWH,4CAGC;AAVD,6FAA6F;AAChF,QAAA,gBAAgB,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,CAA8C,CAAC;AAEtI,gGAAgG;AACnF,QAAA,uBAAuB,GAAmB,eAAe,CAAC;AAEvE,kGAAkG;AAClG,SAAgB,gBAAgB,CAAC,KAAc;IAE7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_TOOL_CALLS = void 0;
4
+ exports.isSafeCommand = isSafeCommand;
5
+ exports.redactInspect = redactInspect;
6
+ exports.findContainer = findContainer;
7
+ exports.createTools = createTools;
8
+ const zod_1 = require("@anthropic-ai/sdk/helpers/beta/zod");
9
+ const zod_2 = require("zod");
10
+ const diagnosis_1 = require("./diagnosis");
11
+ const i18n_1 = require("./i18n");
12
+ const redact_1 = require("./redact");
13
+ /**
14
+ * De tools waarmee Claude zelf meer over een container opvraagt. Alleen lezen: geen exec, geen
15
+ * bestanden uit de container, geen shell op de host. Een tool die een commando draait, is een
16
+ * tool die alles kan. In de host-terminal leest Claude de uitvoer van de shell mee, maar typen
17
+ * doet alleen de gebruiker: een voorgesteld commando komt pas na een klik op de prompt, en
18
+ * uitvoeren is een Enter van de gebruiker zelf.
19
+ *
20
+ * Alles wat een tool teruggeeft, gaat eerst door redact.ts, net als de diagnose uit fase 21.
21
+ * Wat Claude wil veranderen, stelt hij voor met `propose_action`; de gebruiker krijgt dan een
22
+ * knop, en de app voert het pas uit na een klik.
23
+ *
24
+ * Beschrijvingen en resultaten zijn voor Claude en dus Engels, net als de systeemprompt. Alleen
25
+ * de regel per aanroep (`onTool`) ziet de gebruiker; die volgt de taal van de app.
26
+ */
27
+ /** Zoveel tool-aanroepen per vraag. Daarna moet Claude het doen met wat hij heeft. */
28
+ exports.MAX_TOOL_CALLS = 8;
29
+ /** Zoveel logregels per aanroep, hooguit. */
30
+ const MAX_LOG_TAIL = 1000;
31
+ /** Zoveel terminalregels per aanroep, hooguit. */
32
+ const MAX_TERMINAL_LINES = 500;
33
+ // eslint-disable-next-line no-control-regex -- juist de controletekens moeten eruit
34
+ const CONTROL_CHARS = /[\x00-\x1f\x7f]/;
35
+ /**
36
+ * Een commando voor de terminal. Eén regel, zonder controletekens: een regeleinde of een
37
+ * Ctrl-teken zou het uitvoeren of de shell iets laten doen vóór de gebruiker Enter geeft.
38
+ */
39
+ function isSafeCommand(command) {
40
+ return command.trim() !== '' && !CONTROL_CHARS.test(command);
41
+ }
42
+ /**
43
+ * Een inspect waar de geheimen uit zijn: van `Env` alleen de namen, labels die naar een .env
44
+ * wijzen weg, en elke andere tekst door redactText. Recursief, want geheimen zitten ook in
45
+ * `Args`, `Healthcheck.Test` en de health-log.
46
+ */
47
+ function redactInspect(value) {
48
+ if (typeof value === 'string') {
49
+ return (0, redact_1.redactText)(value).text;
50
+ }
51
+ if (Array.isArray(value)) {
52
+ // Argumenten (`Cmd`, `Args`, `Entrypoint`): een vlag en zijn waarde zijn losse elementen.
53
+ if (value.every((item) => typeof item === 'string')) {
54
+ return (0, redact_1.redactArgs)(value).args;
55
+ }
56
+ return value.map((item) => redactInspect(item));
57
+ }
58
+ if (value === null || typeof value !== 'object') {
59
+ return value;
60
+ }
61
+ const result = {};
62
+ for (const [key, entry] of Object.entries(value)) {
63
+ if (key === 'Env' && Array.isArray(entry)) {
64
+ result[key] = (0, redact_1.redactEnv)(entry.filter((item) => typeof item === 'string')).entries;
65
+ }
66
+ else if (key === 'Labels' && entry !== null && typeof entry === 'object') {
67
+ const labels = Object.entries(entry).filter(([name]) => !diagnosis_1.HIDDEN_LABELS.test(name));
68
+ result[key] = redactInspect(Object.fromEntries(labels));
69
+ }
70
+ else {
71
+ result[key] = redactInspect(entry);
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ /** Zoekt een container op naam of (een stuk van het) id. */
77
+ function findContainer(containers, reference) {
78
+ const wanted = reference.trim().replace(/^\//, '');
79
+ return (containers.find((container) => container.name === wanted) ??
80
+ containers.find((container) => wanted.length >= 4 && container.id.startsWith(wanted)) ??
81
+ null);
82
+ }
83
+ /** Maakt de tools voor één vraag. De teller zit erin, zodat hij per vraag opnieuw begint. */
84
+ function createTools(context) {
85
+ const { source } = context;
86
+ let calls = 0;
87
+ /** Telt de aanroep, en weigert boven de grens. `null` betekent: ga door. */
88
+ function budget() {
89
+ calls += 1;
90
+ return calls > exports.MAX_TOOL_CALLS
91
+ ? `The limit of ${String(exports.MAX_TOOL_CALLS)} requests per question has been reached. Give your answer with what you know now.`
92
+ : null;
93
+ }
94
+ async function resolve(reference) {
95
+ const found = findContainer(await source.listContainers(), reference);
96
+ return found ?? `No container found with name or id "${reference}". Use list_containers to see the names.`;
97
+ }
98
+ const container = zod_2.z.string().min(1).max(128).describe('Name or id of the container');
99
+ const terminal = context.terminal;
100
+ const terminalTools = terminal === undefined ? [] : [
101
+ (0, zod_1.betaZodTool)({
102
+ name: 'terminal_output',
103
+ description: 'The last lines of the root shell on the Docker host that the user has open: what they typed and what came ' +
104
+ 'back. Color codes and secrets have been removed.',
105
+ inputSchema: zod_2.z.object({ lines: zod_2.z.number().int().min(1).max(MAX_TERMINAL_LINES).describe('Number of lines, at most 500') }),
106
+ run: ({ lines }) => {
107
+ const stop = budget();
108
+ if (stop !== null) {
109
+ return Promise.resolve(stop);
110
+ }
111
+ const text = terminal(lines);
112
+ if (text === null) {
113
+ context.onTool((0, i18n_1.t)({
114
+ en: 'read the terminal, but no shell is open',
115
+ nl: 'terminal gelezen, maar er is geen shell open',
116
+ de: 'Terminal gelesen, aber es ist keine Shell offen',
117
+ fr: 'terminal lu, mais aucun shell n’est ouvert',
118
+ es: 'terminal leída, pero no hay ningún shell abierto',
119
+ }));
120
+ return Promise.resolve('No terminal is open.');
121
+ }
122
+ const count = String(Math.min(lines, text.split('\n').length));
123
+ context.onTool((0, i18n_1.t)({
124
+ en: `read the terminal, last ${count} lines`,
125
+ nl: `terminal gelezen, laatste ${count} regels`,
126
+ de: `Terminal gelesen, letzte ${count} Zeilen`,
127
+ fr: `terminal lu, ${count} dernières lignes`,
128
+ es: `terminal leída, últimas ${count} líneas`,
129
+ }));
130
+ return Promise.resolve(text === '' ? 'The terminal is still empty.' : text);
131
+ },
132
+ }),
133
+ (0, zod_1.betaZodTool)({
134
+ name: 'propose_command',
135
+ description: 'Suggest a command the user can run in the terminal. After a click it appears at the prompt, without ' +
136
+ 'Enter; the user runs it. One line, no line breaks. Prefer a command that only looks over one that ' +
137
+ 'changes something, and at most three per answer.',
138
+ inputSchema: zod_2.z.object({
139
+ command: zod_2.z.string().min(1).max(1000).describe('The command, one line'),
140
+ reason: zod_2.z.string().min(1).max(300).describe('What it does and why, in one short sentence'),
141
+ }),
142
+ run: ({ command, reason }) => {
143
+ if (!isSafeCommand(command)) {
144
+ return Promise.resolve('A command must be one line, without line breaks or control characters; nothing suggested.');
145
+ }
146
+ context.onProposal({ kind: 'command', command, reason });
147
+ return Promise.resolve('Suggested. The user puts it in the terminal and runs it.');
148
+ },
149
+ }),
150
+ ];
151
+ return [
152
+ ...terminalTools,
153
+ (0, zod_1.betaZodTool)({
154
+ name: 'list_containers',
155
+ description: 'All containers on this Docker engine, with image, state, status and compose project.',
156
+ inputSchema: zod_2.z.object({}),
157
+ run: async () => {
158
+ const stop = budget();
159
+ if (stop !== null) {
160
+ return stop;
161
+ }
162
+ const containers = await source.listContainers();
163
+ context.onTool((0, i18n_1.t)({
164
+ en: `requested the container list, ${String(containers.length)} containers`,
165
+ nl: `containerlijst opgevraagd, ${String(containers.length)} containers`,
166
+ de: `Containerliste angefordert, ${String(containers.length)} Container`,
167
+ fr: `liste des conteneurs demandée, ${String(containers.length)} conteneurs`,
168
+ es: `lista de contenedores solicitada, ${String(containers.length)} contenedores`,
169
+ }));
170
+ return JSON.stringify(containers.map((item) => ({
171
+ name: item.name,
172
+ id: item.shortId,
173
+ image: item.image,
174
+ state: item.state,
175
+ status: item.status,
176
+ composeProject: item.composeProject,
177
+ composeService: item.composeService,
178
+ })));
179
+ },
180
+ }),
181
+ (0, zod_1.betaZodTool)({
182
+ name: 'container_logs',
183
+ description: 'The last log lines of a container, with timestamp. Secrets have been removed.',
184
+ inputSchema: zod_2.z.object({ container, tail: zod_2.z.number().int().min(1).max(MAX_LOG_TAIL).describe('Number of lines, at most 1000') }),
185
+ run: async ({ container: reference, tail }) => {
186
+ const stop = budget();
187
+ if (stop !== null) {
188
+ return stop;
189
+ }
190
+ const target = await resolve(reference);
191
+ if (typeof target === 'string') {
192
+ return target;
193
+ }
194
+ const details = (await source.inspect(target.id));
195
+ const lines = await source.logs(target.id, details.Config?.Tty === true, tail);
196
+ context.onTool((0, i18n_1.t)({
197
+ en: `requested logs of ${target.name}, ${String(lines.length)} lines`,
198
+ nl: `logs van ${target.name} opgevraagd, ${String(lines.length)} regels`,
199
+ de: `Logs von ${target.name} angefordert, ${String(lines.length)} Zeilen`,
200
+ fr: `logs de ${target.name} demandés, ${String(lines.length)} lignes`,
201
+ es: `logs de ${target.name} solicitados, ${String(lines.length)} líneas`,
202
+ }));
203
+ const text = lines.map((line) => `${line.timestamp ?? ''} ${line.text}`.trim()).join('\n');
204
+ return lines.length === 0 ? 'No log lines.' : (0, redact_1.redactText)(text).text;
205
+ },
206
+ }),
207
+ (0, zod_1.betaZodTool)({
208
+ name: 'container_inspect',
209
+ description: 'The full docker inspect of a container: configuration, state, health, mounts, networks. ' +
210
+ 'Values of environment variables and secrets have been removed.',
211
+ inputSchema: zod_2.z.object({ container }),
212
+ run: async ({ container: reference }) => {
213
+ const stop = budget();
214
+ if (stop !== null) {
215
+ return stop;
216
+ }
217
+ const target = await resolve(reference);
218
+ if (typeof target === 'string') {
219
+ return target;
220
+ }
221
+ context.onTool((0, i18n_1.t)({
222
+ en: `requested inspect of ${target.name}`,
223
+ nl: `inspect van ${target.name} opgevraagd`,
224
+ de: `Inspect von ${target.name} angefordert`,
225
+ fr: `inspect de ${target.name} demandé`,
226
+ es: `inspect de ${target.name} solicitado`,
227
+ }));
228
+ return JSON.stringify(redactInspect(await source.inspect(target.id)));
229
+ },
230
+ }),
231
+ (0, zod_1.betaZodTool)({
232
+ name: 'container_stats',
233
+ description: 'One measurement of CPU and memory usage of a running container.',
234
+ inputSchema: zod_2.z.object({ container }),
235
+ run: async ({ container: reference }) => {
236
+ const stop = budget();
237
+ if (stop !== null) {
238
+ return stop;
239
+ }
240
+ const target = await resolve(reference);
241
+ if (typeof target === 'string') {
242
+ return target;
243
+ }
244
+ context.onTool((0, i18n_1.t)({
245
+ en: `requested a measurement of ${target.name}`,
246
+ nl: `meting van ${target.name} opgevraagd`,
247
+ de: `Messung von ${target.name} angefordert`,
248
+ fr: `mesure de ${target.name} demandée`,
249
+ es: `medición de ${target.name} solicitada`,
250
+ }));
251
+ const sample = target.state === 'running' ? await source.stats(target.id) : null;
252
+ return sample === null ? `${target.name} is not running; there is no measurement.` : JSON.stringify(sample);
253
+ },
254
+ }),
255
+ (0, zod_1.betaZodTool)({
256
+ name: 'container_events',
257
+ description: 'Docker events of a container in the last hour: start, die, oom, health_status, kill.',
258
+ inputSchema: zod_2.z.object({ container }),
259
+ run: async ({ container: reference }) => {
260
+ const stop = budget();
261
+ if (stop !== null) {
262
+ return stop;
263
+ }
264
+ const target = await resolve(reference);
265
+ if (typeof target === 'string') {
266
+ return target;
267
+ }
268
+ const events = (await source.events(target.id)).filter((event) => event.Action !== undefined && !event.Action.startsWith('exec_'));
269
+ context.onTool((0, i18n_1.t)({
270
+ en: `requested events of ${target.name}, ${String(events.length)} events`,
271
+ nl: `events van ${target.name} opgevraagd, ${String(events.length)} events`,
272
+ de: `Events von ${target.name} angefordert, ${String(events.length)} Events`,
273
+ fr: `events de ${target.name} demandés, ${String(events.length)} events`,
274
+ es: `events de ${target.name} solicitados, ${String(events.length)} events`,
275
+ }));
276
+ return JSON.stringify(events.slice(-50).map((event) => ({
277
+ time: event.time === undefined ? null : new Date(event.time * 1000).toISOString(),
278
+ action: event.Action,
279
+ exitCode: event.Actor?.Attributes?.['exitCode'] ?? null,
280
+ })));
281
+ },
282
+ }),
283
+ (0, zod_1.betaZodTool)({
284
+ name: 'compose_project',
285
+ description: 'The services of a compose project with their state, to see whether dependencies are running.',
286
+ inputSchema: zod_2.z.object({ project: zod_2.z.string().min(1).max(256).describe('Name of the compose project') }),
287
+ run: async ({ project }) => {
288
+ const stop = budget();
289
+ if (stop !== null) {
290
+ return stop;
291
+ }
292
+ const services = (await source.listContainers()).filter((item) => item.composeProject === project);
293
+ context.onTool((0, i18n_1.t)({
294
+ en: `requested compose project ${project}, ${String(services.length)} services`,
295
+ nl: `compose-project ${project} opgevraagd, ${String(services.length)} services`,
296
+ de: `Compose-Projekt ${project} angefordert, ${String(services.length)} Services`,
297
+ fr: `projet Compose ${project} demandé, ${String(services.length)} services`,
298
+ es: `proyecto de Compose ${project} solicitado, ${String(services.length)} servicios`,
299
+ }));
300
+ if (services.length === 0) {
301
+ return `No containers found in compose project "${project}".`;
302
+ }
303
+ return JSON.stringify(services.map((item) => ({ service: item.composeService, name: item.name, state: item.state, status: item.status, image: item.image })));
304
+ },
305
+ }),
306
+ (0, zod_1.betaZodTool)({
307
+ name: 'propose_action',
308
+ description: 'Suggest an action to the user: start, stop or restart a container, or bring a compose project up again ' +
309
+ '(compose up). You do not run anything; the user gets a button and decides. Only use this when the action ' +
310
+ 'will probably solve the problem or help further, and at most twice per answer.',
311
+ inputSchema: zod_2.z.object({
312
+ action: zod_2.z.enum(['start', 'stop', 'restart', 'compose_up']),
313
+ target: zod_2.z.string().min(1).max(256).describe('Name of the container, or for compose_up the name of the project'),
314
+ reason: zod_2.z.string().min(1).max(300).describe('Why, in one short sentence'),
315
+ }),
316
+ run: async ({ action, target, reason }) => {
317
+ const containers = await source.listContainers();
318
+ if (action === 'compose_up') {
319
+ if (!containers.some((item) => item.composeProject === target)) {
320
+ return `No compose project "${target}"; nothing suggested.`;
321
+ }
322
+ context.onProposal({ kind: 'compose', action: 'up', project: target, reason });
323
+ return 'Suggested. The user decides whether it happens.';
324
+ }
325
+ const found = findContainer(containers, target);
326
+ if (found === null) {
327
+ return `No container "${target}"; nothing suggested.`;
328
+ }
329
+ context.onProposal({ kind: 'container', action, containerId: found.id, containerName: found.name, reason });
330
+ return 'Suggested. The user decides whether it happens.';
331
+ },
332
+ }),
333
+ ];
334
+ }
335
+ //# sourceMappingURL=assistant-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-tools.js","sourceRoot":"","sources":["../electron/assistant-tools.ts"],"names":[],"mappings":"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"}