@noclaf/cli 0.8.0 → 0.9.1

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 (306) hide show
  1. package/README.md +26 -88
  2. package/dist/app.js +13 -0
  3. package/dist/app.js.map +1 -0
  4. package/dist/brand.js +9 -49
  5. package/dist/brand.js.map +1 -1
  6. package/dist/cli.js +3 -37
  7. package/dist/cli.js.map +1 -1
  8. package/dist/mcp-server.js +3 -187
  9. package/dist/mcp-server.js.map +1 -1
  10. package/package.json +8 -17
  11. package/dist/adapters/supabase/allocation-gateway.js +0 -291
  12. package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
  13. package/dist/adapters/supabase/analytics-gateway.js +0 -18
  14. package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
  15. package/dist/adapters/supabase/calendar-gateway.js +0 -48
  16. package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
  17. package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
  18. package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
  19. package/dist/adapters/supabase/checklist-gateway.js +0 -63
  20. package/dist/adapters/supabase/checklist-gateway.js.map +0 -1
  21. package/dist/adapters/supabase/client.js +0 -136
  22. package/dist/adapters/supabase/client.js.map +0 -1
  23. package/dist/adapters/supabase/context-gateway.js +0 -23
  24. package/dist/adapters/supabase/context-gateway.js.map +0 -1
  25. package/dist/adapters/supabase/gateway.js +0 -28
  26. package/dist/adapters/supabase/gateway.js.map +0 -1
  27. package/dist/adapters/supabase/release-gateway.js +0 -61
  28. package/dist/adapters/supabase/release-gateway.js.map +0 -1
  29. package/dist/adapters/supabase/sprint-gateway.js +0 -59
  30. package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
  31. package/dist/adapters/supabase/task-gateway.js +0 -533
  32. package/dist/adapters/supabase/task-gateway.js.map +0 -1
  33. package/dist/auth.js +0 -141
  34. package/dist/auth.js.map +0 -1
  35. package/dist/cli/commands/auth.js +0 -127
  36. package/dist/cli/commands/auth.js.map +0 -1
  37. package/dist/cli/commands/clean.js +0 -120
  38. package/dist/cli/commands/clean.js.map +0 -1
  39. package/dist/cli/commands/completion.js +0 -114
  40. package/dist/cli/commands/completion.js.map +0 -1
  41. package/dist/cli/commands/exec.js +0 -69
  42. package/dist/cli/commands/exec.js.map +0 -1
  43. package/dist/cli/commands/init/analyze-step.js +0 -21
  44. package/dist/cli/commands/init/analyze-step.js.map +0 -1
  45. package/dist/cli/commands/init/apply-answers.js +0 -122
  46. package/dist/cli/commands/init/apply-answers.js.map +0 -1
  47. package/dist/cli/commands/init/apply-step.js +0 -165
  48. package/dist/cli/commands/init/apply-step.js.map +0 -1
  49. package/dist/cli/commands/init/auth-step.js +0 -48
  50. package/dist/cli/commands/init/auth-step.js.map +0 -1
  51. package/dist/cli/commands/init/boilerplate-step.js +0 -20
  52. package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
  53. package/dist/cli/commands/init/clients-step.js +0 -78
  54. package/dist/cli/commands/init/clients-step.js.map +0 -1
  55. package/dist/cli/commands/init/context-step.js +0 -81
  56. package/dist/cli/commands/init/context-step.js.map +0 -1
  57. package/dist/cli/commands/init/describe-step.js +0 -68
  58. package/dist/cli/commands/init/describe-step.js.map +0 -1
  59. package/dist/cli/commands/init/index.js +0 -98
  60. package/dist/cli/commands/init/index.js.map +0 -1
  61. package/dist/cli/commands/init/mode.js +0 -18
  62. package/dist/cli/commands/init/mode.js.map +0 -1
  63. package/dist/cli/commands/init/progress.js +0 -60
  64. package/dist/cli/commands/init/progress.js.map +0 -1
  65. package/dist/cli/commands/init/project-step.js +0 -133
  66. package/dist/cli/commands/init/project-step.js.map +0 -1
  67. package/dist/cli/commands/init/provision-step.js +0 -103
  68. package/dist/cli/commands/init/provision-step.js.map +0 -1
  69. package/dist/cli/commands/map.js +0 -18
  70. package/dist/cli/commands/map.js.map +0 -1
  71. package/dist/cli/commands/plan.js +0 -45
  72. package/dist/cli/commands/plan.js.map +0 -1
  73. package/dist/cli/commands/skills.js +0 -23
  74. package/dist/cli/commands/skills.js.map +0 -1
  75. package/dist/cli/commands/sync.js +0 -319
  76. package/dist/cli/commands/sync.js.map +0 -1
  77. package/dist/cli/commands/validate-plan.js +0 -42
  78. package/dist/cli/commands/validate-plan.js.map +0 -1
  79. package/dist/cli/commands/wave.js +0 -57
  80. package/dist/cli/commands/wave.js.map +0 -1
  81. package/dist/cli/copy/auth.json +0 -6
  82. package/dist/cli/copy/flows.json +0 -6
  83. package/dist/cli/copy/init.json +0 -20
  84. package/dist/cli/copy/sync.json +0 -3
  85. package/dist/cli/copy.js +0 -23
  86. package/dist/cli/copy.js.map +0 -1
  87. package/dist/cli/flows/clients.js +0 -130
  88. package/dist/cli/flows/clients.js.map +0 -1
  89. package/dist/cli/flows/completion.js +0 -63
  90. package/dist/cli/flows/completion.js.map +0 -1
  91. package/dist/cli/flows/dependencies.js +0 -114
  92. package/dist/cli/flows/dependencies.js.map +0 -1
  93. package/dist/cli/flows/sections.js +0 -85
  94. package/dist/cli/flows/sections.js.map +0 -1
  95. package/dist/cli/flows/user-config.js +0 -37
  96. package/dist/cli/flows/user-config.js.map +0 -1
  97. package/dist/cli/ui/render.js +0 -239
  98. package/dist/cli/ui/render.js.map +0 -1
  99. package/dist/cli/ui/report.js +0 -130
  100. package/dist/cli/ui/report.js.map +0 -1
  101. package/dist/config.js +0 -289
  102. package/dist/config.js.map +0 -1
  103. package/dist/constants.js +0 -9
  104. package/dist/constants.js.map +0 -1
  105. package/dist/core/ports.js +0 -2
  106. package/dist/core/ports.js.map +0 -1
  107. package/dist/core/types.js +0 -5
  108. package/dist/core/types.js.map +0 -1
  109. package/dist/database.types.js +0 -11
  110. package/dist/database.types.js.map +0 -1
  111. package/dist/lib/active-project.js +0 -28
  112. package/dist/lib/active-project.js.map +0 -1
  113. package/dist/lib/autopull.js +0 -13
  114. package/dist/lib/autopull.js.map +0 -1
  115. package/dist/lib/boilerplate-scaffold.js +0 -65
  116. package/dist/lib/boilerplate-scaffold.js.map +0 -1
  117. package/dist/lib/boilerplates.js +0 -61
  118. package/dist/lib/boilerplates.js.map +0 -1
  119. package/dist/lib/calendar-logic.js +0 -59
  120. package/dist/lib/calendar-logic.js.map +0 -1
  121. package/dist/lib/calendar-write-logic.js +0 -6
  122. package/dist/lib/calendar-write-logic.js.map +0 -1
  123. package/dist/lib/checklist-logic.js +0 -5
  124. package/dist/lib/checklist-logic.js.map +0 -1
  125. package/dist/lib/client-configs.js +0 -191
  126. package/dist/lib/client-configs.js.map +0 -1
  127. package/dist/lib/client-install.js +0 -40
  128. package/dist/lib/client-install.js.map +0 -1
  129. package/dist/lib/colors.js +0 -92
  130. package/dist/lib/colors.js.map +0 -1
  131. package/dist/lib/cowork-extension.js +0 -143
  132. package/dist/lib/cowork-extension.js.map +0 -1
  133. package/dist/lib/dates.js +0 -21
  134. package/dist/lib/dates.js.map +0 -1
  135. package/dist/lib/dependencies.js +0 -145
  136. package/dist/lib/dependencies.js.map +0 -1
  137. package/dist/lib/dependency-install.js +0 -163
  138. package/dist/lib/dependency-install.js.map +0 -1
  139. package/dist/lib/duration.js +0 -5
  140. package/dist/lib/duration.js.map +0 -1
  141. package/dist/lib/exec-delegate.js +0 -218
  142. package/dist/lib/exec-delegate.js.map +0 -1
  143. package/dist/lib/exec-engines.js +0 -90
  144. package/dist/lib/exec-engines.js.map +0 -1
  145. package/dist/lib/exec-events.js +0 -87
  146. package/dist/lib/exec-events.js.map +0 -1
  147. package/dist/lib/exec-translators.js +0 -198
  148. package/dist/lib/exec-translators.js.map +0 -1
  149. package/dist/lib/file-merge.js +0 -33
  150. package/dist/lib/file-merge.js.map +0 -1
  151. package/dist/lib/git-exposure.js +0 -35
  152. package/dist/lib/git-exposure.js.map +0 -1
  153. package/dist/lib/harness.js +0 -127
  154. package/dist/lib/harness.js.map +0 -1
  155. package/dist/lib/hooks.js +0 -216
  156. package/dist/lib/hooks.js.map +0 -1
  157. package/dist/lib/patterns.js +0 -25
  158. package/dist/lib/patterns.js.map +0 -1
  159. package/dist/lib/pg-error.js +0 -53
  160. package/dist/lib/pg-error.js.map +0 -1
  161. package/dist/lib/plan-delegate.js +0 -117
  162. package/dist/lib/plan-delegate.js.map +0 -1
  163. package/dist/lib/project-context.js +0 -151
  164. package/dist/lib/project-context.js.map +0 -1
  165. package/dist/lib/prompts.js +0 -69
  166. package/dist/lib/prompts.js.map +0 -1
  167. package/dist/lib/provision-apply.js +0 -220
  168. package/dist/lib/provision-apply.js.map +0 -1
  169. package/dist/lib/provision-collect.js +0 -47
  170. package/dist/lib/provision-collect.js.map +0 -1
  171. package/dist/lib/provision.js +0 -45
  172. package/dist/lib/provision.js.map +0 -1
  173. package/dist/lib/release-logic.js +0 -10
  174. package/dist/lib/release-logic.js.map +0 -1
  175. package/dist/lib/repo-map.js +0 -176
  176. package/dist/lib/repo-map.js.map +0 -1
  177. package/dist/lib/require-config.js +0 -32
  178. package/dist/lib/require-config.js.map +0 -1
  179. package/dist/lib/rules.js +0 -146
  180. package/dist/lib/rules.js.map +0 -1
  181. package/dist/lib/sections.js +0 -89
  182. package/dist/lib/sections.js.map +0 -1
  183. package/dist/lib/skill-agent.js +0 -44
  184. package/dist/lib/skill-agent.js.map +0 -1
  185. package/dist/lib/skill-serve.js +0 -128
  186. package/dist/lib/skill-serve.js.map +0 -1
  187. package/dist/lib/skills-cache.js +0 -99
  188. package/dist/lib/skills-cache.js.map +0 -1
  189. package/dist/lib/skills.js +0 -237
  190. package/dist/lib/skills.js.map +0 -1
  191. package/dist/lib/sprint-deadline.js +0 -28
  192. package/dist/lib/sprint-deadline.js.map +0 -1
  193. package/dist/lib/sprint-logic.js +0 -31
  194. package/dist/lib/sprint-logic.js.map +0 -1
  195. package/dist/lib/targets.js +0 -150
  196. package/dist/lib/targets.js.map +0 -1
  197. package/dist/lib/task-history.js +0 -15
  198. package/dist/lib/task-history.js.map +0 -1
  199. package/dist/lib/telemetry.js +0 -51
  200. package/dist/lib/telemetry.js.map +0 -1
  201. package/dist/lib/tool-result.js +0 -15
  202. package/dist/lib/tool-result.js.map +0 -1
  203. package/dist/lib/validate-plan-delegate.js +0 -106
  204. package/dist/lib/validate-plan-delegate.js.map +0 -1
  205. package/dist/lib/version-check.js +0 -89
  206. package/dist/lib/version-check.js.map +0 -1
  207. package/dist/lib/wave-scheduler.js +0 -95
  208. package/dist/lib/wave-scheduler.js.map +0 -1
  209. package/dist/session-factory.js +0 -19
  210. package/dist/session-factory.js.map +0 -1
  211. package/dist/spinner.js +0 -12
  212. package/dist/spinner.js.map +0 -1
  213. package/dist/tools/activate-sprint.js +0 -44
  214. package/dist/tools/activate-sprint.js.map +0 -1
  215. package/dist/tools/add-checklist-item.js +0 -44
  216. package/dist/tools/add-checklist-item.js.map +0 -1
  217. package/dist/tools/add-checklist.js +0 -63
  218. package/dist/tools/add-checklist.js.map +0 -1
  219. package/dist/tools/add-holiday.js +0 -41
  220. package/dist/tools/add-holiday.js.map +0 -1
  221. package/dist/tools/add-home-office.js +0 -31
  222. package/dist/tools/add-home-office.js.map +0 -1
  223. package/dist/tools/add-vacation.js +0 -39
  224. package/dist/tools/add-vacation.js.map +0 -1
  225. package/dist/tools/attach-pr.js +0 -97
  226. package/dist/tools/attach-pr.js.map +0 -1
  227. package/dist/tools/comment-task.js +0 -72
  228. package/dist/tools/comment-task.js.map +0 -1
  229. package/dist/tools/create-release.js +0 -46
  230. package/dist/tools/create-release.js.map +0 -1
  231. package/dist/tools/create-sprint.js +0 -66
  232. package/dist/tools/create-sprint.js.map +0 -1
  233. package/dist/tools/create-task.js +0 -174
  234. package/dist/tools/create-task.js.map +0 -1
  235. package/dist/tools/delegate-exec.js +0 -63
  236. package/dist/tools/delegate-exec.js.map +0 -1
  237. package/dist/tools/end-allocation.js +0 -38
  238. package/dist/tools/end-allocation.js.map +0 -1
  239. package/dist/tools/end-sprint.js +0 -37
  240. package/dist/tools/end-sprint.js.map +0 -1
  241. package/dist/tools/end-task-allocation.js +0 -60
  242. package/dist/tools/end-task-allocation.js.map +0 -1
  243. package/dist/tools/exec-status.js +0 -45
  244. package/dist/tools/exec-status.js.map +0 -1
  245. package/dist/tools/finalize-release.js +0 -45
  246. package/dist/tools/finalize-release.js.map +0 -1
  247. package/dist/tools/get-active-allocation.js +0 -69
  248. package/dist/tools/get-active-allocation.js.map +0 -1
  249. package/dist/tools/get-calendar.js +0 -40
  250. package/dist/tools/get-calendar.js.map +0 -1
  251. package/dist/tools/get-context.js +0 -48
  252. package/dist/tools/get-context.js.map +0 -1
  253. package/dist/tools/get-sprint.js +0 -38
  254. package/dist/tools/get-sprint.js.map +0 -1
  255. package/dist/tools/get-task.js +0 -146
  256. package/dist/tools/get-task.js.map +0 -1
  257. package/dist/tools/index.js +0 -92
  258. package/dist/tools/index.js.map +0 -1
  259. package/dist/tools/list-my-allocations.js +0 -71
  260. package/dist/tools/list-my-allocations.js.map +0 -1
  261. package/dist/tools/list-projects.js +0 -38
  262. package/dist/tools/list-projects.js.map +0 -1
  263. package/dist/tools/list-releases.js +0 -32
  264. package/dist/tools/list-releases.js.map +0 -1
  265. package/dist/tools/list-sprints.js +0 -30
  266. package/dist/tools/list-sprints.js.map +0 -1
  267. package/dist/tools/list-tasks.js +0 -95
  268. package/dist/tools/list-tasks.js.map +0 -1
  269. package/dist/tools/move-task.js +0 -82
  270. package/dist/tools/move-task.js.map +0 -1
  271. package/dist/tools/plan.js +0 -56
  272. package/dist/tools/plan.js.map +0 -1
  273. package/dist/tools/record-delivery.js +0 -100
  274. package/dist/tools/record-delivery.js.map +0 -1
  275. package/dist/tools/remove-checklist-item.js +0 -42
  276. package/dist/tools/remove-checklist-item.js.map +0 -1
  277. package/dist/tools/remove-checklist.js +0 -42
  278. package/dist/tools/remove-checklist.js.map +0 -1
  279. package/dist/tools/remove-holiday.js +0 -31
  280. package/dist/tools/remove-holiday.js.map +0 -1
  281. package/dist/tools/remove-home-office.js +0 -32
  282. package/dist/tools/remove-home-office.js.map +0 -1
  283. package/dist/tools/remove-vacation.js +0 -31
  284. package/dist/tools/remove-vacation.js.map +0 -1
  285. package/dist/tools/set-project.js +0 -52
  286. package/dist/tools/set-project.js.map +0 -1
  287. package/dist/tools/set-review.js +0 -132
  288. package/dist/tools/set-review.js.map +0 -1
  289. package/dist/tools/sprint-common.js +0 -13
  290. package/dist/tools/sprint-common.js.map +0 -1
  291. package/dist/tools/start-allocation.js +0 -32
  292. package/dist/tools/start-allocation.js.map +0 -1
  293. package/dist/tools/start-task-allocation.js +0 -83
  294. package/dist/tools/start-task-allocation.js.map +0 -1
  295. package/dist/tools/update-checklist-item.js +0 -51
  296. package/dist/tools/update-checklist-item.js.map +0 -1
  297. package/dist/tools/update-release.js +0 -58
  298. package/dist/tools/update-release.js.map +0 -1
  299. package/dist/tools/update-sprint.js +0 -56
  300. package/dist/tools/update-sprint.js.map +0 -1
  301. package/dist/tools/update-task.js +0 -183
  302. package/dist/tools/update-task.js.map +0 -1
  303. package/dist/tools/validate-plan.js +0 -58
  304. package/dist/tools/validate-plan.js.map +0 -1
  305. package/dist/version.js +0 -16
  306. package/dist/version.js.map +0 -1
@@ -1,122 +0,0 @@
1
- import { UUID_REGEX } from "../../../config.js";
2
- const options = (ids) => (ids.length ? ids.join(", ") : "(catálogo vazio)");
3
- function asRecord(value) {
4
- if (!value || typeof value !== "object" || Array.isArray(value))
5
- return null;
6
- return value;
7
- }
8
- /** Campo ausente → `[]`; tipo errado → `null` (o chamador reporta). */
9
- function asStringArray(value) {
10
- if (value === undefined || value === null)
11
- return [];
12
- if (!Array.isArray(value) || value.some((v) => typeof v !== "string"))
13
- return null;
14
- return value;
15
- }
16
- /** Lista de ids que precisa existir no catálogo; erra por id fora dele. */
17
- function validateIds(field, value, allowed, errors) {
18
- const ids = asStringArray(value);
19
- if (!ids) {
20
- errors.push(`${field}: esperava uma lista de strings`);
21
- return [];
22
- }
23
- for (const id of ids) {
24
- if (!allowed.includes(id)) {
25
- errors.push(`${field}: "${id}" não está no catálogo — use: ${options(allowed)}`);
26
- }
27
- }
28
- return ids;
29
- }
30
- function validateStacks(value, catalog, errors) {
31
- const raw = value === undefined || value === null ? {} : asRecord(value);
32
- if (!raw) {
33
- errors.push('stacks: esperava um objeto { "área": "stack" }');
34
- return {};
35
- }
36
- const stacks = {};
37
- for (const [area, stack] of Object.entries(raw)) {
38
- const known = catalog.stacks.find((s) => s.area === area);
39
- if (!known) {
40
- const areas = catalog.stacks.map((s) => s.area);
41
- errors.push(`stacks: área "${area}" não está no catálogo — use: ${options(areas)}`);
42
- }
43
- else if (typeof stack !== "string" || !known.options.includes(stack)) {
44
- errors.push(`stacks["${area}"]: "${String(stack)}" não é stack dessa área — use: ${options(known.options)}`);
45
- }
46
- else {
47
- stacks[area] = stack;
48
- }
49
- }
50
- return stacks;
51
- }
52
- function validateUuid(field, value, required, errors) {
53
- if (value === undefined || value === null) {
54
- if (required)
55
- errors.push(`${field}: obrigatório — o UUID do projeto`);
56
- return null;
57
- }
58
- const text = typeof value === "string" ? value.trim() : "";
59
- if (!UUID_REGEX.test(text)) {
60
- errors.push(`${field}: "${String(value)}" não é um UUID`);
61
- return null;
62
- }
63
- return text;
64
- }
65
- function validateIde(value, catalog, errors) {
66
- const ids = catalog.ide.map((o) => o.id);
67
- if (typeof value === "string" && ids.includes(value))
68
- return value;
69
- errors.push(`ide: "${String(value)}" não está no catálogo — use: ${options(ids)}`);
70
- return "other";
71
- }
72
- /** Id do catálogo → a boilerplate resolvida (repo/ref); ausente/`null` = sem scaffold. */
73
- function validateBoilerplate(value, catalog, errors) {
74
- if (value === undefined || value === null)
75
- return null;
76
- if (typeof value !== "string") {
77
- errors.push("boilerplate: esperava uma string (id do catálogo)");
78
- return null;
79
- }
80
- const found = catalog.boilerplates.find((b) => b.id === value);
81
- if (!found) {
82
- const ids = options(catalog.boilerplates.map((b) => b.id));
83
- errors.push(`boilerplate: "${value}" não está no catálogo — confira \`boilerplates[]\`: ${ids}`);
84
- return null;
85
- }
86
- return found;
87
- }
88
- function validateAnalyze(value, catalog, errors) {
89
- if (value === undefined || value === null)
90
- return catalog.analyze.default;
91
- if (typeof value !== "boolean") {
92
- errors.push("analyze: esperava booleano (true/false)");
93
- return catalog.analyze.default;
94
- }
95
- return value;
96
- }
97
- /** Respostas cruas + catálogo → respostas normalizadas ou os erros. Pura. */
98
- export function validateAnswers(raw, catalog) {
99
- const obj = asRecord(raw);
100
- if (!obj) {
101
- return {
102
- ok: false,
103
- errors: ["respostas: esperava um objeto JSON { project, roles, stacks, clients, ide }"],
104
- };
105
- }
106
- const errors = [];
107
- const answers = {
108
- project: validateUuid("project", obj.project, true, errors) ?? "",
109
- repository: validateUuid("repository", obj.repository, false, errors),
110
- selection: {
111
- roles: validateIds("roles", obj.roles, catalog.roles.map((r) => r.id), errors),
112
- stacks: validateStacks(obj.stacks, catalog, errors),
113
- },
114
- skills: validateIds("skills", obj.skills, catalog.skills.map((s) => s.id), errors),
115
- clients: validateIds("clients", obj.clients, catalog.clients.map((c) => c.id), errors),
116
- ide: validateIde(obj.ide, catalog, errors),
117
- analyze: validateAnalyze(obj.analyze, catalog, errors),
118
- boilerplate: validateBoilerplate(obj.boilerplate, catalog, errors),
119
- };
120
- return errors.length > 0 ? { ok: false, errors } : { ok: true, answers };
121
- }
122
- //# sourceMappingURL=apply-answers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-answers.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/apply-answers.ts"],"names":[],"mappings":"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"}
@@ -1,165 +0,0 @@
1
- import { brand, envName } from "../../../brand.js";
2
- import { section } from "../../../lib/colors.js";
3
- import { loadCredentials } from "../../../auth.js";
4
- import { readDependencies, skillIdMap } from "../../../lib/skills.js";
5
- import { collectRuleSkills } from "../../../lib/rules.js";
6
- import { flushTelemetry } from "../../../lib/telemetry.js";
7
- import { createAuthenticatedClient, } from "../../../adapters/supabase/client.js";
8
- import { offerDependencyInstall, offerRuleSkills } from "../../flows/dependencies.js";
9
- import { SyncReport, renderReport } from "../../ui/report.js";
10
- import { buildBaseConfig } from "./project-step.js";
11
- import { persistConfigStep, loadProjectContext, buildHarness } from "./context-step.js";
12
- import { installClients, activateCoworkIfChosen, resolveChosenClientIds, ensureChosenClientsInstalled, } from "./clients-step.js";
13
- import { resolveProvisionTargets, fetchSkillsStep, provisionTargetsStep, provisionHooksStep, } from "./provision-step.js";
14
- import { buildCatalog, readCatalogSources } from "./describe-step.js";
15
- import { validateAnswers } from "./apply-answers.js";
16
- import { applyBoilerplateScaffold } from "./boilerplate-step.js";
17
- import { runInitStep, redirectStdoutToStderr, emitResult } from "./progress.js";
18
- import { runInitAnalysis } from "./analyze-step.js";
19
- function fail(errors) {
20
- console.error("[erro] respostas do --apply inválidas:");
21
- for (const err of errors)
22
- console.error(` - ${err}`);
23
- console.error(` rode \`${brand.name} init --describe\` pra ver o catálogo válido.`);
24
- emitResult({
25
- ok: false,
26
- harnessWritten: false,
27
- skills: [],
28
- clients: [],
29
- sections: [],
30
- error: "respostas do --apply inválidas",
31
- errors,
32
- });
33
- process.exit(1);
34
- }
35
- /** JSON cru → respostas validadas contra o catálogo; erro acionável + exit 1 se não bate. */
36
- export function parseApplyAnswers(json) {
37
- let raw;
38
- try {
39
- raw = JSON.parse(json);
40
- }
41
- catch (err) {
42
- fail([`--apply: JSON inválido (${err.message})`]);
43
- }
44
- const result = validateAnswers(raw, buildCatalog(readCatalogSources()));
45
- if (!result.ok)
46
- fail(result.errors);
47
- return result.answers;
48
- }
49
- /** Auth assumida: o headless nunca prompta PAT — sem credencial salva, falha acionável. */
50
- async function requireCredentials() {
51
- if (await loadCredentials())
52
- return;
53
- throw new Error(`sem sessão do ${brand.productName} nesta máquina — o init headless não pede PAT. ` +
54
- `Conecte a conta no Studio, ou rode \`${brand.name} login <PAT>\`, ou passe o PAT ` +
55
- `em ${envName("PAT")} no ambiente; depois repita o \`${brand.name} init --apply\`.`);
56
- }
57
- /** Sessão + config no disco + contexto, com projeto/repo/seleção/IDE vindos do JSON. */
58
- async function applyProjectSetup(answers) {
59
- const session = await runInitStep("session", "Carregando a sessão", () => createAuthenticatedClient());
60
- const config = buildBaseConfig(answers.project, answers.repository);
61
- config.selection = answers.selection;
62
- config.ide = answers.ide;
63
- await runInitStep("config", `Gravando ${brand.projectConfigFile}`, () => persistConfigStep(config, answers.project));
64
- const { overview } = await runInitStep("context", "Carregando o contexto do projeto", () => loadProjectContext(session.supabase, config, session.user));
65
- return { config, session, overview };
66
- }
67
- /** Instala os clientes escolhidos e provisiona skills/commands/hooks — tudo sem prompt. */
68
- async function applyClientsAndProvision(config, session, clients, report) {
69
- await runInitStep("clients", "Instalando os clientes escolhidos", async () => {
70
- installClients(clients, process.cwd());
71
- await activateCoworkIfChosen(clients, { interactive: false });
72
- await ensureChosenClientsInstalled(resolveChosenClientIds(clients), { interactive: false });
73
- });
74
- await runInitStep("provision", "Provisionando skills, commands e hooks", () => {
75
- const targets = resolveProvisionTargets(clients);
76
- section("Skills & commands", "provisionando pros clientes");
77
- provisionTargetsStep(targets, config, session, skillIdMap(), report);
78
- provisionHooksStep(targets, config, report);
79
- renderReport(report, "plain");
80
- });
81
- }
82
- /** Hints de libs/skills recomendadas (sem prompt) + telemetria — nada aqui aborta. */
83
- async function applyFollowUps(config) {
84
- const selection = config.selection ?? { roles: [], stacks: {} };
85
- await runInitStep("dependencies", "Conferindo dependências e skills recomendadas", async () => {
86
- await offerDependencyInstall(readDependencies(selection), { interactive: false });
87
- await offerRuleSkills(collectRuleSkills(selection), { interactive: false });
88
- });
89
- try {
90
- await flushTelemetry();
91
- }
92
- catch {
93
- /* telemetria é best-effort — não derruba o init */
94
- }
95
- }
96
- /**
97
- * Aciona o `init-sdd`. Pré-preenchimento é conveniência: falta de `claude`/`codex` ou
98
- * agente que falhou emite `error` no NDJSON (o modal marca a etapa) mas **não** aborta
99
- * — o init já está utilizável, e o estado fica em `analysis` no resultado (exit 0).
100
- */
101
- async function applyAnalysis(result) {
102
- try {
103
- await runInitStep("analyze", "Analisando o repo pra pré-preencher (init-sdd)", () => {
104
- const outcome = runInitAnalysis(process.cwd());
105
- result.analysis = outcome;
106
- if (!outcome.ran)
107
- throw new Error(outcome.reason ?? "análise não rodou");
108
- if (!outcome.ok)
109
- throw new Error(`a análise falhou no agente \`${outcome.agent}\``);
110
- });
111
- }
112
- catch {
113
- /* já emitido como `error`; o apply segue e sai 0 */
114
- }
115
- }
116
- /** As seções sem o detalhe: o resultado leva status/resumo, não a saída humana. */
117
- function summarize(sections) {
118
- return sections.map(({ id, title, status, summary }) => ({ id, title, status, summary }));
119
- }
120
- /** Preenche o resultado à medida que as etapas passam — em falha ele já reflete o quanto rodou. */
121
- async function runApplySteps(answers, result) {
122
- await runInitStep("auth", "Conferindo a sessão salva", requireCredentials);
123
- // Roda só depois do auth, pra um apply sem credencial não deixar a pasta clonada pra trás.
124
- await applyBoilerplateScaffold(answers.boilerplate, process.cwd());
125
- const { config, session, overview } = await applyProjectSetup(answers);
126
- // O harness sai das rules do pacote de skills: em máquina nova o cache tem que vir antes.
127
- const report = new SyncReport();
128
- await runInitStep("skills", "Baixando as skills do repo", () => fetchSkillsStep(report));
129
- result.sections = summarize(report.sections); // se o harness falhar, a seção do fetch explica
130
- result.harness = await runInitStep("harness", "Escrevendo o harness no repo", () => buildHarness(config, overview));
131
- result.harnessWritten = true;
132
- await applyClientsAndProvision(config, session, answers.clients, report);
133
- result.sections = summarize(report.sections);
134
- // Depois do provisionamento: o `init-sdd` lê os templates que ele acabou de instalar.
135
- if (answers.analyze)
136
- await applyAnalysis(result);
137
- await applyFollowUps(config);
138
- }
139
- export async function applyInit(json, analyzeFlag) {
140
- const parsed = parseApplyAnswers(json);
141
- // Precedência: `--no-analyze` na linha de comando ganha do `analyze` do JSON.
142
- const answers = { ...parsed, analyze: analyzeFlag ?? parsed.analyze };
143
- const result = {
144
- ok: false,
145
- harnessWritten: false,
146
- skills: answers.skills,
147
- clients: answers.clients,
148
- sections: [],
149
- };
150
- const restoreStdout = redirectStdoutToStderr();
151
- try {
152
- await runApplySteps(answers, result);
153
- result.ok = true;
154
- }
155
- catch (err) {
156
- result.error = err.message;
157
- }
158
- finally {
159
- restoreStdout();
160
- }
161
- emitResult(result);
162
- if (!result.ok)
163
- process.exit(1);
164
- }
165
- //# sourceMappingURL=apply-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/apply-step.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { password } from "../../../lib/prompts.js";
2
- import { brand } from "../../../brand.js";
3
- import { exchangePatForJwt, loadCredentials, saveCredentials, validatePatFormat, } from "../../../auth.js";
4
- import { createAuthenticatedClient } from "../../../adapters/supabase/client.js";
5
- import { startSpinner } from "../../../spinner.js";
6
- import { initCopy } from "../../copy.js";
7
- /**
8
- * Garante que há credenciais locais antes de seguir com o wizard: se já há PAT
9
- * salvo, não faz nada; senão, pede o token, valida e troca por sessão.
10
- */
11
- export async function ensureAuthenticated() {
12
- const existingCreds = await loadCredentials();
13
- if (existingCreds)
14
- return;
15
- console.log("Você ainda não está autenticado.");
16
- console.log(`Gere um token pessoal em: ${brand.webUrl}/profile#mcp`);
17
- const newPat = (await password({
18
- message: initCopy.patPrompt,
19
- mask: "*",
20
- validate: (value) => validatePatFormat(value.trim()) || initCopy.patInvalid,
21
- })).trim();
22
- const loginSpinner = startSpinner("Validando token...");
23
- try {
24
- const result = await exchangePatForJwt(newPat);
25
- await saveCredentials({ pat: newPat });
26
- loginSpinner.stop();
27
- const displayName = result.user.full_name || result.user.email;
28
- console.log(`[ok] Autenticado como ${displayName}`);
29
- }
30
- catch (err) {
31
- loginSpinner.fail(`Falha ao autenticar: ${err.message}`);
32
- process.exit(1);
33
- }
34
- }
35
- /** Cria a sessão autenticada (client Supabase + user) usada pelo resto do wizard. */
36
- export async function createSessionStep() {
37
- const authSpinner = startSpinner("Carregando sessão...");
38
- try {
39
- const session = await createAuthenticatedClient();
40
- authSpinner.stop();
41
- return session;
42
- }
43
- catch (err) {
44
- authSpinner.fail(err.message);
45
- process.exit(1);
46
- }
47
- }
48
- //# sourceMappingURL=auth-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/auth-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAA6B,MAAM,sCAAsC,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,aAAa,GAAG,MAAM,eAAe,EAAE,CAAC;IAC9C,IAAI,aAAa;QAAE,OAAO;IAE1B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,CACb,MAAM,QAAQ,CAAC;QACb,OAAO,EAAE,QAAQ,CAAC,SAAS;QAC3B,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU;KACzD,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;IAET,MAAM,YAAY,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,WAAW,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,20 +0,0 @@
1
- import { cloneBoilerplate, destIsEmptyForScaffold, detachGit, } from "../../../lib/boilerplate-scaffold.js";
2
- import { runInitStep } from "./progress.js";
3
- /**
4
- * `boilerplate` do `--apply`: clona o repo do catálogo pro dest e desliga o `.git`
5
- * dele — roda entre `auth` e `applyProjectSetup`, antes do harness/skills, que
6
- * escrevem por cima. `null` (nenhuma boilerplate escolhida) é um no-op, sem fase
7
- * emitida — sem checagem de pasta.
8
- */
9
- export async function applyBoilerplateScaffold(boilerplate, dest) {
10
- if (!boilerplate)
11
- return;
12
- await runInitStep("boilerplate-clone", `Clonando o boilerplate ${boilerplate.id}`, () => {
13
- if (!destIsEmptyForScaffold(dest)) {
14
- throw new Error("boilerplate: o destino precisa estar vazio pra clonar — nada foi escrito.");
15
- }
16
- cloneBoilerplate(boilerplate.repo, boilerplate.ref, dest);
17
- });
18
- await runInitStep("boilerplate-detach", "Reiniciando o git no boilerplate", () => detachGit(dest));
19
- }
20
- //# sourceMappingURL=boilerplate-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boilerplate-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/boilerplate-step.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,GACV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAsC,EACtC,IAAY;IAEZ,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,WAAW,CAAC,mBAAmB,EAAE,0BAA0B,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;QACtF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,oBAAoB,EAAE,kCAAkC,EAAE,GAAG,EAAE,CAC/E,SAAS,CAAC,IAAI,CAAC,CAChB,CAAC;AACJ,CAAC"}
@@ -1,78 +0,0 @@
1
- import { checkbox } from "../../../lib/prompts.js";
2
- import { section } from "../../../lib/colors.js";
3
- import { CLIENTS } from "../../../lib/client-install.js";
4
- import { installClaudeCodeGlobal, installClaudeCodeRepo, installCodexGlobal, installVSCodeRepo, } from "../../../lib/client-configs.js";
5
- import { printInstallResult } from "../../ui/render.js";
6
- import { ensureClientInstalled, activateCowork } from "../../flows/clients.js";
7
- import { initCopy } from "../../copy.js";
8
- /** Rótulo + rotina de instalação de cada escolha do checkbox (exceto `cowork`,
9
- * que tem ativação assíncrona própria — ver `activateCoworkIfChosen`). */
10
- export const CLIENT_INSTALLERS = {
11
- "claude-code-global": { label: "Claude Code (global)", run: () => installClaudeCodeGlobal() },
12
- "codex-global": { label: "Codex CLI (global)", run: () => installCodexGlobal() },
13
- "claude-code-repo": { label: "Claude Code (per-repo)", run: (cwd) => installClaudeCodeRepo(cwd) },
14
- "vscode-repo": { label: "VS Code Copilot (per-repo)", run: (cwd) => installVSCodeRepo(cwd) },
15
- };
16
- /** Clientes oferecidos — fonte única do prompt interativo e do catálogo do `--describe`. */
17
- export const CLIENT_CHOICES = [
18
- { name: initCopy.clientChoices.claudeGlobal, value: "claude-code-global" },
19
- { name: initCopy.clientChoices.codexGlobal, value: "codex-global" },
20
- { name: initCopy.clientChoices.cowork, value: "cowork" },
21
- { name: initCopy.clientChoices.claudeRepo, value: "claude-code-repo" },
22
- { name: initCopy.clientChoices.vscodeRepo, value: "vscode-repo" },
23
- ];
24
- export async function promptClientChoices() {
25
- return checkbox({
26
- message: initCopy.clientsPrompt,
27
- all: true,
28
- choices: CLIENT_CHOICES,
29
- });
30
- }
31
- /** Roda a instalação de cada cliente escolhido (exceto `cowork`, tratado à parte). */
32
- export function installClients(clientConfigs, cwd) {
33
- for (const choice of clientConfigs) {
34
- if (choice === "cowork")
35
- continue; // ativação async + fallback, tratada abaixo
36
- const installer = CLIENT_INSTALLERS[choice];
37
- try {
38
- printInstallResult(installer.label, installer.run(cwd));
39
- }
40
- catch (err) {
41
- console.error(`[erro] Falha ao configurar ${choice}: ${err.message}`);
42
- }
43
- }
44
- }
45
- export async function activateCoworkIfChosen(clientConfigs, opts = { interactive: true }) {
46
- if (!clientConfigs.includes("cowork"))
47
- return;
48
- console.log("");
49
- section("Claude Desktop / Cowork");
50
- await activateCowork(opts);
51
- }
52
- /**
53
- * Dado o resultado do checkbox de clientes, quais IDs (`CLIENTS[id]`) devem
54
- * ser conferidos como instalados — várias escolhas do mesmo cliente colapsam
55
- * num id só (ex.: claude-code-global e claude-code-repo → "claude-code").
56
- */
57
- export function resolveChosenClientIds(clientConfigs) {
58
- const ids = new Set();
59
- for (const choice of clientConfigs) {
60
- if (choice.startsWith("claude-code"))
61
- ids.add("claude-code");
62
- if (choice === "codex-global")
63
- ids.add("codex");
64
- if (choice === "vscode-repo")
65
- ids.add("vscode");
66
- }
67
- return ids;
68
- }
69
- export async function ensureChosenClientsInstalled(chosenClientIds, opts = { interactive: true }) {
70
- if (chosenClientIds.size === 0)
71
- return;
72
- console.log("");
73
- section("Clientes", "confirmando que estão instalados");
74
- for (const id of chosenClientIds) {
75
- await ensureClientInstalled(CLIENTS[id], opts);
76
- }
77
- }
78
- //# sourceMappingURL=clients-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clients-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/clients-step.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { confirm } from "../../../lib/prompts.js";
3
- import { c } from "../../../lib/colors.js";
4
- import { startSpinner } from "../../../spinner.js";
5
- import { writeProjectConfig, writeUserConfig, fixGitignoreForSplit, USER_CONFIG_FILE, } from "../../../config.js";
6
- import { brand } from "../../../brand.js";
7
- import { fetchProjectContext, buildProjectOverview, ProjectContextError, } from "../../../lib/project-context.js";
8
- import { concatenateRules, concatenateReviewCriteria } from "../../../lib/rules.js";
9
- import { writeRepoHarness } from "../../../lib/harness.js";
10
- import { printContextSummary, printHarnessResult } from "../../ui/render.js";
11
- import { initCopy } from "../../copy.js";
12
- /** Se já existe noclaf.json, confirma a sobrescrita. `true` = segue com o wizard. */
13
- export async function confirmOverwriteIfExists(configPath) {
14
- if (!existsSync(configPath))
15
- return true;
16
- const overwrite = await confirm({ message: initCopy.overwrite, default: false });
17
- if (!overwrite)
18
- console.log("Operação cancelada.");
19
- return overwrite;
20
- }
21
- /**
22
- * Grava a config: `noclaf.json` (repo, versionado — binding + seleção) + `noclaf.user.json`
23
- * (usuário, gitignored — ide). Ajusta o `.gitignore` (ignora só o user file). Best-effort.
24
- */
25
- export function persistConfigStep(config, projectName) {
26
- writeProjectConfig(config);
27
- writeUserConfig({ ide: config.ide });
28
- console.log(`[ok] Criado ${brand.projectConfigFile} (do repo) apontando para ${projectName}.`);
29
- console.log(`${c.dim(` + ${USER_CONFIG_FILE} (suas prefs, gitignored)`)}`);
30
- try {
31
- fixGitignoreForSplit();
32
- console.log(`${c.dim(` + ${USER_CONFIG_FILE} adicionado ao .gitignore`)}`);
33
- }
34
- catch {
35
- /* .gitignore best-effort — não bloqueia o init */
36
- }
37
- }
38
- /** Núcleo do contexto: propaga a falha — o headless aborta se o binding não resolve. */
39
- export async function loadProjectContext(supabase, config, user) {
40
- const context = await fetchProjectContext(supabase, config, user);
41
- return { context, overview: buildProjectOverview(context) };
42
- }
43
- /**
44
- * Carrega o contexto do projeto (specs/ADRs/membros) e monta o overview pro
45
- * AGENTS.md. Falha aqui é degradada: o noclaf.json já foi salvo, então só avisa
46
- * e devolve overview vazio.
47
- */
48
- export async function loadContextStep(supabase, config, user) {
49
- const contextSpinner = startSpinner("Carregando contexto do projeto...");
50
- try {
51
- const { context, overview } = await loadProjectContext(supabase, config, user);
52
- contextSpinner.stop();
53
- printContextSummary(context);
54
- return overview;
55
- }
56
- catch (err) {
57
- const message = err instanceof ProjectContextError ? err.message : err.message;
58
- contextSpinner.fail(`Não foi possível carregar o contexto: ${message}`);
59
- console.error(`O ${brand.projectConfigFile} foi salvo. Rode \`${brand.name} init\` de novo se precisar revincular.`);
60
- return "";
61
- }
62
- }
63
- /** Núcleo do harness: propaga a falha — sem harness o init headless não serve. */
64
- export function buildHarness(config, overview) {
65
- const sel = config.selection ?? { roles: [], stacks: {} };
66
- return writeRepoHarness(process.cwd(), {
67
- rulesMarkdown: concatenateRules(sel),
68
- reviewMarkdown: concatenateReviewCriteria(sel),
69
- overview,
70
- });
71
- }
72
- /** Harness no repo: rules concatenadas + AGENTS.md (overview do NOS) + CLAUDE.md. */
73
- export function writeHarnessStep(config, overview) {
74
- try {
75
- printHarnessResult(buildHarness(config, overview));
76
- }
77
- catch (err) {
78
- console.error(`[aviso] Não consegui escrever o harness: ${err.message}`);
79
- }
80
- }
81
- //# sourceMappingURL=context-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/context-step.ts"],"names":[],"mappings":"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"}
@@ -1,68 +0,0 @@
1
- import { readSkillDocs, skillsDir } from "../../../lib/skills.js";
2
- import { discoverBoilerplates } from "../../../lib/boilerplates.js";
3
- import { isAllowedRepoUrl } from "../../../lib/boilerplate-scaffold.js";
4
- import { DEV_ROLE, GENERAL, discoverAreas, discoverRoles, discoverStacks, } from "../../../lib/sections.js";
5
- import { initCopy } from "../../copy.js";
6
- import { ROLE_LABELS } from "../../flows/sections.js";
7
- import { CLIENT_CHOICES } from "./clients-step.js";
8
- import { IDE_CHOICES } from "./project-step.js";
9
- function toOptions(choices) {
10
- return choices.map((c) => ({ id: c.value, label: c.name }));
11
- }
12
- /** `skills/<role>/general/<skill>/SKILL.md` ou `skills/<role>/<área>/<stack>/<skill>/SKILL.md`. */
13
- function toCatalogSkill(doc) {
14
- const parts = doc.path.split("/");
15
- const area = parts[2] ?? GENERAL;
16
- return {
17
- id: doc.id,
18
- uid: doc.uid,
19
- title: doc.title,
20
- description: doc.description,
21
- role: parts[1] ?? "",
22
- area,
23
- stack: area === GENERAL ? null : (parts[3] ?? GENERAL),
24
- };
25
- }
26
- /** Monta o catálogo a partir das fontes já lidas. Pura. */
27
- export function buildCatalog(sources) {
28
- return {
29
- roles: sources.roles.map((id) => ({ id, label: ROLE_LABELS[id] ?? id })),
30
- stacks: sources.areas.map((area) => ({
31
- area,
32
- options: [GENERAL, ...(sources.stacksByArea[area] ?? [])],
33
- })),
34
- skills: sources.skills.filter((d) => d.type === "skill").map(toCatalogSkill),
35
- // manifesto sem repo válido (https/git@) é malformado — o --apply não teria o que clonar.
36
- boilerplates: sources.boilerplates.filter((b) => isAllowedRepoUrl(b.repo)),
37
- clients: toOptions(CLIENT_CHOICES),
38
- ide: toOptions(IDE_CHOICES),
39
- analyze: { label: initCopy.analyzePrompt, default: true },
40
- };
41
- }
42
- /** Lê roles/áreas/stacks/skills do pacote de skills — best-effort, como nos prompts. */
43
- export function readCatalogSources() {
44
- try {
45
- const dir = skillsDir();
46
- const roles = discoverRoles(dir);
47
- const areas = roles.includes(DEV_ROLE) ? discoverAreas(dir, DEV_ROLE) : [];
48
- const stacksByArea = {};
49
- for (const area of areas)
50
- stacksByArea[area] = discoverStacks(dir, DEV_ROLE, area);
51
- return {
52
- roles,
53
- areas,
54
- stacksByArea,
55
- skills: readSkillDocs(dir),
56
- boilerplates: discoverBoilerplates(dir),
57
- };
58
- }
59
- catch {
60
- // ponytail: follow-up — sem cache de skills o catálogo sai vazio e o --apply rejeita tudo.
61
- return { roles: [], areas: [], stacksByArea: {}, skills: [], boilerplates: [] };
62
- }
63
- }
64
- /** `noclaf init --describe`: catálogo em JSON no stdout, sem nenhum prompt. */
65
- export function describeInit() {
66
- process.stdout.write(`${JSON.stringify(buildCatalog(readCatalogSources()), null, 2)}\n`);
67
- }
68
- //# sourceMappingURL=describe-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"describe-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/describe-step.ts"],"names":[],"mappings":"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"}