@oddessentials/agent-guild 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 (342) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/bin/agent-guild-report.mjs +134 -0
  4. package/bin/agent-guild.mjs +240 -0
  5. package/config/providers.default.json +124 -0
  6. package/examples/claude-code-settings.json +48 -0
  7. package/examples/codex-hooks.json +45 -0
  8. package/examples/gemini-settings.json +61 -0
  9. package/examples/grok-hooks.json +55 -0
  10. package/examples/providers.json +27 -0
  11. package/node_modules/@xterm/addon-fit/LICENSE +19 -0
  12. package/node_modules/@xterm/addon-fit/README.md +24 -0
  13. package/node_modules/@xterm/addon-fit/lib/addon-fit.js +2 -0
  14. package/node_modules/@xterm/addon-fit/lib/addon-fit.js.map +1 -0
  15. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs +18 -0
  16. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs.map +7 -0
  17. package/node_modules/@xterm/addon-fit/package.json +26 -0
  18. package/node_modules/@xterm/addon-fit/src/FitAddon.ts +92 -0
  19. package/node_modules/@xterm/addon-fit/typings/addon-fit.d.ts +55 -0
  20. package/node_modules/@xterm/addon-serialize/README.md +42 -0
  21. package/node_modules/@xterm/addon-serialize/lib/addon-serialize.js +2 -0
  22. package/node_modules/@xterm/addon-serialize/lib/addon-serialize.js.map +1 -0
  23. package/node_modules/@xterm/addon-serialize/lib/addon-serialize.mjs +19 -0
  24. package/node_modules/@xterm/addon-serialize/lib/addon-serialize.mjs.map +7 -0
  25. package/node_modules/@xterm/addon-serialize/package.json +29 -0
  26. package/node_modules/@xterm/addon-serialize/src/SerializeAddon.ts +695 -0
  27. package/node_modules/@xterm/addon-serialize/typings/addon-serialize.d.ts +116 -0
  28. package/node_modules/@xterm/addon-web-links/LICENSE +19 -0
  29. package/node_modules/@xterm/addon-web-links/README.md +21 -0
  30. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js +2 -0
  31. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js.map +1 -0
  32. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs +18 -0
  33. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs.map +7 -0
  34. package/node_modules/@xterm/addon-web-links/package.json +26 -0
  35. package/node_modules/@xterm/addon-web-links/src/WebLinkProvider.ts +199 -0
  36. package/node_modules/@xterm/addon-web-links/src/WebLinksAddon.ts +58 -0
  37. package/node_modules/@xterm/addon-web-links/typings/addon-web-links.d.ts +57 -0
  38. package/node_modules/@xterm/headless/README.md +31 -0
  39. package/node_modules/@xterm/headless/lib-headless/xterm-headless.js +2 -0
  40. package/node_modules/@xterm/headless/lib-headless/xterm-headless.js.map +1 -0
  41. package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs +46 -0
  42. package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs.map +7 -0
  43. package/node_modules/@xterm/headless/package.json +29 -0
  44. package/node_modules/@xterm/headless/typings/xterm-headless.d.ts +1385 -0
  45. package/node_modules/@xterm/xterm/LICENSE +21 -0
  46. package/node_modules/@xterm/xterm/README.md +243 -0
  47. package/node_modules/@xterm/xterm/css/xterm.css +285 -0
  48. package/node_modules/@xterm/xterm/lib/xterm.js +2 -0
  49. package/node_modules/@xterm/xterm/lib/xterm.js.map +1 -0
  50. package/node_modules/@xterm/xterm/lib/xterm.mjs +53 -0
  51. package/node_modules/@xterm/xterm/lib/xterm.mjs.map +7 -0
  52. package/node_modules/@xterm/xterm/package.json +111 -0
  53. package/node_modules/@xterm/xterm/src/browser/AccessibilityManager.ts +435 -0
  54. package/node_modules/@xterm/xterm/src/browser/Clipboard.ts +93 -0
  55. package/node_modules/@xterm/xterm/src/browser/ColorContrastCache.ts +34 -0
  56. package/node_modules/@xterm/xterm/src/browser/CoreBrowserTerminal.ts +1339 -0
  57. package/node_modules/@xterm/xterm/src/browser/Linkifier.ts +403 -0
  58. package/node_modules/@xterm/xterm/src/browser/LocalizableStrings.ts +23 -0
  59. package/node_modules/@xterm/xterm/src/browser/OscLinkProvider.ts +129 -0
  60. package/node_modules/@xterm/xterm/src/browser/RenderDebouncer.ts +84 -0
  61. package/node_modules/@xterm/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  62. package/node_modules/@xterm/xterm/src/browser/Types.ts +226 -0
  63. package/node_modules/@xterm/xterm/src/browser/Viewport.ts +192 -0
  64. package/node_modules/@xterm/xterm/src/browser/decorations/BufferDecorationRenderer.ts +139 -0
  65. package/node_modules/@xterm/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  66. package/node_modules/@xterm/xterm/src/browser/decorations/OverviewRulerRenderer.ts +214 -0
  67. package/node_modules/@xterm/xterm/src/browser/input/CompositionHelper.ts +248 -0
  68. package/node_modules/@xterm/xterm/src/browser/input/Mouse.ts +54 -0
  69. package/node_modules/@xterm/xterm/src/browser/input/MoveToCell.ts +251 -0
  70. package/node_modules/@xterm/xterm/src/browser/public/Terminal.ts +275 -0
  71. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRenderer.ts +542 -0
  72. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +546 -0
  73. package/node_modules/@xterm/xterm/src/browser/renderer/dom/WidthCache.ts +167 -0
  74. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Constants.ts +6 -0
  75. package/node_modules/@xterm/xterm/src/browser/renderer/shared/RendererUtils.ts +95 -0
  76. package/node_modules/@xterm/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +93 -0
  77. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Types.ts +84 -0
  78. package/node_modules/@xterm/xterm/src/browser/selection/SelectionModel.ts +144 -0
  79. package/node_modules/@xterm/xterm/src/browser/selection/Types.ts +15 -0
  80. package/node_modules/@xterm/xterm/src/browser/services/CharSizeService.ts +127 -0
  81. package/node_modules/@xterm/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  82. package/node_modules/@xterm/xterm/src/browser/services/CoreBrowserService.ts +137 -0
  83. package/node_modules/@xterm/xterm/src/browser/services/LinkProviderService.ts +28 -0
  84. package/node_modules/@xterm/xterm/src/browser/services/MouseService.ts +46 -0
  85. package/node_modules/@xterm/xterm/src/browser/services/RenderService.ts +376 -0
  86. package/node_modules/@xterm/xterm/src/browser/services/SelectionService.ts +1039 -0
  87. package/node_modules/@xterm/xterm/src/browser/services/Services.ts +158 -0
  88. package/node_modules/@xterm/xterm/src/browser/services/ThemeService.ts +198 -0
  89. package/node_modules/@xterm/xterm/src/browser/shared/Constants.ts +8 -0
  90. package/node_modules/@xterm/xterm/src/common/CircularList.ts +241 -0
  91. package/node_modules/@xterm/xterm/src/common/Clone.ts +23 -0
  92. package/node_modules/@xterm/xterm/src/common/Color.ts +376 -0
  93. package/node_modules/@xterm/xterm/src/common/CoreTerminal.ts +283 -0
  94. package/node_modules/@xterm/xterm/src/common/InputHandler.ts +3495 -0
  95. package/node_modules/@xterm/xterm/src/common/MultiKeyMap.ts +42 -0
  96. package/node_modules/@xterm/xterm/src/common/Platform.ts +44 -0
  97. package/node_modules/@xterm/xterm/src/common/SortedList.ts +194 -0
  98. package/node_modules/@xterm/xterm/src/common/TaskQueue.ts +166 -0
  99. package/node_modules/@xterm/xterm/src/common/TypedArrayUtils.ts +17 -0
  100. package/node_modules/@xterm/xterm/src/common/Types.ts +552 -0
  101. package/node_modules/@xterm/xterm/src/common/WindowsMode.ts +27 -0
  102. package/node_modules/@xterm/xterm/src/common/buffer/AttributeData.ts +211 -0
  103. package/node_modules/@xterm/xterm/src/common/buffer/Buffer.ts +662 -0
  104. package/node_modules/@xterm/xterm/src/common/buffer/BufferLine.ts +551 -0
  105. package/node_modules/@xterm/xterm/src/common/buffer/BufferRange.ts +13 -0
  106. package/node_modules/@xterm/xterm/src/common/buffer/BufferReflow.ts +226 -0
  107. package/node_modules/@xterm/xterm/src/common/buffer/BufferSet.ts +134 -0
  108. package/node_modules/@xterm/xterm/src/common/buffer/CellData.ts +94 -0
  109. package/node_modules/@xterm/xterm/src/common/buffer/Constants.ts +157 -0
  110. package/node_modules/@xterm/xterm/src/common/buffer/Marker.ts +43 -0
  111. package/node_modules/@xterm/xterm/src/common/buffer/Types.ts +52 -0
  112. package/node_modules/@xterm/xterm/src/common/data/Charsets.ts +256 -0
  113. package/node_modules/@xterm/xterm/src/common/data/EscapeSequences.ts +153 -0
  114. package/node_modules/@xterm/xterm/src/common/input/Keyboard.ts +373 -0
  115. package/node_modules/@xterm/xterm/src/common/input/TextDecoder.ts +346 -0
  116. package/node_modules/@xterm/xterm/src/common/input/UnicodeV6.ts +145 -0
  117. package/node_modules/@xterm/xterm/src/common/input/WriteBuffer.ts +247 -0
  118. package/node_modules/@xterm/xterm/src/common/input/XParseColor.ts +80 -0
  119. package/node_modules/@xterm/xterm/src/common/parser/Constants.ts +58 -0
  120. package/node_modules/@xterm/xterm/src/common/parser/DcsParser.ts +192 -0
  121. package/node_modules/@xterm/xterm/src/common/parser/EscapeSequenceParser.ts +792 -0
  122. package/node_modules/@xterm/xterm/src/common/parser/OscParser.ts +238 -0
  123. package/node_modules/@xterm/xterm/src/common/parser/Params.ts +229 -0
  124. package/node_modules/@xterm/xterm/src/common/parser/Types.ts +275 -0
  125. package/node_modules/@xterm/xterm/src/common/public/AddonManager.ts +53 -0
  126. package/node_modules/@xterm/xterm/src/common/public/BufferApiView.ts +35 -0
  127. package/node_modules/@xterm/xterm/src/common/public/BufferLineApiView.ts +29 -0
  128. package/node_modules/@xterm/xterm/src/common/public/BufferNamespaceApi.ts +36 -0
  129. package/node_modules/@xterm/xterm/src/common/public/ParserApi.ts +37 -0
  130. package/node_modules/@xterm/xterm/src/common/public/UnicodeApi.ts +27 -0
  131. package/node_modules/@xterm/xterm/src/common/services/BufferService.ts +154 -0
  132. package/node_modules/@xterm/xterm/src/common/services/CharsetService.ts +34 -0
  133. package/node_modules/@xterm/xterm/src/common/services/CoreMouseService.ts +365 -0
  134. package/node_modules/@xterm/xterm/src/common/services/CoreService.ts +92 -0
  135. package/node_modules/@xterm/xterm/src/common/services/DecorationService.ts +140 -0
  136. package/node_modules/@xterm/xterm/src/common/services/InstantiationService.ts +85 -0
  137. package/node_modules/@xterm/xterm/src/common/services/LogService.ts +124 -0
  138. package/node_modules/@xterm/xterm/src/common/services/OptionsService.ts +212 -0
  139. package/node_modules/@xterm/xterm/src/common/services/OscLinkService.ts +115 -0
  140. package/node_modules/@xterm/xterm/src/common/services/ServiceRegistry.ts +49 -0
  141. package/node_modules/@xterm/xterm/src/common/services/Services.ts +396 -0
  142. package/node_modules/@xterm/xterm/src/common/services/UnicodeService.ts +111 -0
  143. package/node_modules/@xterm/xterm/src/vs/base/browser/browser.ts +141 -0
  144. package/node_modules/@xterm/xterm/src/vs/base/browser/canIUse.ts +49 -0
  145. package/node_modules/@xterm/xterm/src/vs/base/browser/dom.ts +2369 -0
  146. package/node_modules/@xterm/xterm/src/vs/base/browser/fastDomNode.ts +316 -0
  147. package/node_modules/@xterm/xterm/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  148. package/node_modules/@xterm/xterm/src/vs/base/browser/iframe.ts +135 -0
  149. package/node_modules/@xterm/xterm/src/vs/base/browser/keyboardEvent.ts +213 -0
  150. package/node_modules/@xterm/xterm/src/vs/base/browser/mouseEvent.ts +229 -0
  151. package/node_modules/@xterm/xterm/src/vs/base/browser/touch.ts +372 -0
  152. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  153. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  154. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
  155. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  156. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  157. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  158. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  159. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  160. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/widget.ts +57 -0
  161. package/node_modules/@xterm/xterm/src/vs/base/browser/window.ts +14 -0
  162. package/node_modules/@xterm/xterm/src/vs/base/common/arrays.ts +887 -0
  163. package/node_modules/@xterm/xterm/src/vs/base/common/arraysFind.ts +202 -0
  164. package/node_modules/@xterm/xterm/src/vs/base/common/assert.ts +71 -0
  165. package/node_modules/@xterm/xterm/src/vs/base/common/async.ts +1992 -0
  166. package/node_modules/@xterm/xterm/src/vs/base/common/cancellation.ts +148 -0
  167. package/node_modules/@xterm/xterm/src/vs/base/common/charCode.ts +450 -0
  168. package/node_modules/@xterm/xterm/src/vs/base/common/collections.ts +140 -0
  169. package/node_modules/@xterm/xterm/src/vs/base/common/decorators.ts +130 -0
  170. package/node_modules/@xterm/xterm/src/vs/base/common/equals.ts +146 -0
  171. package/node_modules/@xterm/xterm/src/vs/base/common/errors.ts +303 -0
  172. package/node_modules/@xterm/xterm/src/vs/base/common/event.ts +1778 -0
  173. package/node_modules/@xterm/xterm/src/vs/base/common/functional.ts +32 -0
  174. package/node_modules/@xterm/xterm/src/vs/base/common/hash.ts +316 -0
  175. package/node_modules/@xterm/xterm/src/vs/base/common/iterator.ts +159 -0
  176. package/node_modules/@xterm/xterm/src/vs/base/common/keyCodes.ts +526 -0
  177. package/node_modules/@xterm/xterm/src/vs/base/common/keybindings.ts +284 -0
  178. package/node_modules/@xterm/xterm/src/vs/base/common/lazy.ts +47 -0
  179. package/node_modules/@xterm/xterm/src/vs/base/common/lifecycle.ts +801 -0
  180. package/node_modules/@xterm/xterm/src/vs/base/common/linkedList.ts +142 -0
  181. package/node_modules/@xterm/xterm/src/vs/base/common/map.ts +202 -0
  182. package/node_modules/@xterm/xterm/src/vs/base/common/numbers.ts +98 -0
  183. package/node_modules/@xterm/xterm/src/vs/base/common/observable.ts +76 -0
  184. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/api.ts +31 -0
  185. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/autorun.ts +281 -0
  186. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/base.ts +489 -0
  187. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/debugName.ts +145 -0
  188. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/derived.ts +428 -0
  189. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  190. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/logging.ts +328 -0
  191. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/promise.ts +209 -0
  192. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/utils.ts +610 -0
  193. package/node_modules/@xterm/xterm/src/vs/base/common/platform.ts +281 -0
  194. package/node_modules/@xterm/xterm/src/vs/base/common/scrollable.ts +522 -0
  195. package/node_modules/@xterm/xterm/src/vs/base/common/sequence.ts +34 -0
  196. package/node_modules/@xterm/xterm/src/vs/base/common/stopwatch.ts +43 -0
  197. package/node_modules/@xterm/xterm/src/vs/base/common/strings.ts +557 -0
  198. package/node_modules/@xterm/xterm/src/vs/base/common/symbols.ts +9 -0
  199. package/node_modules/@xterm/xterm/src/vs/base/common/uint.ts +59 -0
  200. package/node_modules/@xterm/xterm/src/vs/patches/nls.ts +90 -0
  201. package/node_modules/@xterm/xterm/src/vs/typings/base-common.d.ts +20 -0
  202. package/node_modules/@xterm/xterm/src/vs/typings/require.d.ts +42 -0
  203. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  204. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-product.d.ts +33 -0
  205. package/node_modules/@xterm/xterm/typings/xterm.d.ts +1957 -0
  206. package/node_modules/node-addon-api/LICENSE.md +9 -0
  207. package/node_modules/node-addon-api/README.md +319 -0
  208. package/node_modules/node-addon-api/common.gypi +20 -0
  209. package/node_modules/node-addon-api/except.gypi +25 -0
  210. package/node_modules/node-addon-api/index.js +12 -0
  211. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  212. package/node_modules/node-addon-api/napi-inl.h +6607 -0
  213. package/node_modules/node-addon-api/napi.h +3201 -0
  214. package/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  215. package/node_modules/node-addon-api/node_api.gyp +9 -0
  216. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  217. package/node_modules/node-addon-api/nothing.c +0 -0
  218. package/node_modules/node-addon-api/package-support.json +21 -0
  219. package/node_modules/node-addon-api/package.json +480 -0
  220. package/node_modules/node-addon-api/tools/README.md +73 -0
  221. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  222. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  223. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  224. package/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  225. package/node_modules/node-pty/LICENSE +69 -0
  226. package/node_modules/node-pty/README.md +164 -0
  227. package/node_modules/node-pty/binding.gyp +150 -0
  228. package/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  229. package/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  230. package/node_modules/node-pty/lib/index.js +52 -0
  231. package/node_modules/node-pty/lib/interfaces.js +7 -0
  232. package/node_modules/node-pty/lib/shared/conout.js +10 -0
  233. package/node_modules/node-pty/lib/terminal.js +190 -0
  234. package/node_modules/node-pty/lib/types.js +7 -0
  235. package/node_modules/node-pty/lib/unixTerminal.js +351 -0
  236. package/node_modules/node-pty/lib/utils.js +38 -0
  237. package/node_modules/node-pty/lib/windowsConoutConnection.js +131 -0
  238. package/node_modules/node-pty/lib/windowsPtyAgent.js +344 -0
  239. package/node_modules/node-pty/lib/windowsTerminal.js +209 -0
  240. package/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  241. package/node_modules/node-pty/package.json +66 -0
  242. package/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  243. package/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  244. package/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  245. package/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  246. package/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  247. package/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  248. package/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  249. package/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  250. package/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  251. package/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  252. package/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  253. package/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  254. package/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  255. package/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  256. package/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  257. package/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  258. package/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  259. package/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  260. package/node_modules/node-pty/scripts/post-install.js +76 -0
  261. package/node_modules/node-pty/scripts/prebuild.js +34 -0
  262. package/node_modules/node-pty/src/unix/pty.cc +876 -0
  263. package/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  264. package/node_modules/node-pty/src/win/conpty.cc +616 -0
  265. package/node_modules/node-pty/src/win/conpty.h +41 -0
  266. package/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  267. package/node_modules/node-pty/src/win/path_util.cc +95 -0
  268. package/node_modules/node-pty/src/win/path_util.h +26 -0
  269. package/node_modules/node-pty/third_party/conpty/1.25.260303002/win10-arm64/OpenConsole.exe +0 -0
  270. package/node_modules/node-pty/third_party/conpty/1.25.260303002/win10-arm64/conpty.dll +0 -0
  271. package/node_modules/node-pty/third_party/conpty/1.25.260303002/win10-x64/OpenConsole.exe +0 -0
  272. package/node_modules/node-pty/third_party/conpty/1.25.260303002/win10-x64/conpty.dll +0 -0
  273. package/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  274. package/node_modules/ws/LICENSE +20 -0
  275. package/node_modules/ws/README.md +548 -0
  276. package/node_modules/ws/browser.js +8 -0
  277. package/node_modules/ws/index.js +22 -0
  278. package/node_modules/ws/lib/buffer-util.js +131 -0
  279. package/node_modules/ws/lib/constants.js +19 -0
  280. package/node_modules/ws/lib/event-target.js +292 -0
  281. package/node_modules/ws/lib/extension.js +203 -0
  282. package/node_modules/ws/lib/limiter.js +55 -0
  283. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  284. package/node_modules/ws/lib/receiver.js +743 -0
  285. package/node_modules/ws/lib/sender.js +607 -0
  286. package/node_modules/ws/lib/stream.js +161 -0
  287. package/node_modules/ws/lib/subprotocol.js +62 -0
  288. package/node_modules/ws/lib/validation.js +152 -0
  289. package/node_modules/ws/lib/websocket-server.js +562 -0
  290. package/node_modules/ws/lib/websocket.js +1421 -0
  291. package/node_modules/ws/package.json +74 -0
  292. package/node_modules/ws/wrapper.mjs +21 -0
  293. package/package.json +52 -0
  294. package/src/manager/command-resolver.mjs +140 -0
  295. package/src/manager/config.mjs +94 -0
  296. package/src/manager/install-channels.mjs +268 -0
  297. package/src/manager/main.mjs +136 -0
  298. package/src/manager/providers.mjs +601 -0
  299. package/src/manager/report-shims.mjs +104 -0
  300. package/src/manager/server.mjs +421 -0
  301. package/src/manager/session-manager.mjs +306 -0
  302. package/src/manager/session.mjs +531 -0
  303. package/src/manager/shell-env.mjs +150 -0
  304. package/src/manager/usage.mjs +535 -0
  305. package/src/manager/versions.mjs +62 -0
  306. package/src/report/hooks.mjs +150 -0
  307. package/web/app.js +916 -0
  308. package/web/art/art.css +186 -0
  309. package/web/art/characters/anthropic/idle.png +0 -0
  310. package/web/art/characters/anthropic/locked.png +0 -0
  311. package/web/art/characters/anthropic/working.png +0 -0
  312. package/web/art/characters/google/idle.png +0 -0
  313. package/web/art/characters/google/locked.png +0 -0
  314. package/web/art/characters/google/working.png +0 -0
  315. package/web/art/characters/openai/idle.png +0 -0
  316. package/web/art/characters/openai/locked.png +0 -0
  317. package/web/art/characters/openai/working.png +0 -0
  318. package/web/art/characters/shell/idle.png +0 -0
  319. package/web/art/characters/shell/locked.png +0 -0
  320. package/web/art/characters/shell/working.png +0 -0
  321. package/web/art/characters/xai/idle.png +0 -0
  322. package/web/art/characters/xai/locked.png +0 -0
  323. package/web/art/characters/xai/working.png +0 -0
  324. package/web/art/familiars/aether.png +0 -0
  325. package/web/art/familiars/flame.png +0 -0
  326. package/web/art/familiars/leaf.png +0 -0
  327. package/web/art/familiars/night.png +0 -0
  328. package/web/art/icons/anthropic.png +0 -0
  329. package/web/art/icons/google.png +0 -0
  330. package/web/art/icons/openai.png +0 -0
  331. package/web/art/icons/shell.png +0 -0
  332. package/web/art/icons/xai.png +0 -0
  333. package/web/art/page.png +0 -0
  334. package/web/art/ui/frame.png +0 -0
  335. package/web/art/ui/gem-mana.png +0 -0
  336. package/web/art/ui/gem-vitality.png +0 -0
  337. package/web/art/ui/guild-crest.png +0 -0
  338. package/web/art/ui/level-medallion.png +0 -0
  339. package/web/art/ui/padlock.png +0 -0
  340. package/web/icons/README.md +8 -0
  341. package/web/index.html +154 -0
  342. package/web/styles.css +226 -0
@@ -0,0 +1,186 @@
1
+ .level-badge { display: none; }
2
+
3
+ @media (prefers-color-scheme: dark) {
4
+ :root {
5
+ --gold: #e8c47c;
6
+ --gold-dim: #8a6d3b;
7
+ --card-bg: rgba(18, 20, 26, 0.9);
8
+ }
9
+
10
+ .provider, .session-card {
11
+ --pc: #a67cf6;
12
+ --idle: url("/art/characters/shell/idle.png");
13
+ --working: url("/art/characters/shell/working.png");
14
+ --locked: url("/art/characters/shell/locked.png");
15
+ }
16
+ .provider[data-id="anthropic"], .session-card[data-provider="anthropic"] {
17
+ --pc: #d97757;
18
+ --idle: url("/art/characters/anthropic/idle.png");
19
+ --working: url("/art/characters/anthropic/working.png");
20
+ --locked: url("/art/characters/anthropic/locked.png");
21
+ }
22
+ .provider[data-id="openai"], .session-card[data-provider="openai"] {
23
+ --pc: #1fd08f;
24
+ --idle: url("/art/characters/openai/idle.png");
25
+ --working: url("/art/characters/openai/working.png");
26
+ --locked: url("/art/characters/openai/locked.png");
27
+ }
28
+ .provider[data-id="google"], .session-card[data-provider="google"] {
29
+ --pc: #5b9cff;
30
+ --idle: url("/art/characters/google/idle.png");
31
+ --working: url("/art/characters/google/working.png");
32
+ --locked: url("/art/characters/google/locked.png");
33
+ }
34
+ .provider[data-id="xai"], .session-card[data-provider="xai"] {
35
+ --pc: #38d6e8;
36
+ --idle: url("/art/characters/xai/idle.png");
37
+ --working: url("/art/characters/xai/working.png");
38
+ --locked: url("/art/characters/xai/locked.png");
39
+ }
40
+
41
+ .provider-icon[data-provider="anthropic"] { --icon: url("/art/icons/anthropic.png"); }
42
+ .provider-icon[data-provider="openai"] { --icon: url("/art/icons/openai.png"); }
43
+ .provider-icon[data-provider="google"] { --icon: url("/art/icons/google.png"); }
44
+ .provider-icon[data-provider="xai"] { --icon: url("/art/icons/xai.png"); }
45
+ .provider-icon[data-provider="shell"] { --icon: url("/art/icons/shell.png"); }
46
+ .provider-icon:not(.has-image)[data-provider="anthropic"],
47
+ .provider-icon:not(.has-image)[data-provider="openai"],
48
+ .provider-icon:not(.has-image)[data-provider="google"],
49
+ .provider-icon:not(.has-image)[data-provider="xai"],
50
+ .provider-icon:not(.has-image)[data-provider="shell"] {
51
+ background: var(--icon) center / cover no-repeat; color: transparent;
52
+ }
53
+
54
+ body { background: #0b0c10 url("/art/page.png") center bottom / cover fixed; }
55
+ .topbar { background: rgba(12, 13, 17, 0.88); backdrop-filter: blur(6px); border-bottom-color: #2a2418; }
56
+ .brand-mark { display: none; }
57
+ .brand::before {
58
+ content: ""; width: 34px; height: 34px; flex: none;
59
+ background: url("/art/ui/guild-crest.png") center / contain no-repeat;
60
+ }
61
+ h1, h2 { font-family: "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif; letter-spacing: 0.01em; }
62
+ h1 {
63
+ font-size: 1.3rem; font-weight: 600; color: var(--gold);
64
+ background: linear-gradient(180deg, #fbe9bd 0%, #e2b867 55%, #a97b35 100%);
65
+ -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
66
+ }
67
+ h2 { color: #f1e2c2; font-size: 1.15rem; font-weight: 600; }
68
+
69
+ .provider, .session-card {
70
+ position: relative; isolation: isolate; overflow: hidden;
71
+ border-radius: 6px; padding: 18px;
72
+ background: var(--card-bg);
73
+ border: 1px solid color-mix(in srgb, var(--pc) 35%, #2a303b);
74
+ box-shadow: inset 0 0 0 1px rgba(232, 196, 124, 0.06), 0 8px 24px rgba(0, 0, 0, 0.35);
75
+ transition: border-color 0.2s, box-shadow 0.2s;
76
+ }
77
+ .provider:hover, .session-card:hover {
78
+ border-color: color-mix(in srgb, var(--pc) 70%, #2a303b);
79
+ box-shadow: inset 0 0 0 1px rgba(232, 196, 124, 0.1), 0 0 22px color-mix(in srgb, var(--pc) 22%, transparent);
80
+ }
81
+ .provider::before, .session-card::before {
82
+ content: ""; position: absolute; z-index: -1; pointer-events: none;
83
+ background-repeat: no-repeat; background-size: cover; background-position: center top;
84
+ }
85
+ .provider::after, .session-card::after {
86
+ content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
87
+ border: 44px solid transparent; border-image: url("/art/ui/frame.png") 168;
88
+ }
89
+
90
+ .provider { padding-top: 188px; align-content: start; }
91
+ .provider::before {
92
+ inset: 0 0 auto 0; height: 250px;
93
+ background-image: var(--idle);
94
+ -webkit-mask-image: linear-gradient(to bottom, #000 55%, transparent 100%);
95
+ mask-image: linear-gradient(to bottom, #000 55%, transparent 100%);
96
+ }
97
+ .provider.unavailable::before { background-image: var(--locked); }
98
+ .provider.unavailable { border-color: #2a2d33; }
99
+ .provider.unavailable::after {
100
+ background: url("/art/ui/padlock.png") right 16px top 14px / 30px 40px no-repeat border-box;
101
+ }
102
+ .provider .vendor { color: #f3ead8; }
103
+
104
+ .meter-label { padding-left: 18px; background: url("/art/ui/gem-vitality.png") left center / 14px auto no-repeat; }
105
+ .meter + .meter .meter-label { background-image: url("/art/ui/gem-mana.png"); }
106
+ .meter-bar { height: 7px; background: #0c0e12; box-shadow: inset 0 0 0 1px rgba(232, 196, 124, 0.18); }
107
+ .meter-fill { background: linear-gradient(90deg, #1f9d5c, #52e08f); box-shadow: 0 0 8px rgba(82, 224, 143, 0.55); }
108
+ .meter + .meter .meter-fill { background: linear-gradient(90deg, #2a62c9, #5ba6ff); box-shadow: 0 0 8px rgba(91, 166, 255, 0.55); }
109
+ .meter.low .meter-fill { background: var(--warn); box-shadow: 0 0 8px rgba(224, 168, 74, 0.5); }
110
+ .meter.empty .meter-fill { background: var(--danger); box-shadow: 0 0 8px rgba(239, 107, 102, 0.5); }
111
+
112
+ .session-card { padding-left: 152px; min-height: 196px; }
113
+ .session-card::before {
114
+ inset: 0 auto 0 0; width: 168px; background-size: 168px auto;
115
+ background-image: var(--idle);
116
+ -webkit-mask-image: linear-gradient(to right, #000 62%, transparent 100%);
117
+ mask-image: linear-gradient(to right, #000 62%, transparent 100%);
118
+ }
119
+ .session-card:has(.status-pill.active)::before { background-image: var(--working); }
120
+ .session-card:has(.status-pill.active) {
121
+ border-color: color-mix(in srgb, var(--pc) 75%, #2a303b);
122
+ box-shadow: inset 0 0 0 1px rgba(232, 196, 124, 0.1), 0 0 26px color-mix(in srgb, var(--pc) 28%, transparent);
123
+ }
124
+ .session-card.exited::before { filter: grayscale(1) brightness(0.7); }
125
+ .session-card .card-top > .provider-icon { display: none; }
126
+ .session-card .card-top { flex-wrap: wrap; gap: 6px 8px; }
127
+ .session-card .card-title { flex-basis: 100%; }
128
+
129
+ .level-badge {
130
+ display: grid; place-items: center; position: absolute; left: 12px; bottom: 12px; z-index: 1;
131
+ width: 46px; height: 46px; padding-top: 1px;
132
+ background: url("/art/ui/level-medallion.png") center / contain no-repeat;
133
+ font: 700 1.05rem "Palatino Linotype", Palatino, Georgia, serif; color: #f6dea6;
134
+ text-shadow: 0 1px 2px #000, 0 0 6px rgba(0, 0, 0, 0.8);
135
+ }
136
+
137
+ .session-card .agent {
138
+ width: 34px; height: 34px; border-width: 1px; border-color: var(--fc);
139
+ place-items: end end; padding: 0 3px 1px 0;
140
+ background: #0e1016 center / 118% auto no-repeat;
141
+ color: #fff; font-size: 0.62rem; text-shadow: 0 0 3px #000, 0 1px 2px #000;
142
+ box-shadow: 0 0 10px color-mix(in srgb, var(--fc) 45%, transparent);
143
+ }
144
+ .session-card .agent.working::after { border-color: var(--fc); }
145
+ .session-card .agent[data-familiar="flame"] { --fc: #f08a3c; background-image: url("/art/familiars/flame.png"); }
146
+ .session-card .agent[data-familiar="leaf"] { --fc: #5fd068; background-image: url("/art/familiars/leaf.png"); }
147
+ .session-card .agent[data-familiar="night"] { --fc: #a66cf0; background-image: url("/art/familiars/night.png"); }
148
+ .session-card .agent[data-familiar="aether"] { --fc: #7cc8ff; background-image: url("/art/familiars/aether.png"); }
149
+
150
+ .status-pill { background: rgba(0, 0, 0, 0.45); border: 1px solid #4a3d25; }
151
+ .model-pill { border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent); }
152
+ .provider .tier { background: rgba(0, 0, 0, 0.45); border-color: #4a3d25; color: var(--gold); }
153
+
154
+ .btn {
155
+ border-radius: 6px; border-color: #4a3d25;
156
+ background: linear-gradient(#242834, #171a22);
157
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 2px rgba(0, 0, 0, 0.5);
158
+ }
159
+ .btn:hover { border-color: var(--gold-dim); }
160
+ .btn.primary {
161
+ border-color: #b8955a; color: #fff; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.35);
162
+ background: linear-gradient(#8e8ef6, #6262d6);
163
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 2px 8px rgba(124, 124, 240, 0.25);
164
+ }
165
+ .btn.primary:hover { border-color: var(--gold); filter: brightness(1.08); }
166
+ .btn.danger { color: #ff9a94; }
167
+ .btn.danger:hover { border-color: #b8524d; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 0 12px rgba(239, 107, 102, 0.3); }
168
+ .cwd input, .auth input { border-color: #4a3d25; background: rgba(12, 13, 17, 0.8); }
169
+ .auth {
170
+ border-radius: 6px; padding: 28px; background: var(--card-bg);
171
+ border: 1px solid #4a3d25; box-shadow: inset 0 0 0 1px rgba(232, 196, 124, 0.06), 0 8px 24px rgba(0, 0, 0, 0.35);
172
+ }
173
+ .auth pre { background: rgba(12, 13, 17, 0.8); border: 1px solid #2a2418; color: var(--gold); }
174
+ .notice h2 { color: #ff9a94; }
175
+ .notice.stopping h2 { color: var(--gold); }
176
+ .status-pill.active { border-color: color-mix(in srgb, var(--ok) 55%, transparent); box-shadow: 0 0 10px rgba(76, 195, 138, 0.25); }
177
+
178
+ @media (max-width: 640px) {
179
+ .session-card { padding-left: 118px; }
180
+ .session-card::before { width: 132px; background-size: 132px auto; }
181
+ }
182
+
183
+ @media (prefers-reduced-motion: reduce) {
184
+ .provider, .session-card { transition: none; }
185
+ }
186
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,8 @@
1
+ # Provider icons
2
+
3
+ Drop an SVG named after a provider id (for example `anthropic.svg`) into this
4
+ folder and the page shows it instead of the lettered badge. A provider in
5
+ `providers.json` can also point `icon` at any URL path the manager serves.
6
+
7
+ No vendor logos ship with Agent Guild. If you add one, follow that vendor's
8
+ brand guidelines.
package/web/index.html ADDED
@@ -0,0 +1,154 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Agent Guild</title>
7
+ <meta name="color-scheme" content="light dark">
8
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%235B5BD6'/%3E%3Cpath d='M9 22l7-12 7 12' stroke='white' stroke-width='3' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E">
9
+ <link rel="stylesheet" href="/vendor/xterm/xterm.css">
10
+ <link rel="stylesheet" href="/styles.css">
11
+ <link rel="stylesheet" href="/art/art.css">
12
+ </head>
13
+ <body>
14
+ <header class="topbar">
15
+ <div class="brand">
16
+ <svg class="brand-mark" viewBox="0 0 32 32" aria-hidden="true"><rect width="32" height="32" rx="8" fill="currentColor"/><path d="M9 22l7-12 7 12" stroke="#fff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
17
+ <h1>Agent Guild</h1>
18
+ </div>
19
+ <div class="topbar-end">
20
+ <div id="connection" class="connection" role="status" aria-live="polite">
21
+ <span class="dot"></span><span class="label">Connecting…</span>
22
+ </div>
23
+ <button id="stop-manager" class="btn danger stop-manager" type="button" hidden title="Stop the session manager. This ends every session.">Stop manager</button>
24
+ </div>
25
+ </header>
26
+
27
+ <main id="app" hidden>
28
+ <section class="launcher" aria-labelledby="launch-heading">
29
+ <div class="section-head">
30
+ <h2 id="launch-heading">Start a session</h2>
31
+ <label class="cwd">
32
+ <span>Working folder</span>
33
+ <input id="cwd" type="text" spellcheck="false" autocomplete="off" placeholder="Home folder">
34
+ </label>
35
+ </div>
36
+ <div id="providers" class="providers" role="list"></div>
37
+ </section>
38
+
39
+ <section class="sessions" aria-labelledby="sessions-heading">
40
+ <div class="section-head">
41
+ <h2 id="sessions-heading">Sessions <span id="session-count" class="count"></span></h2>
42
+ </div>
43
+ <div id="sessions" class="session-grid" role="list"></div>
44
+ <p id="empty" class="empty">No sessions yet. Pick a provider above to start one. Sessions keep running when you close this page.</p>
45
+ </section>
46
+ </main>
47
+
48
+ <section id="auth" class="auth" hidden>
49
+ <h2>Open Agent Guild from the launcher</h2>
50
+ <p>This page needs the access token of your local session manager. Run this command and it will open the page for you:</p>
51
+ <pre>agent-guild open</pre>
52
+ <p>Or paste the token printed by <code>agent-guild url</code>:</p>
53
+ <form id="auth-form">
54
+ <input id="auth-token" type="password" autocomplete="off" placeholder="Access token" aria-label="Access token">
55
+ <button type="submit" class="btn primary">Connect</button>
56
+ </form>
57
+ <p id="auth-error" class="error" role="alert"></p>
58
+ </section>
59
+
60
+ <section id="stopped" class="auth notice" hidden aria-live="polite">
61
+ <h2 id="stopped-title">Stopping the session manager…</h2>
62
+ <p id="stopped-text">Ending every session. This can take a few seconds.</p>
63
+ <p>To start again, run this command or double-click the launcher:</p>
64
+ <pre>agent-guild open</pre>
65
+ <p>This page reconnects by itself when the manager is back.</p>
66
+ </section>
67
+
68
+ <div id="terminal-panel" class="terminal-panel" hidden role="dialog" aria-modal="false" aria-labelledby="panel-title">
69
+ <div class="panel-bar">
70
+ <div class="panel-title">
71
+ <span id="panel-icon" class="provider-icon small"></span>
72
+ <div>
73
+ <div id="panel-title" class="title"></div>
74
+ <div id="panel-sub" class="sub"></div>
75
+ </div>
76
+ <div id="panel-agents" class="agents"></div>
77
+ </div>
78
+ <div class="panel-actions">
79
+ <button id="panel-stop" class="btn danger" type="button">Stop</button>
80
+ <button id="panel-close" class="btn" type="button" title="Hide the terminal. The session keeps running.">Hide</button>
81
+ </div>
82
+ </div>
83
+ <div id="terminal-host" class="terminal-host"></div>
84
+ </div>
85
+
86
+ <div id="toast" class="toast" role="alert" hidden></div>
87
+
88
+ <template id="provider-template">
89
+ <article class="provider" role="listitem">
90
+ <span class="provider-icon"></span>
91
+ <span class="provider-text">
92
+ <span class="vendor-line"><span class="vendor"></span><span class="tier" hidden></span></span>
93
+ <span class="tool"></span>
94
+ <span class="state"></span>
95
+ </span>
96
+ <div class="usage"></div>
97
+ <div class="provider-links">
98
+ <a class="console-link usage-link" target="_blank" rel="noopener noreferrer">Usage ↗</a>
99
+ <a class="console-link billing-link" target="_blank" rel="noopener noreferrer">Billing ↗</a>
100
+ </div>
101
+ <div class="provider-actions">
102
+ <button class="btn primary new" type="button">New</button>
103
+ <button class="btn existing" type="button">Existing…</button>
104
+ <button class="btn primary install" type="button">Install</button>
105
+ <button class="btn update" type="button"></button>
106
+ <span class="hint"></span>
107
+ </div>
108
+ <details class="copies" hidden>
109
+ <summary></summary>
110
+ <ul></ul>
111
+ </details>
112
+ </article>
113
+ </template>
114
+
115
+ <template id="meter-template">
116
+ <div class="meter">
117
+ <span class="meter-label"></span>
118
+ <span class="meter-bar"><span class="meter-fill"></span></span>
119
+ <span class="meter-value"></span>
120
+ </div>
121
+ </template>
122
+
123
+ <template id="session-template">
124
+ <article class="session-card" role="listitem" tabindex="0">
125
+ <span class="level-badge" aria-hidden="true"></span>
126
+ <div class="card-top">
127
+ <span class="provider-icon"></span>
128
+ <div class="card-title">
129
+ <div class="name"></div>
130
+ <div class="meta"></div>
131
+ </div>
132
+ <span class="model-pill"></span>
133
+ <span class="status-pill"></span>
134
+ </div>
135
+ <div class="cwd-line"></div>
136
+ <div class="agents-row">
137
+ <span class="agents-label">Agents</span>
138
+ <div class="agents"></div>
139
+ </div>
140
+ <div class="card-actions">
141
+ <button class="btn primary open" type="button">Open</button>
142
+ <button class="btn rename" type="button">Rename</button>
143
+ <button class="btn danger stop" type="button">Stop</button>
144
+ <button class="btn remove" type="button">Remove</button>
145
+ </div>
146
+ </article>
147
+ </template>
148
+
149
+ <script src="/vendor/xterm/xterm.js"></script>
150
+ <script src="/vendor/xterm/addon-fit.js"></script>
151
+ <script src="/vendor/xterm/addon-web-links.js"></script>
152
+ <script type="module" src="/app.js"></script>
153
+ </body>
154
+ </html>
package/web/styles.css ADDED
@@ -0,0 +1,226 @@
1
+ :root {
2
+ --bg: #f6f7f9;
3
+ --surface: #ffffff;
4
+ --surface-2: #f0f2f5;
5
+ --border: #dde1e7;
6
+ --text: #1b1f24;
7
+ --muted: #5f6b7a;
8
+ --accent: #5b5bd6;
9
+ --accent-text: #ffffff;
10
+ --danger: #c93c37;
11
+ --ok: #1f8a4c;
12
+ --warn: #b7791f;
13
+ --shadow: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.08);
14
+ --term-bg: #0f1115;
15
+ --radius: 10px;
16
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
17
+ font-size: 15px;
18
+ color-scheme: light;
19
+ }
20
+
21
+ @media (prefers-color-scheme: dark) {
22
+ :root {
23
+ --bg: #0f1115;
24
+ --surface: #171a21;
25
+ --surface-2: #1e222b;
26
+ --border: #2a303b;
27
+ --text: #e6e9ef;
28
+ --muted: #9aa4b2;
29
+ --accent: #7c7cf0;
30
+ --danger: #ef6b66;
31
+ --ok: #4cc38a;
32
+ --warn: #e0a84a;
33
+ --shadow: none;
34
+ color-scheme: dark;
35
+ }
36
+ }
37
+
38
+ * { box-sizing: border-box; }
39
+ body { margin: 0; background: var(--bg); color: var(--text); min-height: 100vh; }
40
+ h1, h2 { margin: 0; }
41
+ h1 { font-size: 1.1rem; font-weight: 650; }
42
+ h2 { font-size: 1rem; font-weight: 600; }
43
+ code, pre { font-family: ui-monospace, "Cascadia Code", Menlo, Consolas, monospace; }
44
+ [hidden] { display: none !important; }
45
+
46
+ .topbar {
47
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
48
+ padding: 12px 20px; background: var(--surface); border-bottom: 1px solid var(--border);
49
+ position: sticky; top: 0; z-index: 5;
50
+ }
51
+ .brand { display: flex; align-items: center; gap: 10px; }
52
+ .brand-mark { width: 26px; height: 26px; color: var(--accent); flex: none; }
53
+ .topbar-end { display: flex; align-items: center; justify-content: flex-end; gap: 14px; flex-wrap: wrap; min-width: 0; }
54
+ .connection { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 0.85rem; }
55
+ .connection .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--warn); }
56
+ .connection.ok .dot { background: var(--ok); }
57
+ .connection.down .dot { background: var(--danger); }
58
+
59
+ main { max-width: 1200px; margin: 0 auto; padding: 20px 16px 48px; display: grid; gap: 28px; }
60
+ .section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
61
+ .count { color: var(--muted); font-weight: 500; }
62
+
63
+ .cwd { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 0.85rem; flex: 1 1 280px; max-width: 520px; }
64
+ .cwd input, .auth input {
65
+ flex: 1; min-width: 0; padding: 7px 10px; border-radius: 8px; border: 1px solid var(--border);
66
+ background: var(--surface); color: var(--text); font: inherit; font-size: 0.9rem;
67
+ }
68
+ .cwd input:focus, .auth input:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
69
+
70
+ .providers { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
71
+ .provider {
72
+ display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 10px 12px; padding: 14px;
73
+ border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow);
74
+ }
75
+ .provider.unavailable .provider-icon { filter: grayscale(1); opacity: 0.45; }
76
+ .provider-text { display: grid; gap: 2px; min-width: 0; }
77
+ .provider .vendor-line { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; min-width: 0; }
78
+ .provider .vendor { font-weight: 600; }
79
+ .provider .tier {
80
+ font-size: 0.68rem; font-weight: 600; padding: 1px 7px; border-radius: 999px; max-width: 100%;
81
+ background: var(--surface-2); color: var(--muted); border: 1px solid var(--border);
82
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
83
+ }
84
+ .provider .tool { color: var(--muted); font-size: 0.85rem; }
85
+ .provider .state { font-size: 0.75rem; color: var(--ok); }
86
+ .provider .state.update-available { color: var(--warn); }
87
+ .provider.unavailable .state { color: var(--muted); }
88
+ .provider .update { color: var(--warn); border-color: var(--warn); }
89
+ .provider .usage { grid-column: 1 / -1; display: grid; gap: 4px; }
90
+ .provider .usage:empty { display: none; }
91
+ .meter { display: grid; grid-template-columns: 5.5em 1fr auto; align-items: center; gap: 8px; font-size: 0.75rem; color: var(--muted); }
92
+ .meter-label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
93
+ .meter-bar { height: 6px; border-radius: 3px; background: var(--surface-2); overflow: hidden; }
94
+ .meter-fill { display: block; height: 100%; border-radius: 3px; background: var(--ok); }
95
+ .meter.low .meter-fill { background: var(--warn); }
96
+ .meter.empty .meter-fill { background: var(--danger); }
97
+ .meter-value { white-space: nowrap; font-variant-numeric: tabular-nums; }
98
+ .usage-note { font-size: 0.75rem; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
99
+ .provider-links { grid-column: 1 / -1; display: flex; gap: 14px; font-size: 0.78rem; }
100
+ .console-link { color: var(--accent); text-decoration: none; }
101
+ .console-link:hover { text-decoration: underline; }
102
+ .console-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
103
+ .provider-actions { grid-column: 1 / -1; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
104
+ .provider .hint { font-size: 0.78rem; color: var(--muted); overflow-wrap: anywhere; }
105
+ .provider .copies { grid-column: 1 / -1; font-size: 0.78rem; color: var(--muted); overflow-wrap: anywhere; }
106
+ .provider .copies summary { cursor: pointer; color: var(--warn); }
107
+ .provider .copies ul { margin: 6px 0 0; padding: 0; list-style: none; display: grid; gap: 8px; }
108
+ .provider .copies li span { display: block; }
109
+ .provider .copies .copy-name { color: var(--text); }
110
+ .provider .copies code { font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace; color: var(--text); }
111
+ .provider.busy { opacity: 0.6; pointer-events: none; }
112
+
113
+ .provider-icon {
114
+ --c: #64748b;
115
+ flex: none; width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center;
116
+ background: var(--c); color: #fff; font-weight: 700; font-size: 1.05rem; letter-spacing: -0.02em;
117
+ background-size: cover; background-position: center;
118
+ }
119
+ .provider-icon.has-image { background-color: transparent; }
120
+ .provider-icon.small { width: 30px; height: 30px; border-radius: 9px; font-size: 0.85rem; }
121
+
122
+ .session-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
123
+ .session-card {
124
+ display: grid; gap: 12px; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius);
125
+ background: var(--surface); box-shadow: var(--shadow); cursor: pointer;
126
+ }
127
+ .session-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
128
+ .session-card.exited { opacity: 0.75; }
129
+ .card-top { display: flex; align-items: center; gap: 12px; }
130
+ .card-title { flex: 1; min-width: 0; }
131
+ .card-title .name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
132
+ .card-title .meta, .cwd-line { color: var(--muted); font-size: 0.8rem; }
133
+ .cwd-line { font-family: ui-monospace, Menlo, Consolas, monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: rtl; text-align: left; }
134
+ .status-pill {
135
+ font-size: 0.72rem; font-weight: 600; padding: 3px 8px; border-radius: 999px; white-space: nowrap;
136
+ background: var(--surface-2); color: var(--muted);
137
+ }
138
+ .model-pill {
139
+ font-size: 0.72rem; font-weight: 600; padding: 3px 8px; border-radius: 999px; white-space: nowrap;
140
+ max-width: 11em; overflow: hidden; text-overflow: ellipsis;
141
+ background: color-mix(in srgb, var(--accent) 14%, var(--surface)); color: var(--accent);
142
+ }
143
+ .model-pill.screen { font-weight: 500; }
144
+ .status-pill.active { color: var(--ok); }
145
+ .status-pill.active::before { content: "● "; animation: pulse 1.2s ease-in-out infinite; }
146
+ .status-pill.exited { color: var(--danger); }
147
+
148
+ .agents-row { display: flex; align-items: center; gap: 10px; min-height: 30px; }
149
+ .agents-label { font-size: 0.75rem; color: var(--muted); }
150
+ .agents { display: flex; flex-wrap: wrap; gap: 6px; }
151
+ .agents:empty::after { content: "none reported"; font-size: 0.75rem; color: var(--muted); }
152
+ .agent {
153
+ --c: #64748b;
154
+ width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; position: relative;
155
+ background: color-mix(in srgb, var(--c) 22%, var(--surface)); color: var(--text);
156
+ border: 2px solid var(--c); font-size: 0.72rem; font-weight: 700;
157
+ }
158
+ .agent.working::after {
159
+ content: ""; position: absolute; inset: -5px; border-radius: 50%; border: 2px solid var(--c);
160
+ opacity: 0; animation: ring 1.6s ease-out infinite;
161
+ }
162
+ .agent.waiting { border-style: dashed; }
163
+ .agent.done, .agent.idle { opacity: 0.5; }
164
+ .panel-title .agents:empty::after { content: none; }
165
+
166
+ .card-actions { display: flex; gap: 8px; flex-wrap: wrap; }
167
+ .btn {
168
+ padding: 6px 12px; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-2);
169
+ color: var(--text); font: inherit; font-size: 0.85rem; cursor: pointer;
170
+ }
171
+ .btn:hover { border-color: var(--muted); }
172
+ .btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
173
+ .btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); }
174
+ .btn.danger { color: var(--danger); }
175
+ .btn.danger:hover { border-color: var(--danger); }
176
+ .btn:disabled { opacity: 0.6; cursor: progress; }
177
+ .stop-manager { white-space: nowrap; }
178
+
179
+ .empty { color: var(--muted); margin: 8px 0 0; }
180
+
181
+ .auth { max-width: 560px; margin: 60px auto; padding: 24px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); display: grid; gap: 12px; }
182
+ .auth p { margin: 0; color: var(--muted); line-height: 1.5; }
183
+ .auth pre { margin: 0; padding: 10px 12px; background: var(--surface-2); border-radius: 8px; }
184
+ .auth form { display: flex; gap: 8px; }
185
+ .notice h2 { color: var(--danger); }
186
+ .notice.stopping h2 { color: var(--warn); }
187
+ .error { color: var(--danger); min-height: 1.2em; }
188
+
189
+ .terminal-panel {
190
+ /* Below the top bar, whose height the page publishes as --topbar-h; it grows when the bar wraps. */
191
+ position: fixed; inset: calc(var(--topbar-h, 52px) + 12px) 16px 16px; z-index: 10; display: flex; flex-direction: column;
192
+ background: var(--term-bg); border: 1px solid var(--border); border-radius: var(--radius);
193
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35); overflow: hidden;
194
+ }
195
+ .panel-bar {
196
+ display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px;
197
+ background: var(--surface); border-bottom: 1px solid var(--border); flex-wrap: wrap;
198
+ }
199
+ .panel-title { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1; }
200
+ .panel-title .title { font-weight: 600; }
201
+ .panel-title .sub { color: var(--muted); font-size: 0.78rem; }
202
+ .panel-actions { display: flex; gap: 8px; }
203
+ .terminal-host { flex: 1; min-height: 0; padding: 8px 4px 4px 10px; }
204
+ .terminal-host > div { height: 100%; }
205
+
206
+ .toast {
207
+ position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); z-index: 20;
208
+ max-width: min(640px, calc(100vw - 32px)); padding: 10px 14px; border-radius: 8px;
209
+ background: var(--text); color: var(--bg); font-size: 0.9rem; box-shadow: var(--shadow); white-space: pre-wrap;
210
+ }
211
+
212
+ @keyframes pulse { 50% { opacity: 0.35; } }
213
+ @keyframes ring { 0% { transform: scale(0.85); opacity: 0.8; } 100% { transform: scale(1.3); opacity: 0; } }
214
+
215
+ @media (prefers-reduced-motion: reduce) {
216
+ .status-pill.active::before, .agent.working::after { animation: none; }
217
+ }
218
+
219
+ @media (max-width: 640px) {
220
+ .topbar { padding: 10px 16px; flex-wrap: wrap; }
221
+ .brand h1 { white-space: nowrap; }
222
+ .topbar-end { flex: 1 1 100%; justify-content: space-between; }
223
+ .terminal-panel { inset: var(--topbar-h, 56px) 0 0; border-radius: 0; }
224
+ .session-grid { grid-template-columns: 1fr; }
225
+ .cwd { flex-basis: 100%; }
226
+ }