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,431 @@
1
+ ---
2
+ name: thor-cli-development
3
+ description: Thor-based CLI development patterns for the aictl command-line interface
4
+ ---
5
+
6
+ # Thor CLI Development Patterns
7
+
8
+ ## Purpose
9
+
10
+ Provides consistent patterns for building the `aictl` CLI using Thor framework, including command structure, argument parsing, output formatting, and user experience patterns.
11
+
12
+ ## When to Use This Skill
13
+
14
+ Automatically activates when:
15
+ - Creating or modifying CLI commands in `lib/language_operator/cli/commands/`
16
+ - Working with Thor command definitions
17
+ - Implementing interactive wizards
18
+ - Adding new subcommands to aictl
19
+ - Working with command-line argument parsing and validation
20
+ - Formatting CLI output (tables, progress, etc.)
21
+
22
+ ## Quick Start
23
+
24
+ ### New Command Checklist
25
+
26
+ - [ ] Create command class in `lib/language_operator/cli/commands/`
27
+ - [ ] Register command in `lib/language_operator/cli/main.rb`
28
+ - [ ] Add comprehensive help text with examples
29
+ - [ ] Implement input validation and error handling
30
+ - [ ] Add progress indicators for long-running operations
31
+ - [ ] Write RSpec tests in `spec/language_operator/cli/commands/`
32
+ - [ ] Update shell completions if needed
33
+
34
+ ### Command Structure Checklist
35
+
36
+ - [ ] Inherit from appropriate base class
37
+ - [ ] Use descriptive `desc` and `long_desc`
38
+ - [ ] Define options with types and defaults
39
+ - [ ] Validate inputs early
40
+ - [ ] Use consistent output formatting
41
+ - [ ] Handle errors gracefully with helpful messages
42
+
43
+ ## Core Principles
44
+
45
+ ### 1. Thor Command Hierarchy
46
+
47
+ ```ruby
48
+ # lib/language_operator/cli/main.rb
49
+ module LanguageOperator::CLI
50
+ class Main < Thor
51
+ desc 'agent SUBCOMMAND ...ARGS', 'Manage agents'
52
+ subcommand 'agent', Commands::Agent
53
+
54
+ desc 'model SUBCOMMAND ...ARGS', 'Manage language models'
55
+ subcommand 'model', Commands::Model
56
+ end
57
+ end
58
+
59
+ # Commands are organized by domain:
60
+ # agent/ - Agent lifecycle management
61
+ # model/ - Language model operations
62
+ # tool/ - Tool management
63
+ # cluster/ - Kubernetes cluster operations
64
+ ```
65
+
66
+ ### 2. Command Class Pattern
67
+
68
+ ```ruby
69
+ module LanguageOperator::CLI::Commands
70
+ class Agent < Thor
71
+ include CLI::Helpers::ClusterContext
72
+ include CLI::Helpers::ValidationHelper
73
+
74
+ desc 'create NAME', 'Create a new agent'
75
+ long_desc <<~DESC
76
+ Create a new autonomous agent with the specified name.
77
+
78
+ The agent will be deployed to the current Kubernetes cluster
79
+ and configured with the specified mode and schedule.
80
+
81
+ Examples:
82
+ aictl agent create my-agent
83
+ aictl agent create scheduler --mode scheduled --schedule "0 */6 * * *"
84
+ DESC
85
+ option :mode, type: :string, default: 'autonomous',
86
+ desc: 'Agent execution mode (autonomous, scheduled, reactive)'
87
+ option :schedule, type: :string,
88
+ desc: 'Cron schedule for scheduled agents'
89
+
90
+ def create(name)
91
+ # 1. Validate inputs
92
+ validate_agent_name!(name)
93
+ validate_cluster_connection!
94
+
95
+ # 2. Interactive wizard if needed
96
+ wizard = Wizards::AgentWizard.new
97
+ config = wizard.run(name, options)
98
+
99
+ # 3. Progress indication
100
+ spinner = TTY::Spinner.new("[:spinner] Creating agent...")
101
+ spinner.auto_spin
102
+
103
+ # 4. Main operation
104
+ builder = Kubernetes::ResourceBuilder.new
105
+ manifest = builder.build_agent(config)
106
+ client = Kubernetes::Client.new
107
+ result = client.apply_resource(manifest)
108
+
109
+ spinner.success
110
+
111
+ # 5. Success output
112
+ say_status(:success, "Agent '#{name}' created", :green)
113
+ display_agent_info(result)
114
+
115
+ rescue LanguageOperator::ValidationError => e
116
+ say_error("Validation failed: #{e.message}")
117
+ exit(1)
118
+ rescue LanguageOperator::NetworkError => e
119
+ say_error("Network error: #{e.message}")
120
+ exit(1)
121
+ end
122
+
123
+ private
124
+
125
+ def validate_agent_name!(name)
126
+ return if name.match?(/\A[a-z0-9-]+\z/)
127
+ raise ValidationError, "Invalid agent name: #{name}. Use lowercase letters, numbers, and hyphens."
128
+ end
129
+
130
+ def display_agent_info(result)
131
+ table = TTY::Table.new(
132
+ header: ['Property', 'Value'],
133
+ rows: [
134
+ ['Name', result.metadata.name],
135
+ ['Mode', result.spec.mode],
136
+ ['Status', result.status&.phase || 'Creating']
137
+ ]
138
+ )
139
+ puts table.render(:ascii)
140
+ end
141
+ end
142
+ end
143
+ ```
144
+
145
+ ### 3. Input Validation Patterns
146
+
147
+ ```ruby
148
+ # Validate required arguments
149
+ def create(name)
150
+ if name.nil? || name.empty?
151
+ say_error("Agent name is required")
152
+ invoke(:help, ['create'])
153
+ exit(1)
154
+ end
155
+ # ... rest of implementation
156
+ end
157
+
158
+ # Validate option combinations
159
+ def deploy(name)
160
+ if options[:mode] == 'scheduled' && options[:schedule].nil?
161
+ say_error("Schedule is required for scheduled agents")
162
+ say("Example: aictl agent deploy #{name} --mode scheduled --schedule '0 */6 * * *'")
163
+ exit(1)
164
+ end
165
+ end
166
+
167
+ # Validate environment dependencies
168
+ def status
169
+ validate_cluster_connection!
170
+ validate_agent_exists!(options[:agent])
171
+ end
172
+ ```
173
+
174
+ ### 4. Output Formatting Standards
175
+
176
+ ```ruby
177
+ # Success messages
178
+ say_status(:success, "Operation completed", :green)
179
+
180
+ # Error messages
181
+ say_error("Something went wrong: #{error.message}")
182
+
183
+ # Info messages
184
+ say_status(:info, "Checking cluster status...", :cyan)
185
+
186
+ # Tables for structured data
187
+ table = TTY::Table.new(
188
+ header: ['Name', 'Status', 'Mode'],
189
+ rows: agents.map { |a| [a.name, a.status, a.mode] }
190
+ )
191
+ puts table.render(:ascii, padding: [0, 1])
192
+
193
+ # Progress indicators
194
+ spinner = TTY::Spinner.new("[:spinner] Processing...")
195
+ spinner.auto_spin
196
+ # ... operation ...
197
+ spinner.success("✓ Done!")
198
+ ```
199
+
200
+ ## Common Patterns
201
+
202
+ ### Pattern 1: Interactive Wizard
203
+
204
+ ```ruby
205
+ module LanguageOperator::CLI::Wizards
206
+ class AgentWizard
207
+ include CLI::Helpers::UserPrompts
208
+
209
+ def run(name, options = {})
210
+ say_header("Agent Creation Wizard")
211
+
212
+ config = AgentConfig.new(name)
213
+
214
+ # Mode selection
215
+ config.mode = options[:mode] || select_mode
216
+
217
+ # Schedule if needed
218
+ if config.mode == 'scheduled'
219
+ config.schedule = options[:schedule] || prompt_for_schedule
220
+ end
221
+
222
+ # Model selection
223
+ config.model = select_model
224
+
225
+ # Confirmation
226
+ display_summary(config)
227
+ return config if yes?("Create agent with these settings?")
228
+
229
+ say("Agent creation cancelled", :yellow)
230
+ exit(0)
231
+ end
232
+
233
+ private
234
+
235
+ def select_mode
236
+ prompt.select(
237
+ "Select execution mode:",
238
+ {
239
+ "Autonomous" => :autonomous,
240
+ "Scheduled" => :scheduled,
241
+ "Reactive" => :reactive
242
+ }
243
+ )
244
+ end
245
+
246
+ def prompt_for_schedule
247
+ prompt.ask(
248
+ "Enter cron schedule:",
249
+ default: "0 */6 * * *",
250
+ validate: ->(input) { CronParser.new(input).valid? }
251
+ )
252
+ end
253
+ end
254
+ end
255
+ ```
256
+
257
+ ### Pattern 2: Error Handling with Context
258
+
259
+ ```ruby
260
+ # Global error handler in base command
261
+ module LanguageOperator::CLI
262
+ class BaseCommand < Thor
263
+ def self.exit_on_failure?
264
+ true
265
+ end
266
+
267
+ private
268
+
269
+ def say_error(message)
270
+ say("ERROR: #{message}", :red)
271
+ end
272
+
273
+ def handle_kubernetes_error(error)
274
+ case error
275
+ when K8s::Error::NotFound
276
+ say_error("Resource not found. Check if the agent exists.")
277
+ say("Run 'aictl agent list' to see available agents.")
278
+ when K8s::Error::Unauthorized
279
+ say_error("Access denied. Check your cluster permissions.")
280
+ say("Run 'aictl cluster status' to verify connection.")
281
+ else
282
+ say_error("Kubernetes error: #{error.message}")
283
+ say("Check cluster connectivity and try again.")
284
+ end
285
+ end
286
+ end
287
+ end
288
+ ```
289
+
290
+ ### Pattern 3: Subcommand Registration
291
+
292
+ ```ruby
293
+ # lib/language_operator/cli/main.rb
294
+ module LanguageOperator::CLI
295
+ class Main < Thor
296
+ desc 'version', 'Show version information'
297
+ def version
298
+ say("aictl version #{LanguageOperator::VERSION}")
299
+ end
300
+
301
+ desc 'status', 'Show cluster and agent status'
302
+ def status
303
+ Commands::Status.new.invoke(:all)
304
+ end
305
+
306
+ # Subcommands
307
+ register(Commands::Agent, 'agent', 'agent SUBCOMMAND', 'Manage agents')
308
+ register(Commands::Model, 'model', 'model SUBCOMMAND', 'Manage models')
309
+ register(Commands::Tool, 'tool', 'tool SUBCOMMAND', 'Manage tools')
310
+ register(Commands::Cluster, 'cluster', 'cluster SUBCOMMAND', 'Manage clusters')
311
+ end
312
+ end
313
+ ```
314
+
315
+ ### Pattern 4: Configuration and Context
316
+
317
+ ```ruby
318
+ module LanguageOperator::CLI::Helpers
319
+ module ClusterContext
320
+ def current_cluster
321
+ @current_cluster ||= begin
322
+ context = Kubernetes::Client.new.current_context
323
+ ClusterConfig.new(context)
324
+ end
325
+ end
326
+
327
+ def validate_cluster_connection!
328
+ current_cluster.validate_connection!
329
+ rescue LanguageOperator::NetworkError => e
330
+ say_error("Cannot connect to cluster: #{e.message}")
331
+ say("Check your kubeconfig and cluster status.")
332
+ exit(1)
333
+ end
334
+
335
+ def with_cluster_context(&block)
336
+ say_status(:info, "Using cluster: #{current_cluster.name}", :cyan)
337
+ yield(current_cluster)
338
+ end
339
+ end
340
+ end
341
+ ```
342
+
343
+ ## Resource Files
344
+
345
+ For detailed information, see:
346
+ - [Command Templates](resources/command-templates.md) - Boilerplate for new commands
347
+ - [Testing CLIs](resources/testing-patterns.md) - RSpec patterns for CLI testing
348
+ - [User Experience](resources/ux-patterns.md) - Consistent user experience guidelines
349
+
350
+ ## Anti-Patterns to Avoid
351
+
352
+ ❌ **Missing help text** - Always provide `desc` and examples
353
+ ❌ **Silent failures** - Show clear error messages and exit codes
354
+ ❌ **Inconsistent output** - Use standardized formatting helpers
355
+ ❌ **No input validation** - Validate early and show helpful errors
356
+ ❌ **Long-running without feedback** - Use progress indicators
357
+ ❌ **Poor error recovery** - Provide actionable suggestions
358
+
359
+ ## Quick Reference
360
+
361
+ | Command Element | Pattern |
362
+ |----------------|---------|
363
+ | Command definition | `desc 'name ARGS', 'Description'` |
364
+ | Options | `option :name, type: :string, default: 'value'` |
365
+ | Validation | `validate_something!(value)` |
366
+ | Success output | `say_status(:success, message, :green)` |
367
+ | Error output | `say_error(message)` |
368
+ | Tables | `TTY::Table.new(header: [...], rows: [...])` |
369
+ | Progress | `TTY::Spinner.new("[:spinner] Message...")` |
370
+ | User input | `prompt.ask/select/yes?` |
371
+
372
+ ## Testing Patterns
373
+
374
+ ```ruby
375
+ # spec/language_operator/cli/commands/agent_spec.rb
376
+ RSpec.describe LanguageOperator::CLI::Commands::Agent do
377
+ subject(:command) { described_class.new }
378
+
379
+ let(:kubernetes_client) { instance_double(LanguageOperator::Kubernetes::Client) }
380
+
381
+ before do
382
+ allow(LanguageOperator::Kubernetes::Client).to receive(:new).and_return(kubernetes_client)
383
+ allow($stdout).to receive(:puts) # Suppress output during tests
384
+ end
385
+
386
+ describe '#create' do
387
+ context 'with valid agent name' do
388
+ it 'creates the agent successfully' do
389
+ expect(kubernetes_client).to receive(:apply_resource).and_return(mock_agent)
390
+
391
+ command.create('test-agent')
392
+
393
+ expect($stdout).to have_received(:puts).with(/success/i)
394
+ end
395
+ end
396
+
397
+ context 'with invalid agent name' do
398
+ it 'shows validation error and exits' do
399
+ expect { command.create('Invalid_Name') }.to raise_error(SystemExit)
400
+ end
401
+ end
402
+ end
403
+ end
404
+ ```
405
+
406
+ ## Shell Completions
407
+
408
+ ```bash
409
+ # completions/aictl.bash
410
+ _aictl() {
411
+ local cur prev opts
412
+ COMPREPLY=()
413
+ cur="${COMP_WORDS[COMP_CWORD]}"
414
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
415
+
416
+ case "${prev}" in
417
+ aictl)
418
+ opts="agent model tool cluster status version help"
419
+ COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
420
+ return 0
421
+ ;;
422
+ agent)
423
+ opts="create delete list inspect logs"
424
+ COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
425
+ return 0
426
+ ;;
427
+ esac
428
+ }
429
+
430
+ complete -F _aictl aictl
431
+ ```
data/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+ - **BREAKING**: Renamed CLI binary from `aictl` to `langop`
12
+ - Binary renamed: `bin/aictl` → `bin/langop`
13
+ - Shell completions updated: `completions/aictl.*` → `completions/langop.*`
14
+ - All documentation updated to reference `langop`
15
+ - Migration required: Replace `aictl` with `langop` in scripts and automation
16
+
10
17
  ### Removed
11
18
  - **BREAKING**: Removed deprecated DSL v0 (workflow/step model)
12
19
  - Deleted `WorkflowDefinition` and `StepDefinition` classes
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- language-operator (0.1.80)
4
+ language-operator (0.1.82)
5
+ bcrypt (~> 3.1)
5
6
  faraday (~> 2.0)
6
7
  json-schema (~> 5.0)
7
8
  k8s-ruby (~> 0.17)
@@ -32,6 +33,7 @@ GEM
32
33
  public_suffix (>= 2.0.2, < 8.0)
33
34
  ast (2.4.3)
34
35
  base64 (0.3.0)
36
+ bcrypt (3.1.20)
35
37
  benchmark (0.5.0)
36
38
  bigdecimal (3.3.1)
37
39
  coderay (1.1.3)
@@ -1,8 +1,8 @@
1
- #compdef aictl
1
+ #compdef langop
2
2
 
3
- # zsh completion for aictl
3
+ # zsh completion for langop
4
4
 
5
- _aictl() {
5
+ _langop() {
6
6
  local -a commands
7
7
  local curcontext="$curcontext" state line
8
8
  typeset -A opt_args
@@ -14,7 +14,7 @@ _aictl() {
14
14
  'persona:Manage agent personas'
15
15
  'tool:Manage MCP tools'
16
16
  'status:Show system status and overview'
17
- 'version:Show aictl and operator version'
17
+ 'version:Show langop and operator version'
18
18
  'new:Generate a new tool or agent project'
19
19
  'serve:Start an MCP server for tools'
20
20
  'test:Test tool definitions'
@@ -29,34 +29,34 @@ _aictl() {
29
29
 
30
30
  case $state in
31
31
  command)
32
- _describe 'aictl command' commands
32
+ _describe 'langop command' commands
33
33
  ;;
34
34
  args)
35
35
  case $line[1] in
36
36
  cluster)
37
- _aictl_cluster
37
+ _langop_cluster
38
38
  ;;
39
39
  use)
40
- _aictl_use
40
+ _langop_use
41
41
  ;;
42
42
  agent)
43
- _aictl_agent
43
+ _langop_agent
44
44
  ;;
45
45
  persona)
46
- _aictl_persona
46
+ _langop_persona
47
47
  ;;
48
48
  tool)
49
- _aictl_tool
49
+ _langop_tool
50
50
  ;;
51
51
  new)
52
- _aictl_new
52
+ _langop_new
53
53
  ;;
54
54
  esac
55
55
  ;;
56
56
  esac
57
57
  }
58
58
 
59
- _aictl_cluster() {
59
+ _langop_cluster() {
60
60
  local -a subcommands
61
61
  subcommands=(
62
62
  'create:Create a new language cluster'
@@ -77,18 +77,18 @@ _aictl_cluster() {
77
77
  args)
78
78
  case $line[1] in
79
79
  inspect|delete)
80
- _aictl_clusters
80
+ _langop_clusters
81
81
  ;;
82
82
  esac
83
83
  ;;
84
84
  esac
85
85
  }
86
86
 
87
- _aictl_use() {
88
- _aictl_clusters
87
+ _langop_use() {
88
+ _langop_clusters
89
89
  }
90
90
 
91
- _aictl_agent() {
91
+ _langop_agent() {
92
92
  local -a subcommands
93
93
  subcommands=(
94
94
  'create:Create a new autonomous agent'
@@ -114,25 +114,25 @@ _aictl_agent() {
114
114
  case $line[1] in
115
115
  create)
116
116
  _arguments \
117
- '--cluster=[Override current cluster context]:cluster:_aictl_clusters' \
117
+ '--cluster=[Override current cluster context]:cluster:_langop_clusters' \
118
118
  '--create-cluster=[Create cluster inline]:name:' \
119
- '--persona=[Use specific persona]:persona:_aictl_personas' \
119
+ '--persona=[Use specific persona]:persona:_langop_personas' \
120
120
  '--dry-run[Preview without creating]'
121
121
  ;;
122
122
  list)
123
123
  _arguments \
124
124
  '--all-clusters[Show agents from all clusters]' \
125
- '--cluster=[Show agents from specific cluster]:cluster:_aictl_clusters'
125
+ '--cluster=[Show agents from specific cluster]:cluster:_langop_clusters'
126
126
  ;;
127
127
  inspect|delete|logs|code|edit|pause|resume)
128
- _aictl_agents
128
+ _langop_agents
129
129
  ;;
130
130
  esac
131
131
  ;;
132
132
  esac
133
133
  }
134
134
 
135
- _aictl_persona() {
135
+ _langop_persona() {
136
136
  local -a subcommands
137
137
  subcommands=(
138
138
  'list:List available personas'
@@ -154,18 +154,18 @@ _aictl_persona() {
154
154
  case $line[1] in
155
155
  create)
156
156
  _arguments \
157
- '--from=[Inherit from existing persona]:persona:_aictl_personas' \
158
- '--cluster=[Override current cluster]:cluster:_aictl_clusters'
157
+ '--from=[Inherit from existing persona]:persona:_langop_personas' \
158
+ '--cluster=[Override current cluster]:cluster:_langop_clusters'
159
159
  ;;
160
160
  show|edit|delete)
161
- _aictl_personas
161
+ _langop_personas
162
162
  ;;
163
163
  esac
164
164
  ;;
165
165
  esac
166
166
  }
167
167
 
168
- _aictl_tool() {
168
+ _langop_tool() {
169
169
  local -a subcommands
170
170
  subcommands=(
171
171
  'list:List tools in current cluster'
@@ -186,18 +186,18 @@ _aictl_tool() {
186
186
  args)
187
187
  case $line[1] in
188
188
  auth|test|delete)
189
- _aictl_tools
189
+ _langop_tools
190
190
  ;;
191
191
  list)
192
192
  _arguments \
193
- '--cluster=[Override current cluster]:cluster:_aictl_clusters'
193
+ '--cluster=[Override current cluster]:cluster:_langop_clusters'
194
194
  ;;
195
195
  esac
196
196
  ;;
197
197
  esac
198
198
  }
199
199
 
200
- _aictl_new() {
200
+ _langop_new() {
201
201
  local -a types
202
202
  types=('tool:Generate a new tool project' 'agent:Generate a new agent project')
203
203
  _describe 'project type' types
@@ -205,28 +205,28 @@ _aictl_new() {
205
205
 
206
206
  # Helper functions for dynamic completion
207
207
 
208
- _aictl_clusters() {
208
+ _langop_clusters() {
209
209
  local -a clusters
210
- clusters=(${(f)"$(aictl cluster list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
210
+ clusters=(${(f)"$(langop cluster list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
211
211
  _describe 'cluster' clusters
212
212
  }
213
213
 
214
- _aictl_agents() {
214
+ _langop_agents() {
215
215
  local -a agents
216
- agents=(${(f)"$(aictl agent list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
216
+ agents=(${(f)"$(langop agent list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
217
217
  _describe 'agent' agents
218
218
  }
219
219
 
220
- _aictl_personas() {
220
+ _langop_personas() {
221
221
  local -a personas
222
- personas=(${(f)"$(aictl persona list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
222
+ personas=(${(f)"$(langop persona list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
223
223
  _describe 'persona' personas
224
224
  }
225
225
 
226
- _aictl_tools() {
226
+ _langop_tools() {
227
227
  local -a tools
228
- tools=(${(f)"$(aictl tool list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
228
+ tools=(${(f)"$(langop tool list 2>/dev/null | tail -n +2 | awk '{print $1}' | grep -v '^─' | grep -v '^NAME')"})
229
229
  _describe 'tool' tools
230
230
  }
231
231
 
232
- _aictl "$@"
232
+ _langop "$@"