@nio-cli/cli 0.1.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 (196) hide show
  1. package/README.md +280 -0
  2. package/dist/adapters/supabase/allocation-gateway.js +236 -0
  3. package/dist/adapters/supabase/allocation-gateway.js.map +1 -0
  4. package/dist/adapters/supabase/analytics-gateway.js +18 -0
  5. package/dist/adapters/supabase/analytics-gateway.js.map +1 -0
  6. package/dist/adapters/supabase/client.js +96 -0
  7. package/dist/adapters/supabase/client.js.map +1 -0
  8. package/dist/adapters/supabase/context-gateway.js +23 -0
  9. package/dist/adapters/supabase/context-gateway.js.map +1 -0
  10. package/dist/adapters/supabase/gateway.js +18 -0
  11. package/dist/adapters/supabase/gateway.js.map +1 -0
  12. package/dist/adapters/supabase/task-gateway.js +450 -0
  13. package/dist/adapters/supabase/task-gateway.js.map +1 -0
  14. package/dist/auth.js +118 -0
  15. package/dist/auth.js.map +1 -0
  16. package/dist/brand.js +91 -0
  17. package/dist/brand.js.map +1 -0
  18. package/dist/cli/commands/auth.js +128 -0
  19. package/dist/cli/commands/auth.js.map +1 -0
  20. package/dist/cli/commands/clean.js +120 -0
  21. package/dist/cli/commands/clean.js.map +1 -0
  22. package/dist/cli/commands/completion.js +114 -0
  23. package/dist/cli/commands/completion.js.map +1 -0
  24. package/dist/cli/commands/exec.js +59 -0
  25. package/dist/cli/commands/exec.js.map +1 -0
  26. package/dist/cli/commands/init/auth-step.js +49 -0
  27. package/dist/cli/commands/init/auth-step.js.map +1 -0
  28. package/dist/cli/commands/init/clients-step.js +76 -0
  29. package/dist/cli/commands/init/clients-step.js.map +1 -0
  30. package/dist/cli/commands/init/context-step.js +71 -0
  31. package/dist/cli/commands/init/context-step.js.map +1 -0
  32. package/dist/cli/commands/init/index.js +76 -0
  33. package/dist/cli/commands/init/index.js.map +1 -0
  34. package/dist/cli/commands/init/project-step.js +105 -0
  35. package/dist/cli/commands/init/project-step.js.map +1 -0
  36. package/dist/cli/commands/init/provision-step.js +103 -0
  37. package/dist/cli/commands/init/provision-step.js.map +1 -0
  38. package/dist/cli/commands/plan.js +45 -0
  39. package/dist/cli/commands/plan.js.map +1 -0
  40. package/dist/cli/commands/skills.js +23 -0
  41. package/dist/cli/commands/skills.js.map +1 -0
  42. package/dist/cli/commands/sync.js +296 -0
  43. package/dist/cli/commands/sync.js.map +1 -0
  44. package/dist/cli/commands/validate-plan.js +42 -0
  45. package/dist/cli/commands/validate-plan.js.map +1 -0
  46. package/dist/cli/copy/auth.json +6 -0
  47. package/dist/cli/copy/flows.json +6 -0
  48. package/dist/cli/copy/init.json +19 -0
  49. package/dist/cli/copy/sync.json +3 -0
  50. package/dist/cli/copy.js +23 -0
  51. package/dist/cli/copy.js.map +1 -0
  52. package/dist/cli/flows/clients.js +130 -0
  53. package/dist/cli/flows/clients.js.map +1 -0
  54. package/dist/cli/flows/completion.js +63 -0
  55. package/dist/cli/flows/completion.js.map +1 -0
  56. package/dist/cli/flows/dependencies.js +114 -0
  57. package/dist/cli/flows/dependencies.js.map +1 -0
  58. package/dist/cli/flows/sections.js +85 -0
  59. package/dist/cli/flows/sections.js.map +1 -0
  60. package/dist/cli/flows/user-config.js +37 -0
  61. package/dist/cli/flows/user-config.js.map +1 -0
  62. package/dist/cli/ui/render.js +237 -0
  63. package/dist/cli/ui/render.js.map +1 -0
  64. package/dist/cli/ui/report.js +117 -0
  65. package/dist/cli/ui/report.js.map +1 -0
  66. package/dist/cli.js +36 -0
  67. package/dist/cli.js.map +1 -0
  68. package/dist/config.js +280 -0
  69. package/dist/config.js.map +1 -0
  70. package/dist/constants.js +9 -0
  71. package/dist/constants.js.map +1 -0
  72. package/dist/core/ports.js +2 -0
  73. package/dist/core/ports.js.map +1 -0
  74. package/dist/core/types.js +7 -0
  75. package/dist/core/types.js.map +1 -0
  76. package/dist/database.types.js +11 -0
  77. package/dist/database.types.js.map +1 -0
  78. package/dist/lib/active-project.js +28 -0
  79. package/dist/lib/active-project.js.map +1 -0
  80. package/dist/lib/autopull.js +13 -0
  81. package/dist/lib/autopull.js.map +1 -0
  82. package/dist/lib/client-configs.js +191 -0
  83. package/dist/lib/client-configs.js.map +1 -0
  84. package/dist/lib/client-install.js +40 -0
  85. package/dist/lib/client-install.js.map +1 -0
  86. package/dist/lib/colors.js +93 -0
  87. package/dist/lib/colors.js.map +1 -0
  88. package/dist/lib/cowork-extension.js +143 -0
  89. package/dist/lib/cowork-extension.js.map +1 -0
  90. package/dist/lib/dependencies.js +145 -0
  91. package/dist/lib/dependencies.js.map +1 -0
  92. package/dist/lib/dependency-install.js +163 -0
  93. package/dist/lib/dependency-install.js.map +1 -0
  94. package/dist/lib/duration.js +5 -0
  95. package/dist/lib/duration.js.map +1 -0
  96. package/dist/lib/exec-delegate.js +167 -0
  97. package/dist/lib/exec-delegate.js.map +1 -0
  98. package/dist/lib/exec-engines.js +72 -0
  99. package/dist/lib/exec-engines.js.map +1 -0
  100. package/dist/lib/file-merge.js +33 -0
  101. package/dist/lib/file-merge.js.map +1 -0
  102. package/dist/lib/harness.js +90 -0
  103. package/dist/lib/harness.js.map +1 -0
  104. package/dist/lib/hooks.js +217 -0
  105. package/dist/lib/hooks.js.map +1 -0
  106. package/dist/lib/patterns.js +61 -0
  107. package/dist/lib/patterns.js.map +1 -0
  108. package/dist/lib/plan-delegate.js +106 -0
  109. package/dist/lib/plan-delegate.js.map +1 -0
  110. package/dist/lib/project-context.js +151 -0
  111. package/dist/lib/project-context.js.map +1 -0
  112. package/dist/lib/prompts.js +69 -0
  113. package/dist/lib/prompts.js.map +1 -0
  114. package/dist/lib/provision-apply.js +220 -0
  115. package/dist/lib/provision-apply.js.map +1 -0
  116. package/dist/lib/provision-collect.js +47 -0
  117. package/dist/lib/provision-collect.js.map +1 -0
  118. package/dist/lib/provision.js +45 -0
  119. package/dist/lib/provision.js.map +1 -0
  120. package/dist/lib/require-config.js +32 -0
  121. package/dist/lib/require-config.js.map +1 -0
  122. package/dist/lib/rules.js +99 -0
  123. package/dist/lib/rules.js.map +1 -0
  124. package/dist/lib/sections.js +89 -0
  125. package/dist/lib/sections.js.map +1 -0
  126. package/dist/lib/skill-serve.js +129 -0
  127. package/dist/lib/skill-serve.js.map +1 -0
  128. package/dist/lib/skills-cache.js +99 -0
  129. package/dist/lib/skills-cache.js.map +1 -0
  130. package/dist/lib/skills.js +236 -0
  131. package/dist/lib/skills.js.map +1 -0
  132. package/dist/lib/targets.js +151 -0
  133. package/dist/lib/targets.js.map +1 -0
  134. package/dist/lib/task-history.js +15 -0
  135. package/dist/lib/task-history.js.map +1 -0
  136. package/dist/lib/telemetry.js +51 -0
  137. package/dist/lib/telemetry.js.map +1 -0
  138. package/dist/lib/tool-result.js +12 -0
  139. package/dist/lib/tool-result.js.map +1 -0
  140. package/dist/lib/validate-plan-delegate.js +107 -0
  141. package/dist/lib/validate-plan-delegate.js.map +1 -0
  142. package/dist/lib/version-check.js +89 -0
  143. package/dist/lib/version-check.js.map +1 -0
  144. package/dist/matrix-logo.js +122 -0
  145. package/dist/matrix-logo.js.map +1 -0
  146. package/dist/mcp-server.js +189 -0
  147. package/dist/mcp-server.js.map +1 -0
  148. package/dist/session-factory.js +19 -0
  149. package/dist/session-factory.js.map +1 -0
  150. package/dist/spinner.js +12 -0
  151. package/dist/spinner.js.map +1 -0
  152. package/dist/tools/comment-task.js +72 -0
  153. package/dist/tools/comment-task.js.map +1 -0
  154. package/dist/tools/create-task.js +129 -0
  155. package/dist/tools/create-task.js.map +1 -0
  156. package/dist/tools/delegate-exec.js +63 -0
  157. package/dist/tools/delegate-exec.js.map +1 -0
  158. package/dist/tools/end-allocation.js +38 -0
  159. package/dist/tools/end-allocation.js.map +1 -0
  160. package/dist/tools/end-task-allocation.js +37 -0
  161. package/dist/tools/end-task-allocation.js.map +1 -0
  162. package/dist/tools/exec-status.js +43 -0
  163. package/dist/tools/exec-status.js.map +1 -0
  164. package/dist/tools/get-active-allocation.js +69 -0
  165. package/dist/tools/get-active-allocation.js.map +1 -0
  166. package/dist/tools/get-context.js +48 -0
  167. package/dist/tools/get-context.js.map +1 -0
  168. package/dist/tools/get-task.js +137 -0
  169. package/dist/tools/get-task.js.map +1 -0
  170. package/dist/tools/index.js +44 -0
  171. package/dist/tools/index.js.map +1 -0
  172. package/dist/tools/list-my-allocations.js +71 -0
  173. package/dist/tools/list-my-allocations.js.map +1 -0
  174. package/dist/tools/list-projects.js +38 -0
  175. package/dist/tools/list-projects.js.map +1 -0
  176. package/dist/tools/list-tasks.js +93 -0
  177. package/dist/tools/list-tasks.js.map +1 -0
  178. package/dist/tools/move-task.js +82 -0
  179. package/dist/tools/move-task.js.map +1 -0
  180. package/dist/tools/plan.js +56 -0
  181. package/dist/tools/plan.js.map +1 -0
  182. package/dist/tools/record-delivery.js +71 -0
  183. package/dist/tools/record-delivery.js.map +1 -0
  184. package/dist/tools/set-project.js +52 -0
  185. package/dist/tools/set-project.js.map +1 -0
  186. package/dist/tools/start-allocation.js +32 -0
  187. package/dist/tools/start-allocation.js.map +1 -0
  188. package/dist/tools/start-task-allocation.js +75 -0
  189. package/dist/tools/start-task-allocation.js.map +1 -0
  190. package/dist/tools/update-task.js +139 -0
  191. package/dist/tools/update-task.js.map +1 -0
  192. package/dist/tools/validate-plan.js +58 -0
  193. package/dist/tools/validate-plan.js.map +1 -0
  194. package/dist/version.js +16 -0
  195. package/dist/version.js.map +1 -0
  196. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;;GAGG;AAEH,SAAS,IAAI,CAAC,OAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,6EAA6E;QAC3E,oEAAoE,CACvE;SACA,cAAc,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;SACzE,MAAM,CAAC,kBAAkB,EAAE,qCAAqC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAChF,MAAM,CACL,mBAAmB,EACnB,oBAAoB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAC1C,WAAW,CACZ;SACA,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CACL,KAAK,EAAE,IAKN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,KAAK,EAAE,oBAAoB,IAAI,CAAC,MAAM,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7E,CAAC,CAAC;YACH,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvC,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { brand } from "../../brand.js";
2
+ import { readSkillDocs } from "../../lib/skills.js";
3
+ export function registerSkillsCommands(program) {
4
+ const skills = program
5
+ .command("skills")
6
+ .description(`Skills, commands e agents do ${brand.name} (lidos do repo aberto via cache)`);
7
+ skills
8
+ .command("status")
9
+ .description(`Lista os docs do repo de skills (cache local ~/${brand.homeDirName}/skills)`)
10
+ .action(() => {
11
+ try {
12
+ const docs = readSkillDocs();
13
+ console.log(`Skills: ${docs.length} docs`);
14
+ for (const d of docs)
15
+ console.log(` ${d.type.padEnd(10)} ${d.path}`);
16
+ }
17
+ catch (err) {
18
+ console.error(`[erro] ${err.message}`);
19
+ process.exit(1);
20
+ }
21
+ });
22
+ }
23
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,KAAK,CAAC,IAAI,mCAAmC,CAAC,CAAC;IAE9F,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kDAAkD,KAAK,CAAC,WAAW,UAAU,CAAC;SAC1F,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,296 @@
1
+ import { brand } from "../../brand.js";
2
+ import { spawnSync } from "node:child_process";
3
+ import { confirm } from "../../lib/prompts.js";
4
+ import { loadProjectConfig } from "../../config.js";
5
+ import { createAuthenticatedClient } from "../../adapters/supabase/client.js";
6
+ import { checkForUpdate } from "../../lib/version-check.js";
7
+ import { uninstallProvision, provision } from "../../lib/provision.js";
8
+ import { provisionHooks, uninstallHooks } from "../../lib/hooks.js";
9
+ import { readDependencies, skillIdMap } from "../../lib/skills.js";
10
+ import { fetchSkills } from "../../lib/skills-cache.js";
11
+ import { concatenateRules, collectRuleSkills } from "../../lib/rules.js";
12
+ import { writeRepoHarness } from "../../lib/harness.js";
13
+ import { patternsExist, runPatternsAnalysis } from "../../lib/patterns.js";
14
+ import { offerShellCompletion } from "../flows/completion.js";
15
+ import { ensureUserConfig } from "../flows/user-config.js";
16
+ import { fetchProjectContext, buildProjectOverview } from "../../lib/project-context.js";
17
+ import { startSpinner } from "../../spinner.js";
18
+ import { track, provisionedItems, flushTelemetry } from "../../lib/telemetry.js";
19
+ import { VERSION } from "../../version.js";
20
+ import { claudeTarget, detectConfiguredTargets } from "../../lib/targets.js";
21
+ import { coworkConfigured, installCoworkGlobal } from "../../lib/client-configs.js";
22
+ import { c, sym, cmd, box, sectionTitle, clearScreen } from "../../lib/colors.js";
23
+ import { printProvisionResult, printHookResult, printHarnessResult } from "../ui/render.js";
24
+ import { SyncReport, renderReport, browseReport, resolveReportMode, summarizeProvision, } from "../ui/report.js";
25
+ import { offerDependencyInstall, offerRuleSkills } from "../flows/dependencies.js";
26
+ import { offerDisableCoAuthoredBy } from "../flows/clients.js";
27
+ import { syncCopy } from "../copy.js";
28
+ export function registerSyncCommand(program) {
29
+ program
30
+ .command("sync")
31
+ .description("Instala/atualiza skills, commands e agents nos clientes configurados, a partir do bundle (idempotente); checa atualização do pacote")
32
+ .option("--dry-run", "mostra o que mudaria, sem escrever nada")
33
+ .option("--force", "sobrescreve arquivos divergentes de mesmo nome")
34
+ .option("--no-prune", "mantém arquivos que saíram do bundle")
35
+ .option("--uninstall", "remove os arquivos que o nio instalou")
36
+ .option("--no-install-deps", "não oferece instalar as libs externas requeridas")
37
+ .option("-y, --yes", "aprova automaticamente a instalação das libs (não-interativo)")
38
+ .option("--reanalyze", "re-roda a análise de patterns (regera docs/_patterns.md) mesmo se já existir")
39
+ .option("--verbose", "expande todos os detalhes inline (sem resumo/menu)")
40
+ .option("--quiet", "só o resumo de uma linha por seção")
41
+ .action(async (opts) => {
42
+ try {
43
+ const upd = await checkForUpdate();
44
+ if (upd?.hasUpdate) {
45
+ console.log("");
46
+ console.log(box(`${c.yellow(sym.warn)} ${c.bold(`nova versão do ${brand.name}`)} ` +
47
+ `${c.dim(upd.current)} ${c.dim(sym.arrow)} ${c.green(upd.latest)}\n` +
48
+ `${c.dim("atualizar:")} ${cmd(`npm install -g ${upd.name}@latest`)}`, { borderColor: "yellow", title: "atualização" }));
49
+ const interactive = Boolean(process.stdout.isTTY);
50
+ const doUpdate = !opts.dryRun &&
51
+ (opts.yes === true ||
52
+ (interactive &&
53
+ (await confirm({
54
+ message: syncCopy.update.confirm,
55
+ default: true,
56
+ }))));
57
+ if (doUpdate) {
58
+ console.log(` ${c.dim(`${sym.gear} rodando…`)}`);
59
+ const res = spawnSync("npm", ["install", "-g", `${upd.name}@latest`], { stdio: "inherit" });
60
+ if (res.status === 0) {
61
+ console.log(` ${c.green(`${sym.ok} atualizado pra ${upd.latest}`)} ${c.dim(`— rode \`${brand.name} sync\` de novo.`)}`);
62
+ return;
63
+ }
64
+ console.log(` ${c.red(`${sym.err} falha ao atualizar`)} ${c.dim("— seguindo com a versão atual.")}`);
65
+ }
66
+ }
67
+ const mode = resolveReportMode(opts);
68
+ const report = new SyncReport();
69
+ // Puxa a versão mais recente do repo aberto de skills pro cache local
70
+ // (~/.nio/skills). É a fonte que `provision`/`readDependencies` leem.
71
+ if (!opts.dryRun) {
72
+ const sp = startSpinner("Atualizando skills do repo…");
73
+ const fetched = await fetchSkills({ force: true });
74
+ sp.stop();
75
+ if (fetched.status === "fetched") {
76
+ report.add({
77
+ id: "fetch",
78
+ title: "Skills",
79
+ status: "ok",
80
+ summary: `atualizadas (${fetched.repo}@${fetched.ref})`,
81
+ lines: [],
82
+ });
83
+ }
84
+ else if (fetched.status === "cached") {
85
+ report.add({
86
+ id: "fetch",
87
+ title: "Skills",
88
+ status: "warn",
89
+ summary: "usando cache local" + (fetched.error ? " (fetch falhou)" : ""),
90
+ lines: fetched.error ? [` ${c.dim(fetched.error)}`] : [],
91
+ });
92
+ }
93
+ else {
94
+ console.error(` ${c.red(sym.err)} não consegui obter as skills: ${fetched.error}`);
95
+ process.exit(1);
96
+ }
97
+ }
98
+ const detected = detectConfiguredTargets();
99
+ const targets = detected.length > 0 ? detected : [claudeTarget];
100
+ if (opts.uninstall) {
101
+ for (const target of targets) {
102
+ console.log("");
103
+ console.log(` ${c.magenta(sym.dot)} ${c.bold(target.label)}`);
104
+ const result = uninstallProvision({
105
+ targetDir: target.targetDir(),
106
+ dryRun: opts.dryRun,
107
+ });
108
+ for (const rel of result.removed)
109
+ console.log(` [-] ${rel}`);
110
+ for (const rel of result.kept)
111
+ console.log(` [!] ${rel} (modificado localmente — mantido)`);
112
+ const prefix = result.dryRun ? "[dry-run] " : "";
113
+ console.log(`${prefix}${result.removed.length} removidos · ${result.kept.length} preservados → ${result.targetDir}`);
114
+ if (target === claudeTarget) {
115
+ const h = uninstallHooks({ dryRun: opts.dryRun });
116
+ if (h.removedScripts.length > 0)
117
+ console.log(` [-] hooks: ${h.removedScripts.join(", ")}`);
118
+ }
119
+ }
120
+ return;
121
+ }
122
+ let config = null;
123
+ try {
124
+ config = loadProjectConfig();
125
+ }
126
+ catch {
127
+ /* sem nio.json / inválido → provisiona tudo */
128
+ }
129
+ const selection = config?.selection;
130
+ // Split de config: migra o formato antigo + garante o nio.user.json (prefs).
131
+ if (!opts.dryRun) {
132
+ await ensureUserConfig({
133
+ interactive: Boolean(process.stdout.isTTY),
134
+ hasRepoConfig: Boolean(config),
135
+ });
136
+ }
137
+ // Sessão best-effort — telemetria de adoção + overview do NOS (não bloqueia).
138
+ let session = null;
139
+ let telemetry = null;
140
+ if (!opts.dryRun) {
141
+ try {
142
+ session = await createAuthenticatedClient();
143
+ telemetry = session.supabase;
144
+ }
145
+ catch {
146
+ /* sem login → sem telemetria/overview */
147
+ }
148
+ }
149
+ const uidByName = skillIdMap();
150
+ // ---- Fase informativa: coleta cada etapa como seção (não imprime na hora) ----
151
+ for (const target of targets) {
152
+ const result = provision({
153
+ target,
154
+ selection,
155
+ dryRun: opts.dryRun,
156
+ force: opts.force,
157
+ prune: opts.prune,
158
+ });
159
+ const { status, summary } = summarizeProvision(result.files);
160
+ report.addCaptured({ id: `prov-${target.id}`, title: target.label, status, summary }, () => printProvisionResult(result));
161
+ track(telemetry, {
162
+ type: "provision",
163
+ client: target.id,
164
+ sections: selection,
165
+ items: provisionedItems(result.files, uidByName),
166
+ version: VERSION,
167
+ });
168
+ // Hooks (só Claude Code): registra os gatilhos no settings.json.
169
+ if (target === claudeTarget) {
170
+ const h = provisionHooks({
171
+ surface: claudeTarget.surface,
172
+ selection,
173
+ dryRun: opts.dryRun,
174
+ });
175
+ report.addCaptured({ id: "hooks", title: "Hooks", status: "ok", summary: `${h.installed.length} hooks` }, () => printHookResult(h));
176
+ }
177
+ }
178
+ // Reafirma o config do Cowork (idempotente).
179
+ if (!opts.dryRun && coworkConfigured()) {
180
+ const result = installCoworkGlobal();
181
+ if (result.status === "updated") {
182
+ report.add({
183
+ id: "cowork",
184
+ title: "Claude Desktop (Cowork)",
185
+ status: "ok",
186
+ summary: "config atualizado — reinicie o app",
187
+ lines: [` ${c.dim(result.path)}`],
188
+ });
189
+ }
190
+ }
191
+ // Harness no repo (rules + AGENTS.md + CLAUDE.md). Idempotente.
192
+ if (!opts.dryRun && config) {
193
+ let overview = "";
194
+ if (session) {
195
+ try {
196
+ overview = buildProjectOverview(await fetchProjectContext(session.supabase, config, session.user));
197
+ }
198
+ catch {
199
+ /* sem contexto → não toca o bloco de overview */
200
+ }
201
+ }
202
+ try {
203
+ const h = writeRepoHarness(process.cwd(), {
204
+ rulesMarkdown: concatenateRules(config.selection ?? { roles: [], stacks: {} }),
205
+ overview,
206
+ });
207
+ const changed = [h.rules, h.agents, h.claude].some((a) => a !== "unchanged" && a !== "empty");
208
+ report.addCaptured({
209
+ id: "harness",
210
+ title: "Harness (repo)",
211
+ status: "ok",
212
+ summary: changed ? `rules ${h.rules} · AGENTS ${h.agents}` : "sem mudanças",
213
+ }, () => printHarnessResult(h));
214
+ }
215
+ catch (err) {
216
+ report.add({
217
+ id: "harness",
218
+ title: "Harness (repo)",
219
+ status: "warn",
220
+ summary: "pulado",
221
+ lines: [` ${c.dim(err.message)}`],
222
+ });
223
+ }
224
+ }
225
+ // ---- Render do resumo + menu navegável (só no modo interativo) ----
226
+ // Limpa a tela (TTY) pra o resumo aparecer sem o "lixo" das etapas acima.
227
+ clearScreen();
228
+ renderReport(report, mode);
229
+ if (mode === "summary")
230
+ await browseReport(report);
231
+ // ---- Fase de ações: ofertas [y/N] (patterns, deps, completion) ----
232
+ console.log("");
233
+ console.log(sectionTitle("Ações", "instalações e ajustes"));
234
+ // Patterns (IA): auto no 1º sync (com [y/N]) ou via --reanalyze; skip-if-exists.
235
+ if (!opts.dryRun && config) {
236
+ const cwd = process.cwd();
237
+ if (opts.reanalyze || !patternsExist(cwd)) {
238
+ const interactive = Boolean(process.stdout.isTTY);
239
+ let approved = opts.yes === true || opts.reanalyze === true;
240
+ if (!approved && interactive) {
241
+ approved = await confirm({
242
+ message: "Analisar o repo agora e gerar docs/_patterns.md? (roda claude/codex headless)",
243
+ default: true,
244
+ });
245
+ }
246
+ if (approved) {
247
+ console.log(` ${c.dim(`${sym.gear} analisando patterns…`)}`);
248
+ const out = runPatternsAnalysis(cwd);
249
+ if (!out.ran) {
250
+ console.log(` ${c.yellow(sym.warn)} ${c.dim(out.reason ?? "análise não rodou")}`);
251
+ }
252
+ else {
253
+ console.log(out.ok
254
+ ? ` ${c.green(sym.ok)} docs/_patterns.md ${c.dim(`(${out.agent})`)}`
255
+ : ` ${c.red(sym.err)} ${c.dim(`análise falhou (${out.agent})`)}`);
256
+ }
257
+ }
258
+ else {
259
+ console.log(` ${c.dim("patterns pulado — rode")} ${cmd(`${brand.name} sync --reanalyze`)} ${c.dim("depois.")}`);
260
+ }
261
+ }
262
+ }
263
+ if (!opts.dryRun &&
264
+ Boolean(process.stdout.isTTY) &&
265
+ targets.includes(claudeTarget)) {
266
+ await offerDisableCoAuthoredBy();
267
+ }
268
+ // Oferece instalar as libs externas do pacote. Em --dry-run só lista.
269
+ await offerDependencyInstall(readDependencies(selection), {
270
+ interactive: Boolean(process.stdout.isTTY),
271
+ assumeYes: opts.yes,
272
+ enabled: opts.installDeps !== false && !opts.dryRun,
273
+ });
274
+ // Skills recomendadas (skills.sh) das stacks do nio.json.
275
+ await offerRuleSkills(collectRuleSkills(config?.selection ?? { roles: [], stacks: {} }), {
276
+ interactive: Boolean(process.stdout.isTTY),
277
+ assumeYes: opts.yes,
278
+ enabled: opts.installDeps !== false && !opts.dryRun,
279
+ });
280
+ // Valida o autocomplete do shell; se faltar, prompta (só interativo).
281
+ if (!opts.dryRun) {
282
+ await offerShellCompletion({
283
+ interactive: Boolean(process.stdout.isTTY),
284
+ assumeYes: opts.yes,
285
+ });
286
+ }
287
+ // Garante que os eventos de telemetria saiam antes do processo encerrar.
288
+ await flushTelemetry();
289
+ }
290
+ catch (err) {
291
+ console.error(`[erro] ${err.message}`);
292
+ process.exit(1);
293
+ }
294
+ });
295
+ }
296
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { existsSync } from "node:fs";
2
+ import { runValidatePlan } from "../../lib/validate-plan-delegate.js";
3
+ import { ENGINES, PLAN_ENGINE, parseEngine } from "../../lib/exec-engines.js";
4
+ /**
5
+ * Superfície de CLI da triagem — mesmo contrato do `plan`/`exec`:
6
+ * **stdout = JSON**, **stderr = log ao vivo**, **exit ≠ 0 = falha**.
7
+ */
8
+ function emit(payload) {
9
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
10
+ }
11
+ export function registerValidatePlanCommand(program) {
12
+ program
13
+ .command("validate-plan")
14
+ .description("Lê o plan.md da raiz e roda o engine pensante para julgar se o plano precisa de " +
15
+ "uma spec antes de implementar. stdout = JSON { ok, needsSpec, reason, suggestedSlug?, engine }; " +
16
+ "stderr = log. suggestedSlug (slug do worktree) só sai quando needsSpec.")
17
+ .option("--project <path>", "raiz do projeto onde vive o plan.md", process.cwd())
18
+ .option("--engine <engine>", `agente pensante (${ENGINES.join(" | ")})`, PLAN_ENGINE)
19
+ .option("--quiet", "não streama o log do agente no stderr")
20
+ .action(async (opts) => {
21
+ const engine = parseEngine(opts.engine, PLAN_ENGINE);
22
+ if (!engine) {
23
+ emit({ ok: false, error: `engine inválido: ${opts.engine} — suportados: ${ENGINES.join(", ")}` });
24
+ process.exitCode = 1;
25
+ return;
26
+ }
27
+ if (!existsSync(opts.project)) {
28
+ emit({ ok: false, error: `projeto não encontrado: ${opts.project}` });
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ const result = await runValidatePlan({
33
+ project: opts.project,
34
+ engine,
35
+ echo: opts.quiet !== true,
36
+ });
37
+ emit(result);
38
+ if (!result.ok)
39
+ process.exitCode = 1;
40
+ });
41
+ }
42
+ //# sourceMappingURL=validate-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-plan.js","sourceRoot":"","sources":["../../../src/cli/commands/validate-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;;GAGG;AAEH,SAAS,IAAI,CAAC,OAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,kFAAkF;QAChF,kGAAkG;QAClG,yEAAyE,CAC5E;SACA,MAAM,CAAC,kBAAkB,EAAE,qCAAqC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC;SACpF,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CACL,KAAK,EAAE,IAA2D,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,IAAI,CAAC,MAAM,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAClG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvC,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "login": {
3
+ "patPrompt": "Cole o seu PAT:",
4
+ "patInvalid": "Token inválido. Formato esperado: noc_ + 64 caracteres hexadecimais."
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "installDep": "Instalar {title}?",
3
+ "installClient": "Instalar {label} agora?",
4
+ "coworkManual": "Instalar manualmente (gera o .mcpb + passos)?",
5
+ "disableCoAuthored": "Desligar isso globalmente? (includeCoAuthoredBy=false)"
6
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "overwrite": "Já existe um nio.json aqui. Sobrescrever?",
3
+ "patPrompt": "Cole o seu PAT:",
4
+ "patInvalid": "Token inválido. Formato esperado: noc_ + 64 caracteres hexadecimais.",
5
+ "pickProject": "Escolha o projeto:",
6
+ "manualProjectChoice": "(digitar UUID manualmente)",
7
+ "manualProjectPrompt": "Cole o UUID do projeto:",
8
+ "manualProjectInvalid": "UUID inválido. Formato: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
9
+ "linkRepo": "Vincular a um repositório?",
10
+ "noRepoChoice": "(nenhum — não vincular a repositório específico)",
11
+ "clientsPrompt": "Configurar clientes MCP? (espaço pra marcar, enter pra confirmar)",
12
+ "clientChoices": {
13
+ "claudeGlobal": "Claude Code — pra mim, todos os projetos (~/.claude/settings.json)",
14
+ "codexGlobal": "Codex CLI — pra mim, todos os projetos (~/.codex/config.toml)",
15
+ "cowork": "Claude Desktop / Cowork — ativa o conector no app",
16
+ "claudeRepo": "Claude Code — só este repo, vai pro git (.mcp.json)",
17
+ "vscodeRepo": "VS Code Copilot — só este repo, vai pro git (.vscode/mcp.json)"
18
+ }
19
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "update": { "confirm": "Atualizar agora?" }
3
+ }
@@ -0,0 +1,23 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { dirname, join } from "node:path";
4
+ /**
5
+ * Copy (textos de prompt em pt-BR) mora em JSON sob `copy/`, separado da lógica.
6
+ * Lido em runtime relativo a este módulo — mesma convenção de `version.ts`/`skills.ts`
7
+ * (compila pra `dist/cli/copy.js`; os JSON são copiados pra `dist/cli/copy/` no build).
8
+ * ponytail: sem validação em runtime — os JSON são versionados e publicados junto
9
+ * ao pacote; a tipagem via interface + cast é o contrato.
10
+ */
11
+ function loadCopy(name) {
12
+ const here = dirname(fileURLToPath(import.meta.url));
13
+ return JSON.parse(readFileSync(join(here, "copy", `${name}.json`), "utf-8"));
14
+ }
15
+ export const authCopy = loadCopy("auth");
16
+ export const initCopy = loadCopy("init");
17
+ export const syncCopy = loadCopy("sync");
18
+ export const flowsCopy = loadCopy("flows");
19
+ /** Interpola `{chave}` num template de copy. */
20
+ export function fmt(template, vars) {
21
+ return template.replace(/\{(\w+)\}/g, (_, k) => vars[k] ?? `{${k}}`);
22
+ }
23
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/cli/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;;GAMG;AACH,SAAS,QAAQ,CAAI,IAAY;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,OAAO,CAAC,CAAM,CAAC;AACpF,CAAC;AAkCD,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAW,MAAM,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAW,MAAM,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAW,MAAM,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAY,OAAO,CAAC,CAAC;AAEtD,gDAAgD;AAChD,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,IAA4B;IAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { confirm } from "../../lib/prompts.js";
3
+ import { installCoworkGlobal, coworkAppInstalled, readCoAuthoredBy, disableCoAuthoredBy, } from "../../lib/client-configs.js";
4
+ import { generateCoworkExtension, revealInFileManager } from "../../lib/cowork-extension.js";
5
+ import { CLIENTS, isBinaryInstalled } from "../../lib/client-install.js";
6
+ import { loadCredentials } from "../../auth.js";
7
+ import { startSpinner } from "../../spinner.js";
8
+ import { c, sym, cmd, link, box, sectionTitle, section } from "../../lib/colors.js";
9
+ import { printInstallResult } from "../ui/render.js";
10
+ import { flowsCopy, fmt } from "../copy.js";
11
+ import { brand } from "../../brand.js";
12
+ /**
13
+ * Verificação inicial do `init`: confere se **Codex** e **Claude Code** estão instalados —
14
+ * um por vez — e, se faltar, oferece instalar via `npm i -g` [y/N] (com o comando + docs à
15
+ * mostra). Codex primeiro (ferramenta principal). Best-effort; nunca bloqueia o init.
16
+ */
17
+ export async function ensureCoreClients(opts) {
18
+ console.log("");
19
+ section("Clientes de IA", "conferindo Codex e Claude Code");
20
+ for (const id of ["codex", "claude-code"]) {
21
+ await ensureClientInstalled(CLIENTS[id], opts);
22
+ }
23
+ }
24
+ /** Checa o cliente e, se ausente, orienta: oferece `npm i -g <pkg>` (CLIs) ou mostra o link (apps). */
25
+ export async function ensureClientInstalled(info, opts) {
26
+ if (info.binary && isBinaryInstalled(info.binary)) {
27
+ console.log(` ${c.green(sym.ok)} ${c.bold(info.label)} ${c.dim("detectado no PATH.")}`);
28
+ return;
29
+ }
30
+ if (info.npm) {
31
+ const installCmd = `npm install -g ${info.npm}`;
32
+ console.log(box(`${c.yellow(sym.warn)} ${c.bold(info.label)} ${c.dim("não encontrado.")}\n` +
33
+ `${c.dim("instalar:")} ${cmd(installCmd)}\n` +
34
+ `${c.dim("docs:")} ${link(info.url)}`, { borderColor: "yellow", title: info.label }));
35
+ const run = opts.assumeYes === true ||
36
+ (opts.interactive &&
37
+ (await confirm({
38
+ message: fmt(flowsCopy.installClient, { label: info.label }),
39
+ default: false,
40
+ })));
41
+ if (run) {
42
+ const res = spawnSync("npm", ["install", "-g", info.npm], {
43
+ stdio: "inherit",
44
+ });
45
+ console.log(res.status === 0
46
+ ? ` ${c.green(`${sym.ok} ${info.label} instalado`)}`
47
+ : ` ${c.red(`${sym.err} falha ao instalar — rode manualmente: `)}${cmd(installCmd)}`);
48
+ }
49
+ return;
50
+ }
51
+ // App (Claude Desktop / Cowork, VS Code) — não dá pra instalar via CLI.
52
+ console.log(box(`${c.yellow(sym.warn)} ${c.bold("Instale o " + info.label)}\n` +
53
+ `${c.dim("download:")} ${link(info.url)}\n` +
54
+ `${c.dim("depois, reabra o app pra carregar a extensão/MCP.")}`, { borderColor: "yellow", title: info.label }));
55
+ }
56
+ /** Gera o `.mcpb` e mostra os passos de instalação manual (fallback). */
57
+ function coworkManualInstall() {
58
+ const spinner = startSpinner("Gerando extensão (.mcpb)...");
59
+ const { outputPath } = generateCoworkExtension();
60
+ spinner.stop();
61
+ console.log(box(`${c.green(sym.ok)} ${c.bold("extensão gerada")}\n` +
62
+ `${c.dim(outputPath)}\n\n` +
63
+ `${c.bold("Instalar no Claude Desktop:")}\n` +
64
+ `${c.dim('Configurações → Extensões → avançadas → "Extension Developer" →')}\n` +
65
+ `${c.dim(`"Install Extension…" → selecione o .mcpb e cole seu PAT (${brand.patPrefix}…).`)}`, { borderColor: "yellow", title: "Cowork (manual)" }));
66
+ revealInFileManager(outputPath.replace(/[^/\\]+$/, ""));
67
+ }
68
+ /**
69
+ * Tenta ativar o Cowork escrevendo o config direto (precisa de login salvo).
70
+ * Retorna `true` se conseguiu (nada mais a fazer); `false` se precisa cair pro
71
+ * fallback manual (sem credenciais, ou a escrita direta falhou).
72
+ */
73
+ function tryActivateCoworkDirect(creds) {
74
+ if (!creds) {
75
+ console.log(` ${c.dim("sem login salvo — pela extensão você cola o PAT na hora da instalação.")}`);
76
+ return false;
77
+ }
78
+ try {
79
+ const result = installCoworkGlobal();
80
+ printInstallResult("Claude Desktop (Cowork)", result);
81
+ console.log(box(`${c.green(sym.ok)} ${c.bold(`conector ${brand.name} ativado no Claude Desktop`)}\n` +
82
+ `${c.dim("reinicie o app pra carregar. Projeto é por sessão:")}\n` +
83
+ `${cmd(`${brand.toolPrefix}list_projects`)} ${c.dim("→")} ${cmd(`${brand.toolPrefix}set_project`)}`, { borderColor: "green", title: "Cowork" }));
84
+ return true;
85
+ }
86
+ catch (err) {
87
+ console.log(` ${c.yellow(sym.warn)} ${c.dim("não consegui aplicar o config direto:")} ${err.message}`);
88
+ return false;
89
+ }
90
+ }
91
+ /** Ativa o conector no Claude Desktop escrevendo o config direto; cai pro `.mcpb` manual se falhar ou faltar login. */
92
+ export async function activateCowork(opts) {
93
+ if (!coworkAppInstalled()) {
94
+ await ensureClientInstalled(CLIENTS.cowork, {
95
+ interactive: opts.interactive,
96
+ });
97
+ return;
98
+ }
99
+ const creds = await loadCredentials();
100
+ if (tryActivateCoworkDirect(creds))
101
+ return;
102
+ // Fallback manual (app instalado mas escrita direta falhou, ou sem login).
103
+ const goManual = opts.assumeYes === true ||
104
+ (opts.interactive &&
105
+ (await confirm({
106
+ message: flowsCopy.coworkManual,
107
+ default: true,
108
+ })));
109
+ if (goManual)
110
+ coworkManualInstall();
111
+ else
112
+ console.log(` ${c.dim("ok — rode")} ${cmd(`${brand.name} init`)} ${c.dim("de novo pra ativar depois.")}`);
113
+ }
114
+ /** Oferece desligar o trailer "Co-Authored-By: Claude" se o Claude Code o injeta. Chame só com TTY (usa confirm). */
115
+ export async function offerDisableCoAuthoredBy() {
116
+ const co = readCoAuthoredBy();
117
+ if (!co.enabled)
118
+ return;
119
+ console.log("");
120
+ console.log(sectionTitle("Git", "atribuição de commit"));
121
+ console.log(` ${c.yellow(sym.warn)} O Claude Code adiciona o trailer ${c.bold("Co-Authored-By: Claude")} nos seus commits.`);
122
+ console.log(` ${c.dim(co.path)}`);
123
+ const disable = await confirm({
124
+ message: flowsCopy.disableCoAuthored,
125
+ default: true,
126
+ });
127
+ if (disable)
128
+ printInstallResult("Co-Authored-By desligado", disableCoAuthoredBy());
129
+ }
130
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/cli/flows/clients.ts"],"names":[],"mappings":"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"}