language-operator 0.1.81 → 0.1.82

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 (427) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/agents/README.md +16 -0
  3. data/.claude/agents/changelog-writer.md +181 -0
  4. data/.claude/hooks/README.md +43 -0
  5. data/.claude/hooks/node_modules/.bin/esbuild +1 -0
  6. data/.claude/hooks/node_modules/.bin/tsc +1 -0
  7. data/.claude/hooks/node_modules/.bin/tsserver +1 -0
  8. data/.claude/hooks/node_modules/.bin/tsx +1 -0
  9. data/.claude/hooks/node_modules/.package-lock.json +136 -0
  10. data/.claude/hooks/node_modules/@esbuild/linux-x64/README.md +3 -0
  11. data/.claude/hooks/node_modules/@esbuild/linux-x64/bin/esbuild +0 -0
  12. data/.claude/hooks/node_modules/@esbuild/linux-x64/package.json +20 -0
  13. data/.claude/hooks/node_modules/@types/node/LICENSE +21 -0
  14. data/.claude/hooks/node_modules/@types/node/README.md +15 -0
  15. data/.claude/hooks/node_modules/@types/node/assert/strict.d.ts +105 -0
  16. data/.claude/hooks/node_modules/@types/node/assert.d.ts +955 -0
  17. data/.claude/hooks/node_modules/@types/node/async_hooks.d.ts +623 -0
  18. data/.claude/hooks/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  19. data/.claude/hooks/node_modules/@types/node/buffer.d.ts +1810 -0
  20. data/.claude/hooks/node_modules/@types/node/child_process.d.ts +1428 -0
  21. data/.claude/hooks/node_modules/@types/node/cluster.d.ts +486 -0
  22. data/.claude/hooks/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  23. data/.claude/hooks/node_modules/@types/node/console.d.ts +151 -0
  24. data/.claude/hooks/node_modules/@types/node/constants.d.ts +20 -0
  25. data/.claude/hooks/node_modules/@types/node/crypto.d.ts +4065 -0
  26. data/.claude/hooks/node_modules/@types/node/dgram.d.ts +564 -0
  27. data/.claude/hooks/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  28. data/.claude/hooks/node_modules/@types/node/dns/promises.d.ts +503 -0
  29. data/.claude/hooks/node_modules/@types/node/dns.d.ts +922 -0
  30. data/.claude/hooks/node_modules/@types/node/domain.d.ts +166 -0
  31. data/.claude/hooks/node_modules/@types/node/events.d.ts +1054 -0
  32. data/.claude/hooks/node_modules/@types/node/fs/promises.d.ts +1316 -0
  33. data/.claude/hooks/node_modules/@types/node/fs.d.ts +4676 -0
  34. data/.claude/hooks/node_modules/@types/node/globals.d.ts +150 -0
  35. data/.claude/hooks/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  36. data/.claude/hooks/node_modules/@types/node/http.d.ts +2143 -0
  37. data/.claude/hooks/node_modules/@types/node/http2.d.ts +2480 -0
  38. data/.claude/hooks/node_modules/@types/node/https.d.ts +399 -0
  39. data/.claude/hooks/node_modules/@types/node/index.d.ts +115 -0
  40. data/.claude/hooks/node_modules/@types/node/inspector/promises.d.ts +41 -0
  41. data/.claude/hooks/node_modules/@types/node/inspector.d.ts +224 -0
  42. data/.claude/hooks/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  43. data/.claude/hooks/node_modules/@types/node/module.d.ts +819 -0
  44. data/.claude/hooks/node_modules/@types/node/net.d.ts +933 -0
  45. data/.claude/hooks/node_modules/@types/node/os.d.ts +507 -0
  46. data/.claude/hooks/node_modules/@types/node/package.json +155 -0
  47. data/.claude/hooks/node_modules/@types/node/path/posix.d.ts +8 -0
  48. data/.claude/hooks/node_modules/@types/node/path/win32.d.ts +8 -0
  49. data/.claude/hooks/node_modules/@types/node/path.d.ts +187 -0
  50. data/.claude/hooks/node_modules/@types/node/perf_hooks.d.ts +621 -0
  51. data/.claude/hooks/node_modules/@types/node/process.d.ts +2097 -0
  52. data/.claude/hooks/node_modules/@types/node/punycode.d.ts +117 -0
  53. data/.claude/hooks/node_modules/@types/node/querystring.d.ts +152 -0
  54. data/.claude/hooks/node_modules/@types/node/quic.d.ts +910 -0
  55. data/.claude/hooks/node_modules/@types/node/readline/promises.d.ts +161 -0
  56. data/.claude/hooks/node_modules/@types/node/readline.d.ts +541 -0
  57. data/.claude/hooks/node_modules/@types/node/repl.d.ts +415 -0
  58. data/.claude/hooks/node_modules/@types/node/sea.d.ts +162 -0
  59. data/.claude/hooks/node_modules/@types/node/sqlite.d.ts +937 -0
  60. data/.claude/hooks/node_modules/@types/node/stream/consumers.d.ts +38 -0
  61. data/.claude/hooks/node_modules/@types/node/stream/promises.d.ts +211 -0
  62. data/.claude/hooks/node_modules/@types/node/stream/web.d.ts +296 -0
  63. data/.claude/hooks/node_modules/@types/node/stream.d.ts +1760 -0
  64. data/.claude/hooks/node_modules/@types/node/string_decoder.d.ts +67 -0
  65. data/.claude/hooks/node_modules/@types/node/test/reporters.d.ts +96 -0
  66. data/.claude/hooks/node_modules/@types/node/test.d.ts +2239 -0
  67. data/.claude/hooks/node_modules/@types/node/timers/promises.d.ts +108 -0
  68. data/.claude/hooks/node_modules/@types/node/timers.d.ts +159 -0
  69. data/.claude/hooks/node_modules/@types/node/tls.d.ts +1194 -0
  70. data/.claude/hooks/node_modules/@types/node/trace_events.d.ts +197 -0
  71. data/.claude/hooks/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  72. data/.claude/hooks/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  73. data/.claude/hooks/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  74. data/.claude/hooks/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  75. data/.claude/hooks/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  76. data/.claude/hooks/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  77. data/.claude/hooks/node_modules/@types/node/tty.d.ts +250 -0
  78. data/.claude/hooks/node_modules/@types/node/url.d.ts +519 -0
  79. data/.claude/hooks/node_modules/@types/node/util/types.d.ts +558 -0
  80. data/.claude/hooks/node_modules/@types/node/util.d.ts +1653 -0
  81. data/.claude/hooks/node_modules/@types/node/v8.d.ts +979 -0
  82. data/.claude/hooks/node_modules/@types/node/vm.d.ts +1180 -0
  83. data/.claude/hooks/node_modules/@types/node/wasi.d.ts +202 -0
  84. data/.claude/hooks/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  85. data/.claude/hooks/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  86. data/.claude/hooks/node_modules/@types/node/web-globals/console.d.ts +9 -0
  87. data/.claude/hooks/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  88. data/.claude/hooks/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  89. data/.claude/hooks/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  90. data/.claude/hooks/node_modules/@types/node/web-globals/events.d.ts +106 -0
  91. data/.claude/hooks/node_modules/@types/node/web-globals/fetch.d.ts +54 -0
  92. data/.claude/hooks/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  93. data/.claude/hooks/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  94. data/.claude/hooks/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  95. data/.claude/hooks/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  96. data/.claude/hooks/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  97. data/.claude/hooks/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  98. data/.claude/hooks/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  99. data/.claude/hooks/node_modules/@types/node/web-globals/url.d.ts +24 -0
  100. data/.claude/hooks/node_modules/@types/node/worker_threads.d.ts +714 -0
  101. data/.claude/hooks/node_modules/@types/node/zlib.d.ts +618 -0
  102. data/.claude/hooks/node_modules/esbuild/LICENSE.md +21 -0
  103. data/.claude/hooks/node_modules/esbuild/README.md +3 -0
  104. data/.claude/hooks/node_modules/esbuild/bin/esbuild +0 -0
  105. data/.claude/hooks/node_modules/esbuild/install.js +289 -0
  106. data/.claude/hooks/node_modules/esbuild/lib/main.d.ts +716 -0
  107. data/.claude/hooks/node_modules/esbuild/lib/main.js +2242 -0
  108. data/.claude/hooks/node_modules/esbuild/package.json +49 -0
  109. data/.claude/hooks/node_modules/get-tsconfig/LICENSE +21 -0
  110. data/.claude/hooks/node_modules/get-tsconfig/README.md +235 -0
  111. data/.claude/hooks/node_modules/get-tsconfig/dist/index.cjs +7 -0
  112. data/.claude/hooks/node_modules/get-tsconfig/dist/index.d.cts +2088 -0
  113. data/.claude/hooks/node_modules/get-tsconfig/dist/index.d.mts +2088 -0
  114. data/.claude/hooks/node_modules/get-tsconfig/dist/index.mjs +7 -0
  115. data/.claude/hooks/node_modules/get-tsconfig/package.json +46 -0
  116. data/.claude/hooks/node_modules/resolve-pkg-maps/LICENSE +21 -0
  117. data/.claude/hooks/node_modules/resolve-pkg-maps/README.md +216 -0
  118. data/.claude/hooks/node_modules/resolve-pkg-maps/dist/index.cjs +1 -0
  119. data/.claude/hooks/node_modules/resolve-pkg-maps/dist/index.d.cts +11 -0
  120. data/.claude/hooks/node_modules/resolve-pkg-maps/dist/index.d.mts +11 -0
  121. data/.claude/hooks/node_modules/resolve-pkg-maps/dist/index.mjs +1 -0
  122. data/.claude/hooks/node_modules/resolve-pkg-maps/package.json +42 -0
  123. data/.claude/hooks/node_modules/tsx/LICENSE +21 -0
  124. data/.claude/hooks/node_modules/tsx/README.md +32 -0
  125. data/.claude/hooks/node_modules/tsx/dist/cjs/api/index.cjs +1 -0
  126. data/.claude/hooks/node_modules/tsx/dist/cjs/api/index.d.cts +35 -0
  127. data/.claude/hooks/node_modules/tsx/dist/cjs/api/index.d.mts +35 -0
  128. data/.claude/hooks/node_modules/tsx/dist/cjs/api/index.mjs +1 -0
  129. data/.claude/hooks/node_modules/tsx/dist/cjs/index.cjs +1 -0
  130. data/.claude/hooks/node_modules/tsx/dist/cjs/index.mjs +1 -0
  131. data/.claude/hooks/node_modules/tsx/dist/cli.cjs +54 -0
  132. data/.claude/hooks/node_modules/tsx/dist/cli.mjs +55 -0
  133. data/.claude/hooks/node_modules/tsx/dist/client-BQVF1NaW.mjs +1 -0
  134. data/.claude/hooks/node_modules/tsx/dist/client-D6NvIMSC.cjs +1 -0
  135. data/.claude/hooks/node_modules/tsx/dist/esm/api/index.cjs +1 -0
  136. data/.claude/hooks/node_modules/tsx/dist/esm/api/index.d.cts +35 -0
  137. data/.claude/hooks/node_modules/tsx/dist/esm/api/index.d.mts +35 -0
  138. data/.claude/hooks/node_modules/tsx/dist/esm/api/index.mjs +1 -0
  139. data/.claude/hooks/node_modules/tsx/dist/esm/index.cjs +2 -0
  140. data/.claude/hooks/node_modules/tsx/dist/esm/index.mjs +2 -0
  141. data/.claude/hooks/node_modules/tsx/dist/get-pipe-path-BHW2eJdv.mjs +1 -0
  142. data/.claude/hooks/node_modules/tsx/dist/get-pipe-path-BoR10qr8.cjs +1 -0
  143. data/.claude/hooks/node_modules/tsx/dist/index-7AaEi15b.mjs +14 -0
  144. data/.claude/hooks/node_modules/tsx/dist/index-BWFBUo6r.cjs +1 -0
  145. data/.claude/hooks/node_modules/tsx/dist/index-gbaejti9.mjs +1 -0
  146. data/.claude/hooks/node_modules/tsx/dist/index-gckBtVBf.cjs +14 -0
  147. data/.claude/hooks/node_modules/tsx/dist/lexer-DQCqS3nf.mjs +3 -0
  148. data/.claude/hooks/node_modules/tsx/dist/lexer-DgIbo0BU.cjs +3 -0
  149. data/.claude/hooks/node_modules/tsx/dist/loader.cjs +1 -0
  150. data/.claude/hooks/node_modules/tsx/dist/loader.mjs +1 -0
  151. data/.claude/hooks/node_modules/tsx/dist/node-features-_8ZFwP_x.mjs +1 -0
  152. data/.claude/hooks/node_modules/tsx/dist/node-features-roYmp9jK.cjs +1 -0
  153. data/.claude/hooks/node_modules/tsx/dist/package-CeBgXWuR.mjs +1 -0
  154. data/.claude/hooks/node_modules/tsx/dist/package-Dxt5kIHw.cjs +1 -0
  155. data/.claude/hooks/node_modules/tsx/dist/patch-repl.cjs +1 -0
  156. data/.claude/hooks/node_modules/tsx/dist/patch-repl.mjs +1 -0
  157. data/.claude/hooks/node_modules/tsx/dist/preflight.cjs +1 -0
  158. data/.claude/hooks/node_modules/tsx/dist/preflight.mjs +1 -0
  159. data/.claude/hooks/node_modules/tsx/dist/register-2sWVXuRQ.cjs +1 -0
  160. data/.claude/hooks/node_modules/tsx/dist/register-B7jrtLTO.mjs +1 -0
  161. data/.claude/hooks/node_modules/tsx/dist/register-CFH5oNdT.mjs +4 -0
  162. data/.claude/hooks/node_modules/tsx/dist/register-D46fvsV_.cjs +4 -0
  163. data/.claude/hooks/node_modules/tsx/dist/repl.cjs +3 -0
  164. data/.claude/hooks/node_modules/tsx/dist/repl.mjs +3 -0
  165. data/.claude/hooks/node_modules/tsx/dist/require-D4F1Lv60.cjs +1 -0
  166. data/.claude/hooks/node_modules/tsx/dist/require-DQxpCAr4.mjs +1 -0
  167. data/.claude/hooks/node_modules/tsx/dist/suppress-warnings.cjs +1 -0
  168. data/.claude/hooks/node_modules/tsx/dist/suppress-warnings.mjs +1 -0
  169. data/.claude/hooks/node_modules/tsx/dist/temporary-directory-B83uKxJF.cjs +1 -0
  170. data/.claude/hooks/node_modules/tsx/dist/temporary-directory-CwHp0_NW.mjs +1 -0
  171. data/.claude/hooks/node_modules/tsx/dist/types-Cxp8y2TL.d.ts +5 -0
  172. data/.claude/hooks/node_modules/tsx/package.json +68 -0
  173. data/.claude/hooks/node_modules/typescript/LICENSE.txt +55 -0
  174. data/.claude/hooks/node_modules/typescript/README.md +50 -0
  175. data/.claude/hooks/node_modules/typescript/SECURITY.md +41 -0
  176. data/.claude/hooks/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
  177. data/.claude/hooks/node_modules/typescript/bin/tsc +2 -0
  178. data/.claude/hooks/node_modules/typescript/bin/tsserver +2 -0
  179. data/.claude/hooks/node_modules/typescript/lib/_tsc.js +133818 -0
  180. data/.claude/hooks/node_modules/typescript/lib/_tsserver.js +659 -0
  181. data/.claude/hooks/node_modules/typescript/lib/_typingsInstaller.js +222 -0
  182. data/.claude/hooks/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
  183. data/.claude/hooks/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
  184. data/.claude/hooks/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
  185. data/.claude/hooks/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
  186. data/.claude/hooks/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
  187. data/.claude/hooks/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
  188. data/.claude/hooks/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
  189. data/.claude/hooks/node_modules/typescript/lib/lib.d.ts +22 -0
  190. data/.claude/hooks/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
  191. data/.claude/hooks/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
  192. data/.claude/hooks/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
  193. data/.claude/hooks/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
  194. data/.claude/hooks/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
  195. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
  196. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
  197. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
  198. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
  199. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
  200. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
  201. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
  202. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
  203. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
  204. data/.claude/hooks/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
  205. data/.claude/hooks/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
  206. data/.claude/hooks/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
  207. data/.claude/hooks/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
  208. data/.claude/hooks/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
  209. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
  210. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
  211. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
  212. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
  213. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
  214. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
  215. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
  216. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
  217. data/.claude/hooks/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
  218. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
  219. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
  220. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
  221. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
  222. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
  223. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
  224. data/.claude/hooks/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
  225. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
  226. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
  227. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
  228. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
  229. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
  230. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
  231. data/.claude/hooks/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
  232. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
  233. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
  234. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
  235. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
  236. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
  237. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
  238. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
  239. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
  240. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
  241. data/.claude/hooks/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
  242. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
  243. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
  244. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
  245. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
  246. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
  247. data/.claude/hooks/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
  248. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
  249. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
  250. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
  251. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
  252. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
  253. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
  254. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
  255. data/.claude/hooks/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
  256. data/.claude/hooks/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
  257. data/.claude/hooks/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
  258. data/.claude/hooks/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
  259. data/.claude/hooks/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
  260. data/.claude/hooks/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
  261. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
  262. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
  263. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
  264. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
  265. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
  266. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
  267. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
  268. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
  269. data/.claude/hooks/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
  270. data/.claude/hooks/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
  271. data/.claude/hooks/node_modules/typescript/lib/lib.es6.d.ts +23 -0
  272. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
  273. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
  274. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
  275. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
  276. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
  277. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
  278. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
  279. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
  280. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
  281. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
  282. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
  283. data/.claude/hooks/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
  284. data/.claude/hooks/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
  285. data/.claude/hooks/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
  286. data/.claude/hooks/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
  287. data/.claude/hooks/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
  288. data/.claude/hooks/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
  289. data/.claude/hooks/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
  290. data/.claude/hooks/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
  291. data/.claude/hooks/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
  292. data/.claude/hooks/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
  293. data/.claude/hooks/node_modules/typescript/lib/tsc.js +8 -0
  294. data/.claude/hooks/node_modules/typescript/lib/tsserver.js +8 -0
  295. data/.claude/hooks/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
  296. data/.claude/hooks/node_modules/typescript/lib/tsserverlibrary.js +21 -0
  297. data/.claude/hooks/node_modules/typescript/lib/typesMap.json +497 -0
  298. data/.claude/hooks/node_modules/typescript/lib/typescript.d.ts +11437 -0
  299. data/.claude/hooks/node_modules/typescript/lib/typescript.js +200276 -0
  300. data/.claude/hooks/node_modules/typescript/lib/typingsInstaller.js +8 -0
  301. data/.claude/hooks/node_modules/typescript/lib/watchGuard.js +53 -0
  302. data/.claude/hooks/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
  303. data/.claude/hooks/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
  304. data/.claude/hooks/node_modules/typescript/package.json +120 -0
  305. data/.claude/hooks/node_modules/undici-types/LICENSE +21 -0
  306. data/.claude/hooks/node_modules/undici-types/README.md +6 -0
  307. data/.claude/hooks/node_modules/undici-types/agent.d.ts +32 -0
  308. data/.claude/hooks/node_modules/undici-types/api.d.ts +43 -0
  309. data/.claude/hooks/node_modules/undici-types/balanced-pool.d.ts +29 -0
  310. data/.claude/hooks/node_modules/undici-types/cache-interceptor.d.ts +172 -0
  311. data/.claude/hooks/node_modules/undici-types/cache.d.ts +36 -0
  312. data/.claude/hooks/node_modules/undici-types/client-stats.d.ts +15 -0
  313. data/.claude/hooks/node_modules/undici-types/client.d.ts +108 -0
  314. data/.claude/hooks/node_modules/undici-types/connector.d.ts +34 -0
  315. data/.claude/hooks/node_modules/undici-types/content-type.d.ts +21 -0
  316. data/.claude/hooks/node_modules/undici-types/cookies.d.ts +30 -0
  317. data/.claude/hooks/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  318. data/.claude/hooks/node_modules/undici-types/dispatcher.d.ts +276 -0
  319. data/.claude/hooks/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  320. data/.claude/hooks/node_modules/undici-types/errors.d.ts +161 -0
  321. data/.claude/hooks/node_modules/undici-types/eventsource.d.ts +66 -0
  322. data/.claude/hooks/node_modules/undici-types/fetch.d.ts +211 -0
  323. data/.claude/hooks/node_modules/undici-types/formdata.d.ts +108 -0
  324. data/.claude/hooks/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  325. data/.claude/hooks/node_modules/undici-types/global-origin.d.ts +7 -0
  326. data/.claude/hooks/node_modules/undici-types/h2c-client.d.ts +73 -0
  327. data/.claude/hooks/node_modules/undici-types/handlers.d.ts +15 -0
  328. data/.claude/hooks/node_modules/undici-types/header.d.ts +160 -0
  329. data/.claude/hooks/node_modules/undici-types/index.d.ts +80 -0
  330. data/.claude/hooks/node_modules/undici-types/interceptors.d.ts +39 -0
  331. data/.claude/hooks/node_modules/undici-types/mock-agent.d.ts +68 -0
  332. data/.claude/hooks/node_modules/undici-types/mock-call-history.d.ts +111 -0
  333. data/.claude/hooks/node_modules/undici-types/mock-client.d.ts +27 -0
  334. data/.claude/hooks/node_modules/undici-types/mock-errors.d.ts +12 -0
  335. data/.claude/hooks/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  336. data/.claude/hooks/node_modules/undici-types/mock-pool.d.ts +27 -0
  337. data/.claude/hooks/node_modules/undici-types/package.json +55 -0
  338. data/.claude/hooks/node_modules/undici-types/patch.d.ts +29 -0
  339. data/.claude/hooks/node_modules/undici-types/pool-stats.d.ts +19 -0
  340. data/.claude/hooks/node_modules/undici-types/pool.d.ts +41 -0
  341. data/.claude/hooks/node_modules/undici-types/proxy-agent.d.ts +29 -0
  342. data/.claude/hooks/node_modules/undici-types/readable.d.ts +68 -0
  343. data/.claude/hooks/node_modules/undici-types/retry-agent.d.ts +8 -0
  344. data/.claude/hooks/node_modules/undici-types/retry-handler.d.ts +125 -0
  345. data/.claude/hooks/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  346. data/.claude/hooks/node_modules/undici-types/util.d.ts +18 -0
  347. data/.claude/hooks/node_modules/undici-types/utility.d.ts +7 -0
  348. data/.claude/hooks/node_modules/undici-types/webidl.d.ts +341 -0
  349. data/.claude/hooks/node_modules/undici-types/websocket.d.ts +186 -0
  350. data/.claude/hooks/package-lock.json +562 -0
  351. data/.claude/hooks/package.json +19 -0
  352. data/.claude/hooks/skill-activation-prompt.sh +11 -0
  353. data/.claude/hooks/skill-activation-prompt.ts +185 -0
  354. data/.claude/hooks/tsconfig.json +12 -0
  355. data/.claude/settings.json +33 -0
  356. data/.claude/skills/README.md +29 -0
  357. data/.claude/skills/ruby-gem-development/SKILL.md +293 -0
  358. data/.claude/skills/skill-rules.json +117 -0
  359. data/.claude/skills/thor-cli-development/SKILL.md +431 -0
  360. data/CHANGELOG.md +7 -0
  361. data/Gemfile.lock +3 -1
  362. data/completions/{_aictl → _langop} +37 -37
  363. data/completions/{aictl.bash → langop.bash} +16 -16
  364. data/completions/langop.fish +114 -0
  365. data/components/agent/Gemfile +1 -1
  366. data/components/tool/Gemfile +1 -1
  367. data/docs/README.md +10 -10
  368. data/docs/agent-internals.md +1 -1
  369. data/docs/cheat-sheet.md +76 -76
  370. data/docs/cli-reference.md +71 -71
  371. data/docs/how-agents-work.md +1 -1
  372. data/docs/installation.md +30 -30
  373. data/docs/quickstart.md +30 -30
  374. data/docs/using-tools.md +11 -11
  375. data/docs/webhooks.md +6 -6
  376. data/examples/ux_helpers_demo.rb +4 -4
  377. data/lib/language_operator/agent/task_executor.rb +0 -37
  378. data/lib/language_operator/agent/web_server.rb +311 -323
  379. data/lib/language_operator/cli/commands/agent/base.rb +16 -15
  380. data/lib/language_operator/cli/commands/agent/code_operations.rb +6 -6
  381. data/lib/language_operator/cli/commands/agent/helpers/synthesis_watcher.rb +1 -1
  382. data/lib/language_operator/cli/commands/agent/lifecycle.rb +2 -2
  383. data/lib/language_operator/cli/commands/agent/logs.rb +2 -2
  384. data/lib/language_operator/cli/commands/agent/workspace.rb +8 -8
  385. data/lib/language_operator/cli/commands/cluster.rb +172 -158
  386. data/lib/language_operator/cli/commands/install.rb +878 -81
  387. data/lib/language_operator/cli/commands/model/base.rb +7 -6
  388. data/lib/language_operator/cli/commands/organization.rb +61 -0
  389. data/lib/language_operator/cli/commands/persona.rb +10 -8
  390. data/lib/language_operator/cli/commands/status.rb +83 -13
  391. data/lib/language_operator/cli/commands/system/exec.rb +10 -10
  392. data/lib/language_operator/cli/commands/system/schema.rb +6 -6
  393. data/lib/language_operator/cli/commands/system/synthesis_template.rb +6 -6
  394. data/lib/language_operator/cli/commands/system/synthesize.rb +14 -14
  395. data/lib/language_operator/cli/commands/system/validate_template.rb +4 -4
  396. data/lib/language_operator/cli/commands/tool/base.rb +1 -1
  397. data/lib/language_operator/cli/commands/tool/install.rb +2 -2
  398. data/lib/language_operator/cli/commands/tool/search.rb +3 -3
  399. data/lib/language_operator/cli/commands/ui.rb +173 -0
  400. data/lib/language_operator/cli/commands/use.rb +80 -9
  401. data/lib/language_operator/cli/errors/suggestions.rb +21 -21
  402. data/lib/language_operator/cli/formatters/progress_formatter.rb +2 -1
  403. data/lib/language_operator/cli/formatters/table_formatter.rb +21 -1
  404. data/lib/language_operator/cli/helpers/cluster_validator.rb +2 -2
  405. data/lib/language_operator/cli/helpers/health_checker.rb +263 -0
  406. data/lib/language_operator/cli/helpers/kubeconfig_validator.rb +3 -3
  407. data/lib/language_operator/cli/helpers/ux_helper.rb +4 -3
  408. data/lib/language_operator/cli/main.rb +30 -21
  409. data/lib/language_operator/cli/wizards/model_wizard.rb +7 -5
  410. data/lib/language_operator/config/cluster_config.rb +3 -3
  411. data/lib/language_operator/constants/kubernetes_labels.rb +1 -1
  412. data/lib/language_operator/kubernetes/client.rb +53 -109
  413. data/lib/language_operator/kubernetes/resource_builder.rb +46 -14
  414. data/lib/language_operator/templates/schema/agent_dsl_openapi.yaml +1 -1
  415. data/lib/language_operator/templates/schema/agent_dsl_schema.json +1 -1
  416. data/lib/language_operator/utils/org_context.rb +100 -0
  417. data/lib/language_operator/version.rb +1 -1
  418. data/synth/001/Makefile +1 -1
  419. data/synth/002/Makefile +1 -1
  420. data/synth/003/Makefile +1 -1
  421. data/synth/004/Makefile +1 -1
  422. metadata +384 -11
  423. data/completions/aictl.fish +0 -114
  424. data/lib/language_operator/agent/event_config.rb +0 -172
  425. data/lib/language_operator/cli/commands/quickstart.rb +0 -22
  426. data/lib/language_operator/cli/wizards/quickstart_wizard.rb +0 -561
  427. /data/bin/{aictl → langop} +0 -0
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base_command'
4
+ require_relative '../formatters/progress_formatter'
5
+ require_relative '../../kubernetes/client'
6
+ require_relative '../helpers/cluster_validator'
7
+
8
+ module LanguageOperator
9
+ module CLI
10
+ module Commands
11
+ # UI command to open the Language Operator dashboard in browser
12
+ class Ui < BaseCommand
13
+ DEFAULT_PORT = 8080
14
+ DEFAULT_SERVICE_NAME = 'language-operator-dashboard'
15
+ DEFAULT_SERVICE_PORT = 3000
16
+
17
+ desc 'ui', 'Open the Language Operator dashboard in your browser'
18
+ long_desc <<-DESC
19
+ Opens the Language Operator dashboard in your default browser.
20
+
21
+ This command will:
22
+ 1. Set up a port forward to the dashboard service
23
+ 2. Open your default browser to the dashboard URL
24
+ 3. Keep the port forward running until you stop it (Ctrl+C)
25
+
26
+ The dashboard provides a web interface for managing agents, tools, models, and monitoring
27
+ the Language Operator cluster.
28
+
29
+ Examples:
30
+ # Open dashboard with default settings
31
+ langop ui
32
+
33
+ # Use a specific local port
34
+ langop ui --port 9090
35
+
36
+ # Connect to a specific service
37
+ langop ui --service my-dashboard --service-port 8080
38
+ DESC
39
+ option :port, type: :numeric, default: DEFAULT_PORT, desc: "Local port to forward to (default: #{DEFAULT_PORT})"
40
+ option :service, type: :string, default: DEFAULT_SERVICE_NAME, desc: "Service name to connect to (default: #{DEFAULT_SERVICE_NAME})"
41
+ option :service_port, type: :numeric, default: DEFAULT_SERVICE_PORT, desc: "Service port to forward from (default: #{DEFAULT_SERVICE_PORT})"
42
+ option :namespace, type: :string, default: 'language-operator', desc: 'Namespace to connect to (default: language-operator)'
43
+ option :no_open, type: :boolean, default: false, desc: 'Do not automatically open browser'
44
+ def ui
45
+ handle_command_error('open dashboard') do
46
+
47
+ logo(title: 'open dashboard')
48
+
49
+ # Check if operator is installed and get service info
50
+ validate_operator_installation
51
+
52
+ port = options[:port]
53
+ service_name = options[:service]
54
+ service_port = options[:service_port]
55
+
56
+ # Start port forward in background
57
+ port_forward_pid = start_port_forward(service_name, service_port, port)
58
+
59
+ # Wait a moment for port forward to establish
60
+ sleep 2
61
+
62
+ # Open browser unless --no-open
63
+ open_browser("http://localhost:#{port}") unless options[:no_open]
64
+
65
+ puts
66
+ puts 'If your browser was not opened automatically, your dashboard is at:'
67
+ puts pastel.white.bold("http://localhost:#{port}")
68
+ puts
69
+ puts 'Press Ctrl+C to stop the port forward and exit'
70
+
71
+ # Handle graceful shutdown
72
+ trap('INT') do
73
+ puts "\nStopping port forward..."
74
+ stop_port_forward(port_forward_pid)
75
+ puts 'Dashboard closed.'
76
+ exit 0
77
+ end
78
+
79
+ # Keep the process running
80
+ loop do
81
+ sleep 1
82
+ end
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def validate_operator_installation
89
+ namespace = options[:namespace]
90
+
91
+ # Use current kubectl context directly
92
+ k8s = Kubernetes::Client.new
93
+
94
+ # Check if the operator namespace exists
95
+ unless k8s.namespace_exists?(namespace)
96
+ Formatters::ProgressFormatter.error("Namespace '#{namespace}' not found")
97
+ puts
98
+ puts 'The Language Operator does not appear to be installed.'
99
+ puts 'Install it with: langop install'
100
+ exit 1
101
+ end
102
+
103
+ # Check if the dashboard service exists
104
+ begin
105
+ k8s.get_resource('Service', options[:service], namespace)
106
+ rescue StandardError
107
+ Formatters::ProgressFormatter.error("Dashboard service '#{options[:service]}' not found")
108
+ puts
109
+ puts 'The dashboard service is not available. This may mean:'
110
+ puts ' - The Language Operator is not fully deployed'
111
+ puts ' - The dashboard is disabled in your installation'
112
+ puts ' - You specified an incorrect service name'
113
+ puts
114
+ puts 'Check your installation with: langop status'
115
+ exit 1
116
+ end
117
+ rescue StandardError => e
118
+ Formatters::ProgressFormatter.error("Failed to validate installation: #{e.message}")
119
+ exit 1
120
+ end
121
+
122
+ def start_port_forward(service_name, service_port, local_port)
123
+ namespace = options[:namespace]
124
+ cmd = "kubectl port-forward -n #{namespace} service/#{service_name} #{local_port}:#{service_port}"
125
+
126
+ Formatters::ProgressFormatter.with_spinner('Setting up port forward') do
127
+ # Start kubectl port-forward in background
128
+ pid = Process.spawn(cmd, out: '/dev/null', err: '/dev/null')
129
+ Process.detach(pid)
130
+ pid
131
+ end
132
+ end
133
+
134
+ def stop_port_forward(pid)
135
+ Process.kill('TERM', pid)
136
+ # Give it a moment to clean up
137
+ sleep 1
138
+ # Force kill if still running
139
+ Process.kill('KILL', pid) if process_running?(pid)
140
+ rescue Errno::ESRCH
141
+ # Process already dead, that's fine
142
+ end
143
+
144
+ def process_running?(pid)
145
+ Process.getpgid(pid)
146
+ true
147
+ rescue Errno::ESRCH
148
+ false
149
+ end
150
+
151
+ def open_browser(url)
152
+ # Detect platform and open browser accordingly
153
+ case RbConfig::CONFIG['host_os']
154
+ when /mswin|mingw|cygwin/
155
+ system("start #{url}")
156
+ when /darwin/
157
+ system("open #{url}")
158
+ when /linux|bsd/
159
+ # Try common Linux browsers
160
+ browsers = %w[xdg-open google-chrome firefox chromium-browser]
161
+ browser_found = browsers.any? do |browser|
162
+ system("which #{browser} > /dev/null 2>&1") && system("#{browser} #{url} > /dev/null 2>&1 &")
163
+ end
164
+
165
+ puts "Could not detect a browser to open. Please manually visit: #{url}" unless browser_found
166
+ else
167
+ puts "Unknown platform. Please manually visit: #{url}"
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
@@ -4,6 +4,7 @@ require_relative '../base_command'
4
4
  require_relative '../formatters/progress_formatter'
5
5
  require_relative '../../config/cluster_config'
6
6
  require_relative '../helpers/cluster_validator'
7
+ require_relative '../../utils/secure_path'
7
8
 
8
9
  module LanguageOperator
9
10
  module CLI
@@ -19,18 +20,25 @@ module LanguageOperator
19
20
 
20
21
  def switch(cluster_name)
21
22
  handle_command_error('switch cluster') do
22
- unless Config::ClusterConfig.cluster_exists?(cluster_name)
23
- Formatters::ProgressFormatter.error("Cluster '#{cluster_name}' not found")
24
- puts "\nAvailable clusters:"
25
- Config::ClusterConfig.list_clusters.each do |cluster|
26
- puts " - #{cluster[:name]}"
23
+ # First check if cluster exists in local config
24
+ if Config::ClusterConfig.cluster_exists?(cluster_name)
25
+ Config::ClusterConfig.set_current_cluster(cluster_name)
26
+ cluster = Config::ClusterConfig.get_cluster(cluster_name)
27
+ else
28
+ # If not in local config, check if it exists in Kubernetes
29
+ k8s_cluster = find_cluster_in_kubernetes(cluster_name)
30
+
31
+ if k8s_cluster
32
+ # Auto-import the cluster to local config with current kubectl context
33
+ import_cluster_to_config(k8s_cluster)
34
+ Config::ClusterConfig.set_current_cluster(cluster_name)
35
+ cluster = Config::ClusterConfig.get_cluster(cluster_name)
36
+ else
37
+ show_cluster_not_found_error(cluster_name)
38
+ exit 1
27
39
  end
28
- exit 1
29
40
  end
30
41
 
31
- Config::ClusterConfig.set_current_cluster(cluster_name)
32
- cluster = Config::ClusterConfig.get_cluster(cluster_name)
33
-
34
42
  Formatters::ProgressFormatter.success("Switched to cluster '#{cluster_name}'")
35
43
 
36
44
  # Get cluster details from Kubernetes for complete information
@@ -61,6 +69,69 @@ module LanguageOperator
61
69
  end
62
70
  end
63
71
  end
72
+
73
+ private
74
+
75
+ def find_cluster_in_kubernetes(cluster_name)
76
+ require_relative '../../kubernetes/client'
77
+
78
+ k8s = Kubernetes::Client.new
79
+ language_clusters = k8s.list_resources('LanguageCluster', namespace: nil)
80
+
81
+ language_clusters.find { |cluster| cluster.dig('metadata', 'name') == cluster_name }
82
+ rescue StandardError => e
83
+ # If we can't query Kubernetes, return nil
84
+ warn "Warning: Could not query Kubernetes: #{e.message}" if ENV['DEBUG']
85
+ nil
86
+ end
87
+
88
+ def import_cluster_to_config(k8s_cluster)
89
+ name = k8s_cluster.dig('metadata', 'name')
90
+ namespace = k8s_cluster.dig('metadata', 'namespace')
91
+
92
+ # Use current kubectl context and config
93
+ kubeconfig = ENV.fetch('KUBECONFIG', LanguageOperator::Utils::SecurePath.expand_home_path('.kube/config'))
94
+
95
+ require_relative '../../kubernetes/client'
96
+ k8s_client = Kubernetes::Client.new
97
+ current_context = k8s_client.current_context
98
+
99
+
100
+ Config::ClusterConfig.add_cluster(
101
+ name,
102
+ namespace,
103
+ kubeconfig,
104
+ current_context
105
+ )
106
+ end
107
+
108
+ def show_cluster_not_found_error(cluster_name)
109
+ Formatters::ProgressFormatter.error("Cluster '#{cluster_name}' not found")
110
+
111
+ # Show clusters from both local config and Kubernetes
112
+ local_clusters = Config::ClusterConfig.list_clusters
113
+
114
+ require_relative '../../kubernetes/client'
115
+ begin
116
+ k8s = Kubernetes::Client.new
117
+ k8s_clusters = k8s.list_resources('LanguageCluster', namespace: nil)
118
+ k8s_cluster_names = k8s_clusters.map { |c| c.dig('metadata', 'name') }
119
+ rescue StandardError
120
+ k8s_cluster_names = []
121
+ end
122
+
123
+ all_cluster_names = (local_clusters.map { |c| c[:name] } + k8s_cluster_names).uniq
124
+
125
+ if all_cluster_names.any?
126
+ puts "\nAvailable clusters:"
127
+ all_cluster_names.each do |name|
128
+ puts " - #{name}"
129
+ end
130
+ else
131
+ puts "\nNo clusters found. Create one with:"
132
+ puts " langop cluster create <name>"
133
+ end
134
+ end
64
135
  end
65
136
  end
66
137
  end
@@ -50,9 +50,9 @@ module LanguageOperator
50
50
 
51
51
  def agent_not_found_suggestions(context)
52
52
  suggestions = []
53
- suggestions << "List all agents: #{pastel.dim('aictl agent list')}"
54
- suggestions << "Create a new agent: #{pastel.dim('aictl agent create "description"')}"
55
- suggestions << "Use the wizard: #{pastel.dim('aictl agent create --wizard')}" if context[:suggest_wizard]
53
+ suggestions << "List all agents: #{pastel.dim('langop agent list')}"
54
+ suggestions << "Create a new agent: #{pastel.dim('langop agent create "description"')}"
55
+ suggestions << "Use the wizard: #{pastel.dim('langop agent create --wizard')}" if context[:suggest_wizard]
56
56
  suggestions
57
57
  end
58
58
 
@@ -61,45 +61,45 @@ module LanguageOperator
61
61
  tool_name = context[:tool_name]
62
62
 
63
63
  if tool_name
64
- suggestions << "Install from registry: #{pastel.dim("aictl tool install #{tool_name}")}"
65
- suggestions << "Search for tools: #{pastel.dim('aictl tool search')}"
64
+ suggestions << "Install from registry: #{pastel.dim("langop tool install #{tool_name}")}"
65
+ suggestions << "Search for tools: #{pastel.dim('langop tool search')}"
66
66
  end
67
67
 
68
- suggestions << "List installed tools: #{pastel.dim('aictl tool list')}"
68
+ suggestions << "List installed tools: #{pastel.dim('langop tool list')}"
69
69
  suggestions
70
70
  end
71
71
 
72
72
  def model_not_found_suggestions(_context)
73
73
  suggestions = []
74
- suggestions << "List all models: #{pastel.dim('aictl model list')}"
75
- suggestions << "Create a new model: #{pastel.dim('aictl model create <name> --provider <provider>')}"
74
+ suggestions << "List all models: #{pastel.dim('langop model list')}"
75
+ suggestions << "Create a new model: #{pastel.dim('langop model create <name> --provider <provider>')}"
76
76
  suggestions
77
77
  end
78
78
 
79
79
  def persona_not_found_suggestions(_context)
80
80
  suggestions = []
81
- suggestions << "List all personas: #{pastel.dim('aictl persona list')}"
82
- suggestions << "Create a new persona: #{pastel.dim('aictl persona create <name>')}"
81
+ suggestions << "List all personas: #{pastel.dim('langop persona list')}"
82
+ suggestions << "Create a new persona: #{pastel.dim('langop persona create <name>')}"
83
83
  suggestions
84
84
  end
85
85
 
86
86
  def cluster_not_found_suggestions(_context)
87
87
  suggestions = []
88
- suggestions << "List available clusters: #{pastel.dim('aictl cluster list')}"
89
- suggestions << "Create a new cluster: #{pastel.dim('aictl cluster create <name>')}"
88
+ suggestions << "List available clusters: #{pastel.dim('langop cluster list')}"
89
+ suggestions << "Create a new cluster: #{pastel.dim('langop cluster create <name>')}"
90
90
  suggestions
91
91
  end
92
92
 
93
93
  def no_cluster_selected_suggestions
94
94
  [
95
95
  'Create a new cluster:',
96
- " #{pastel.dim('aictl cluster create my-cluster')}",
96
+ " #{pastel.dim('langop cluster create my-cluster')}",
97
97
  '',
98
98
  'Or select an existing cluster:',
99
- " #{pastel.dim('aictl use my-cluster')}",
99
+ " #{pastel.dim('langop use my-cluster')}",
100
100
  '',
101
101
  'List available clusters:',
102
- " #{pastel.dim('aictl cluster list')}"
102
+ " #{pastel.dim('langop cluster list')}"
103
103
  ]
104
104
  end
105
105
 
@@ -109,20 +109,20 @@ module LanguageOperator
109
109
 
110
110
  if cluster
111
111
  suggestions << "Create a model in cluster '#{cluster}':"
112
- suggestions << " #{pastel.dim('aictl model create <name> --provider anthropic --model claude-3-5-sonnet')}"
112
+ suggestions << " #{pastel.dim('langop model create <name> --provider anthropic --model claude-3-5-sonnet')}"
113
113
  else
114
- suggestions << "Create a model: #{pastel.dim('aictl model create <name> --provider <provider>')}"
114
+ suggestions << "Create a model: #{pastel.dim('langop model create <name> --provider <provider>')}"
115
115
  end
116
116
 
117
117
  suggestions << ''
118
- suggestions << "List available models: #{pastel.dim('aictl model list')}"
118
+ suggestions << "List available models: #{pastel.dim('langop model list')}"
119
119
  suggestions
120
120
  end
121
121
 
122
122
  def synthesis_failed_suggestions
123
123
  [
124
124
  'The description may be too vague. Try the interactive wizard:',
125
- " #{pastel.dim('aictl agent create --wizard')}",
125
+ " #{pastel.dim('langop agent create --wizard')}",
126
126
  '',
127
127
  'Or provide a more detailed description with:',
128
128
  ' • What the agent should do specifically',
@@ -143,8 +143,8 @@ module LanguageOperator
143
143
  suggestions = []
144
144
 
145
145
  if resource_name
146
- suggestions << "View existing #{resource_type}: #{pastel.dim("aictl #{command_for_resource(resource_type)} inspect #{resource_name}")}"
147
- suggestions << "Delete and recreate: #{pastel.dim("aictl #{command_for_resource(resource_type)} delete #{resource_name}")}"
146
+ suggestions << "View existing #{resource_type}: #{pastel.dim("langop #{command_for_resource(resource_type)} inspect #{resource_name}")}"
147
+ suggestions << "Delete and recreate: #{pastel.dim("langop #{command_for_resource(resource_type)} delete #{resource_name}")}"
148
148
  end
149
149
 
150
150
  suggestions << 'Choose a different name'
@@ -28,7 +28,8 @@ module LanguageOperator
28
28
  end
29
29
 
30
30
  def success(message)
31
- puts LogStyle.format(:success, message, pastel)
31
+ icon = LogStyle.styled_icon(:success, pastel)
32
+ puts "#{icon} #{message}"
32
33
  end
33
34
 
34
35
  def error(message)
@@ -14,7 +14,7 @@ module LanguageOperator
14
14
  def clusters(clusters)
15
15
  return ProgressFormatter.info('No clusters found') if clusters.empty?
16
16
 
17
- headers = ['', 'NAME', 'NAMESPACE', 'STATUS', 'DOMAIN']
17
+ headers = ['', 'NAME', 'NAMESPACE', 'ORGANIZATION', 'STATUS', 'DOMAIN']
18
18
  rows = clusters.map do |cluster|
19
19
  # Extract asterisk for selected cluster
20
20
  name = cluster[:name].to_s.gsub(' *', '')
@@ -33,10 +33,14 @@ module LanguageOperator
33
33
  cluster[:domain]
34
34
  end
35
35
 
36
+ # Format organization display
37
+ org_display = cluster[:organization] || 'legacy'
38
+
36
39
  [
37
40
  StatusFormatter.dot(cluster[:status] || 'Unknown'),
38
41
  formatted_name,
39
42
  cluster[:namespace],
43
+ org_display,
40
44
  cluster[:status] || 'Unknown',
41
45
  domain_display
42
46
  ]
@@ -160,6 +164,22 @@ module LanguageOperator
160
164
  puts '* = current cluster'
161
165
  end
162
166
 
167
+ def organizations(organizations)
168
+ return ProgressFormatter.info('No organizations found') if organizations.empty?
169
+
170
+ headers = ['NAMESPACE', 'ORGANIZATION ID', 'PLAN', 'CREATED']
171
+ rows = organizations.map do |org|
172
+ [
173
+ org[:namespace],
174
+ org[:organization_id],
175
+ org[:plan],
176
+ org[:created]
177
+ ]
178
+ end
179
+
180
+ puts table(headers, rows)
181
+ end
182
+
163
183
  private
164
184
 
165
185
  def truncate(text, length)
@@ -77,9 +77,9 @@ module LanguageOperator
77
77
  puts 'The kubeconfig file for this cluster does not exist.'
78
78
  puts
79
79
  puts 'To fix this issue:'
80
- puts ' 1. Verify the kubeconfig path in ~/.aictl/config.yaml'
80
+ puts ' 1. Verify the kubeconfig path in ~/.langop/config.yaml'
81
81
  puts ' 2. Re-create the cluster configuration:'
82
- puts " aictl cluster create #{cluster_config[:name]}"
82
+ puts " langop cluster create #{cluster_config[:name]}"
83
83
  exit 1
84
84
  end
85
85