@noclaf/cli 0.8.0 → 0.9.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 (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,69 +0,0 @@
1
- import { text, password as clackPassword, confirm as clackConfirm, select as clackSelect, multiselect, isCancel, cancel, } from '@clack/prompts';
2
- /**
3
- * Wrapper drop-in do `@clack/prompts` com a MESMA assinatura que o CLI já usava
4
- * do `@inquirer/prompts` — então trocar o cliente de prompts é só mudar o import.
5
- *
6
- * Extras que o clack traz de graça: gutter `│`, símbolos `◇/◆/✓`, e cancelamento
7
- * (Ctrl-C) tratado de forma central por `unwrap()` (encerra limpo em vez de stack).
8
- */
9
- /** Encerra limpo se o usuário cancelar (Ctrl-C) qualquer prompt. */
10
- function unwrap(value) {
11
- if (isCancel(value)) {
12
- cancel('Operação cancelada.');
13
- process.exit(130);
14
- }
15
- return value;
16
- }
17
- /**
18
- * Converte o `validate` do inquirer (`(v: string) => true | string`) pro do clack
19
- * (`Validate<string>` = `(v: string | undefined) => string | undefined`).
20
- */
21
- function adaptValidate(validate) {
22
- if (!validate)
23
- return undefined;
24
- return (value) => {
25
- const result = validate(value ?? '');
26
- return result === true ? undefined : result || undefined;
27
- };
28
- }
29
- export async function password(opts) {
30
- return unwrap(await clackPassword({
31
- message: opts.message,
32
- mask: opts.mask,
33
- validate: adaptValidate(opts.validate),
34
- }));
35
- }
36
- export async function input(opts) {
37
- return unwrap(await text({
38
- message: opts.message,
39
- initialValue: opts.default,
40
- validate: adaptValidate(opts.validate),
41
- }));
42
- }
43
- export async function confirm(opts) {
44
- return unwrap(await clackConfirm({ message: opts.message, initialValue: opts.default }));
45
- }
46
- export async function select(opts) {
47
- const options = opts.choices.map((ch) => ({
48
- value: ch.value,
49
- label: ch.name,
50
- hint: ch.description,
51
- }));
52
- return unwrap(await clackSelect({ message: opts.message, options: options, initialValue: opts.default }));
53
- }
54
- /** Sentinela da opção "Todos" — `Symbol` não colide com nenhum valor real de `T`. */
55
- const SELECT_ALL = Symbol("select-all");
56
- export async function checkbox(opts) {
57
- const withAll = Boolean(opts.all) && opts.choices.length > 1;
58
- const allLabel = typeof opts.all === "string" ? opts.all : "Todos";
59
- const options = [
60
- ...(withAll ? [{ value: SELECT_ALL, label: allLabel, hint: "marca tudo" }] : []),
61
- ...opts.choices.map((ch) => ({ value: ch.value, label: ch.name, hint: ch.description })),
62
- ];
63
- const picked = unwrap(await multiselect({ message: opts.message, options: options, required: false }));
64
- if (withAll && picked.includes(SELECT_ALL)) {
65
- return opts.choices.map((ch) => ch.value);
66
- }
67
- return picked.filter((v) => v !== SELECT_ALL);
68
- }
69
- //# sourceMappingURL=prompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"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"}
@@ -1,220 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, lstatSync, readlinkSync } from "node:fs";
2
- import { createHash } from "node:crypto";
3
- import { homedir } from "node:os";
4
- import { dirname, join, resolve } from "node:path";
5
- import { VERSION } from "../version.js";
6
- import { brand } from "../brand.js";
7
- /**
8
- * Motor do provisionamento: hash/manifesto (`.noclaf-provision.json`), escrita
9
- * idempotente e poda do que o noclaf gravou. `provision.ts` monta a lista e chama
10
- * `applyProvision`; `uninstallProvision` desfaz pelo mesmo manifesto.
11
- */
12
- export const MANIFEST_NAME = ".noclaf-provision.json";
13
- export function defaultTargetDir() {
14
- return join(homedir(), ".claude");
15
- }
16
- function sha256(buf) {
17
- return createHash("sha256").update(buf).digest("hex");
18
- }
19
- function readManifest(path) {
20
- if (!existsSync(path))
21
- return null;
22
- try {
23
- const parsed = JSON.parse(readFileSync(path, "utf-8"));
24
- if (parsed && typeof parsed === "object" && parsed.files)
25
- return parsed;
26
- }
27
- catch {
28
- // manifesto corrompido → trata como ausente e reconstrói
29
- }
30
- return null;
31
- }
32
- /**
33
- * Se um componente de `dir` é symlink com alvo inexistente (dotfiles gerenciando
34
- * `~/.claude`), materializa o alvo em vez de deixar o `mkdir -p` estourar ENOENT.
35
- * Retorna `true` se materializou algo. Escrever depois grava através do link.
36
- */
37
- function materializeDanglingLink(dir) {
38
- let cursor = dir;
39
- for (;;) {
40
- let info;
41
- try {
42
- info = lstatSync(cursor);
43
- }
44
- catch {
45
- // cursor não existe (parent pendurado) → sobe um nível.
46
- const parent = dirname(cursor);
47
- if (parent === cursor)
48
- return false;
49
- cursor = parent;
50
- continue;
51
- }
52
- if (info.isSymbolicLink()) {
53
- const target = resolve(dirname(cursor), readlinkSync(cursor));
54
- if (existsSync(target))
55
- return false; // link ok — o ENOENT veio de outro lugar
56
- mkdirSync(target, { recursive: true });
57
- return true;
58
- }
59
- return false; // cursor existe e é real → não há link pendurado acima
60
- }
61
- }
62
- /** `mkdir -p` tolerante a symlinks pendurados de dotfiles (ver acima). */
63
- export function ensureDir(dir) {
64
- for (let attempt = 0; attempt < 40; attempt++) {
65
- try {
66
- mkdirSync(dir, { recursive: true });
67
- return;
68
- }
69
- catch (err) {
70
- if (err.code !== "ENOENT")
71
- throw err;
72
- if (!materializeDanglingLink(dir))
73
- throw err;
74
- }
75
- }
76
- mkdirSync(dir, { recursive: true });
77
- }
78
- function writeFile(targetAbs, content) {
79
- ensureDir(dirname(targetAbs));
80
- writeFileSync(targetAbs, content);
81
- }
82
- /**
83
- * Núcleo do provisionamento: aplica `docs` no destino, idempotente e não-destrutivo
84
- * via manifesto. Retorna o plano por arquivo.
85
- */
86
- export function applyProvision(docs, options = {}) {
87
- const dryRun = options.dryRun ?? false;
88
- const force = options.force ?? false;
89
- const prune = options.prune ?? true;
90
- const targetDir = options.targetDir ?? defaultTargetDir();
91
- const manifestPath = join(targetDir, MANIFEST_NAME);
92
- const oldFiles = readManifest(manifestPath)?.files ?? {};
93
- const files = docs.map((d) => ({
94
- relPath: d.relPath,
95
- content: d.content,
96
- hash: sha256(d.content),
97
- }));
98
- const incomingSet = new Set(files.map((f) => f.relPath));
99
- const results = [];
100
- const newFiles = {};
101
- for (const f of files) {
102
- const targetAbs = join(targetDir, f.relPath);
103
- // Um arquivo problemático (ex.: symlink de dotfiles quebrado) vira um resultado
104
- // `write-error` e a sincronização segue — nunca aborta o resto por causa de um.
105
- try {
106
- if (!existsSync(targetAbs)) {
107
- if (!dryRun)
108
- writeFile(targetAbs, f.content);
109
- results.push({ relPath: f.relPath, action: "create" });
110
- newFiles[f.relPath] = f.hash;
111
- continue;
112
- }
113
- const existingHash = sha256(readFileSync(targetAbs));
114
- if (existingHash === f.hash) {
115
- results.push({ relPath: f.relPath, action: "unchanged" });
116
- newFiles[f.relPath] = f.hash;
117
- continue;
118
- }
119
- // Divergente. Só atualizamos se o arquivo era nosso e o worker não mexeu,
120
- // ou se ele pediu --force.
121
- const wasOursUntouched = oldFiles[f.relPath] === existingHash;
122
- if (wasOursUntouched || force) {
123
- if (!dryRun)
124
- writeFile(targetAbs, f.content);
125
- results.push({
126
- relPath: f.relPath,
127
- action: "update",
128
- detail: wasOursUntouched
129
- ? undefined
130
- : "forçado sobre arquivo divergente",
131
- });
132
- newFiles[f.relPath] = f.hash;
133
- }
134
- else {
135
- results.push({
136
- relPath: f.relPath,
137
- action: "skip-conflict",
138
- detail: oldFiles[f.relPath] !== undefined
139
- ? "editado localmente"
140
- : "arquivo de terceiros",
141
- });
142
- // Não reivindica propriedade: fica de fora do novo manifesto.
143
- }
144
- }
145
- catch (err) {
146
- results.push({
147
- relPath: f.relPath,
148
- action: "write-error",
149
- detail: err.message,
150
- });
151
- }
152
- }
153
- // Prune: o que era nosso mas não veio nesta fonte.
154
- if (prune) {
155
- for (const [relPath, oldHash] of Object.entries(oldFiles)) {
156
- if (incomingSet.has(relPath))
157
- continue;
158
- // Ainda existe no bundle (só foi filtrado pela seleção neste run) → NÃO poda;
159
- // mantém no manifesto pra não perder a propriedade em runs futuros.
160
- if (options.keep?.has(relPath)) {
161
- newFiles[relPath] = oldHash;
162
- continue;
163
- }
164
- const targetAbs = join(targetDir, relPath);
165
- if (!existsSync(targetAbs))
166
- continue;
167
- const existingHash = sha256(readFileSync(targetAbs));
168
- if (existingHash === oldHash) {
169
- if (!dryRun)
170
- rmSync(targetAbs);
171
- results.push({ relPath, action: "prune" });
172
- }
173
- else {
174
- results.push({
175
- relPath,
176
- action: "prune-kept",
177
- detail: "modificado localmente — mantido",
178
- });
179
- }
180
- }
181
- }
182
- if (!dryRun) {
183
- const manifest = {
184
- version: VERSION,
185
- generator: brand.packageName,
186
- files: newFiles,
187
- };
188
- mkdirSync(targetDir, { recursive: true });
189
- writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
190
- }
191
- return { targetDir, version: VERSION, dryRun, files: results };
192
- }
193
- /** Remove só o que o noclaf instalou (conforme o manifesto), preservando edições locais. */
194
- export function uninstallProvision(options = {}) {
195
- const dryRun = options.dryRun ?? false;
196
- const targetDir = options.targetDir ?? defaultTargetDir();
197
- const manifestPath = join(targetDir, MANIFEST_NAME);
198
- const manifest = readManifest(manifestPath);
199
- const removed = [];
200
- const kept = [];
201
- if (manifest) {
202
- for (const [relPath, hash] of Object.entries(manifest.files)) {
203
- const targetAbs = join(targetDir, relPath);
204
- if (!existsSync(targetAbs))
205
- continue;
206
- if (sha256(readFileSync(targetAbs)) === hash) {
207
- if (!dryRun)
208
- rmSync(targetAbs);
209
- removed.push(relPath);
210
- }
211
- else {
212
- kept.push(relPath);
213
- }
214
- }
215
- if (!dryRun && existsSync(manifestPath))
216
- rmSync(manifestPath);
217
- }
218
- return { targetDir, removed, kept, dryRun };
219
- }
220
- //# sourceMappingURL=provision-apply.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision-apply.js","sourceRoot":"","sources":["../../src/lib/provision-apply.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync } from "node:fs";
2
- import { join, relative, sep } from "node:path";
3
- /**
4
- * Coleta os arquivos sincronizáveis do pacote `@noclaf/skills` (commands/skills/
5
- * agents) como uma lista em memória — a fonte que `provision()` filtra/achata
6
- * (via `sections.ts`) e passa pro motor de aplicação (`provision-apply.ts`).
7
- */
8
- /** Subpastas do pacote `@noclaf/skills` espelhadas em `~/.claude`. */
9
- const SYNCED_SUBDIRS = ["commands", "skills", "agents"];
10
- /** Basenames que nunca são copiados pro destino (READMEs são só do repo). */
11
- const IGNORED_BASENAMES = new Set([".gitkeep", ".DS_Store", "README.md"]);
12
- /** Lista arquivos sob `dir` recursivamente, paths relativos a `dir` em estilo POSIX. */
13
- function listFilesRecursive(dir) {
14
- const out = [];
15
- const walk = (abs) => {
16
- for (const entry of readdirSync(abs, { withFileTypes: true })) {
17
- if (entry.name === ".DS_Store")
18
- continue;
19
- const childAbs = join(abs, entry.name);
20
- if (entry.isDirectory())
21
- walk(childAbs);
22
- else if (entry.isFile())
23
- out.push(relative(dir, childAbs).split(sep).join("/"));
24
- }
25
- };
26
- walk(dir);
27
- return out;
28
- }
29
- /** Coleta os arquivos sincronizáveis do pacote (só as subpastas conhecidas). */
30
- export function collectSkillFiles(dir) {
31
- const files = [];
32
- for (const sub of SYNCED_SUBDIRS) {
33
- const subDir = join(dir, sub);
34
- if (!existsSync(subDir))
35
- continue;
36
- for (const rel of listFilesRecursive(subDir)) {
37
- const base = rel.split("/").pop() ?? rel;
38
- if (IGNORED_BASENAMES.has(base))
39
- continue;
40
- const abs = join(subDir, rel);
41
- const content = readFileSync(abs);
42
- files.push({ relPath: `${sub}/${rel}`, content });
43
- }
44
- }
45
- return files;
46
- }
47
- //# sourceMappingURL=provision-collect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision-collect.js","sourceRoot":"","sources":["../../src/lib/provision-collect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;GAIG;AAEH,sEAAsE;AACtE,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEjE,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAO1E,wFAAwF;AACxF,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACnC,IAAI,KAAK,CAAC,MAAM,EAAE;gBACrB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAClC,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;YACzC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,45 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { brand } from "../brand.js";
3
- import { claudeTarget } from "./targets.js";
4
- import { filterDocsForSurface, skillsDir } from "./skills.js";
5
- import { filterForSelection, flattenSelection } from "./sections.js";
6
- import { collectSkillFiles } from "./provision-collect.js";
7
- import { applyProvision } from "./provision-apply.js";
8
- /**
9
- * Provisiona skills/commands/agents do noclaf (o MCP não grava em `~/.claude`; a CLI
10
- * `sync`/`init` chama `provision()`). Idempotente via manifesto. Coleta em
11
- * `provision-collect.ts`, motor em `provision-apply.ts` — ambos reexportados daqui.
12
- */
13
- /**
14
- * Copia/atualiza o conteúdo do pacote `@noclaf/skills` no destino.
15
- * (`noclaf sync` / `noclaf init`.)
16
- */
17
- export function provision(options = {}) {
18
- const target = options.target ?? claudeTarget;
19
- const dir = options.skillsDir ?? skillsDir();
20
- if (!existsSync(dir)) {
21
- throw new Error(`Pacote de skills não encontrado em ${dir}. Instale/publique ${brand.skillsPackage}.`);
22
- }
23
- const rawDocs = collectSkillFiles(dir).map((f) => ({
24
- relPath: f.relPath,
25
- content: f.content,
26
- }));
27
- // Todos os paths on-disk possíveis do bundle (sem o filtro de seleção). O prune só
28
- // remove o que NÃO está aqui — o que saiu do bundle de verdade —, nunca o que foi só
29
- // filtrado pela seleção deste run. Sem isso o auto-pull de um repo com seleção estreita
30
- // apagava `/implement` & cia. do `~/.claude` global.
31
- const keep = new Set(target
32
- .mapDocs(filterDocsForSurface(flattenSelection(rawDocs), target.surface))
33
- .map((d) => d.relPath));
34
- const scoped = filterForSelection(rawDocs, options.selection);
35
- const flat = flattenSelection(scoped);
36
- const visible = filterDocsForSurface(flat, target.surface);
37
- const docs = target.mapDocs(visible);
38
- return applyProvision(docs, {
39
- ...options,
40
- keep,
41
- targetDir: options.targetDir ?? target.targetDir(),
42
- });
43
- }
44
- export { MANIFEST_NAME, applyProvision, ensureDir, uninstallProvision, } from "./provision-apply.js";
45
- //# sourceMappingURL=provision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/lib/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAwB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAkB,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AAEnG;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,UAAkF,EAAE;IAEpF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,sBAAsB,KAAK,CAAC,aAAa,GAAG,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAC;IAEJ,mFAAmF;IACnF,qFAAqF;IACrF,wFAAwF;IACxF,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,MAAM;SACH,OAAO,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;SACxE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACzB,CAAC;IAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,cAAc,CAAC,IAAI,EAAE;QAC1B,GAAG,OAAO;QACV,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE;KACnD,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,kBAAkB,GAOnB,MAAM,sBAAsB,CAAC"}
@@ -1,10 +0,0 @@
1
- import { z } from 'zod';
2
- /** Status aceitos no update; `delivered` só via finalize. */
3
- export const UPDATABLE_RELEASE_STATUS = z.enum(['planning', 'in_progress', 'cancelled']);
4
- /** Garante que a release é do projeto; erro acionável senão. */
5
- export async function assertReleaseInProject(gw, projectId, releaseId) {
6
- if (!(await gw.findRelease(projectId, releaseId))) {
7
- throw new Error('Release não encontrada neste projeto. Use list_releases pra ver os ids válidos.');
8
- }
9
- }
10
- //# sourceMappingURL=release-logic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-logic.js","sourceRoot":"","sources":["../../src/lib/release-logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,6DAA6D;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAEzF,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAuC,EAAE,SAAiB,EAAE,SAAiB;IACxH,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
@@ -1,176 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';
3
- import { dirname, join } from 'node:path';
4
- import { ensureGitignored, GITIGNORE_GENERATED_SUFFIX } from '../config.js';
5
- /**
6
- * Índice estrutural do repo — irmão do `detect-patterns`, mas **sem IA**: um artefato
7
- * gerado deterministicamente (mesma entrada → mesma saída) que os agentes **grepam** pra
8
- * achar onde as coisas vivem, em vez de abrir arquivos inteiros. Regerado no `sync`.
9
- */
10
- export const MAP_REL = 'docs/_map.md';
11
- /** Símbolos "públicos" por stack. Regex leve — o objetivo é localizar, não parsear. */
12
- const EXTRACTORS = {
13
- ts: [
14
- /^export\s+(?:default\s+)?(?:async\s+)?(?:abstract\s+)?(?:function|class|const|let|type|interface|enum)\s+([A-Za-z_$][\w$]*)/gm,
15
- ],
16
- py: [/^(?:def|class)\s+([A-Za-z_]\w*)/gm],
17
- swift: [
18
- /^(?:public|open)\s+(?:final\s+)?(?:func|class|struct|enum|protocol|actor|var|let)\s+([A-Za-z_]\w*)/gm,
19
- ],
20
- go: [/^func\s+(?:\([^)]*\)\s*)?([A-Z]\w*)/gm, /^type\s+([A-Z]\w*)/gm],
21
- rs: [/^pub\s+(?:async\s+)?(?:fn|struct|enum|trait|const|type|mod)\s+([A-Za-z_]\w*)/gm],
22
- };
23
- const STACK_BY_EXT = {
24
- ts: 'ts',
25
- tsx: 'ts',
26
- js: 'ts',
27
- jsx: 'ts',
28
- mjs: 'ts',
29
- py: 'py',
30
- swift: 'swift',
31
- go: 'go',
32
- rs: 'rs',
33
- };
34
- /** Teto de símbolos por arquivo: o map é índice, não dump — estourar reintroduz o custo. */
35
- const MAX_SYMBOLS = 12;
36
- const COMMENT = /^\s*(?:\/\/+|\/\*+|\*+\/?|#+|"""|''')\s*/;
37
- const SHEBANG = /^#!/;
38
- // Banner de licença/pragma/TODO não descreve o arquivo — propósito vazio é melhor que errado.
39
- const NON_PROSE = /^(?:copyright\b|\(c\)|licen[sc]|spdx-|all rights reserved|@ts-|eslint-|prettier-|todo:|fixme:|noqa|-\*-)/i;
40
- const CLOSER = /(?:\*+\/|"""|''')\s*$/;
41
- // Só declaração em coluna 0 encerra a busca — o corpo indentado de um `import {` multilinha não.
42
- const DECL = /^(?:export|declare|def|class|func|fn|pub|type|interface|enum|const|let|var|function|struct|impl|actor|protocol|public|open|extension|private|internal|final|async|@)\b/;
43
- function isComment(line) {
44
- return !SHEBANG.test(line) && COMMENT.test(line);
45
- }
46
- function stackOf(path) {
47
- const ext = path.split('.').pop() ?? '';
48
- return path.includes('.test.') || path.includes('.spec.') ? null : (STACK_BY_EXT[ext] ?? null);
49
- }
50
- /**
51
- * Propósito = o doc de cabeçalho do arquivo, juntado até a 1ª frase. Banner de licença é
52
- * pulado; bloco colado numa declaração documenta o símbolo, não o arquivo — aí devolve vazio.
53
- */
54
- function purposeOf(source) {
55
- const lines = source.split('\n', 40);
56
- for (let i = 0; i < lines.length; i++) {
57
- if (DECL.test(lines[i]))
58
- return '';
59
- if (!isComment(lines[i]))
60
- continue;
61
- const prose = [];
62
- for (; i < lines.length && isComment(lines[i]); i++) {
63
- const part = lines[i].replace(COMMENT, '').replace(CLOSER, '').trim();
64
- if (part)
65
- prose.push(part);
66
- }
67
- const text = prose.join(' ');
68
- // Licença/pragma em bloco próprio: pula e segue procurando o doc de verdade.
69
- if (NON_PROSE.test(text)) {
70
- i--;
71
- continue;
72
- }
73
- // Bloco colado numa declaração documenta **aquele símbolo**, não o arquivo.
74
- if ((lines[i] ?? '').trim())
75
- return '';
76
- const end = text.indexOf('. ');
77
- const sentence = end < 0 ? text : text.slice(0, end + 1);
78
- return sentence.split(/\s+/).length >= 3 ? sentence : '';
79
- }
80
- return '';
81
- }
82
- function symbolsOf(source, stack) {
83
- const found = [];
84
- for (const re of EXTRACTORS[stack] ?? []) {
85
- for (const match of source.matchAll(re)) {
86
- const name = match[1];
87
- if (name && !found.includes(name))
88
- found.push(name);
89
- }
90
- }
91
- return found;
92
- }
93
- /** `git ls-files` é a lista de fontes: já respeita o .gitignore e sai ordenada. */
94
- function trackedFiles(cwd) {
95
- const r = spawnSync('git', ['ls-files', '-z'], { cwd, encoding: 'utf8' });
96
- if (r.error || r.status !== 0)
97
- return null;
98
- return (r.stdout ?? '').split('\0').filter(Boolean).sort();
99
- }
100
- /** `null` = o repo não pôde ser listado (sem git) — diferente de "listou e não achou fonte". */
101
- export function collectEntries(cwd) {
102
- const tracked = trackedFiles(cwd);
103
- if (!tracked)
104
- return null;
105
- const entries = [];
106
- for (const path of tracked) {
107
- const stack = stackOf(path);
108
- if (!stack)
109
- continue;
110
- let source;
111
- try {
112
- source = readFileSync(join(cwd, path), 'utf8');
113
- }
114
- catch {
115
- continue;
116
- }
117
- const symbols = symbolsOf(source, stack);
118
- const purpose = purposeOf(source);
119
- if (symbols.length || purpose)
120
- entries.push({ path, purpose, symbols });
121
- }
122
- return entries;
123
- }
124
- function renderLine(entry) {
125
- const name = entry.path.split('/').pop() ?? entry.path;
126
- const parts = [`- \`${name}\``];
127
- if (entry.purpose)
128
- parts.push(`— ${entry.purpose}`);
129
- const shown = entry.symbols.slice(0, MAX_SYMBOLS);
130
- // Corte explícito: num índice grepado, silêncio no fim da linha lê como "não existe".
131
- const rest = entry.symbols.length - shown.length;
132
- const more = rest > 0 ? ` +${rest}` : '';
133
- if (shown.length)
134
- parts.push(`· ${shown.map((s) => `\`${s}\``).join(', ')}${more}`);
135
- return parts.join(' ');
136
- }
137
- export function renderMap(entries) {
138
- const byDir = new Map();
139
- for (const entry of entries) {
140
- const dir = dirname(entry.path);
141
- byDir.set(dir, [...(byDir.get(dir) ?? []), entry]);
142
- }
143
- const lines = [
144
- `<!-- Gerado por \`noclaf map\`/\`sync\`. Determinístico e descartável: NÃO edite à mão. -->`,
145
- '# Repo map',
146
- '',
147
- 'Índice `arquivo → símbolos exportados`. **Grepe aqui** pra localizar antes de abrir arquivo.',
148
- ];
149
- for (const [dir, group] of byDir) {
150
- lines.push('', `## ${dir}`, ...group.map(renderLine));
151
- }
152
- return `${lines.join('\n')}\n`;
153
- }
154
- /** Gera/regenera o `docs/_map.md`. Best-effort: nunca lança, nunca bloqueia o loop. */
155
- export function generateRepoMap(cwd) {
156
- try {
157
- const entries = collectEntries(cwd);
158
- if (!entries)
159
- return { action: 'empty', entries: 0 };
160
- const target = join(cwd, MAP_REL);
161
- const content = renderMap(entries);
162
- const existed = existsSync(target);
163
- const same = existed && readFileSync(target, 'utf8') === content;
164
- if (!same) {
165
- mkdirSync(dirname(target), { recursive: true });
166
- writeFileSync(target, content, 'utf8');
167
- }
168
- // Artefato gerado: se versionado, apodreceria entre um `sync` e o próximo.
169
- ensureGitignored(MAP_REL, cwd, GITIGNORE_GENERATED_SUFFIX);
170
- return { action: same ? 'unchanged' : existed ? 'updated' : 'created', entries: entries.length };
171
- }
172
- catch {
173
- return { action: 'empty', entries: 0 };
174
- }
175
- }
176
- //# sourceMappingURL=repo-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repo-map.js","sourceRoot":"","sources":["../../src/lib/repo-map.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { UUID_REGEX } from '../config.js';
2
- import { errorResult } from './tool-result.js';
3
- import { loadActiveProjectId } from './active-project.js';
4
- import { brand } from '../brand.js';
5
- /**
6
- * Resolve o projeto efetivo de uma chamada, na ordem:
7
- * 1. project_id explícito passado na tool (override por chamada)
8
- * 2. projeto ativo da sessão (`nos_set_project`, só em memória)
9
- * 3. default do ambiente/arquivo (NOCLAF_PROJECT_ID / noclaf.json)
10
- *
11
- * O repository_id default só é aplicado quando o projeto resolvido é o mesmo do
12
- * default — evita herdar um repositório de outro projeto.
13
- */
14
- export function resolveProjectConfig(ctx, explicitProjectId) {
15
- const projectId = explicitProjectId ?? loadActiveProjectId() ?? ctx.config?.project_id;
16
- if (!projectId) {
17
- return errorResult(`Nenhum projeto selecionado. Use \`${brand.toolPrefix}list_projects\` para ver os seus e ` +
18
- `\`${brand.toolPrefix}set_project\` para escolher um (ou passe \`project_id\` direto na chamada).`);
19
- }
20
- if (!UUID_REGEX.test(projectId)) {
21
- return errorResult(`project_id inválido (UUID esperado): ${projectId}`);
22
- }
23
- const config = { project_id: projectId };
24
- if (projectId === ctx.config?.project_id && ctx.config?.repository_id) {
25
- config.repository_id = ctx.config.repository_id;
26
- }
27
- return config;
28
- }
29
- export function isErrorResult(value) {
30
- return typeof value === 'object' && value !== null && 'isError' in value;
31
- }
32
- //# sourceMappingURL=require-config.js.map