@jaimevalasek/aioson 1.4.0 → 1.6.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 (301) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/LICENSE +661 -21
  3. package/README.md +9 -1
  4. package/docs/design-previews/aurora-command-ui-website.html +884 -0
  5. package/docs/design-previews/aurora-command-ui.html +682 -0
  6. package/docs/design-previews/bold-editorial-ui-website.html +658 -0
  7. package/docs/design-previews/bold-editorial-ui.html +717 -0
  8. package/docs/design-previews/clean-saas-ui-website.html +1202 -0
  9. package/docs/design-previews/clean-saas-ui.html +549 -0
  10. package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
  11. package/docs/design-previews/cognitive-core-ui.html +463 -0
  12. package/docs/design-previews/glassmorphism-ui-website.html +572 -0
  13. package/docs/design-previews/glassmorphism-ui.html +886 -0
  14. package/docs/design-previews/index.html +699 -0
  15. package/docs/design-previews/interface-design-website.html +1187 -0
  16. package/docs/design-previews/interface-design.html +513 -0
  17. package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
  18. package/docs/design-previews/neo-brutalist-ui.html +797 -0
  19. package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
  20. package/docs/design-previews/premium-command-center-ui.html +552 -0
  21. package/docs/design-previews/warm-craft-ui-website.html +684 -0
  22. package/docs/design-previews/warm-craft-ui.html +739 -0
  23. package/docs/en/cli-reference.md +20 -9
  24. package/docs/en/squad-dashboard.md +372 -0
  25. package/docs/openclaw-bridge.md +308 -0
  26. package/docs/pt/README.md +7 -0
  27. package/docs/pt/agent-sharding.md +132 -0
  28. package/docs/pt/agentes.md +131 -11
  29. package/docs/pt/busca-de-contexto.md +129 -0
  30. package/docs/pt/cache-de-contexto.md +156 -0
  31. package/docs/pt/cenarios.md +46 -2
  32. package/docs/pt/comandos-cli.md +88 -1
  33. package/docs/pt/design-hybrid-forge.md +107 -0
  34. package/docs/pt/inicio-rapido.md +72 -5
  35. package/docs/pt/inteligencia-adaptativa.md +324 -0
  36. package/docs/pt/monitor-de-contexto.md +104 -0
  37. package/docs/pt/recuperacao-de-sessao.md +125 -0
  38. package/docs/pt/sandbox.md +125 -0
  39. package/docs/pt/skills.md +98 -6
  40. package/docs/pt/squad-dashboard.md +373 -0
  41. package/docs/testing/genome-2.0-matrix.md +5 -5
  42. package/docs/testing/genome-2.0-rollout.md +9 -9
  43. package/package.json +2 -2
  44. package/src/agent-loader.js +280 -0
  45. package/src/backup-local.js +74 -0
  46. package/src/cli.js +192 -0
  47. package/src/commands/agent-loader.js +85 -0
  48. package/src/commands/backup-local-cmd.js +25 -0
  49. package/src/commands/context-cache.js +90 -0
  50. package/src/commands/context-monitor.js +92 -0
  51. package/src/commands/context-search.js +66 -0
  52. package/src/commands/design-hybrid-options.js +385 -0
  53. package/src/commands/health.js +214 -0
  54. package/src/commands/init.js +54 -13
  55. package/src/commands/install.js +52 -13
  56. package/src/commands/learning-evolve.js +355 -0
  57. package/src/commands/live.js +34 -0
  58. package/src/commands/recovery.js +43 -0
  59. package/src/commands/runtime.js +242 -0
  60. package/src/commands/sandbox.js +37 -0
  61. package/src/commands/setup-context.js +29 -4
  62. package/src/commands/setup.js +178 -0
  63. package/src/commands/skill.js +79 -32
  64. package/src/commands/squad-daemon.js +209 -0
  65. package/src/commands/squad-dashboard.js +39 -0
  66. package/src/commands/squad-deploy.js +64 -0
  67. package/src/commands/squad-doctor.js +52 -0
  68. package/src/commands/squad-mcp.js +270 -0
  69. package/src/commands/squad-processes.js +56 -0
  70. package/src/commands/squad-recovery.js +42 -0
  71. package/src/commands/squad-roi.js +291 -0
  72. package/src/commands/squad-score.js +250 -0
  73. package/src/commands/squad-status.js +37 -1
  74. package/src/commands/squad-validate.js +62 -1
  75. package/src/commands/squad-webhook.js +160 -0
  76. package/src/commands/squad-worker.js +191 -0
  77. package/src/commands/squad-worktrees.js +75 -0
  78. package/src/commands/tool-registry-cmd.js +232 -0
  79. package/src/commands/update.js +7 -0
  80. package/src/commands/web-map.js +70 -0
  81. package/src/commands/web-scrape.js +71 -0
  82. package/src/constants.js +17 -0
  83. package/src/context-cache.js +159 -0
  84. package/src/context-search.js +326 -0
  85. package/src/context-writer.js +45 -1
  86. package/src/design-variation-catalog.js +503 -0
  87. package/src/i18n/messages/en.js +159 -3
  88. package/src/i18n/messages/es.js +147 -2
  89. package/src/i18n/messages/fr.js +147 -2
  90. package/src/i18n/messages/pt-BR.js +158 -3
  91. package/src/install-animation.js +260 -0
  92. package/src/install-profile.js +143 -0
  93. package/src/install-wizard.js +474 -0
  94. package/src/installer.js +38 -10
  95. package/src/lib/webhook-server.js +328 -0
  96. package/src/mcp-connectors/registry.js +602 -0
  97. package/src/parser.js +7 -1
  98. package/src/recovery-context-session.js +154 -0
  99. package/src/runtime-store.js +355 -2
  100. package/src/sandbox.js +177 -0
  101. package/src/squad/external-session.js +180 -0
  102. package/src/squad/inter-squad.js +74 -0
  103. package/src/squad/recovery-context.js +201 -0
  104. package/src/squad/worktree-manager.js +114 -0
  105. package/src/squad-daemon.js +490 -0
  106. package/src/squad-dashboard/api.js +223 -0
  107. package/src/squad-dashboard/attachment-handler.js +93 -0
  108. package/src/squad-dashboard/context-monitor.js +157 -0
  109. package/src/squad-dashboard/execution-logs.js +115 -0
  110. package/src/squad-dashboard/hunk-review.js +209 -0
  111. package/src/squad-dashboard/metrics.js +133 -0
  112. package/src/squad-dashboard/process-monitor.js +125 -0
  113. package/src/squad-dashboard/renderer.js +858 -0
  114. package/src/squad-dashboard/server.js +232 -0
  115. package/src/squad-dashboard/styles.js +525 -0
  116. package/src/squad-dashboard/token-tracker.js +99 -0
  117. package/src/tool-executor.js +94 -0
  118. package/src/updater.js +11 -3
  119. package/src/web.js +284 -0
  120. package/src/worker-runner.js +339 -0
  121. package/template/.aioson/agents/analyst.md +62 -3
  122. package/template/.aioson/agents/architect.md +42 -0
  123. package/template/.aioson/agents/design-hybrid-forge.md +127 -0
  124. package/template/.aioson/agents/dev.md +223 -11
  125. package/template/.aioson/agents/deyvin.md +65 -0
  126. package/template/.aioson/agents/neo.md +152 -0
  127. package/template/.aioson/agents/orache.md +17 -0
  128. package/template/.aioson/agents/orchestrator.md +26 -0
  129. package/template/.aioson/agents/pm.md +58 -0
  130. package/template/.aioson/agents/product.md +88 -12
  131. package/template/.aioson/agents/qa.md +80 -0
  132. package/template/.aioson/agents/setup.md +128 -22
  133. package/template/.aioson/agents/sheldon.md +704 -0
  134. package/template/.aioson/agents/squad.md +191 -0
  135. package/template/.aioson/agents/tester.md +410 -0
  136. package/template/.aioson/agents/ux-ui.md +12 -0
  137. package/template/.aioson/config.md +21 -0
  138. package/template/.aioson/context/forensics/.gitkeep +0 -0
  139. package/template/.aioson/context/seeds/seed-example.md +27 -0
  140. package/template/.aioson/context/user-profile.md +42 -0
  141. package/template/.aioson/locales/en/agents/analyst.md +8 -0
  142. package/template/.aioson/locales/en/agents/architect.md +8 -0
  143. package/template/.aioson/locales/en/agents/dev.md +66 -7
  144. package/template/.aioson/locales/en/agents/deyvin.md +8 -0
  145. package/template/.aioson/locales/en/agents/neo.md +8 -0
  146. package/template/.aioson/locales/en/agents/orchestrator.md +26 -0
  147. package/template/.aioson/locales/en/agents/qa.md +49 -0
  148. package/template/.aioson/locales/en/agents/setup.md +35 -2
  149. package/template/.aioson/locales/en/agents/sheldon.md +340 -0
  150. package/template/.aioson/locales/en/agents/ux-ui.md +8 -0
  151. package/template/.aioson/locales/es/agents/analyst.md +8 -0
  152. package/template/.aioson/locales/es/agents/architect.md +8 -0
  153. package/template/.aioson/locales/es/agents/dev.md +66 -7
  154. package/template/.aioson/locales/es/agents/deyvin.md +8 -0
  155. package/template/.aioson/locales/es/agents/neo.md +48 -0
  156. package/template/.aioson/locales/es/agents/orchestrator.md +26 -0
  157. package/template/.aioson/locales/es/agents/qa.md +26 -0
  158. package/template/.aioson/locales/es/agents/setup.md +35 -2
  159. package/template/.aioson/locales/es/agents/sheldon.md +192 -0
  160. package/template/.aioson/locales/es/agents/squad.md +63 -0
  161. package/template/.aioson/locales/es/agents/ux-ui.md +8 -0
  162. package/template/.aioson/locales/fr/agents/analyst.md +8 -0
  163. package/template/.aioson/locales/fr/agents/architect.md +8 -0
  164. package/template/.aioson/locales/fr/agents/dev.md +66 -7
  165. package/template/.aioson/locales/fr/agents/deyvin.md +8 -0
  166. package/template/.aioson/locales/fr/agents/neo.md +48 -0
  167. package/template/.aioson/locales/fr/agents/orchestrator.md +26 -0
  168. package/template/.aioson/locales/fr/agents/qa.md +26 -0
  169. package/template/.aioson/locales/fr/agents/setup.md +35 -2
  170. package/template/.aioson/locales/fr/agents/sheldon.md +192 -0
  171. package/template/.aioson/locales/fr/agents/squad.md +63 -0
  172. package/template/.aioson/locales/fr/agents/ux-ui.md +8 -0
  173. package/template/.aioson/locales/pt-BR/agents/analyst.md +19 -0
  174. package/template/.aioson/locales/pt-BR/agents/architect.md +19 -0
  175. package/template/.aioson/locales/pt-BR/agents/dev.md +75 -12
  176. package/template/.aioson/locales/pt-BR/agents/deyvin.md +8 -0
  177. package/template/.aioson/locales/pt-BR/agents/neo.md +147 -0
  178. package/template/.aioson/locales/pt-BR/agents/orchestrator.md +26 -0
  179. package/template/.aioson/locales/pt-BR/agents/product.md +8 -3
  180. package/template/.aioson/locales/pt-BR/agents/qa.md +60 -0
  181. package/template/.aioson/locales/pt-BR/agents/setup.md +35 -2
  182. package/template/.aioson/locales/pt-BR/agents/sheldon.md +192 -0
  183. package/template/.aioson/locales/pt-BR/agents/squad.md +105 -0
  184. package/template/.aioson/locales/pt-BR/agents/ux-ui.md +8 -0
  185. package/template/.aioson/schemas/squad-blueprint.schema.json +21 -0
  186. package/template/.aioson/schemas/squad-manifest.schema.json +178 -1
  187. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
  188. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
  189. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
  190. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
  191. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
  192. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
  193. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
  194. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
  195. package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +205 -0
  196. package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -0
  197. package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -0
  198. package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -0
  199. package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -0
  200. package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -0
  201. package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -0
  202. package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -0
  203. package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +210 -0
  204. package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -0
  205. package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -0
  206. package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -0
  207. package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -0
  208. package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -0
  209. package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -0
  210. package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -0
  211. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +55 -9
  212. package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -0
  213. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +1 -1
  214. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +100 -0
  215. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +43 -9
  216. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +40 -0
  217. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +1 -1
  218. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +99 -12
  219. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
  220. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
  221. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
  222. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
  223. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
  224. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
  225. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
  226. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
  227. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
  228. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
  229. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
  230. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
  231. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
  232. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
  233. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
  234. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
  235. package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +209 -0
  236. package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -0
  237. package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -0
  238. package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -0
  239. package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -0
  240. package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -0
  241. package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -0
  242. package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -0
  243. package/template/.aioson/skills/premium-visual-design/SKILL.md +83 -0
  244. package/template/.aioson/skills/premium-visual-design/components/agent-badge.md +92 -0
  245. package/template/.aioson/skills/premium-visual-design/components/dependency-node.md +102 -0
  246. package/template/.aioson/skills/premium-visual-design/components/mention-autocomplete.md +136 -0
  247. package/template/.aioson/skills/premium-visual-design/components/notification-center.md +136 -0
  248. package/template/.aioson/skills/premium-visual-design/components/review-action-bar.md +188 -0
  249. package/template/.aioson/skills/premium-visual-design/components/team-switcher.md +131 -0
  250. package/template/.aioson/skills/premium-visual-design/patterns/agent-message-thread.md +198 -0
  251. package/template/.aioson/skills/premium-visual-design/patterns/notification-panel.md +275 -0
  252. package/template/.aioson/skills/premium-visual-design/patterns/review-workflow-ui.md +234 -0
  253. package/template/.aioson/skills/premium-visual-design/patterns/task-dependency-graph.md +147 -0
  254. package/template/.aioson/skills/premium-visual-design/tokens/status-extended.md +142 -0
  255. package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +45 -0
  256. package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
  257. package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
  258. package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
  259. package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
  260. package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +66 -0
  261. package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
  262. package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +144 -0
  263. package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
  264. package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
  265. package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +291 -0
  266. package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +117 -0
  267. package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +188 -0
  268. package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
  269. package/template/.aioson/skills/squad/formats/catalog.json +15 -0
  270. package/template/.aioson/skills/squad/formats/content/blog-post.md +47 -0
  271. package/template/.aioson/skills/squad/formats/content/newsletter.md +47 -0
  272. package/template/.aioson/skills/squad/formats/creative/podcast-script.md +43 -0
  273. package/template/.aioson/skills/squad/formats/creative/video-script.md +41 -0
  274. package/template/.aioson/skills/squad/formats/social/instagram-feed.md +42 -0
  275. package/template/.aioson/skills/squad/formats/social/linkedin-post.md +42 -0
  276. package/template/.aioson/skills/squad/formats/social/tiktok.md +39 -0
  277. package/template/.aioson/skills/squad/formats/social/twitter-thread.md +39 -0
  278. package/template/.aioson/skills/squad/formats/social/youtube-long.md +47 -0
  279. package/template/.aioson/skills/squad/formats/social/youtube-shorts.md +39 -0
  280. package/template/.aioson/skills/squad/patterns/multi-platform-pattern.md +108 -0
  281. package/template/.aioson/skills/squad/patterns/persona-based-pattern.md +98 -0
  282. package/template/.aioson/skills/squad/patterns/pipeline-pattern.md +106 -0
  283. package/template/.aioson/skills/squad/patterns/review-loop-pattern.md +81 -0
  284. package/template/.aioson/skills/squad/references/checklist-templates.md +122 -0
  285. package/template/.aioson/skills/squad/references/executor-archetypes.md +123 -0
  286. package/template/.aioson/skills/squad/references/workflow-templates.md +169 -0
  287. package/template/.aioson/skills/static/debugging-protocol.md +42 -0
  288. package/template/.aioson/skills/static/git-worktrees.md +36 -0
  289. package/template/.aioson/tasks/implementation-plan.md +19 -0
  290. package/template/.aioson/tasks/squad-design.md +28 -0
  291. package/template/.aioson/tasks/squad-profile.md +48 -0
  292. package/template/.aioson/tasks/squad-review.md +61 -0
  293. package/template/.aioson/tasks/squad-task-decompose.md +66 -0
  294. package/template/.claude/commands/aioson/agent/neo.md +5 -0
  295. package/template/.claude/commands/aioson/agent/tester.md +5 -0
  296. package/template/.gemini/GEMINI.md +1 -0
  297. package/template/.gemini/commands/aios-neo.toml +4 -0
  298. package/template/.gemini/commands/aios-tester.toml +6 -0
  299. package/template/AGENTS.md +26 -1
  300. package/template/CLAUDE.md +6 -2
  301. package/template/OPENCODE.md +2 -0
@@ -10,6 +10,8 @@ module.exports = {
10
10
  'aioson init <project-name> [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=pt-BR]',
11
11
  help_install:
12
12
  'aioson install [path] [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=pt-BR]',
13
+ help_setup:
14
+ 'aioson setup [path] [--defaults] [--framework=<nome>] [--lang=en|pt-BR|es|fr] [--project-name=<nome>] [--force] [--dry-run] [--tool=codex|claude|gemini|opencode] [--locale=pt-BR]',
13
15
  help_update:
14
16
  'aioson update [path] [--dry-run] [--lang=en|pt-BR|es|fr] [--locale=pt-BR]',
15
17
  help_info: 'aioson info [path] [--json] [--locale=pt-BR]',
@@ -59,6 +61,10 @@ module.exports = {
59
61
  'aioson qa:scan [path] [--url=<app-url>] [--depth=3] [--max-pages=50] [--headed] [--html] [--json] [--locale=pt-BR]',
60
62
  help_qa_report:
61
63
  'aioson qa:report [path] [--html] [--json] [--locale=pt-BR]',
64
+ help_web_map:
65
+ 'aioson web:map [path] --url=<url> [--depth=<N>] [--max-pages=<N>] [--include-external] [--json] [--locale=pt-BR]',
66
+ help_web_scrape:
67
+ 'aioson web:scrape [path] --url=<url> [--format=markdown|text|html|links] [--json] [--locale=pt-BR]',
62
68
  help_scan_project:
63
69
  'aioson scan:project [path] --folder=<pasta[,pasta2]> [--summary-mode=titles|summaries|raw] [--context-mode=merge|rewrite] [--with-llm] [--provider=<name>] [--llm-model=<name>] [--dry-run] [--json] [--locale=pt-BR]',
64
70
  help_config:
@@ -85,6 +91,18 @@ module.exports = {
85
91
  'aioson squad:investigate [path] [--sub=list|show|score|link|register] [--investigation=<slug>] [--squad=<slug>] [--locale=pt-BR]',
86
92
  help_squad_learning:
87
93
  'aioson squad:learning [path] [--sub=list|stats|archive|promote|export] [--squad=<slug>] [--status=<status>] [--locale=pt-BR]',
94
+ help_squad_dashboard:
95
+ 'aioson squad:dashboard [path] [--port=4180] [--squad=<slug>] [--locale=pt-BR]',
96
+ help_squad_worker:
97
+ 'aioson squad:worker [path] [--sub=list|run|test|logs|scaffold] [--squad=<slug>] [--worker=<slug>] [--input=<json>] [--locale=pt-BR]',
98
+ help_squad_daemon:
99
+ 'aioson squad:daemon [path] [--sub=start|status|stop|logs] [--squad=<slug>] [--port=<N>] [--locale=pt-BR]',
100
+ help_squad_mcp:
101
+ 'aioson squad:mcp [path] [--sub=status|connectors|configure|test] [--squad=<slug>] [--mcp=<slug>] [--connector=<id>]',
102
+ help_squad_roi:
103
+ 'aioson squad:roi [path] [--sub=config|metric|report|export] [--squad=<slug>] [--key=<metrica>] [--value=<N>]',
104
+ help_squad_score:
105
+ 'aioson squad:score [path] --squad=<slug> [--locale=pt-BR]',
88
106
  help_learning:
89
107
  'aioson learning [path] [--sub=list|stats|promote] [--status=<status>] [--id=<learning-id>] [--locale=pt-BR]',
90
108
  help_runtime_init:
@@ -139,6 +157,8 @@ module.exports = {
139
157
  'aioson skill:list [caminho] [--json] [--locale=pt-BR]',
140
158
  help_skill_remove:
141
159
  'aioson skill:remove [caminho] --slug=<nome> [--json] [--locale=pt-BR]',
160
+ help_design_hybrid_options:
161
+ 'aioson design-hybrid:options [caminho] [--advanced] [--json] [--locale=pt-BR]',
142
162
  help_cloud_import_squad:
143
163
  'aioson cloud:import:squad [path] --url=<snapshot-url> [--force] [--snapshots-only] [--dry-run] [--json] [--locale=pt-BR]',
144
164
  help_cloud_import_genome:
@@ -168,7 +188,7 @@ module.exports = {
168
188
  },
169
189
  init: {
170
190
  usage_error:
171
- 'Uso: aioson init <project-name> [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=pt-BR]',
191
+ 'Uso: aioson init <project-name> [--force] [--dry-run] [--all] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=pt-BR]',
172
192
  non_empty_dir: 'Diretorio nao esta vazio: {targetDir}. Use --force para continuar.',
173
193
  created_at: 'Projeto criado em: {targetDir}',
174
194
  files_copied: 'Arquivos copiados: {count}',
@@ -180,6 +200,9 @@ module.exports = {
180
200
  step_agent_prompt:
181
201
  '4. Gere o prompt de setup para sua ferramenta: aioson agent:prompt setup --tool={tool}'
182
202
  },
203
+ init_all: {
204
+ installing_full: 'Instalacao completa (todas as ferramentas + squads) — wizard ignorado via --all'
205
+ },
183
206
  install: {
184
207
  framework_detected: 'Framework detectado: {framework} ({evidence})',
185
208
  framework_not_detected: 'Nenhum framework detectado. Instalando em modo generico.',
@@ -196,11 +219,18 @@ module.exports = {
196
219
  existing_project_scan_hint:
197
220
  ' aioson scan:project . --folder=src --with-llm --provider=<provider> (gera discovery.md + skeleton-system.md; sem --with-llm gera apenas os mapas locais)'
198
221
  },
222
+ install_wizard: {
223
+ ready_to_install: 'Pronto para instalar:',
224
+ press_enter_to_install: 'Pressione enter para instalar ou q para cancelar.',
225
+ deselected_warning: '⚠ Itens desmarcados NAO serao removidos automaticamente.',
226
+ deselected_hint: ' Remova manualmente se necessario.'
227
+ },
199
228
  update: {
200
229
  not_installed: 'Nenhuma instalacao do AIOSON encontrada em {targetDir}.',
201
230
  done_at: 'Atualizacao concluida em: {targetDir}',
202
231
  files_updated: 'Arquivos atualizados: {count}',
203
- backups_created: 'Backups criados: {count}'
232
+ backups_created: 'Backups criados: {count}',
233
+ reconfigure_hint: 'Novas opcoes podem estar disponiveis. Execute: aioson install --reconfigure'
204
234
  },
205
235
  info: {
206
236
  cli_version: 'AIOSON CLI: v{version}',
@@ -330,6 +360,22 @@ module.exports = {
330
360
  selected_line: ' {index}. {path} — {reason}',
331
361
  hint_use: 'Use {path} como contexto minimo inicial na sua sessao de IA.'
332
362
  },
363
+ setup: {
364
+ installing: 'Instalando template AIOSON...',
365
+ installed: 'Template instalado ({count} arquivos).',
366
+ no_framework_detected: 'Nenhum framework detectado neste diretorio (projeto novo).',
367
+ framework_detected: 'Framework detectado: {framework} (instalado={installed})',
368
+ writing_context: 'Escrevendo contexto do projeto...',
369
+ done: 'Setup concluido.',
370
+ step_agents: ' Proximo: abra seu cliente de IA e ative @setup para confirmar ou ajustar o contexto.',
371
+ step_agent_prompt: ' Ou execute: aioson agent:prompt setup . --tool={tool}',
372
+ q_project_name: 'Nome do projeto',
373
+ q_framework: 'Framework / stack principal (ex: Python, Node, Laravel, Django)',
374
+ q_lang: 'Idioma para respostas dos agentes (ex: en, pt-BR, es, fr)',
375
+ q_confirm_framework: 'Usar framework detectado? (true/false)',
376
+ q_override_framework: 'Framework',
377
+ q_framework_installed: 'Framework instalado? (true/false)'
378
+ },
333
379
  setup_context: {
334
380
  detected: 'Framework detectado: {framework} (installed={installed})',
335
381
  q_project_name: 'Nome do projeto',
@@ -758,6 +804,23 @@ module.exports = {
758
804
  not_found: 'Nenhum relatorio QA encontrado. Execute: aioson qa:run ou aioson qa:scan',
759
805
  html_report_written: 'Relatorio HTML escrito: {path}'
760
806
  },
807
+ web_map: {
808
+ url_missing: 'Opcao obrigatoria ausente: --url=<url>.',
809
+ starting: 'Mapeando site: {url}',
810
+ pages_found: 'Paginas descobertas: {count}',
811
+ page_line: '- {url} | profundidade={depth} | status={status} | links={links}',
812
+ done: 'Mapa web concluido.',
813
+ failed: 'Falha no mapa web: {error}'
814
+ },
815
+ web_scrape: {
816
+ url_missing: 'Opcao obrigatoria ausente: --url=<url>.',
817
+ invalid_format: 'Valor invalido para --format: {format}. Use markdown, text, html ou links.',
818
+ fetching: 'Buscando pagina: {url}',
819
+ title_line: 'Titulo: {title}',
820
+ status_line: 'Status: {status} | Content-Type: {type}',
821
+ done: 'Web scrape concluido ({format}).',
822
+ failed: 'Falha no web scrape: {error}'
823
+ },
761
824
  config: {
762
825
  usage_error:
763
826
  'Uso: aioson config <set KEY=value|show|get KEY> [--json] [--locale=pt-BR]',
@@ -841,7 +904,9 @@ module.exports = {
841
904
  sessions: ' Sessoes : {count} ({path})',
842
905
  latest_html: ' Latest HTML : {value}',
843
906
  logs: ' Logs : {count} ({path})',
844
- genomes: ' Genomes : {count} no squad / {agent_count} vinculos por agente'
907
+ genomes: ' Genomes : {count} no squad / {agent_count} vinculos por agente',
908
+ model_tiers: ' Model Tiers : {value}',
909
+ estimated_cost: ' Custo Est. : ~${value}/run'
845
910
  },
846
911
  squad_agent_create: {
847
912
  no_name: 'Uso: aioson squad:agent-create [path] --name=<nome-agente> [--type=agent|assistant|clone|worker] [--scope=my-agents|squad] [--squad=<slug>]',
@@ -965,6 +1030,96 @@ module.exports = {
965
1030
  registered: 'Investigacao registrada: {slug} ({path})',
966
1031
  unknown_sub: 'Subcomando desconhecido: {sub}. Use: list, show, score, link, register.'
967
1032
  },
1033
+ squad_daemon: {
1034
+ squad_required: 'Slug do squad e obrigatorio. Use --squad=<slug>.',
1035
+ started: 'Daemon iniciado para squad "{squad}" na porta {port} ({workers} workers, {cron} cron jobs)',
1036
+ webhook_hint: 'Endpoint webhook: POST http://127.0.0.1:{port}/webhook/<worker-slug>',
1037
+ stop_hint: 'Pressione Ctrl+C para parar.',
1038
+ stopping: 'Parando daemon...',
1039
+ start_failed: 'Falha ao iniciar daemon: {error}',
1040
+ no_runtime: 'Runtime store nao encontrado. Execute aioson runtime:init primeiro.',
1041
+ no_daemons: 'Nenhum registro de daemon encontrado.',
1042
+ not_found: 'Nenhum registro de daemon para o squad: {squad}',
1043
+ not_running: 'O daemon do squad "{squad}" nao esta rodando.',
1044
+ signal_sent: 'SIGTERM enviado ao daemon de "{squad}" (pid {pid}).',
1045
+ process_gone: 'O processo do daemon de "{squad}" nao esta mais rodando.',
1046
+ no_logs: 'Nenhum log de atividade do daemon encontrado.',
1047
+ unknown_sub: 'Subcomando desconhecido: {sub}. Use: start, status, stop, logs.'
1048
+ },
1049
+
1050
+ squad_mcp: {
1051
+ squad_required: 'Slug do squad e obrigatorio. Use --squad=<slug>.',
1052
+ connectors_title: 'Conectores MCP Integrados:',
1053
+ actions: 'Acoes',
1054
+ required_config: 'Obrigatorio',
1055
+ no_integrations: 'Nenhuma integracao configurada para o squad "{squad}".',
1056
+ missing_config: 'Config ausente',
1057
+ calls: 'Chamadas',
1058
+ mcp_required: 'Slug do MCP e obrigatorio. Use --mcp=<slug>.',
1059
+ connector_required: 'ID do conector e obrigatorio. Use --connector=<id>.',
1060
+ unknown_connector: 'Conector desconhecido: {connector}. Use --sub=connectors para listar.',
1061
+ configured: 'Integracao "{mcp}" configurada com conector "{connector}" (status: {status}).',
1062
+ still_missing: 'Ainda faltam env/config: {keys}',
1063
+ not_configured: 'Integracao "{mcp}" nao esta configurada.',
1064
+ test_missing: 'Integracao "{mcp}" tem config ausente: {keys}',
1065
+ test_ok: 'Integracao "{mcp}" ({connector}) — config OK.',
1066
+ health_url: 'URL de health check: {url}',
1067
+ testing_connection: 'Testando conexao...',
1068
+ health_ok: 'Conexao OK (HTTP {statusCode})',
1069
+ health_error: 'Erro na conexao: {error}',
1070
+ health_skipped: 'Verificacao de saude nao disponivel para este connector',
1071
+ action_required: 'Slug da acao e obrigatorio. Use --action=<slug>.',
1072
+ invalid_input: 'JSON invalido. Forneca JSON valido com --input.',
1073
+ unknown_sub: 'Subcomando desconhecido: {sub}. Use: status, connectors, configure, test, call.'
1074
+ },
1075
+
1076
+ squad_roi: {
1077
+ squad_required: 'Slug do squad e obrigatorio. Use --squad=<slug>.',
1078
+ config_saved: 'Config de ROI salva para o squad "{squad}".',
1079
+ pricing_model: 'Modelo de precificacao',
1080
+ setup_fee: 'Taxa de implantacao',
1081
+ monthly_fee: 'Mensalidade',
1082
+ percentage: 'Percentual',
1083
+ contract: 'Contrato',
1084
+ metric_required: 'Chave e valor da metrica sao obrigatorios. Use --key=<nome> --value=<N>.',
1085
+ metric_saved: 'Metrica "{key}" = {value} salva para o squad "{squad}".',
1086
+ no_metrics: 'Nenhuma metrica encontrada para o squad "{squad}".',
1087
+ report_title: 'Relatorio de ROI — {squad}',
1088
+ baseline: 'Baseline',
1089
+ actual: 'Atual',
1090
+ target: 'Meta',
1091
+ period: 'Periodo',
1092
+ cost_section: 'Resumo de Custos:',
1093
+ monthly_cost: 'Custo mensal efetivo',
1094
+ exported: 'Relatorio exportado para {file} ({format}).',
1095
+ unknown_sub: 'Subcomando desconhecido: {sub}. Use: config, metric, report, export.'
1096
+ },
1097
+
1098
+ squad_worker: {
1099
+ squad_required: 'Slug do squad e obrigatorio. Use --squad=<slug>.',
1100
+ no_workers: 'Nenhum worker encontrado para este squad.',
1101
+ run_usage: 'Uso: aioson squad:worker --sub=run --squad=<slug> --worker=<slug> [--input=<json>]',
1102
+ test_usage: 'Uso: aioson squad:worker --sub=test --squad=<slug> --worker=<slug>',
1103
+ scaffold_usage: 'Uso: aioson squad:worker --sub=scaffold --squad=<slug> --worker=<slug> [--trigger=manual|event|scheduled]',
1104
+ not_found: 'Worker nao encontrado: {worker}',
1105
+ invalid_input: 'JSON invalido. Forneca JSON valido com --input.',
1106
+ run_success: 'Worker "{worker}" concluido com sucesso.',
1107
+ run_failed: 'Worker "{worker}" falhou: {error}',
1108
+ test_passed: 'Worker "{worker}" teste aprovado.',
1109
+ test_failed: 'Worker "{worker}" teste falhou: {error}',
1110
+ scaffold_created: 'Worker "{worker}" criado em {path}',
1111
+ no_runtime: 'Runtime store nao encontrado. Execute aioson runtime:init primeiro.',
1112
+ no_logs: 'Nenhuma execucao de worker encontrada.',
1113
+ unknown_sub: 'Subcomando desconhecido: {sub}. Use: list, run, test, logs, scaffold.'
1114
+ },
1115
+
1116
+ squad_dashboard: {
1117
+ started: 'Squad Dashboard rodando em {url} (porta {port})',
1118
+ filtered: 'Filtrando para squad: {squad}',
1119
+ stop_hint: 'Pressione Ctrl+C para parar.',
1120
+ stopping: 'Parando Squad Dashboard...',
1121
+ port_in_use: 'Porta {port} ja esta em uso. Tente --port=<outra>'
1122
+ },
968
1123
  implementation_plan: {
969
1124
  not_found: 'Plano de implementacao nao encontrado: {file}',
970
1125
  no_runtime: 'Runtime store nao encontrado. Execute aioson runtime:init primeiro.',
@@ -0,0 +1,260 @@
1
+ 'use strict';
2
+
3
+ const AIOSON_LETTERS = [
4
+ // A
5
+ [' █████╗ ', ' ██╔══██╗', ' ███████║', ' ██╔══██║', ' ██║ ██║', ' ╚═╝ ╚═╝'],
6
+ // I
7
+ ['██╗', '██║', '██║', '██║', '██║', '╚═╝'],
8
+ // O
9
+ [' ██████╗ ', '██╔═══██╗', '██║ ██║', '██║ ██║', '╚██████╔╝', ' ╚═════╝ '],
10
+ // S
11
+ ['███████╗', '██╔════╝', '███████╗', '╚════██║', '███████║', '╚══════╝'],
12
+ // O
13
+ [' ██████╗ ', '██╔═══██╗', '██║ ██║', '██║ ██║', '╚██████╔╝', ' ╚═════╝ '],
14
+ // N
15
+ ['███╗ ██╗', '████╗ ██║', '██╔██╗ ██║', '██║╚██╗██║', '██║ ╚████║', '╚═╝ ╚═══╝']
16
+ ];
17
+
18
+ const LETTER_DELAY_MS = 130;
19
+ const TAGLINE_CHAR_DELAY_MS = 25;
20
+ const PULSE_DELAY_MS = 150;
21
+ const HEIGHT = 6;
22
+
23
+ function sleep(ms) {
24
+ return new Promise(resolve => setTimeout(resolve, ms));
25
+ }
26
+
27
+ function renderProgress({ copied, total, file }, stdout = process.stdout) {
28
+ if (!stdout.isTTY) return;
29
+ const pct = Math.round((copied / total) * 20);
30
+ const bar = '█'.repeat(pct) + '░'.repeat(20 - pct);
31
+ const shortFile = file.length > 35 ? '...' + file.slice(-32) : file;
32
+ const line = ` \x1b[36m●\x1b[0m Installing \x1b[90m[${bar}]\x1b[0m ${copied}/${total} \x1b[90m${shortFile}\x1b[0m`;
33
+ stdout.write(`\r\x1b[K${line}`);
34
+ }
35
+
36
+ async function renderRevealAnimation(version, stdout = process.stdout) {
37
+ if (!stdout.isTTY) return;
38
+
39
+ const noColor = process.env.NO_COLOR !== undefined;
40
+ const dumb = process.env.TERM === 'dumb';
41
+ const cols = stdout.columns || 80;
42
+
43
+ if (dumb || cols < 50) return;
44
+
45
+ const cyan = noColor ? '' : '\x1b[1;36m';
46
+ const dim = noColor ? '' : '\x1b[90m';
47
+ const reset = noColor ? '' : '\x1b[0m';
48
+ const bold = noColor ? '' : '\x1b[1m';
49
+
50
+ // Clear progress line
51
+ stdout.write('\r\x1b[K\n');
52
+
53
+ // Phase 1: Reveal letter by letter
54
+ for (let letterIdx = 0; letterIdx <= AIOSON_LETTERS.length; letterIdx++) {
55
+ if (letterIdx > 0) stdout.write(`\x1b[${HEIGHT}A`);
56
+
57
+ for (let row = 0; row < HEIGHT; row++) {
58
+ stdout.write('\x1b[K ');
59
+ for (let l = 0; l < letterIdx; l++) {
60
+ stdout.write(`${cyan}${AIOSON_LETTERS[l][row]}${reset} `);
61
+ }
62
+ stdout.write('\n');
63
+ }
64
+
65
+ if (letterIdx < AIOSON_LETTERS.length) {
66
+ await sleep(LETTER_DELAY_MS);
67
+ }
68
+ }
69
+
70
+ // Phase 2: Tagline slide-in
71
+ const tagline = `AI Operating Framework v${version}`;
72
+ stdout.write('\n ');
73
+ for (const ch of tagline) {
74
+ stdout.write(`${dim}${ch}${reset}`);
75
+ await sleep(TAGLINE_CHAR_DELAY_MS);
76
+ }
77
+ stdout.write('\n');
78
+
79
+ // Phase 3: Breathing pulse (1 cycle)
80
+ await sleep(PULSE_DELAY_MS);
81
+ stdout.write(`\x1b[${HEIGHT + 2}A`);
82
+ for (let row = 0; row < HEIGHT; row++) {
83
+ stdout.write('\x1b[K ');
84
+ for (const letter of AIOSON_LETTERS) {
85
+ stdout.write(`${bold}${cyan}${letter[row]}${reset} `);
86
+ }
87
+ stdout.write('\n');
88
+ }
89
+ stdout.write('\n'); // skip tagline line
90
+ stdout.write('\n'); // space before summary
91
+
92
+ await sleep(PULSE_DELAY_MS);
93
+ }
94
+
95
+ function renderInstallSummary({ result, installProfile, stdout = process.stdout }) {
96
+ const isTTY = Boolean(stdout.isTTY);
97
+ const noColor = process.env.NO_COLOR !== undefined;
98
+
99
+ const green = (isTTY && !noColor) ? '\x1b[32m' : '';
100
+ const dim = (isTTY && !noColor) ? '\x1b[90m' : '';
101
+ const cyan = (isTTY && !noColor) ? '\x1b[36m' : '';
102
+ const yellow = (isTTY && !noColor) ? '\x1b[33m' : '';
103
+ const reset = (isTTY && !noColor) ? '\x1b[0m' : '';
104
+
105
+ const TOOL_NAMES = {
106
+ claude: 'Claude Code',
107
+ codex: 'Codex',
108
+ gemini: 'Gemini CLI',
109
+ opencode: 'OpenCode'
110
+ };
111
+
112
+ const DESIGN_NAMES = {
113
+ 'none': 'None',
114
+ 'all': 'All design skills',
115
+ 'clean-saas-ui': 'Clean SaaS UI',
116
+ 'aurora-command-ui': 'Aurora Command UI',
117
+ 'cognitive-core-ui': 'Cognitive Core UI',
118
+ 'bold-editorial-ui': 'Bold Editorial UI',
119
+ 'warm-craft-ui': 'Warm Craft UI',
120
+ 'glassmorphism-ui': 'Glassmorphism UI',
121
+ 'neo-brutalist-ui': 'Neo-Brutalist UI',
122
+ 'premium-command-center-ui': 'Premium Command Center UI',
123
+ 'interface-design': 'Interface Design'
124
+ };
125
+
126
+ const LOCALE_NAMES = {
127
+ 'en': 'English',
128
+ 'pt-BR': 'Português (Brasil)',
129
+ 'es': 'Español',
130
+ 'fr': 'Français'
131
+ };
132
+
133
+ const toolNames = installProfile
134
+ ? installProfile.tools.map(t => TOOL_NAMES[t] || t).join(', ')
135
+ : 'All';
136
+
137
+ const modeLabel = !installProfile
138
+ ? 'All'
139
+ : installProfile.uses.includes('squads')
140
+ ? 'Development + Squads'
141
+ : 'Development';
142
+
143
+ const designValue = installProfile ? (installProfile.design || 'none') : null;
144
+ let designLabel = null;
145
+ if (designValue) {
146
+ if (designValue === 'all') {
147
+ designLabel = DESIGN_NAMES['all'];
148
+ } else if (Array.isArray(designValue)) {
149
+ designLabel = designValue.map(id => DESIGN_NAMES[id] || id).join(', ');
150
+ } else {
151
+ designLabel = DESIGN_NAMES[designValue] || designValue;
152
+ }
153
+ }
154
+
155
+ const localeLabel = installProfile
156
+ ? (LOCALE_NAMES[installProfile.locale || 'en'] || installProfile.locale || 'English')
157
+ : null;
158
+
159
+ const copiedCount = result.copied.length;
160
+ const profileSkipped = result.skipped.filter(s => s.reason === 'not-in-profile').length;
161
+ const existingSkipped = result.skipped.filter(s => s.reason === 'already-exists').length;
162
+ const otherSkipped = result.skipped.length - profileSkipped - existingSkipped;
163
+
164
+ if (!isTTY) {
165
+ stdout.write(`aioson: installed ${copiedCount} files`);
166
+ if (existingSkipped) stdout.write(`, ${existingSkipped} already exist`);
167
+ if (profileSkipped) stdout.write(`, ${profileSkipped} not in profile`);
168
+ stdout.write('\n');
169
+ const toolsStr = installProfile ? installProfile.tools.join(',') : 'all';
170
+ const modeStr = installProfile ? installProfile.uses.join(',') : 'all';
171
+ const designVal = installProfile ? (installProfile.design || 'none') : 'all';
172
+ const designStr = Array.isArray(designVal) ? designVal.join(',') : designVal;
173
+ const localeStr = installProfile ? (installProfile.locale || 'en') : 'all';
174
+ stdout.write(`aioson: tools=${toolsStr} mode=${modeStr} design=${designStr} locale=${localeStr}\n`);
175
+ stdout.write('aioson: run /setup to continue\n');
176
+ return;
177
+ }
178
+
179
+ // Strip ANSI codes to measure visible length
180
+ function visLen(s) {
181
+ return s.replace(/\x1b\[[0-9;]*m/g, '').length;
182
+ }
183
+
184
+ function truncate(s, maxLen) {
185
+ if (!s) return s;
186
+ const v = visLen(s);
187
+ if (v <= maxLen) return s;
188
+ // Strip the trailing reset code, truncate, then re-add reset
189
+ const ANSI_RESET = '\x1b[0m';
190
+ const hasReset = s.endsWith(ANSI_RESET);
191
+ const plain = hasReset ? s.slice(0, -ANSI_RESET.length) : s;
192
+ const visiblePlain = visLen(plain);
193
+ if (visiblePlain <= maxLen) return plain + (hasReset ? ANSI_RESET : '');
194
+ // Count visible chars while slicing
195
+ let kept = 0;
196
+ let cutPoint = 0;
197
+ for (; cutPoint < plain.length && kept < maxLen; cutPoint++) {
198
+ if (plain[cutPoint] === '\x1b') {
199
+ // Skip ANSI sequence
200
+ const end = plain.indexOf('m', cutPoint);
201
+ cutPoint = end >= 0 ? end : plain.length - 1;
202
+ } else {
203
+ kept++;
204
+ }
205
+ }
206
+ return plain.slice(0, cutPoint) + '…' + (hasReset ? ANSI_RESET : '');
207
+ }
208
+
209
+ // Internal width (between │ borders), including 1 space padding each side
210
+ const W = 41;
211
+
212
+ function row(content) {
213
+ const padding = ' '.repeat(Math.max(0, W - visLen(content)));
214
+ return ` │ ${content}${padding} │`;
215
+ }
216
+
217
+ // Build skip detail lines
218
+ const skipLines = [];
219
+ if (existingSkipped > 0) {
220
+ skipLines.push(row(`${dim}─ ${existingSkipped} files already up to date${reset}`));
221
+ }
222
+ if (profileSkipped > 0) {
223
+ skipLines.push(row(`${dim}─ ${profileSkipped} files skipped (not in profile)${reset}`));
224
+ }
225
+ if (otherSkipped > 0) {
226
+ skipLines.push(row(`${dim}─ ${otherSkipped} files skipped (protected)${reset}`));
227
+ }
228
+
229
+ const profileLines = [
230
+ row(`${cyan}Tools${reset} → ${cyan}${truncate(toolNames, W - 16)}${reset}`),
231
+ row(`${cyan}Mode${reset} → ${cyan}${truncate(modeLabel, W - 16)}${reset}`)
232
+ ];
233
+ if (designLabel) profileLines.push(row(`${cyan}Design${reset} → ${cyan}${truncate(designLabel, W - 16)}${reset}`));
234
+ if (localeLabel) profileLines.push(row(`${cyan}Locale${reset} → ${cyan}${truncate(localeLabel, W - 16)}${reset}`));
235
+
236
+ const lines = [
237
+ ` ╭${'─'.repeat(W + 2)}╮`,
238
+ ` │${' '.repeat(W + 2)}│`,
239
+ row(`${green}✓${reset} ${copiedCount} files installed`),
240
+ ...skipLines,
241
+ ` │${' '.repeat(W + 2)}│`,
242
+ ...profileLines,
243
+ ` │${' '.repeat(W + 2)}│`,
244
+ row(`${yellow}Next: run /setup in your AI tool${reset}`),
245
+ ` │${' '.repeat(W + 2)}│`,
246
+ ` ╰${'─'.repeat(W + 2)}╯`,
247
+ ];
248
+
249
+ stdout.write(lines.join('\n') + '\n');
250
+ }
251
+
252
+ module.exports = {
253
+ renderProgress,
254
+ renderRevealAnimation,
255
+ renderInstallSummary,
256
+ __test__: {
257
+ AIOSON_LETTERS,
258
+ sleep
259
+ }
260
+ };
@@ -0,0 +1,143 @@
1
+ 'use strict';
2
+
3
+ // Arquivos que pertencem a cada tool
4
+ const TOOL_FILES = {
5
+ claude: [
6
+ 'CLAUDE.md',
7
+ /^\.claude\//
8
+ ],
9
+ codex: [
10
+ 'AGENTS.md'
11
+ ],
12
+ gemini: [
13
+ '.gemini/GEMINI.md',
14
+ /^\.gemini\/commands\//
15
+ ],
16
+ opencode: [
17
+ 'OPENCODE.md'
18
+ ]
19
+ };
20
+
21
+ // Squad agent/task/skill paths (non-locale)
22
+ const SQUAD_PATHS = [
23
+ /^\.aioson\/agents\/(squad|orache|genome|profiler-researcher|profiler-enricher|profiler-forge|design-hybrid-forge)\.md$/,
24
+ /^\.aioson\/tasks\/squad-/,
25
+ /^\.aioson\/skills\/squad\//,
26
+ /^\.aioson\/templates\/squads\//,
27
+ /^\.aioson\/squads\//
28
+ ];
29
+
30
+ // Squad agents inside locale dirs — filtered by BOTH locale AND squad
31
+ const SQUAD_LOCALE_AGENT_RE = /^\.aioson\/locales\/([^/]+)\/agents\/(squad|orache|genome|profiler-researcher|profiler-enricher|profiler-forge|design-hybrid-forge)\.md$/;
32
+
33
+ // Design skill IDs disponíveis
34
+ const DESIGN_IDS = [
35
+ 'aurora-command-ui',
36
+ 'bold-editorial-ui',
37
+ 'clean-saas-ui',
38
+ 'cognitive-core-ui',
39
+ 'glassmorphism-ui',
40
+ 'interface-design',
41
+ 'neo-brutalist-ui',
42
+ 'premium-command-center-ui',
43
+ 'warm-craft-ui'
44
+ ];
45
+
46
+ // Special value meaning "install all design skills"
47
+ const DESIGN_ALL = 'all';
48
+
49
+ // Caminhos de locale por código
50
+ const LOCALE_IDS = ['en', 'es', 'fr', 'pt-BR'];
51
+
52
+ // Arquivos sempre instalados (core invariante)
53
+ const ALWAYS_INSTALL = [
54
+ /^\.aioson\/config\.md$/,
55
+ /^\.aioson\/schemas\//,
56
+ /^\.aioson\/mcp\//,
57
+ /^\.aioson\/context\//,
58
+ /^\.aioson\/installed-skills\//,
59
+ /^\.aioson\/my-agents\//,
60
+ /^aioson-models\.json$/
61
+ ];
62
+
63
+ const DEFAULT_PROFILE = {
64
+ tools: ['claude'],
65
+ uses: ['development'],
66
+ design: 'none',
67
+ locale: 'en'
68
+ };
69
+
70
+ function matchesAny(rel, patterns) {
71
+ for (const p of patterns) {
72
+ if (typeof p === 'string') {
73
+ if (rel === p) return true;
74
+ } else if (p.test(rel)) {
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+
81
+ function isFileForAnyTool(rel) {
82
+ for (const patterns of Object.values(TOOL_FILES)) {
83
+ if (matchesAny(rel, patterns)) return true;
84
+ }
85
+ return false;
86
+ }
87
+
88
+ /**
89
+ * Returns true if the file should be installed given the profile.
90
+ * null profile = install everything (current behavior / fallback).
91
+ */
92
+ function shouldIncludeForProfile(rel, profile) {
93
+ if (!profile) return true;
94
+
95
+ // Always install core
96
+ if (matchesAny(rel, ALWAYS_INSTALL)) return true;
97
+
98
+ // Tool-specific files
99
+ if (isFileForAnyTool(rel)) {
100
+ return (profile.tools || []).some(tool => matchesAny(rel, TOOL_FILES[tool] || []));
101
+ }
102
+
103
+ // Squad-specific files (non-locale)
104
+ if (matchesAny(rel, SQUAD_PATHS)) {
105
+ return (profile.uses || []).includes('squads');
106
+ }
107
+
108
+ // Design skills: .aioson/skills/design/<id>/
109
+ const designMatch = rel.match(/^\.aioson\/skills\/design\/([^/]+)\//);
110
+ if (designMatch) {
111
+ const skillId = designMatch[1];
112
+ const chosen = profile.design || 'none';
113
+ if (chosen === DESIGN_ALL) return true;
114
+ if (Array.isArray(chosen)) return chosen.includes(skillId);
115
+ return chosen !== 'none' && skillId === chosen;
116
+ }
117
+
118
+ // Locale files: .aioson/locales/<locale>/...
119
+ const localeMatch = rel.match(/^\.aioson\/locales\/([^/]+)\//);
120
+ if (localeMatch) {
121
+ const fileLocale = localeMatch[1];
122
+ const chosen = profile.locale || 'en';
123
+ if (fileLocale !== chosen) return false;
124
+ // Squad locale agents also require squads to be enabled
125
+ if (SQUAD_LOCALE_AGENT_RE.test(rel)) {
126
+ return (profile.uses || []).includes('squads');
127
+ }
128
+ return true;
129
+ }
130
+
131
+ // Everything else (core agents, dev skills, process, etc.) → always install
132
+ return true;
133
+ }
134
+
135
+ module.exports = {
136
+ shouldIncludeForProfile,
137
+ TOOL_FILES,
138
+ SQUAD_PATHS,
139
+ DESIGN_IDS,
140
+ LOCALE_IDS,
141
+ ALWAYS_INSTALL,
142
+ DEFAULT_PROFILE
143
+ };