@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
package/dist/auth.js DELETED
@@ -1,141 +0,0 @@
1
- import { mkdir, readFile, writeFile, chmod, rm } from 'node:fs/promises';
2
- import { dirname } from 'node:path';
3
- import { CREDENTIALS_FILE, PAT_REGEX, SUPABASE_ANON_KEY, TOKEN_EXCHANGE_URL, } from './constants.js';
4
- import { env } from './brand.js';
5
- export async function loadCredentials(file = CREDENTIALS_FILE) {
6
- const stored = await readCredentialsFile(file);
7
- // Precedência pro ambiente: usado por Desktop Extensions / Cowork, onde o PAT
8
- // chega via user_config (NOCLAF_PAT) em vez de `noclaf login`.
9
- const envPat = env('PAT')?.trim();
10
- if (envPat) {
11
- // Cache do arquivo só serve se for do mesmo PAT.
12
- return stored?.pat === envPat ? stored : { pat: envPat };
13
- }
14
- return stored;
15
- }
16
- async function readCredentialsFile(file) {
17
- try {
18
- const raw = await readFile(file, 'utf8');
19
- const parsed = JSON.parse(raw);
20
- if (!parsed || typeof parsed.pat !== 'string') {
21
- return null;
22
- }
23
- return parsed;
24
- }
25
- catch (err) {
26
- if (err.code === 'ENOENT') {
27
- return null;
28
- }
29
- throw err;
30
- }
31
- }
32
- export async function saveCredentials(creds, file = CREDENTIALS_FILE) {
33
- await mkdir(dirname(file), { recursive: true });
34
- await writeFile(file, JSON.stringify(creds, null, 2) + '\n', 'utf8');
35
- try {
36
- await chmod(file, 0o600);
37
- }
38
- catch {
39
- // chmod pode falhar em Windows — ignoramos silenciosamente.
40
- }
41
- }
42
- /**
43
- * Identidade do cache quando houver; senão uma troca de PAT, populando o cache.
44
- * 401/403 invalida o cache e propaga o erro (o chamador pede re-login).
45
- */
46
- export async function resolveIdentity(creds, opts = {}) {
47
- const file = opts.file ?? CREDENTIALS_FILE;
48
- if (!opts.refresh && creds.user && creds.fetched_at) {
49
- return { ...creds.user, avatar_url: creds.user.avatar_url ?? null, fetched_at: creds.fetched_at };
50
- }
51
- let result;
52
- try {
53
- result = await exchangePatForJwt(creds.pat);
54
- }
55
- catch (err) {
56
- const status = err.status;
57
- if (status === 401 || status === 403) {
58
- await patchCachedUser(file, null);
59
- }
60
- throw err;
61
- }
62
- const identity = {
63
- ...result.user,
64
- avatar_url: result.user.avatar_url ?? null,
65
- fetched_at: new Date().toISOString(),
66
- };
67
- await patchCachedUser(file, identity);
68
- return identity;
69
- }
70
- // Só mexe num arquivo já existente: ambiente com PAT via env e sem credencial
71
- // gravada responde sem persistir nada.
72
- async function patchCachedUser(file, identity) {
73
- const creds = await readCredentialsFile(file).catch(() => null);
74
- if (!creds)
75
- return;
76
- if (identity) {
77
- const { fetched_at, ...user } = identity;
78
- creds.user = user;
79
- creds.fetched_at = fetched_at;
80
- }
81
- else {
82
- delete creds.user;
83
- delete creds.fetched_at;
84
- }
85
- await saveCredentials(creds, file).catch(() => {
86
- // filesystem read-only — cache é conveniência, segue sem persistir.
87
- });
88
- }
89
- // Espelha `patchCachedUser`: só mexe num arquivo já existente e só se o `pat`
90
- // gravado for o mesmo sendo persistido — evita gravar sessão de PAT trocado/revogado.
91
- export async function patchCachedSession(file, pat, session) {
92
- const creds = await readCredentialsFile(file).catch(() => null);
93
- if (!creds || creds.pat !== pat)
94
- return;
95
- if (session) {
96
- creds.access_token = session.access_token;
97
- creds.expires_at = session.expires_at;
98
- creds.user = session.user;
99
- }
100
- else {
101
- delete creds.access_token;
102
- delete creds.expires_at;
103
- }
104
- await saveCredentials(creds, file).catch(() => {
105
- // filesystem read-only — cache é conveniência, segue sem persistir.
106
- });
107
- }
108
- export async function clearCredentials() {
109
- await rm(CREDENTIALS_FILE, { force: true });
110
- }
111
- export function validatePatFormat(pat) {
112
- return PAT_REGEX.test(pat);
113
- }
114
- export async function exchangePatForJwt(pat) {
115
- const response = await fetch(TOKEN_EXCHANGE_URL, {
116
- method: 'POST',
117
- headers: {
118
- apikey: SUPABASE_ANON_KEY,
119
- Authorization: `Bearer ${SUPABASE_ANON_KEY}`,
120
- 'Content-Type': 'application/json',
121
- },
122
- body: JSON.stringify({ token: pat }),
123
- });
124
- if (!response.ok) {
125
- let message = response.statusText;
126
- try {
127
- const body = (await response.json());
128
- if (body && typeof body.error === 'string' && body.error.length > 0) {
129
- message = body.error;
130
- }
131
- }
132
- catch {
133
- // body não era JSON — mantém statusText
134
- }
135
- const err = new Error(message);
136
- err.status = response.status;
137
- throw err;
138
- }
139
- return (await response.json());
140
- }
141
- //# sourceMappingURL=auth.js.map
package/dist/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- import { password } from "../../lib/prompts.js";
2
- import { brand } from "../../brand.js";
3
- import { startSpinner } from "../../spinner.js";
4
- import { clearCredentials, exchangePatForJwt, loadCredentials, resolveIdentity, saveCredentials, validatePatFormat, } from "../../auth.js";
5
- import { authCopy } from "../copy.js";
6
- /** Obtém o PAT: usa o argumento se veio preenchido, senão pede via prompt mascarado. */
7
- async function resolvePat(patArg) {
8
- const trimmed = patArg?.trim();
9
- if (trimmed)
10
- return trimmed;
11
- console.log(`Gere um token pessoal em: ${brand.webUrl}/profile#mcp`);
12
- const answer = await password({
13
- message: authCopy.login.patPrompt,
14
- mask: "*",
15
- validate: (input) => validatePatFormat(input.trim()) || authCopy.login.patInvalid,
16
- });
17
- return answer.trim();
18
- }
19
- /** Troca o PAT por sessão e persiste as credenciais localmente. */
20
- async function performLogin(pat) {
21
- const result = await exchangePatForJwt(pat);
22
- await saveCredentials({
23
- pat,
24
- user: result.user,
25
- fetched_at: new Date().toISOString(),
26
- });
27
- return result;
28
- }
29
- function printLoginSuccess(u) {
30
- console.log(brand.logo);
31
- console.log("[ok] Autenticado!");
32
- console.log(`Nome: ${u.full_name || "(sem nome)"}`);
33
- console.log(`Usuário: ${u.username ? `@${u.username}` : "(sem username)"}`);
34
- console.log(`Email: ${u.email}`);
35
- }
36
- /** Decide se dá pra pular o spinner de validação: só quando a sessão já está em
37
- * cache (usuário + data de fetch salvos) e o caller não pediu revalidação forçada. */
38
- export function shouldSkipWhoamiSpinner(creds, refresh) {
39
- return !refresh && Boolean(creds.user && creds.fetched_at);
40
- }
41
- /** Traduz o erro de `resolveIdentity` pra mensagem exibida ao usuário. */
42
- export function whoamiErrorMessage(err) {
43
- const status = err.status;
44
- return status === 401 || status === 403
45
- ? `Sessão inválida. Rode \`${brand.name} login <PAT>\` novamente.`
46
- : `Falha ao validar token: ${err.message}`;
47
- }
48
- function printWhoamiIdentity(u) {
49
- console.log(brand.logo);
50
- console.log(`Nome: ${u.full_name || "(sem nome)"}`);
51
- console.log(`Email: ${u.email}`);
52
- console.log(`Usuário: ${u.username ? `@${u.username}` : "(sem username)"}`);
53
- console.log(`Foto: ${u.avatar_url || "(sem foto)"}`);
54
- console.log(`ID: ${u.id}`);
55
- }
56
- function registerLoginCommand(program) {
57
- program
58
- .command("login")
59
- .description("Salva o token de acesso pessoal (PAT) localmente")
60
- .argument("[pat]", "Token gerado em /profile#mcp do NOS (opcional — será pedido se omitido)")
61
- .action(async (patArg) => {
62
- const pat = await resolvePat(patArg);
63
- if (!validatePatFormat(pat)) {
64
- console.error(`Token inválido. Formato esperado: \`${brand.patPrefix}\` + 64 caracteres hexadecimais.`);
65
- process.exit(1);
66
- }
67
- const spinner = startSpinner("Autenticando...");
68
- try {
69
- const result = await performLogin(pat);
70
- spinner.stop();
71
- printLoginSuccess(result.user);
72
- }
73
- catch (err) {
74
- spinner.fail(`Falha ao autenticar: ${err.message}`);
75
- process.exit(1);
76
- }
77
- });
78
- }
79
- function registerLogoutCommand(program) {
80
- program
81
- .command("logout")
82
- .description("Remove credenciais locais")
83
- .action(async () => {
84
- await clearCredentials();
85
- console.log("Sessão removida.");
86
- });
87
- }
88
- async function runWhoamiAction(opts) {
89
- const creds = await loadCredentials();
90
- if (!creds) {
91
- console.error(`Não autenticado. Rode \`${brand.name} login <PAT>\`.`);
92
- process.exit(1);
93
- }
94
- const cached = shouldSkipWhoamiSpinner(creds, opts.refresh);
95
- const spinner = cached || opts.json ? null : startSpinner("Validando sessão...");
96
- try {
97
- const u = await resolveIdentity(creds, { refresh: opts.refresh });
98
- spinner?.stop();
99
- if (opts.json) {
100
- console.log(JSON.stringify(u, null, 2));
101
- return;
102
- }
103
- printWhoamiIdentity(u);
104
- }
105
- catch (err) {
106
- const message = whoamiErrorMessage(err);
107
- if (spinner)
108
- spinner.fail(message);
109
- else
110
- console.error(message);
111
- process.exit(1);
112
- }
113
- }
114
- function registerWhoamiCommand(program) {
115
- program
116
- .command("whoami")
117
- .description("Mostra o usuário autenticado")
118
- .option("--json", "Emite a identidade como JSON")
119
- .option("--refresh", "Ignora o cache e revalida o token")
120
- .action(runWhoamiAction);
121
- }
122
- export function registerAuthCommands(program) {
123
- registerLoginCommand(program);
124
- registerLogoutCommand(program);
125
- registerWhoamiCommand(program);
126
- }
127
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,120 +0,0 @@
1
- import { rmSync, lstatSync } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { join } from "node:path";
4
- import { confirm } from "../../lib/prompts.js";
5
- import { readSkillDocs } from "../../lib/skills.js";
6
- import { c, sym } from "../../lib/colors.js";
7
- /**
8
- * Comando de limpeza: remove artefatos **legados** que versões antigas do noclaf
9
- * instalaram e que hoje foram substituídos — commands que viraram skills, ou
10
- * commands removidos de vez. Roda em `~/.claude` (Claude Code) e `~/.codex` (Codex).
11
- */
12
- // Removidos de vez (não existem mais em nenhum formato).
13
- const FULLY_REMOVED = [
14
- "new-spec",
15
- "new-bug",
16
- "new-adr",
17
- "apply-spec",
18
- "apply-bug",
19
- "to-skill",
20
- ];
21
- // Eram commands e viraram skills — só o **command** legado deve sair (a skill atual fica).
22
- const COMMAND_TO_SKILL = ["init-sdd", "to-tickets"];
23
- /** Existe no disco (inclui symlink pendurado, que `existsSync` não pega)? */
24
- function present(path) {
25
- try {
26
- lstatSync(path);
27
- return true;
28
- }
29
- catch {
30
- return false;
31
- }
32
- }
33
- /** Ids atualmente válidos no bundle — guarda pra nunca remover algo em uso. */
34
- function currentIds() {
35
- try {
36
- const docs = readSkillDocs();
37
- return {
38
- skills: new Set(docs.filter((d) => d.type === "skill").map((d) => d.id)),
39
- commands: new Set(docs.filter((d) => d.type === "command").map((d) => d.id)),
40
- };
41
- }
42
- catch {
43
- return { skills: new Set(), commands: new Set() };
44
- }
45
- }
46
- function collectLegacy() {
47
- const cur = currentIds();
48
- const out = [];
49
- const add = (path, kind) => {
50
- if (present(path))
51
- out.push({ path, kind });
52
- };
53
- const claude = join(homedir(), ".claude");
54
- const codex = join(homedir(), ".codex");
55
- // Claude Code — commands legados (nenhum desses é command atual).
56
- for (const id of [...FULLY_REMOVED, ...COMMAND_TO_SKILL]) {
57
- if (!cur.commands.has(id))
58
- add(join(claude, "commands", `${id}.md`), "claude command");
59
- }
60
- // Claude Code — skills só dos removidos de vez (init-sdd/to-tickets são skills atuais).
61
- for (const id of FULLY_REMOVED) {
62
- if (!cur.skills.has(id))
63
- add(join(claude, "skills", id), "claude skill");
64
- }
65
- // Codex — dual-write dos removidos de vez (prompt + skill traduzida).
66
- for (const id of FULLY_REMOVED) {
67
- if (!cur.commands.has(id) && !cur.skills.has(id)) {
68
- add(join(codex, "prompts", `${id}.md`), "codex prompt");
69
- add(join(codex, "skills", id), "codex skill");
70
- }
71
- }
72
- return out;
73
- }
74
- export function registerCleanCommand(program) {
75
- program
76
- .command("clean-legacy")
77
- .description("Remove commands/skills legados (substituídos) de ~/.claude e ~/.codex")
78
- .option("--dry-run", "só lista o que seria removido, sem apagar")
79
- .option("-y, --yes", "remove sem pedir confirmação")
80
- .action(async (opts) => {
81
- const targets = collectLegacy();
82
- if (targets.length === 0) {
83
- console.log("");
84
- console.log(` ${c.green(sym.ok)} nada legado encontrado — já está limpo.`);
85
- return;
86
- }
87
- console.log("");
88
- console.log(` ${c.bold("Artefatos legados encontrados:")}`);
89
- for (const t of targets) {
90
- console.log(` ${c.red("-")} ${t.path} ${c.dim(`(${t.kind})`)}`);
91
- }
92
- if (opts.dryRun) {
93
- console.log("");
94
- console.log(` ${c.dim("[dry-run] nada removido.")}`);
95
- return;
96
- }
97
- const ok = opts.yes === true ||
98
- (await confirm({
99
- message: `Remover ${targets.length} item(ns) legado(s)?`,
100
- default: false,
101
- }));
102
- if (!ok) {
103
- console.log(` ${c.dim("cancelado.")}`);
104
- return;
105
- }
106
- let removed = 0;
107
- for (const t of targets) {
108
- try {
109
- rmSync(t.path, { recursive: true, force: true });
110
- removed++;
111
- }
112
- catch (err) {
113
- console.error(` ${c.red(sym.err)} falha ao remover ${t.path}: ${err.message}`);
114
- }
115
- }
116
- console.log("");
117
- console.log(` ${c.green(sym.ok)} ${removed} removido(s). Reinicie os clientes pra refletir.`);
118
- });
119
- }
120
- //# sourceMappingURL=clean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- import { c, cmd } from "../../lib/colors.js";
2
- import { brand } from "../../brand.js";
3
- /** Nome do binário — vai literal nos scripts de completion gerados. */
4
- const bin = brand.name;
5
- function optFlags(command) {
6
- const flags = [];
7
- const opts = command.options;
8
- for (const o of opts) {
9
- if (o.long)
10
- flags.push(o.long);
11
- if (o.short)
12
- flags.push(o.short);
13
- }
14
- flags.push("--help");
15
- return flags;
16
- }
17
- function walk(command) {
18
- return {
19
- name: command.name(),
20
- subs: command.commands.map(walk),
21
- opts: optFlags(command),
22
- };
23
- }
24
- /** Candidatos no nível 2 de um comando: seus subcomandos + suas flags. */
25
- function level2(node) {
26
- return [...node.subs.map((s) => s.name), ...node.opts].join(" ");
27
- }
28
- function bashScript(root) {
29
- const top = root.subs.map((s) => s.name).join(" ");
30
- const arms = root.subs
31
- .filter((s) => s.subs.length > 0 || s.opts.length > 1)
32
- .map((s) => ` ${s.name}) __c="${level2(s)}" ;;`)
33
- .join("\n");
34
- return `# ${bin} bash completion — gere com: ${bin} completion bash
35
- _${bin}() {
36
- local cur="\${COMP_WORDS[COMP_CWORD]}"
37
- local __c=""
38
- if [ "\$COMP_CWORD" -eq 1 ]; then
39
- __c="${top}"
40
- else
41
- case "\${COMP_WORDS[1]}" in
42
- ${arms}
43
- *) __c="--help" ;;
44
- esac
45
- fi
46
- COMPREPLY=( \$(compgen -W "\$__c" -- "\$cur") )
47
- }
48
- complete -F _${bin} ${bin}`;
49
- }
50
- function zshScript(root) {
51
- const top = root.subs.map((s) => s.name).join(" ");
52
- const arms = root.subs
53
- .filter((s) => s.subs.length > 0 || s.opts.length > 1)
54
- .map((s) => ` ${s.name}) __c=(${level2(s)}) ;;`)
55
- .join("\n");
56
- return `#compdef ${bin}
57
- # ${bin} zsh completion — gere com: ${bin} completion zsh
58
- _${bin}() {
59
- local -a __c
60
- if (( CURRENT == 2 )); then
61
- __c=(${top})
62
- else
63
- case $words[2] in
64
- ${arms}
65
- *) __c=(--help) ;;
66
- esac
67
- fi
68
- compadd -a __c
69
- }
70
- compdef _${bin} ${bin}`;
71
- }
72
- function fishScript(root) {
73
- const lines = [
74
- `# ${bin} fish completion — gere com: ${bin} completion fish`,
75
- `complete -c ${bin} -f`,
76
- ];
77
- const top = root.subs.map((s) => s.name).join(" ");
78
- lines.push(`complete -c ${bin} -n '__fish_use_subcommand' -a '${top}'`);
79
- for (const s of root.subs) {
80
- const cands = [...s.subs.map((x) => x.name), ...s.opts].join(" ");
81
- lines.push(`complete -c ${bin} -n '__fish_seen_subcommand_from ${s.name}' -a '${cands}'`);
82
- }
83
- return lines.join("\n");
84
- }
85
- function detectShell() {
86
- const sh = (process.env.SHELL ?? "").split("/").pop();
87
- if (sh === "bash" || sh === "zsh" || sh === "fish")
88
- return sh;
89
- return null;
90
- }
91
- export function registerCompletionCommand(program) {
92
- program
93
- .command("completion [shell]")
94
- .description(`Imprime o script de autocomplete (bash|zsh|fish). Ex.: eval "$(${bin} completion zsh)"`)
95
- .action((shellArg) => {
96
- const shell = shellArg ?? detectShell();
97
- if (shell !== "bash" && shell !== "zsh" && shell !== "fish") {
98
- console.error(`${c.yellow("shell não reconhecido.")} Use: ${cmd(`${bin} completion`)} ` +
99
- `${c.dim("bash|zsh|fish")}`);
100
- process.exitCode = 1;
101
- return;
102
- }
103
- const root = walk(program);
104
- const script = shell === "bash"
105
- ? bashScript(root)
106
- : shell === "zsh"
107
- ? zshScript(root)
108
- : fishScript(root);
109
- // Dica no stderr (o `eval "$(...)"` captura só o stdout, então não polui).
110
- console.error(`${c.dim("# adicione ao seu rc:")} ${cmd(`eval "$(${bin} completion ${shell})"`)}`);
111
- console.log(script);
112
- });
113
- }
114
- //# sourceMappingURL=completion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import { brand } from "../../brand.js";
2
- import { existsSync } from "node:fs";
3
- import { runExec, getJob } from "../../lib/exec-delegate.js";
4
- import { ENGINES, DEFAULT_ENGINE, parseEngine, } from "../../lib/exec-engines.js";
5
- /**
6
- * Superfície de CLI da delegação headless — o que o noclaf Studio (Tauri) chama.
7
- * Contrato: **stdout = JSON** (parseável), **stderr = log ao vivo** (streamável).
8
- * Com `--events`, o stderr passa a ser NDJSON de eventos tipados; o stdout não muda.
9
- */
10
- function emit(payload) {
11
- process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
12
- }
13
- async function execAction(opts) {
14
- const engine = parseEngine(opts.engine);
15
- if (!engine) {
16
- emit({
17
- error: `engine inválido: ${opts.engine} — suportados: ${ENGINES.join(", ")}`,
18
- });
19
- process.exitCode = 1;
20
- return;
21
- }
22
- if (!existsSync(opts.worktree)) {
23
- emit({ error: `worktree não encontrado: ${opts.worktree}` });
24
- process.exitCode = 1;
25
- return;
26
- }
27
- const job = await runExec({
28
- worktree: opts.worktree,
29
- instruction: opts.instruction,
30
- engine,
31
- echo: opts.quiet !== true,
32
- events: opts.events === true,
33
- });
34
- emit(job);
35
- if (job.state !== "done")
36
- process.exitCode = 1;
37
- }
38
- function registerExec(program) {
39
- program
40
- .command("exec")
41
- .description("Delega a implementação a um agente headless num worktree e aguarda. " +
42
- "stdout = JSON do resultado; stderr = log ao vivo.")
43
- .requiredOption("--worktree <path>", "worktree onde implementar (criado pelo /implement)")
44
- .requiredOption("--instruction <texto>", "o que implementar (ticket + critérios)")
45
- .option("--engine <engine>", `agente de execução (${ENGINES.join(" | ")})`, DEFAULT_ENGINE)
46
- .option("--quiet", "não streama o log do agente no stderr")
47
- .option("--events", "stderr vira stream NDJSON de eventos tipados do run (stdout intocado; ignora --quiet)")
48
- .action(execAction);
49
- }
50
- // Comando separado (não subcomando): opções `required` do pai bloqueariam o parse.
51
- function registerExecStatus(program) {
52
- program
53
- .command("exec-status <jobId>")
54
- .description(`Estado de um job de execução (\`${brand.name} exec\`), em JSON`)
55
- .action((jobId) => {
56
- const job = getJob(jobId);
57
- if (!job) {
58
- emit({ error: `job não encontrado: ${jobId}` });
59
- process.exitCode = 1;
60
- return;
61
- }
62
- emit(job);
63
- });
64
- }
65
- export function registerExecCommand(program) {
66
- registerExec(program);
67
- registerExecStatus(program);
68
- }
69
- //# sourceMappingURL=exec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { brand } from "../../../brand.js";
2
- import { runSkillAgent, skillPrompt } from "../../../lib/skill-agent.js";
3
- /**
4
- * Análise/pré-preenchimento do repo no `--apply`: aciona a skill `init-sdd` num
5
- * agente headless (mesmo spawn do `patterns.ts`). É **pré-preenchimento** — o init
6
- * já é utilizável sem ela —, então quem chama trata falha como aviso. A saída do
7
- * agente vai pro **stderr**: o stdout do apply é JSON puro.
8
- */
9
- const SKILL_ID = "init-sdd";
10
- const FALLBACK_PROMPT = `Faça o scaffold da estrutura de spec-driven dev no repositório atual (\`docs/specs\`, \`docs/bugs\`, \`docs/decisions\`, \`docs/_templates\` e um \`AGENTS.md\` na raiz) de forma idempotente: arquivo que já existe é PULADO, nunca sobrescrito. Depois analise o repo (somente-leitura no código) pra pré-preencher o \`AGENTS.md\` com a stack e as convenções REAIS e semear specs das áreas inacabadas. Não escreva nada fora de \`docs/\` e do \`AGENTS.md\`. Termine com um resumo de created/skipped e PARE.`;
11
- // A skill abre perguntando (Fase 0) e aqui ninguém responde — a resposta vai dada no prompt.
12
- const HEADLESS_ANSWER = `IMPORTANTE — você foi disparado por \`${brand.name} init --apply\`, de forma NÃO INTERATIVA: não pergunte nada e não espere resposta nenhuma. Considere a Fase 0 já respondida com **(b) scaffold + análise**, produzindo **stack**, **overview** e **specs** (sem ADRs). Siga o resto exatamente como está escrito e PARE no fim.`;
13
- /** Prompt = corpo da skill `init-sdd` + a Fase 0 já respondida (headless). */
14
- export function initAnalysisPrompt() {
15
- return `${skillPrompt(SKILL_ID, FALLBACK_PROMPT)}\n\n---\n\n${HEADLESS_ANSWER}`;
16
- }
17
- /** Aciona o `init-sdd` no `cwd`, com a saída do agente desviada pro stderr. */
18
- export function runInitAnalysis(cwd) {
19
- return runSkillAgent(initAnalysisPrompt(), { cwd, stdoutFd: 2 });
20
- }
21
- //# sourceMappingURL=analyze-step.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/analyze-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE5F;;;;;GAKG;AAEH,MAAM,QAAQ,GAAG,UAAU,CAAC;AAE5B,MAAM,eAAe,GAAG,sfAAsf,CAAC;AAE/gB,6FAA6F;AAC7F,MAAM,eAAe,GAAG,yCAAyC,KAAK,CAAC,IAAI,iRAAiR,CAAC;AAE7V,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,cAAc,eAAe,EAAE,CAAC;AAClF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,aAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC"}