@nio-cli/cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +332 -139
  2. package/dist/adapters/docker/docker-gateway.js +100 -0
  3. package/dist/adapters/docker/docker-gateway.js.map +1 -0
  4. package/dist/adapters/ide/ide-gateway.js +50 -0
  5. package/dist/adapters/ide/ide-gateway.js.map +1 -0
  6. package/dist/adapters/lang/knowledge-store.js +97 -0
  7. package/dist/adapters/lang/knowledge-store.js.map +1 -0
  8. package/dist/adapters/lang/language-catalog.js +86 -0
  9. package/dist/adapters/lang/language-catalog.js.map +1 -0
  10. package/dist/adapters/lang/package-map.js +98 -0
  11. package/dist/adapters/lang/package-map.js.map +1 -0
  12. package/dist/adapters/lang/project-detector.js +40 -0
  13. package/dist/adapters/lang/project-detector.js.map +1 -0
  14. package/dist/adapters/lang/repos.js +8 -0
  15. package/dist/adapters/lang/repos.js.map +1 -0
  16. package/dist/adapters/lang/scaffold-gateway.js +135 -0
  17. package/dist/adapters/lang/scaffold-gateway.js.map +1 -0
  18. package/dist/adapters/lang/vendor.js +52 -0
  19. package/dist/adapters/lang/vendor.js.map +1 -0
  20. package/dist/adapters/pg/auth-session-repository.js +41 -0
  21. package/dist/adapters/pg/auth-session-repository.js.map +1 -0
  22. package/dist/adapters/pg/client.js +74 -0
  23. package/dist/adapters/pg/client.js.map +1 -0
  24. package/dist/adapters/pg/dependency-event-repository.js +40 -0
  25. package/dist/adapters/pg/dependency-event-repository.js.map +1 -0
  26. package/dist/adapters/pg/login-challenge-repository.js +54 -0
  27. package/dist/adapters/pg/login-challenge-repository.js.map +1 -0
  28. package/dist/adapters/pg/session-repository.js +70 -0
  29. package/dist/adapters/pg/session-repository.js.map +1 -0
  30. package/dist/adapters/pg/user-repository.js +71 -0
  31. package/dist/adapters/pg/user-repository.js.map +1 -0
  32. package/dist/adapters/pkg/toolchain-gateway.js +35 -0
  33. package/dist/adapters/pkg/toolchain-gateway.js.map +1 -0
  34. package/dist/adapters/skills/recipe-catalog.js +84 -0
  35. package/dist/adapters/skills/recipe-catalog.js.map +1 -0
  36. package/dist/adapters/sms/http-generic.js +50 -0
  37. package/dist/adapters/sms/http-generic.js.map +1 -0
  38. package/dist/app/dependency-watcher.js +87 -0
  39. package/dist/app/dependency-watcher.js.map +1 -0
  40. package/dist/app/docker-manager.js +110 -0
  41. package/dist/app/docker-manager.js.map +1 -0
  42. package/dist/app/environment-builder.js +73 -0
  43. package/dist/app/environment-builder.js.map +1 -0
  44. package/dist/app/language-configurator.js +30 -0
  45. package/dist/app/language-configurator.js.map +1 -0
  46. package/dist/app/session-manager.js +124 -0
  47. package/dist/app/session-manager.js.map +1 -0
  48. package/dist/brand.js +3 -61
  49. package/dist/brand.js.map +1 -1
  50. package/dist/cli/commands/agents.js +30 -0
  51. package/dist/cli/commands/agents.js.map +1 -0
  52. package/dist/cli/commands/auth.js +122 -90
  53. package/dist/cli/commands/auth.js.map +1 -1
  54. package/dist/cli/commands/clean.js +1 -13
  55. package/dist/cli/commands/clean.js.map +1 -1
  56. package/dist/cli/commands/command.js +58 -0
  57. package/dist/cli/commands/command.js.map +1 -0
  58. package/dist/cli/commands/completion.js +0 -3
  59. package/dist/cli/commands/completion.js.map +1 -1
  60. package/dist/cli/commands/config.js +41 -0
  61. package/dist/cli/commands/config.js.map +1 -0
  62. package/dist/cli/commands/debug.js +93 -0
  63. package/dist/cli/commands/debug.js.map +1 -0
  64. package/dist/cli/commands/deps.js +94 -0
  65. package/dist/cli/commands/deps.js.map +1 -0
  66. package/dist/cli/commands/docker.js +360 -0
  67. package/dist/cli/commands/docker.js.map +1 -0
  68. package/dist/cli/commands/docs/content.js +199 -0
  69. package/dist/cli/commands/docs/content.js.map +1 -0
  70. package/dist/cli/commands/docs/dynamic.js +42 -0
  71. package/dist/cli/commands/docs/dynamic.js.map +1 -0
  72. package/dist/cli/commands/docs/html.js +108 -0
  73. package/dist/cli/commands/docs/html.js.map +1 -0
  74. package/dist/cli/commands/docs/terminal.js +42 -0
  75. package/dist/cli/commands/docs/terminal.js.map +1 -0
  76. package/dist/cli/commands/docs.js +34 -0
  77. package/dist/cli/commands/docs.js.map +1 -0
  78. package/dist/cli/commands/exec.js +2 -7
  79. package/dist/cli/commands/exec.js.map +1 -1
  80. package/dist/cli/commands/init/auth-step.js +9 -45
  81. package/dist/cli/commands/init/auth-step.js.map +1 -1
  82. package/dist/cli/commands/init/clients-step.js +12 -39
  83. package/dist/cli/commands/init/clients-step.js.map +1 -1
  84. package/dist/cli/commands/init/context-step.js +7 -33
  85. package/dist/cli/commands/init/context-step.js.map +1 -1
  86. package/dist/cli/commands/init/index.js +177 -33
  87. package/dist/cli/commands/init/index.js.map +1 -1
  88. package/dist/cli/commands/init/lang-step.js +40 -0
  89. package/dist/cli/commands/init/lang-step.js.map +1 -0
  90. package/dist/cli/commands/init/profile-step.js +43 -0
  91. package/dist/cli/commands/init/profile-step.js.map +1 -0
  92. package/dist/cli/commands/init/provision-step.js +8 -23
  93. package/dist/cli/commands/init/provision-step.js.map +1 -1
  94. package/dist/cli/commands/init/recipe-step.js +18 -0
  95. package/dist/cli/commands/init/recipe-step.js.map +1 -0
  96. package/dist/cli/commands/lang.js +27 -0
  97. package/dist/cli/commands/lang.js.map +1 -0
  98. package/dist/cli/commands/open.js +51 -0
  99. package/dist/cli/commands/open.js.map +1 -0
  100. package/dist/cli/commands/plan.js +2 -6
  101. package/dist/cli/commands/plan.js.map +1 -1
  102. package/dist/cli/commands/security.js +143 -0
  103. package/dist/cli/commands/security.js.map +1 -0
  104. package/dist/cli/commands/sessions.js +92 -0
  105. package/dist/cli/commands/sessions.js.map +1 -0
  106. package/dist/cli/commands/skills.js +1 -1
  107. package/dist/cli/commands/skills.js.map +1 -1
  108. package/dist/cli/commands/sync.js +52 -58
  109. package/dist/cli/commands/sync.js.map +1 -1
  110. package/dist/cli/commands/validate-plan.js +2 -6
  111. package/dist/cli/commands/validate-plan.js.map +1 -1
  112. package/dist/cli/copy/auth.json +9 -2
  113. package/dist/cli/copy/init.json +2 -6
  114. package/dist/cli/copy.js +0 -8
  115. package/dist/cli/copy.js.map +1 -1
  116. package/dist/cli/flows/clients.js +3 -94
  117. package/dist/cli/flows/clients.js.map +1 -1
  118. package/dist/cli/flows/completion.js +1 -6
  119. package/dist/cli/flows/completion.js.map +1 -1
  120. package/dist/cli/flows/dependencies.js +1 -18
  121. package/dist/cli/flows/dependencies.js.map +1 -1
  122. package/dist/cli/flows/sections.js +2 -10
  123. package/dist/cli/flows/sections.js.map +1 -1
  124. package/dist/cli/flows/user-config.js +5 -10
  125. package/dist/cli/flows/user-config.js.map +1 -1
  126. package/dist/cli/ui/render.js +2 -53
  127. package/dist/cli/ui/render.js.map +1 -1
  128. package/dist/cli/ui/report.js +0 -13
  129. package/dist/cli/ui/report.js.map +1 -1
  130. package/dist/cli.js +23 -0
  131. package/dist/cli.js.map +1 -1
  132. package/dist/config.js +27 -56
  133. package/dist/config.js.map +1 -1
  134. package/dist/core/docker.js +2 -0
  135. package/dist/core/docker.js.map +1 -0
  136. package/dist/core/environment.js +2 -0
  137. package/dist/core/environment.js.map +1 -0
  138. package/dist/core/lang.js +11 -0
  139. package/dist/core/lang.js.map +1 -0
  140. package/dist/core/messaging.js +2 -0
  141. package/dist/core/messaging.js.map +1 -0
  142. package/dist/core/repositories.js +2 -0
  143. package/dist/core/repositories.js.map +1 -0
  144. package/dist/core/types.js +0 -5
  145. package/dist/core/types.js.map +1 -1
  146. package/dist/gateway/config.js +14 -0
  147. package/dist/gateway/config.js.map +1 -0
  148. package/dist/gateway/edge-filter.js +55 -0
  149. package/dist/gateway/edge-filter.js.map +1 -0
  150. package/dist/gateway/index.js +176 -0
  151. package/dist/gateway/index.js.map +1 -0
  152. package/dist/gateway/middleware/auth.js +34 -0
  153. package/dist/gateway/middleware/auth.js.map +1 -0
  154. package/dist/gateway/services/login.js +112 -0
  155. package/dist/gateway/services/login.js.map +1 -0
  156. package/dist/gateway/services/security.js +99 -0
  157. package/dist/gateway/services/security.js.map +1 -0
  158. package/dist/lib/auth/backup-codes.js +46 -0
  159. package/dist/lib/auth/backup-codes.js.map +1 -0
  160. package/dist/lib/auth/gateway-client.js +106 -0
  161. package/dist/lib/auth/gateway-client.js.map +1 -0
  162. package/dist/lib/auth/gateway-token.js +26 -0
  163. package/dist/lib/auth/gateway-token.js.map +1 -0
  164. package/dist/lib/auth/nio-config.js +138 -0
  165. package/dist/lib/auth/nio-config.js.map +1 -0
  166. package/dist/lib/auth/otp.js +23 -0
  167. package/dist/lib/auth/otp.js.map +1 -0
  168. package/dist/lib/auth/password.js +23 -0
  169. package/dist/lib/auth/password.js.map +1 -0
  170. package/dist/lib/auth/session-store.js +49 -0
  171. package/dist/lib/auth/session-store.js.map +1 -0
  172. package/dist/lib/clients/autopull.js +8 -0
  173. package/dist/lib/clients/autopull.js.map +1 -0
  174. package/dist/lib/{client-configs.js → clients/client-configs.js} +99 -34
  175. package/dist/lib/clients/client-configs.js.map +1 -0
  176. package/dist/lib/clients/client-install.js +20 -0
  177. package/dist/lib/clients/client-install.js.map +1 -0
  178. package/dist/lib/{harness.js → clients/harness.js} +1 -16
  179. package/dist/lib/clients/harness.js.map +1 -0
  180. package/dist/lib/{hooks.js → clients/hooks.js} +5 -31
  181. package/dist/lib/clients/hooks.js.map +1 -0
  182. package/dist/lib/{targets.js → clients/targets.js} +17 -53
  183. package/dist/lib/clients/targets.js.map +1 -0
  184. package/dist/lib/colors.js +0 -24
  185. package/dist/lib/colors.js.map +1 -1
  186. package/dist/lib/cowork-extension.js +2 -25
  187. package/dist/lib/cowork-extension.js.map +1 -1
  188. package/dist/lib/{dependencies.js → deps/dependencies.js} +1 -26
  189. package/dist/lib/deps/dependencies.js.map +1 -0
  190. package/dist/lib/deps/dependency-install-project.js +27 -0
  191. package/dist/lib/deps/dependency-install-project.js.map +1 -0
  192. package/dist/lib/{dependency-install.js → deps/dependency-install.js} +10 -35
  193. package/dist/lib/deps/dependency-install.js.map +1 -0
  194. package/dist/lib/deps/dependency-installed.js +64 -0
  195. package/dist/lib/deps/dependency-installed.js.map +1 -0
  196. package/dist/lib/deps/dependency-scan.js +100 -0
  197. package/dist/lib/deps/dependency-scan.js.map +1 -0
  198. package/dist/lib/docker.js +50 -0
  199. package/dist/lib/docker.js.map +1 -0
  200. package/dist/lib/dotfiles.js +57 -0
  201. package/dist/lib/dotfiles.js.map +1 -0
  202. package/dist/lib/{exec-delegate.js → exec/exec-delegate.js} +4 -13
  203. package/dist/lib/exec/exec-delegate.js.map +1 -0
  204. package/dist/lib/{exec-engines.js → exec/exec-engines.js} +1 -10
  205. package/dist/lib/exec/exec-engines.js.map +1 -0
  206. package/dist/lib/{plan-delegate.js → exec/plan-delegate.js} +1 -7
  207. package/dist/lib/exec/plan-delegate.js.map +1 -0
  208. package/dist/lib/{validate-plan-delegate.js → exec/validate-plan-delegate.js} +2 -7
  209. package/dist/lib/exec/validate-plan-delegate.js.map +1 -0
  210. package/dist/lib/load-env.js +15 -0
  211. package/dist/lib/load-env.js.map +1 -0
  212. package/dist/lib/open-url.js +9 -0
  213. package/dist/lib/open-url.js.map +1 -0
  214. package/dist/lib/prompts.js +0 -13
  215. package/dist/lib/prompts.js.map +1 -1
  216. package/dist/lib/{provision-apply.js → provision/provision-apply.js} +4 -30
  217. package/dist/lib/provision/provision-apply.js.map +1 -0
  218. package/dist/lib/{provision-collect.js → provision/provision-collect.js} +0 -9
  219. package/dist/lib/provision/provision-collect.js.map +1 -0
  220. package/dist/lib/{provision.js → provision/provision.js} +4 -17
  221. package/dist/lib/provision/provision.js.map +1 -0
  222. package/dist/lib/{patterns.js → skills/patterns.js} +0 -13
  223. package/dist/lib/skills/patterns.js.map +1 -0
  224. package/dist/lib/{rules.js → skills/rules.js} +0 -22
  225. package/dist/lib/skills/rules.js.map +1 -0
  226. package/dist/lib/skills/sections.js +58 -0
  227. package/dist/lib/skills/sections.js.map +1 -0
  228. package/dist/lib/{skill-serve.js → skills/skill-serve.js} +1 -26
  229. package/dist/lib/skills/skill-serve.js.map +1 -0
  230. package/dist/lib/{skills-cache.js → skills/skills-cache.js} +15 -21
  231. package/dist/lib/skills/skills-cache.js.map +1 -0
  232. package/dist/lib/{skills.js → skills/skills.js} +3 -49
  233. package/dist/lib/skills/skills.js.map +1 -0
  234. package/dist/lib/spinner.js.map +1 -0
  235. package/dist/lib/telemetry.js +3 -20
  236. package/dist/lib/telemetry.js.map +1 -1
  237. package/dist/lib/version-check.js +0 -20
  238. package/dist/lib/version-check.js.map +1 -1
  239. package/dist/matrix-logo.js +0 -10
  240. package/dist/matrix-logo.js.map +1 -1
  241. package/dist/mcp-server-lang.js +39 -0
  242. package/dist/mcp-server-lang.js.map +1 -0
  243. package/dist/mcp-server.js +37 -41
  244. package/dist/mcp-server.js.map +1 -1
  245. package/dist/profiles/analyst.js +10 -0
  246. package/dist/profiles/analyst.js.map +1 -0
  247. package/dist/profiles/bi.js +9 -0
  248. package/dist/profiles/bi.js.map +1 -0
  249. package/dist/profiles/dba.js +21 -0
  250. package/dist/profiles/dba.js.map +1 -0
  251. package/dist/profiles/fullstack.js +9 -0
  252. package/dist/profiles/fullstack.js.map +1 -0
  253. package/dist/profiles/index.js +39 -0
  254. package/dist/profiles/index.js.map +1 -0
  255. package/dist/profiles/mcps.js +23 -0
  256. package/dist/profiles/mcps.js.map +1 -0
  257. package/dist/profiles/qa.js +10 -0
  258. package/dist/profiles/qa.js.map +1 -0
  259. package/dist/profiles/scientist.js +9 -0
  260. package/dist/profiles/scientist.js.map +1 -0
  261. package/dist/profiles/toolchains.js +9 -0
  262. package/dist/profiles/toolchains.js.map +1 -0
  263. package/dist/tools/delegate-exec.js +2 -2
  264. package/dist/tools/delegate-exec.js.map +1 -1
  265. package/dist/tools/env-detect-deps.js +54 -0
  266. package/dist/tools/env-detect-deps.js.map +1 -0
  267. package/dist/tools/env-materialize.js +43 -0
  268. package/dist/tools/env-materialize.js.map +1 -0
  269. package/dist/tools/exec-status.js +1 -1
  270. package/dist/tools/exec-status.js.map +1 -1
  271. package/dist/tools/index.js +12 -32
  272. package/dist/tools/index.js.map +1 -1
  273. package/dist/tools/lang-recipe.js +31 -0
  274. package/dist/tools/lang-recipe.js.map +1 -0
  275. package/dist/tools/lang-reference.js +34 -0
  276. package/dist/tools/lang-reference.js.map +1 -0
  277. package/dist/tools/plan.js +2 -2
  278. package/dist/tools/plan.js.map +1 -1
  279. package/dist/tools/profile-get.js +57 -0
  280. package/dist/tools/profile-get.js.map +1 -0
  281. package/dist/tools/session-activate.js +35 -0
  282. package/dist/tools/session-activate.js.map +1 -0
  283. package/dist/tools/session-create.js +83 -0
  284. package/dist/tools/session-create.js.map +1 -0
  285. package/dist/tools/session-list.js +29 -0
  286. package/dist/tools/session-list.js.map +1 -0
  287. package/dist/tools/session-shared.js +25 -0
  288. package/dist/tools/session-shared.js.map +1 -0
  289. package/dist/tools/validate-plan.js +2 -2
  290. package/dist/tools/validate-plan.js.map +1 -1
  291. package/docker/docker-compose.yml +44 -0
  292. package/package.json +30 -16
  293. package/dist/adapters/supabase/allocation-gateway.js +0 -236
  294. package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
  295. package/dist/adapters/supabase/analytics-gateway.js +0 -18
  296. package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
  297. package/dist/adapters/supabase/client.js +0 -96
  298. package/dist/adapters/supabase/client.js.map +0 -1
  299. package/dist/adapters/supabase/context-gateway.js +0 -23
  300. package/dist/adapters/supabase/context-gateway.js.map +0 -1
  301. package/dist/adapters/supabase/gateway.js +0 -18
  302. package/dist/adapters/supabase/gateway.js.map +0 -1
  303. package/dist/adapters/supabase/task-gateway.js +0 -450
  304. package/dist/adapters/supabase/task-gateway.js.map +0 -1
  305. package/dist/auth.js +0 -118
  306. package/dist/auth.js.map +0 -1
  307. package/dist/cli/commands/init/project-step.js +0 -105
  308. package/dist/cli/commands/init/project-step.js.map +0 -1
  309. package/dist/constants.js +0 -9
  310. package/dist/constants.js.map +0 -1
  311. package/dist/core/ports.js +0 -2
  312. package/dist/core/ports.js.map +0 -1
  313. package/dist/database.types.js +0 -11
  314. package/dist/database.types.js.map +0 -1
  315. package/dist/lib/active-project.js +0 -28
  316. package/dist/lib/active-project.js.map +0 -1
  317. package/dist/lib/autopull.js +0 -13
  318. package/dist/lib/autopull.js.map +0 -1
  319. package/dist/lib/client-configs.js.map +0 -1
  320. package/dist/lib/client-install.js +0 -40
  321. package/dist/lib/client-install.js.map +0 -1
  322. package/dist/lib/dependencies.js.map +0 -1
  323. package/dist/lib/dependency-install.js.map +0 -1
  324. package/dist/lib/exec-delegate.js.map +0 -1
  325. package/dist/lib/exec-engines.js.map +0 -1
  326. package/dist/lib/harness.js.map +0 -1
  327. package/dist/lib/hooks.js.map +0 -1
  328. package/dist/lib/patterns.js.map +0 -1
  329. package/dist/lib/plan-delegate.js.map +0 -1
  330. package/dist/lib/project-context.js +0 -151
  331. package/dist/lib/project-context.js.map +0 -1
  332. package/dist/lib/provision-apply.js.map +0 -1
  333. package/dist/lib/provision-collect.js.map +0 -1
  334. package/dist/lib/provision.js.map +0 -1
  335. package/dist/lib/require-config.js +0 -32
  336. package/dist/lib/require-config.js.map +0 -1
  337. package/dist/lib/rules.js.map +0 -1
  338. package/dist/lib/sections.js +0 -89
  339. package/dist/lib/sections.js.map +0 -1
  340. package/dist/lib/skill-serve.js.map +0 -1
  341. package/dist/lib/skills-cache.js.map +0 -1
  342. package/dist/lib/skills.js.map +0 -1
  343. package/dist/lib/targets.js.map +0 -1
  344. package/dist/lib/task-history.js +0 -15
  345. package/dist/lib/task-history.js.map +0 -1
  346. package/dist/lib/validate-plan-delegate.js.map +0 -1
  347. package/dist/session-factory.js +0 -19
  348. package/dist/session-factory.js.map +0 -1
  349. package/dist/spinner.js.map +0 -1
  350. package/dist/tools/comment-task.js +0 -72
  351. package/dist/tools/comment-task.js.map +0 -1
  352. package/dist/tools/create-task.js +0 -129
  353. package/dist/tools/create-task.js.map +0 -1
  354. package/dist/tools/end-allocation.js +0 -38
  355. package/dist/tools/end-allocation.js.map +0 -1
  356. package/dist/tools/end-task-allocation.js +0 -37
  357. package/dist/tools/end-task-allocation.js.map +0 -1
  358. package/dist/tools/get-active-allocation.js +0 -69
  359. package/dist/tools/get-active-allocation.js.map +0 -1
  360. package/dist/tools/get-context.js +0 -48
  361. package/dist/tools/get-context.js.map +0 -1
  362. package/dist/tools/get-task.js +0 -137
  363. package/dist/tools/get-task.js.map +0 -1
  364. package/dist/tools/list-my-allocations.js +0 -71
  365. package/dist/tools/list-my-allocations.js.map +0 -1
  366. package/dist/tools/list-projects.js +0 -38
  367. package/dist/tools/list-projects.js.map +0 -1
  368. package/dist/tools/list-tasks.js +0 -93
  369. package/dist/tools/list-tasks.js.map +0 -1
  370. package/dist/tools/move-task.js +0 -82
  371. package/dist/tools/move-task.js.map +0 -1
  372. package/dist/tools/record-delivery.js +0 -71
  373. package/dist/tools/record-delivery.js.map +0 -1
  374. package/dist/tools/set-project.js +0 -52
  375. package/dist/tools/set-project.js.map +0 -1
  376. package/dist/tools/start-allocation.js +0 -32
  377. package/dist/tools/start-allocation.js.map +0 -1
  378. package/dist/tools/start-task-allocation.js +0 -75
  379. package/dist/tools/start-task-allocation.js.map +0 -1
  380. package/dist/tools/update-task.js +0 -139
  381. package/dist/tools/update-task.js.map +0 -1
  382. /package/dist/{spinner.js → lib/spinner.js} +0 -0
@@ -2,11 +2,6 @@ import { spawnSync } from 'node:child_process';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { readSkillDocs } from './skills.js';
5
- /**
6
- * Patterns do harness — a parte que **precisa de IA**. O CLI não raciocina sobre o
7
- * código, então dispara um agente **headless** (`claude -p` / `codex exec`), com
8
- * consentimento, pra analisar o repo e escrever `docs/_patterns.md`. Best-effort.
9
- */
10
5
  export const PATTERNS_REL = 'docs/_patterns.md';
11
6
  export function patternsPath(cwd) {
12
7
  return join(cwd, PATTERNS_REL);
@@ -14,7 +9,6 @@ export function patternsPath(cwd) {
14
9
  export function patternsExist(cwd) {
15
10
  return existsSync(patternsPath(cwd));
16
11
  }
17
- /** Prompt da análise: corpo da skill `detect-patterns` (fonte única) ou fallback embutido. */
18
12
  const FALLBACK_PROMPT = `Analise ESTE repositório e escreva \`${PATTERNS_REL}\` (arquivo único, sobrescreva se existir) com os PADRÕES REAIS já usados no código: estrutura de pastas/camadas, convenções de naming, stack/libs e como são usadas, e padrões de estado/dados/erros/testes. Baseie-se SÓ no que existe — não invente nem recomende. Seja conciso (poucas dezenas de linhas): é contexto pra outros agentes, não pode inflar. Não toque em nenhum outro arquivo.`;
19
13
  function analysisPrompt() {
20
14
  try {
@@ -23,11 +17,9 @@ function analysisPrompt() {
23
17
  return doc.content.trim();
24
18
  }
25
19
  catch {
26
- /* skill ausente do cache → fallback */
27
20
  }
28
21
  return FALLBACK_PROMPT;
29
22
  }
30
- /** Existe um binário no PATH (via `--version`)? */
31
23
  function hasBin(bin) {
32
24
  try {
33
25
  const r = spawnSync(bin, ['--version'], { stdio: 'ignore' });
@@ -37,13 +29,8 @@ function hasBin(bin) {
37
29
  return false;
38
30
  }
39
31
  }
40
- /**
41
- * Roda a análise de patterns headless no `cwd`. Prefere `claude`, cai pro `codex`;
42
- * sem nenhum no PATH, não roda (retorna `ran:false`). Nunca lança.
43
- */
44
32
  export function runPatternsAnalysis(cwd) {
45
33
  const prompt = analysisPrompt();
46
- // stdin ignorado (o prompt vai por arg) — evita o agente ficar esperando stdin.
47
34
  const stdio = ['ignore', 'inherit', 'inherit'];
48
35
  if (hasBin('claude')) {
49
36
  const r = spawnSync('claude', ['-p', prompt, '--permission-mode', 'acceptEdits'], {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/lib/skills/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAGD,MAAM,eAAe,GAAG,wCAAwC,YAAY,mYAAmY,CAAC;AAEhd,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1F,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAGD,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAaD,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAGhC,MAAM,KAAK,GAAqC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEjF,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE;YAChF,GAAG;YACH,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC;AACxF,CAAC"}
@@ -2,19 +2,10 @@ import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { skillsDir } from './skills.js';
4
4
  import { DEV_ROLE, GENERAL } from './sections.js';
5
- /**
6
- * Rules do harness — convenções versionadas no `nio-skills`, na mesma taxonomia
7
- * da seleção: `rules/<role>/<área|general>/<stack|general>/rules.md`. O geral do role
8
- * fica em `rules/<role>/general/general-rules.md`.
9
- *
10
- * Este módulo lê + concatena (determinístico) pela `Selection`, e o CLI grava o
11
- * resultado no repo (`docs/_rules`). Rules são de código → só o role `dev`.
12
- */
13
5
  const RULES_ROOT = 'rules';
14
6
  function rulePath(dir, ...seg) {
15
7
  return join(dir, RULES_ROOT, ...seg);
16
8
  }
17
- /** Separa o frontmatter (`--- … ---`) do corpo. */
18
9
  function splitFrontmatter(raw) {
19
10
  const m = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
20
11
  if (!m)
@@ -27,18 +18,15 @@ function splitFrontmatter(raw) {
27
18
  }
28
19
  return { fm, body: raw.slice(m[0].length) };
29
20
  }
30
- /** Rebaixa headings um nível (`##` → `###`) pra aninharem sob o cabeçalho do bloco. */
31
21
  function demoteHeadings(md) {
32
22
  return md.replace(/^(#{1,5})(\s)/gm, '#$1$2');
33
23
  }
34
- /** Corpo (sem frontmatter, headings rebaixados) de um arquivo de regra, ou `null`. */
35
24
  function readRuleBody(path) {
36
25
  if (!existsSync(path))
37
26
  return null;
38
27
  const body = splitFrontmatter(readFileSync(path, 'utf8')).body.trim();
39
28
  return body.length > 0 ? demoteHeadings(body) : null;
40
29
  }
41
- /** Skills recomendadas (frontmatter `skills:`) de um arquivo de regra. */
42
30
  function ruleSkillsAt(path) {
43
31
  if (!existsSync(path))
44
32
  return [];
@@ -47,16 +35,10 @@ function ruleSkillsAt(path) {
47
35
  .map((s) => s.trim())
48
36
  .filter(Boolean);
49
37
  }
50
- /** Arquivo de regra geral do role (`rules/<role>/general/general-rules.md`, ou `rules.md`). */
51
38
  function generalRule(dir) {
52
39
  const named = rulePath(dir, DEV_ROLE, GENERAL, 'general-rules.md');
53
40
  return existsSync(named) ? named : rulePath(dir, DEV_ROLE, GENERAL, 'rules.md');
54
41
  }
55
- /**
56
- * Concatena o harness pela seleção: geral do role + (por área selecionada) o geral da
57
- * área + o **stack** escolhido. Ordenado (general → áreas alfabéticas). String vazia se
58
- * nada aplicável. Só o role `dev` tem rules.
59
- */
60
42
  export function concatenateRules(sel, dir = skillsDir()) {
61
43
  if (!sel.roles.includes(DEV_ROLE))
62
44
  return '';
@@ -77,10 +59,6 @@ export function concatenateRules(sel, dir = skillsDir()) {
77
59
  }
78
60
  return blocks.join('\n\n');
79
61
  }
80
- /**
81
- * Skills recomendadas (skills.sh, do frontmatter `skills:`) das áreas/stacks
82
- * selecionadas — do `rules.md` da área + do stack escolhido. Deduplicado.
83
- */
84
62
  export function collectRuleSkills(sel, dir = skillsDir()) {
85
63
  if (!sel.roles.includes(DEV_ROLE))
86
64
  return [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/lib/skills/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export const GENERAL = 'general';
4
+ export const DEV_ROLE = 'dev';
5
+ export function discoverRoles(dir) {
6
+ return subdirs(join(dir, 'skills'));
7
+ }
8
+ export function discoverAreas(dir, role) {
9
+ return subdirs(join(dir, 'skills', role)).filter((a) => a !== GENERAL);
10
+ }
11
+ export function discoverStacks(dir, role, area) {
12
+ return subdirs(join(dir, 'skills', role, area)).filter((s) => s !== GENERAL);
13
+ }
14
+ function subdirs(root) {
15
+ if (!existsSync(root))
16
+ return [];
17
+ return readdirSync(root, { withFileTypes: true })
18
+ .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
19
+ .map((e) => e.name)
20
+ .sort();
21
+ }
22
+ export function includePath(relPath, sel) {
23
+ const parts = relPath.split('/');
24
+ const kind = parts[0];
25
+ if (kind === 'commands' || kind === 'hooks')
26
+ return sel.roles.includes(DEV_ROLE);
27
+ const role = parts[1];
28
+ if (!sel.roles.includes(role))
29
+ return false;
30
+ if (kind === 'agents')
31
+ return true;
32
+ const seg2 = parts[2];
33
+ if (seg2 === undefined || seg2 === GENERAL)
34
+ return true;
35
+ if (!(seg2 in sel.stacks))
36
+ return false;
37
+ const seg3 = parts[3];
38
+ return seg3 === GENERAL || seg3 === sel.stacks[seg2];
39
+ }
40
+ export function filterForSelection(docs, sel) {
41
+ if (!sel)
42
+ return docs;
43
+ return docs.filter((d) => includePath(d.relPath, sel));
44
+ }
45
+ export function flattenSelection(docs) {
46
+ return docs.map((d) => {
47
+ const parts = d.relPath.split('/');
48
+ const kind = parts[0];
49
+ if (kind === 'agents')
50
+ return { ...d, relPath: `agents/${parts.slice(2).join('/')}` };
51
+ if (kind === 'skills') {
52
+ const rest = parts[2] === GENERAL ? parts.slice(3) : parts.slice(4);
53
+ return { ...d, relPath: `skills/${rest.join('/')}` };
54
+ }
55
+ return d;
56
+ });
57
+ }
58
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../../src/lib/skills/sections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAU9B,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtC,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IACrD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AACzE,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;IACpE,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;AACZ,CAAC;AAOD,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,GAAc;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEjF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAChC,IAAS,EACT,GAA0B;IAE1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AASD,MAAM,UAAU,gBAAgB,CAAgC,IAAS;IACvE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACtF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,13 +1,7 @@
1
1
  import { readSkillFiles, toSkillDocs } from './skills.js';
2
- import { brand } from '../brand.js';
3
- /**
4
- * Camada de **serviço** do pacote de skills pro servidor MCP: expõe os docs como
5
- * resources (leitura sob demanda) e como prompts (slash/commands no Cowork e Codex).
6
- * Só o `mcp-server.ts` importa isto — o CLI nunca precisa.
7
- */
2
+ import { brand } from '../../brand.js';
8
3
  export const SKILLS_URI_PREFIX = `${brand.name}://skills/`;
9
4
  let cache = null;
10
- /** Carrega o pacote de skills, memoizado (não muda enquanto o processo roda). */
11
5
  export function loadSkills(dir) {
12
6
  if (cache && !dir)
13
7
  return cache;
@@ -20,16 +14,9 @@ export function loadSkills(dir) {
20
14
  cache = loaded;
21
15
  return loaded;
22
16
  }
23
- /** Limpa o cache (testes / dir custom). */
24
17
  export function clearSkillsCache() {
25
18
  cache = null;
26
19
  }
27
- /**
28
- * Nome do resource em estilo caminho — agrupa a listagem por tipo/skill (como o
29
- * conector do Figma), em vez de despejar títulos soltos. Skills e commands viram
30
- * `skill/<id>` / `command/<id>`; arquivos de apoio (templates, *-PATTERN) aninham
31
- * sob a skill dona (`skill/init-sdd/templates/spec`); docs soltos viram `doc/<path>`.
32
- */
33
20
  function resourceName(doc, skillFolders) {
34
21
  if (doc.type === 'command')
35
22
  return `command/${doc.id}`;
@@ -39,7 +26,6 @@ function resourceName(doc, skillFolders) {
39
26
  return `dependency/${doc.id}`;
40
27
  if (doc.type === 'skill')
41
28
  return `skill/${doc.id}`;
42
- // doc: aninha sob a skill dona, se estiver dentro da pasta de uma.
43
29
  for (const [folder, id] of skillFolders) {
44
30
  if (doc.path.startsWith(`${folder}/`)) {
45
31
  const sub = doc.path.slice(folder.length + 1).replace(/\.md$/i, '');
@@ -49,16 +35,12 @@ function resourceName(doc, skillFolders) {
49
35
  return `doc/${doc.path.replace(/\.md$/i, '')}`;
50
36
  }
51
37
  export function skillResourceDescriptors(docs) {
52
- // Pasta (dir do SKILL.md) → id, pra aninhar os arquivos de apoio sob a skill.
53
38
  const skillFolders = new Map();
54
39
  for (const d of docs) {
55
40
  if (d.type === 'skill')
56
41
  skillFolders.set(d.path.slice(0, d.path.lastIndexOf('/')), d.id);
57
42
  }
58
43
  return docs
59
- // `command`/`skill` já são servidos como **prompts** — não repetir como resource
60
- // (senão o Cowork lista cada um duas vezes). Aqui ficam só os arquivos de apoio
61
- // (templates/patterns), agents e dependencies.
62
44
  .filter((d) => d.type !== 'command' && d.type !== 'skill')
63
45
  .map((d) => ({
64
46
  uri: `${SKILLS_URI_PREFIX}${d.path}`,
@@ -68,7 +50,6 @@ export function skillResourceDescriptors(docs) {
68
50
  }))
69
51
  .sort((a, b) => a.name.localeCompare(b.name));
70
52
  }
71
- /** Lê um resource pela URI, a partir dos docs + os markdowns crus por path. */
72
53
  export function readSkillResource(uri, docs, rawByPath) {
73
54
  if (!uri.startsWith(SKILLS_URI_PREFIX))
74
55
  throw new Error(`URI fora do pacote de skills: ${uri}`);
@@ -78,7 +59,6 @@ export function readSkillResource(uri, docs, rawByPath) {
78
59
  throw new Error(`Recurso não encontrado: ${uri}`);
79
60
  return { uri, mimeType: 'text/markdown', text: rawByPath.get(rel) ?? doc.content };
80
61
  }
81
- /** Só `command` e `skill` viram prompts (docs/agents/dependencies não). */
82
62
  function isPromptable(type) {
83
63
  return type === 'command' || type === 'skill';
84
64
  }
@@ -97,16 +77,11 @@ export function skillPromptDescriptors(docs) {
97
77
  ],
98
78
  }));
99
79
  }
100
- /** Monta o texto de um prompt: corpo do doc com `$ARGUMENTS` substituído. */
101
80
  export function buildSkillPrompt(name, args, docs) {
102
81
  const doc = docs.find((d) => d.id === name && isPromptable(d.type));
103
82
  if (!doc)
104
83
  throw new Error(`Prompt desconhecido: ${name}`);
105
84
  let text = doc.content.split('$ARGUMENTS').join(args?.args ?? '');
106
- // Cowork/Codex servem a skill como **prompt** — não têm o filesystem dela. Então os
107
- // arquivos de apoio (`templates/*`, `*-PATTERN.md`, `STANDARDS.md`) que o corpo
108
- // referencia por path relativo não existem lá. Inline-os pra a skill ficar
109
- // auto-contida (no Claude Code isso não roda — lá os arquivos são nativos).
110
85
  if (doc.type === 'skill') {
111
86
  const folder = doc.path.slice(0, doc.path.lastIndexOf('/'));
112
87
  const companions = docs
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-serve.js","sourceRoot":"","sources":["../../../src/lib/skills/skill-serve.ts"],"names":[],"mappings":"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"}
@@ -2,28 +2,19 @@ import { existsSync, mkdirSync, rmSync, cpSync, readdirSync, readFileSync, write
2
2
  import { tmpdir } from 'node:os';
3
3
  import { join } from 'node:path';
4
4
  import AdmZip from 'adm-zip';
5
- import { brand, env, homePath } from '../brand.js';
6
- /**
7
- * Skills como repo aberto (não pacote npm): o CLI baixa o zipball do GitHub pro
8
- * cache local (`~/.nio/skills`) e lê de lá — `skillsDir()` resolve pra cá sem
9
- * checkout, e `nio sync` atualiza o cache sem republicar o CLI.
10
- */
5
+ import { brand, env, homePath } from '../../brand.js';
11
6
  const DEFAULT_REPO = brand.skillsRepo;
12
7
  const DEFAULT_REF = brand.skillsRef;
13
- /** `owner/repo` do repo de skills. Sobrescrevível via `NIO_SKILLS_REPO`. */
14
8
  export function skillsRepo() {
15
9
  return env('SKILLS_REPO') || DEFAULT_REPO;
16
10
  }
17
- /** Branch/tag a baixar. Sobrescrevível via `NIO_SKILLS_REF`. */
18
11
  export function skillsRef() {
19
12
  return env('SKILLS_REF') || DEFAULT_REF;
20
13
  }
21
- /** Raiz do cache local (o conteúdo do repo: `commands/`, `skills/`, `hooks/`, …). */
22
14
  export function skillsCacheDir() {
23
15
  return homePath('skills');
24
16
  }
25
17
  const MARKER = `${brand.homeDirName}-skills.json`;
26
- /** Metadados do último fetch (repo/ref/quando). `null` se o cache não existe. */
27
18
  export function cacheMeta() {
28
19
  const p = join(skillsCacheDir(), MARKER);
29
20
  if (!existsSync(p))
@@ -35,17 +26,20 @@ export function cacheMeta() {
35
26
  return null;
36
27
  }
37
28
  }
38
- /** O cache existe e parece válido (tem ao menos `skills/` ou `commands/`)? */
39
29
  export function skillsCached() {
40
30
  const dir = skillsCacheDir();
41
31
  return existsSync(join(dir, 'skills')) || existsSync(join(dir, 'commands'));
42
32
  }
43
- /**
44
- * Baixa o repo de skills (zipball do GitHub) pro cache local. Sem `git` — usa
45
- * `fetch` (Node 20+) + `adm-zip`. Idempotente: com `force=false` e cache presente,
46
- * não toca a rede. Se o download falhar mas houver cache antigo, segue com ele.
47
- */
48
- /** Timeout do download sem isto o `fetch` pode pendurar no connect pra sempre. */
33
+ export const SKILLS_TTL_MS = 7 * 24 * 60 * 60 * 1000;
34
+ export function isFetchedAtStale(fetchedAt, ttlMs = SKILLS_TTL_MS, now = Date.now()) {
35
+ if (!fetchedAt)
36
+ return true;
37
+ const age = now - new Date(fetchedAt).getTime();
38
+ return Number.isNaN(age) || age > ttlMs;
39
+ }
40
+ export function skillsCacheStale(ttlMs = SKILLS_TTL_MS, now = Date.now()) {
41
+ return isFetchedAtStale(cacheMeta()?.fetchedAt, ttlMs, now);
42
+ }
49
43
  const DEFAULT_TIMEOUT_MS = 20_000;
50
44
  export async function fetchSkills(opts = {}) {
51
45
  const dir = skillsCacheDir();
@@ -64,13 +58,11 @@ export async function fetchSkills(opts = {}) {
64
58
  if (!res.ok)
65
59
  throw new Error(`HTTP ${res.status} ao baixar ${url}`);
66
60
  const buf = Buffer.from(await res.arrayBuffer());
67
- // O zipball tem um único dir raiz (`<repo>-<ref>/`); extrai e mira nele.
68
61
  rmSync(staging, { recursive: true, force: true });
69
62
  mkdirSync(staging, { recursive: true });
70
63
  new AdmZip(buf).extractAllTo(staging, true);
71
64
  const dirs = readdirSync(staging, { withFileTypes: true }).filter((e) => e.isDirectory());
72
65
  const root = dirs.length === 1 ? join(staging, dirs[0].name) : staging;
73
- // Substitui o cache pelo conteúdo baixado.
74
66
  rmSync(dir, { recursive: true, force: true });
75
67
  mkdirSync(dir, { recursive: true });
76
68
  cpSync(root, dir, { recursive: true });
@@ -92,8 +84,10 @@ export async function fetchSkills(opts = {}) {
92
84
  rmSync(staging, { recursive: true, force: true });
93
85
  }
94
86
  }
95
- /** Garante que o cache exista (baixa só se ausente). Best-effort pro runtime do MCP. */
96
87
  export async function ensureSkillsCache() {
97
- return fetchSkills({ force: false });
88
+ if (skillsCached() && !skillsCacheStale()) {
89
+ return fetchSkills({ force: false });
90
+ }
91
+ return fetchSkills({ force: true });
98
92
  }
99
93
  //# sourceMappingURL=skills-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-cache.js","sourceRoot":"","sources":["../../../src/lib/skills/skills-cache.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { join, relative, sep, dirname } from 'node:path';
4
4
  import { skillsCacheDir, skillsCached } from './skills-cache.js';
5
5
  import { includePath } from './sections.js';
6
- import { brand, env } from '../brand.js';
7
- /**
8
- * Diretório do conteúdo das skills. Resolve em ordem: `NIO_SKILLS_DIR`
9
- * (checkout local), `@nio-cli/skills` via require.resolve (dev legado), ou o
10
- * cache `~/.nio/skills` populado por `nio sync`/`init` (fluxo padrão).
11
- */
6
+ import { brand, env } from '../../brand.js';
12
7
  export function skillsDir() {
13
8
  const override = env('SKILLS_DIR');
14
9
  if (override && existsSync(override))
@@ -18,7 +13,6 @@ export function skillsDir() {
18
13
  return dirname(require.resolve(`${brand.skillsPackage}/package.json`));
19
14
  }
20
15
  catch {
21
- /* pacote ausente (modelo repo-aberto) → cai pro cache local */
22
16
  }
23
17
  if (skillsCached())
24
18
  return skillsCacheDir();
@@ -43,11 +37,6 @@ function listMarkdown(dir) {
43
37
  walk(dir);
44
38
  return out;
45
39
  }
46
- /**
47
- * Coleta as linhas indentadas/vazias seguintes (bloco YAML folded `>` ou literal `|`)
48
- * a partir de `lines[i + 1]`. Retorna o valor já juntado e o novo índice do cursor
49
- * (última linha consumida) pro chamador continuar o loop dali.
50
- */
51
40
  function collectBlockValue(lines, i, folded) {
52
41
  const collected = [];
53
42
  while (i + 1 < lines.length && (lines[i + 1].trim() === '' || /^\s+\S/.test(lines[i + 1]))) {
@@ -58,7 +47,6 @@ function collectBlockValue(lines, i, folded) {
58
47
  : collected.join('\n').trim();
59
48
  return { value, nextIndex: i };
60
49
  }
61
- /** Valor entre aspas simples/duplas → sem as aspas. Sem aspas → devolve como veio. */
62
50
  function unquote(value) {
63
51
  if ((value.startsWith('"') && value.endsWith('"')) ||
64
52
  (value.startsWith("'") && value.endsWith("'"))) {
@@ -66,11 +54,7 @@ function unquote(value) {
66
54
  }
67
55
  return value;
68
56
  }
69
- /**
70
- * Parser de frontmatter minimalista: `key: value` de uma linha, mais blocos
71
- * folded (`>`) e literal (`|`). Suficiente pros metadados (não é YAML completo).
72
- */
73
- function parseFrontmatter(raw) {
57
+ export function parseFrontmatter(raw) {
74
58
  const fm = {};
75
59
  const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
76
60
  if (!match)
@@ -92,13 +76,8 @@ function parseFrontmatter(raw) {
92
76
  }
93
77
  return { frontmatter: fm, body: raw.slice(match[0].length) };
94
78
  }
95
- /** Clientes de IA reconhecidos pra visibilidade de docs. */
96
- export const KNOWN_CLIENTS = ['claude-code', 'codex', 'cowork'];
79
+ export const KNOWN_CLIENTS = ['claude-code', 'codex', 'cowork', 'opencode'];
97
80
  const KNOWN_CLIENTS_SET = new Set(KNOWN_CLIENTS);
98
- /**
99
- * Parseia o campo `clients:` do frontmatter (lista separada por vírgula/espaço)
100
- * num conjunto normalizado. Vazio/ausente/sem valor válido → `null` (= todos).
101
- */
102
81
  export function parseClients(value) {
103
82
  if (!value)
104
83
  return null;
@@ -108,22 +87,16 @@ export function parseClients(value) {
108
87
  .filter((s) => KNOWN_CLIENTS_SET.has(s));
109
88
  return list.length > 0 ? [...new Set(list)] : null;
110
89
  }
111
- /** Um doc é visível pra um surface se não restringe clientes ou inclui aquele. */
112
90
  export function docForSurface(doc, surface) {
113
91
  if (!surface)
114
92
  return true;
115
93
  return !doc.clients || doc.clients.includes(surface);
116
94
  }
117
- /** Recorta a lista de docs pros visíveis num surface. */
118
95
  export function filterSkillsForSurface(docs, surface) {
119
96
  if (!surface)
120
97
  return docs;
121
98
  return docs.filter((d) => docForSurface(d, surface));
122
99
  }
123
- /**
124
- * Filtra docs crus (relPath+conteúdo) pros visíveis num surface. Docs sem
125
- * frontmatter de doc (ex.: scripts soltos) são mantidos por padrão.
126
- */
127
100
  export function filterDocsForSurface(docs, surface) {
128
101
  if (!surface)
129
102
  return docs;
@@ -137,7 +110,6 @@ function typeForPath(relPath) {
137
110
  const base = parts[parts.length - 1].toLowerCase();
138
111
  if (top === 'commands')
139
112
  return 'command';
140
- // Só `SKILL.md` é a skill; arquivos de apoio (STANDARDS.md, etc.) são `doc`.
141
113
  if (top === 'skills')
142
114
  return base === 'skill.md' ? 'skill' : 'doc';
143
115
  if (top === 'agents')
@@ -146,7 +118,6 @@ function typeForPath(relPath) {
146
118
  return 'dependency';
147
119
  return 'doc';
148
120
  }
149
- /** Id de invocação: skill = nome da pasta (SKILL.md); o resto = basename sem `.md`. */
150
121
  function idForPath(relPath) {
151
122
  const parts = relPath.split('/');
152
123
  const base = parts[parts.length - 1];
@@ -157,12 +128,7 @@ function idForPath(relPath) {
157
128
  function humanize(id) {
158
129
  return id.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
159
130
  }
160
- /**
161
- * "Kinds" do pacote que viram docs. `rules/`, `hooks/`, `index.md`, `README.md`,
162
- * `scripts/` etc. são deliberadamente ignorados — o CLI não lida com eles aqui.
163
- */
164
131
  const SKILL_KINDS = ['commands', 'skills', 'agents', 'dependencies'];
165
- /** Lê os `.md` dos kinds do pacote (`@nio-cli/skills`) como RawDoc[]. */
166
132
  export function readSkillFiles(dir = skillsDir()) {
167
133
  if (!existsSync(dir)) {
168
134
  throw new Error(`Pacote de skills não encontrado em ${dir}. Instale/publique ${brand.skillsPackage}.`);
@@ -178,7 +144,6 @@ export function readSkillFiles(dir = skillsDir()) {
178
144
  }
179
145
  return docs;
180
146
  }
181
- /** Constrói os docs a partir de arquivos crus (frontmatter + corpo). */
182
147
  export function toSkillDocs(files) {
183
148
  return files
184
149
  .map(({ path: relPath, raw }) => {
@@ -201,12 +166,6 @@ export function toSkillDocs(files) {
201
166
  export function readSkillDocs(dir = skillsDir()) {
202
167
  return toSkillDocs(readSkillFiles(dir));
203
168
  }
204
- /**
205
- * Docs `dependency` do pacote — libs externas que a CLI oferece instalar no fim do
206
- * `sync`/`init`. Escopadas pela **seleção** (role/área/stack, `general` em cascata):
207
- * `dev/general` sempre, mais as da área/stack escolhidos. Sem seleção → todas.
208
- * Best-effort: `[]` se o pacote não estiver disponível.
209
- */
210
169
  export function readDependencies(selection, dir = skillsDir()) {
211
170
  try {
212
171
  let deps = readSkillDocs(dir).filter((d) => d.type === 'dependency');
@@ -218,10 +177,6 @@ export function readDependencies(selection, dir = skillsDir()) {
218
177
  return [];
219
178
  }
220
179
  }
221
- /**
222
- * Mapa `nome de invocação → id sequencial (frontmatter)`, pra telemetria estável.
223
- * Best-effort: mapa vazio se o `@nio-cli/skills` não estiver disponível.
224
- */
225
180
  export function skillIdMap(dir = skillsDir()) {
226
181
  const map = new Map();
227
182
  try {
@@ -229,7 +184,6 @@ export function skillIdMap(dir = skillsDir()) {
229
184
  map.set(d.id, d.uid);
230
185
  }
231
186
  catch {
232
- /* @nio-cli/skills ausente → telemetria sem ids */
233
187
  }
234
188
  return map;
235
189
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/lib/skills/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAgBzD,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;QACxC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC;QACtC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -2,10 +2,6 @@ import { env } from "../brand.js";
2
2
  function enabled() {
3
3
  return env("TELEMETRY") !== "0" && !env("NO_TELEMETRY");
4
4
  }
5
- /**
6
- * Items (skills/commands/agents) provisionados a partir do plano do `provision`,
7
- * já resolvidos pro id sequencial estável (via `uidByName`).
8
- */
9
5
  export function provisionedItems(files, uidByName) {
10
6
  const seen = new Set();
11
7
  const items = [];
@@ -20,25 +16,12 @@ export function provisionedItems(files, uidByName) {
20
16
  }
21
17
  return items.sort((a, b) => a.name.localeCompare(b.name));
22
18
  }
23
- // Requisições em voo — o CLI é curto e pode encerrar antes do POST completar,
24
- // então guardamos as promises pra dar flush (`flushTelemetry`) antes de sair.
25
19
  const pending = [];
26
- /** Envia um evento de uso pro NOS. Best-effort, nunca lança. */
27
- export function track(supabase, event) {
28
- if (!supabase || !enabled())
20
+ export function track(event) {
21
+ if (!enabled())
29
22
  return;
30
- const p = supabase.functions
31
- .invoke("track-usage", { body: { ...event, at: new Date().toISOString() } })
32
- .then(() => undefined)
33
- .catch(() => {
34
- /* telemetria nunca quebra o fluxo */
35
- });
36
- pending.push(p);
23
+ void event;
37
24
  }
38
- /**
39
- * Espera as requisições de telemetria em voo (com teto de tempo) antes do CLI sair.
40
- * No servidor MCP (long-lived) não é necessário — o loop já mantém o processo vivo.
41
- */
42
25
  export async function flushTelemetry(timeoutMs = 4000) {
43
26
  if (pending.length === 0)
44
27
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAgClC,SAAS,OAAO;IACd,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,SAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GACL,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACzC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,OAAO,GAAuB,EAAE,CAAC;AAEvC,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,QAAyB,EAAE,KAAiB;IAChE,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS;SACzB,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;SAC3E,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE;QACV,qCAAqC;IACvC,CAAC,CAAC,CAAC;IACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAS,GAAG,IAAI;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,QAAQ;QACR,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAmClC,SAAS,OAAO;IACd,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,SAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GACL,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACzC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAID,MAAM,OAAO,GAAuB,EAAE,CAAC;AAOvC,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO;IACvB,KAAK,KAAK,CAAC;AACb,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAS,GAAG,IAAI;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,QAAQ;QACR,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}