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,185 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "fs";
3
+ import { join } from "path";
4
+
5
+ interface HookInput {
6
+ session_id: string;
7
+ transcript_path: string;
8
+ cwd: string;
9
+ permission_mode: string;
10
+ prompt: string;
11
+ }
12
+
13
+ interface PromptTriggers {
14
+ keywords?: string[];
15
+ intentPatterns?: string[];
16
+ }
17
+
18
+ interface FileTriggers {
19
+ pathPatterns?: string[];
20
+ pathExclusions?: string[];
21
+ contentPatterns?: string[];
22
+ }
23
+
24
+ interface SkillRule {
25
+ type: "guardrail" | "domain";
26
+ enforcement: "block" | "suggest" | "warn";
27
+ priority: "critical" | "high" | "medium" | "low";
28
+ description?: string;
29
+ promptTriggers?: PromptTriggers;
30
+ fileTriggers?: FileTriggers;
31
+ }
32
+
33
+ interface SkillRules {
34
+ version: string;
35
+ description?: string;
36
+ skills: Record<string, SkillRule>;
37
+ }
38
+
39
+ interface MatchedSkill {
40
+ name: string;
41
+ matchType: "keyword" | "intent" | "file";
42
+ config: SkillRule;
43
+ matchDetails?: string;
44
+ }
45
+
46
+ async function main() {
47
+ try {
48
+ // Read input from stdin
49
+ const input = readFileSync(0, "utf-8");
50
+ const data: HookInput = JSON.parse(input);
51
+ const prompt = data.prompt.toLowerCase();
52
+
53
+ // Load skill rules - go up two levels from hooks directory to project root
54
+ const projectDir = process.env.CLAUDE_PROJECT_DIR || join(process.cwd(), "..", "..");
55
+ const rulesPath = join(projectDir, ".claude", "skills", "skill-rules.json");
56
+
57
+ let rules: SkillRules;
58
+ try {
59
+ rules = JSON.parse(readFileSync(rulesPath, "utf-8"));
60
+ } catch (error) {
61
+ // If skill rules file doesn't exist, exit silently
62
+ process.exit(0);
63
+ }
64
+
65
+ const matchedSkills: MatchedSkill[] = [];
66
+
67
+ // Check each skill for matches
68
+ for (const [skillName, config] of Object.entries(rules.skills)) {
69
+ const triggers = config.promptTriggers;
70
+ if (!triggers) continue;
71
+
72
+ // Keyword matching
73
+ if (triggers.keywords) {
74
+ const matchedKeywords: string[] = [];
75
+ for (const keyword of triggers.keywords) {
76
+ if (prompt.includes(keyword.toLowerCase())) {
77
+ matchedKeywords.push(keyword);
78
+ }
79
+ }
80
+
81
+ if (matchedKeywords.length > 0) {
82
+ matchedSkills.push({
83
+ name: skillName,
84
+ matchType: "keyword",
85
+ config,
86
+ matchDetails: `Keywords: ${matchedKeywords.join(", ")}`
87
+ });
88
+ continue;
89
+ }
90
+ }
91
+
92
+ // Intent pattern matching
93
+ if (triggers.intentPatterns) {
94
+ for (const pattern of triggers.intentPatterns) {
95
+ try {
96
+ const regex = new RegExp(pattern, "i");
97
+ if (regex.test(prompt)) {
98
+ matchedSkills.push({
99
+ name: skillName,
100
+ matchType: "intent",
101
+ config,
102
+ matchDetails: `Pattern: ${pattern}`
103
+ });
104
+ break;
105
+ }
106
+ } catch (error) {
107
+ // Skip invalid regex patterns
108
+ console.error(`Invalid regex pattern: ${pattern}`, error);
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ // Generate output if matches found
115
+ if (matchedSkills.length > 0) {
116
+ let output = "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n";
117
+ output += "🎯 SKILL ACTIVATION CHECK\n";
118
+ output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n";
119
+
120
+ // Group by priority
121
+ const critical = matchedSkills.filter((s) => s.config.priority === "critical");
122
+ const high = matchedSkills.filter((s) => s.config.priority === "high");
123
+ const medium = matchedSkills.filter((s) => s.config.priority === "medium");
124
+ const low = matchedSkills.filter((s) => s.config.priority === "low");
125
+
126
+ if (critical.length > 0) {
127
+ output += "⚠️ CRITICAL SKILLS (REQUIRED):\n";
128
+ critical.forEach((s) => {
129
+ output += ` → ${s.name}`;
130
+ if (s.config.description) output += ` - ${s.config.description}`;
131
+ output += "\n";
132
+ });
133
+ output += "\n";
134
+ }
135
+
136
+ if (high.length > 0) {
137
+ output += "📚 RECOMMENDED SKILLS:\n";
138
+ high.forEach((s) => {
139
+ output += ` → ${s.name}`;
140
+ if (s.config.description) output += ` - ${s.config.description}`;
141
+ output += "\n";
142
+ });
143
+ output += "\n";
144
+ }
145
+
146
+ if (medium.length > 0) {
147
+ output += "💡 SUGGESTED SKILLS:\n";
148
+ medium.forEach((s) => {
149
+ output += ` → ${s.name}`;
150
+ if (s.config.description) output += ` - ${s.config.description}`;
151
+ output += "\n";
152
+ });
153
+ output += "\n";
154
+ }
155
+
156
+ if (low.length > 0) {
157
+ output += "ℹ️ OPTIONAL SKILLS:\n";
158
+ low.forEach((s) => {
159
+ output += ` → ${s.name}`;
160
+ if (s.config.description) output += ` - ${s.config.description}`;
161
+ output += "\n";
162
+ });
163
+ output += "\n";
164
+ }
165
+
166
+ // Add call to action
167
+ if (critical.length > 0) {
168
+ output += "⚠️ ACTION: You MUST use the critical skills before proceeding\n";
169
+ } else if (high.length > 0) {
170
+ output += "💡 ACTION: Consider using the Skill tool to activate relevant skills\n";
171
+ }
172
+
173
+ output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n";
174
+
175
+ process.stdout.write(output);
176
+ }
177
+ } catch (error) {
178
+ // Silent fail - don't break Claude if hook fails
179
+ // Only log to stderr for debugging, but exit successfully
180
+ console.error("Skill activation hook error:", error);
181
+ process.exit(0);
182
+ }
183
+ }
184
+
185
+ main();
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022"],
6
+ "moduleResolution": "node",
7
+ "esModuleInterop": true,
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "resolveJsonModule": true
11
+ }
12
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(find:*)",
5
+ "Bash(rg:*)",
6
+ "Bash(grep:*)",
7
+ "Bash(ls:*)",
8
+ "Bash(cat:*)",
9
+ "Bash(head:*)",
10
+ "Bash(tail:*)",
11
+ "Bash(bundle exec rspec:*)",
12
+ "Bash(bundle exec rubocop:*)",
13
+ "Bash(make test:*)",
14
+ "Bash(bundle exec rake:*)",
15
+ "Bash(gem build:*)",
16
+ "Bash(bundle install:*)"
17
+ ],
18
+ "deny": []
19
+ },
20
+ "enableAllProjectMcpServers": true,
21
+ "hooks": {
22
+ "UserPromptSubmit": [
23
+ {
24
+ "hooks": [
25
+ {
26
+ "type": "command",
27
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/skill-activation-prompt.sh"
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ }
33
+ }
@@ -0,0 +1,29 @@
1
+ # Language Operator Skills
2
+
3
+ Domain-specific knowledge modules for Language Operator Ruby gem development.
4
+
5
+ ## Available Skills
6
+
7
+ - [ruby-gem-development](ruby-gem-development/SKILL.md) - Ruby gem development patterns with bundler, RSpec, RuboCop, and Language Operator conventions
8
+ - [thor-cli-development](thor-cli-development/SKILL.md) - Thor-based CLI development patterns for the aictl command-line interface
9
+
10
+ ## Skill Activation
11
+
12
+ Skills are automatically activated based on:
13
+ - **Keywords** in your prompts (e.g., "gem", "CLI", "Thor", "RSpec")
14
+ - **File patterns** when editing relevant files
15
+ - **Content patterns** when working with specific code structures
16
+
17
+ See [skill-rules.json](skill-rules.json) for detailed trigger configuration.
18
+
19
+ ## Usage
20
+
21
+ To manually activate a skill:
22
+ ```
23
+ Use the ruby-gem-development skill to help me implement a new feature
24
+ ```
25
+
26
+ To see all available skills:
27
+ ```
28
+ What skills are available for this project?
29
+ ```
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: ruby-gem-development
3
+ description: Ruby gem development patterns with bundler, RSpec, RuboCop, and Language Operator conventions
4
+ ---
5
+
6
+ # Ruby Gem Development Patterns
7
+
8
+ ## Purpose
9
+
10
+ Provides consistent patterns for developing the Language Operator Ruby gem, including testing, linting, packaging, and release practices.
11
+
12
+ ## When to Use This Skill
13
+
14
+ Automatically activates when:
15
+ - Working with gem specification files (*.gemspec)
16
+ - Creating or modifying RSpec tests
17
+ - Running bundler commands
18
+ - Implementing new library features in `lib/`
19
+ - Working with Rakefile tasks
20
+ - Preparing releases or version bumps
21
+
22
+ ## Quick Start
23
+
24
+ ### New Feature Checklist
25
+
26
+ - [ ] Create feature code in `lib/language_operator/`
27
+ - [ ] Add comprehensive RSpec tests in `spec/`
28
+ - [ ] Update CHANGELOG.md with change
29
+ - [ ] Run `make lint` to check code style
30
+ - [ ] Run `make test` to verify functionality
31
+ - [ ] Update documentation if needed
32
+ - [ ] Bump version in `lib/language_operator/version.rb` (if needed)
33
+
34
+ ### Testing Checklist
35
+
36
+ - [ ] Unit tests cover all public methods
37
+ - [ ] Integration tests for complex workflows
38
+ - [ ] Mock external dependencies (HTTP, Kubernetes)
39
+ - [ ] Use `let` blocks for test setup
40
+ - [ ] Follow `describe`/`context`/`it` hierarchy
41
+ - [ ] Test both success and failure paths
42
+
43
+ ## Core Principles
44
+
45
+ ### 1. Layered Architecture
46
+
47
+ ```ruby
48
+ # lib/language_operator/
49
+ # ├── cli/ # Command-line interface (Thor)
50
+ # ├── dsl/ # Domain-specific language
51
+ # ├── agent/ # Agent runtime
52
+ # ├── client/ # LLM + MCP client
53
+ # └── kubernetes/ # K8s integration
54
+
55
+ # Each layer has clear responsibilities:
56
+ # CLI → DSL → Agent → Client → External APIs
57
+ ```
58
+
59
+ ### 2. RSpec Testing Patterns
60
+
61
+ ```ruby
62
+ # Good: Descriptive hierarchy
63
+ RSpec.describe LanguageOperator::Agent::Base do
64
+ describe '#execute_goal' do
65
+ context 'when goal is valid' do
66
+ it 'executes successfully' do
67
+ # Test implementation
68
+ end
69
+ end
70
+
71
+ context 'when goal is invalid' do
72
+ it 'raises TaskValidationError' do
73
+ expect { agent.execute_goal('') }.to raise_error(
74
+ LanguageOperator::Agent::TaskValidationError
75
+ )
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ # Use let blocks for setup
82
+ let(:agent) { described_class.new(config) }
83
+ let(:config) { instance_double(LanguageOperator::Client::Config) }
84
+ ```
85
+
86
+ ### 3. Error Handling Standards
87
+
88
+ ```ruby
89
+ # Custom error hierarchy
90
+ module LanguageOperator
91
+ class Error < StandardError; end
92
+ class NetworkError < Error; end
93
+ class ValidationError < Error; end
94
+ class SecurityError < Error; end
95
+ end
96
+
97
+ # Raise with context
98
+ raise LanguageOperator::ValidationError,
99
+ "Invalid schedule format: #{schedule}"
100
+
101
+ # Handle gracefully
102
+ rescue LanguageOperator::NetworkError => e
103
+ Logger.warn("Network issue, retrying: #{e.message}")
104
+ retry_with_backoff
105
+ end
106
+ ```
107
+
108
+ ### 4. Gem Configuration
109
+
110
+ ```ruby
111
+ # language-operator.gemspec
112
+ Gem::Specification.new do |spec|
113
+ spec.name = 'language-operator'
114
+ spec.version = LanguageOperator::VERSION
115
+ spec.required_ruby_version = '>= 3.2.0'
116
+
117
+ # Dependencies
118
+ spec.add_dependency 'ruby_llm', '~> 1.8'
119
+ spec.add_dependency 'thor', '~> 1.3'
120
+
121
+ # Development dependencies
122
+ spec.add_development_dependency 'rspec', '~> 3.0'
123
+ spec.add_development_dependency 'rubocop', '~> 1.60'
124
+ end
125
+ ```
126
+
127
+ ## Common Patterns
128
+
129
+ ### Pattern 1: CLI Command Structure
130
+
131
+ ```ruby
132
+ module LanguageOperator::CLI::Commands
133
+ class Agent < Thor
134
+ desc 'create NAME', 'Create a new agent'
135
+ option :mode, type: :string, default: 'autonomous'
136
+
137
+ def create(name)
138
+ # Validation
139
+ validate_agent_name!(name)
140
+
141
+ # Wizard for interactive setup
142
+ wizard = Wizards::AgentWizard.new
143
+ config = wizard.run(name, options)
144
+
145
+ # Resource creation
146
+ builder = Kubernetes::ResourceBuilder.new
147
+ manifest = builder.build_agent(config)
148
+
149
+ # Apply to cluster
150
+ client = Kubernetes::Client.new
151
+ client.apply_resource(manifest)
152
+
153
+ say "Agent '#{name}' created successfully", :green
154
+ end
155
+
156
+ private
157
+
158
+ def validate_agent_name!(name)
159
+ return if name.match?(/\A[a-z0-9-]+\z/)
160
+ raise ValidationError, "Invalid agent name: #{name}"
161
+ end
162
+ end
163
+ end
164
+ ```
165
+
166
+ ### Pattern 2: DSL Definition Pattern
167
+
168
+ ```ruby
169
+ module LanguageOperator::Dsl
170
+ class AgentDefinition
171
+ attr_reader :name, :mode, :schedule, :tools
172
+
173
+ def initialize(name)
174
+ @name = name
175
+ @tools = []
176
+ yield(self) if block_given?
177
+ end
178
+
179
+ def mode(value)
180
+ @mode = validate_mode!(value)
181
+ end
182
+
183
+ def schedule(expression)
184
+ @schedule = validate_cron!(expression)
185
+ end
186
+
187
+ def tool(name, &block)
188
+ @tools << ToolDefinition.new(name, &block)
189
+ end
190
+
191
+ private
192
+
193
+ def validate_mode!(mode)
194
+ valid_modes = %i[autonomous scheduled reactive]
195
+ return mode if valid_modes.include?(mode)
196
+ raise ValidationError, "Invalid mode: #{mode}"
197
+ end
198
+ end
199
+ end
200
+ ```
201
+
202
+ ### Pattern 3: Test Organization
203
+
204
+ ```ruby
205
+ # spec/language_operator/agent/base_spec.rb
206
+ RSpec.describe LanguageOperator::Agent::Base do
207
+ subject(:agent) { described_class.new(config) }
208
+
209
+ let(:config) do
210
+ instance_double(
211
+ LanguageOperator::Client::Config,
212
+ agent_name: 'test-agent',
213
+ mode: :autonomous
214
+ )
215
+ end
216
+
217
+ describe '.new' do
218
+ it 'initializes with config' do
219
+ expect(agent.config).to eq(config)
220
+ end
221
+ end
222
+
223
+ describe '#run' do
224
+ context 'in autonomous mode' do
225
+ before { allow(config).to receive(:mode).and_return(:autonomous) }
226
+
227
+ it 'starts executor loop' do
228
+ executor = instance_double(LanguageOperator::Agent::Executor)
229
+ allow(LanguageOperator::Agent::Executor).to receive(:new).and_return(executor)
230
+ expect(executor).to receive(:run_loop)
231
+
232
+ agent.run
233
+ end
234
+ end
235
+ end
236
+ end
237
+ ```
238
+
239
+ ## Resource Files
240
+
241
+ For detailed information, see:
242
+ - [Testing Patterns](resources/testing-patterns.md) - Comprehensive RSpec guidelines
243
+ - [Release Process](resources/release-process.md) - Version bumps and gem publishing
244
+ - [Code Style](resources/code-style.md) - RuboCop configuration and standards
245
+
246
+ ## Anti-Patterns to Avoid
247
+
248
+ ❌ **Mixing layers** - Don't put business logic in CLI classes
249
+ ❌ **Missing tests** - No production code without corresponding specs
250
+ ❌ **Hardcoded values** - Use configuration and environment variables
251
+ ❌ **Silent failures** - Always log and raise meaningful errors
252
+ ❌ **Coupling to external services** - Use dependency injection and mocking
253
+ ❌ **Inconsistent naming** - Follow Ruby conventions (snake_case, descriptive names)
254
+
255
+ ## Quick Reference
256
+
257
+ | Need to... | Use this |
258
+ |-----------|----------|
259
+ | Run all tests | `make test` |
260
+ | Run integration tests | `make test-integration` |
261
+ | Check code style | `make lint` |
262
+ | Auto-fix style issues | `make lint-fix` |
263
+ | Build gem | `make build` |
264
+ | Install locally | `make install` |
265
+ | Generate docs | `make yard-docs` |
266
+ | Open console | `make console` |
267
+
268
+ ## Version Management
269
+
270
+ ```ruby
271
+ # lib/language_operator/version.rb
272
+ module LanguageOperator
273
+ VERSION = '0.1.81'
274
+ end
275
+
276
+ # Follow semantic versioning:
277
+ # MAJOR.MINOR.PATCH
278
+ # - MAJOR: Breaking changes
279
+ # - MINOR: New features, backward compatible
280
+ # - PATCH: Bug fixes, backward compatible
281
+ ```
282
+
283
+ ## Release Checklist
284
+
285
+ - [ ] Update `VERSION` in `lib/language_operator/version.rb`
286
+ - [ ] Update `CHANGELOG.md` with changes
287
+ - [ ] Run full test suite: `make test-all`
288
+ - [ ] Check code style: `make lint`
289
+ - [ ] Build gem: `make build`
290
+ - [ ] Test installation: `make install`
291
+ - [ ] Commit and tag: `git tag v0.1.X`
292
+ - [ ] Push with tags: `git push --tags`
293
+ - [ ] Publish to RubyGems: `gem push language-operator-X.gem`
@@ -0,0 +1,117 @@
1
+ {
2
+ "version": "1.0",
3
+ "description": "Skill activation triggers for Language Operator Ruby gem development",
4
+ "skills": {
5
+ "ruby-gem-development": {
6
+ "type": "domain",
7
+ "enforcement": "suggest",
8
+ "priority": "high",
9
+ "description": "Ruby gem development patterns with bundler, RSpec, and RuboCop",
10
+ "promptTriggers": {
11
+ "keywords": [
12
+ "gem", "gemspec", "bundler", "bundle",
13
+ "RSpec", "rspec", "test", "spec",
14
+ "RuboCop", "rubocop", "lint",
15
+ "Rakefile", "rake task",
16
+ "version", "release", "publish"
17
+ ],
18
+ "intentPatterns": [
19
+ "(create|add|implement|build).*?(gem|library)",
20
+ "(test|spec).*?(pattern|structure)",
21
+ "(fix|improve).*?(test|spec)",
22
+ "(lint|format).*?(code|ruby)",
23
+ "(build|release|publish).*?(gem)",
24
+ "(add|create).*?(rake task)"
25
+ ]
26
+ },
27
+ "fileTriggers": {
28
+ "pathPatterns": [
29
+ "*.gemspec",
30
+ "Gemfile",
31
+ "Gemfile.lock",
32
+ "Rakefile",
33
+ "lib/**/*.rb",
34
+ "spec/**/*_spec.rb"
35
+ ],
36
+ "pathExclusions": [
37
+ "vendor/**",
38
+ ".bundle/**"
39
+ ],
40
+ "contentPatterns": [
41
+ "require.*language_operator",
42
+ "describe.*do",
43
+ "it.*do",
44
+ "RSpec\\.describe",
45
+ "Gem::Specification",
46
+ "spec\\.add_"
47
+ ]
48
+ }
49
+ },
50
+ "thor-cli-development": {
51
+ "type": "domain",
52
+ "enforcement": "suggest",
53
+ "priority": "high",
54
+ "description": "Thor-based CLI development patterns for aictl",
55
+ "promptTriggers": {
56
+ "keywords": [
57
+ "CLI", "command", "Thor", "aictl",
58
+ "subcommand", "argument", "option",
59
+ "wizard", "interactive"
60
+ ],
61
+ "intentPatterns": [
62
+ "(create|add|implement).*?(command|CLI)",
63
+ "(add|create).*?(subcommand|option)",
64
+ "(implement|build).*?(wizard|interactive)",
65
+ "(format|display).*?(output|table)"
66
+ ]
67
+ },
68
+ "fileTriggers": {
69
+ "pathPatterns": [
70
+ "lib/language_operator/cli/**/*.rb",
71
+ "bin/aictl"
72
+ ],
73
+ "contentPatterns": [
74
+ "class.*< Thor",
75
+ "desc.*,",
76
+ "option.*:",
77
+ "Commands::",
78
+ "Wizards::"
79
+ ]
80
+ }
81
+ },
82
+ "language-operator-dsl": {
83
+ "type": "domain",
84
+ "enforcement": "suggest",
85
+ "priority": "high",
86
+ "description": "Language Operator DSL patterns for agents, tools, and workflows",
87
+ "promptTriggers": {
88
+ "keywords": [
89
+ "DSL", "agent", "tool", "workflow",
90
+ "MCP", "server", "schema",
91
+ "execution", "kubernetes", "deployment"
92
+ ],
93
+ "intentPatterns": [
94
+ "(create|define|implement).*?(agent|tool|workflow)",
95
+ "(add|modify).*?(DSL|schema)",
96
+ "(deploy|run).*?(agent|kubernetes)",
97
+ "(test|validate).*?(DSL|schema)"
98
+ ]
99
+ },
100
+ "fileTriggers": {
101
+ "pathPatterns": [
102
+ "lib/language_operator/dsl/**/*.rb",
103
+ "lib/language_operator/agent/**/*.rb",
104
+ "lib/language_operator/kubernetes/**/*.rb"
105
+ ],
106
+ "contentPatterns": [
107
+ "LanguageOperator::Dsl",
108
+ "agent.*do",
109
+ "tool.*do",
110
+ "workflow.*do",
111
+ "execute.*do",
112
+ "kubernetes.*apply"
113
+ ]
114
+ }
115
+ }
116
+ }
117
+ }