@mirnoorata/codexa 0.2.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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +634 -0
  3. package/dist/artifacts.d.ts +2 -0
  4. package/dist/artifacts.js +375 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/autonomy.d.ts +17 -0
  7. package/dist/autonomy.js +124 -0
  8. package/dist/autonomy.js.map +1 -0
  9. package/dist/autoverify/policy.d.ts +5 -0
  10. package/dist/autoverify/policy.js +18 -0
  11. package/dist/autoverify/policy.js.map +1 -0
  12. package/dist/autoverify.d.ts +45 -0
  13. package/dist/autoverify.js +1041 -0
  14. package/dist/autoverify.js.map +1 -0
  15. package/dist/cache-lock.d.ts +16 -0
  16. package/dist/cache-lock.js +181 -0
  17. package/dist/cache-lock.js.map +1 -0
  18. package/dist/cli/hooks.d.ts +5 -0
  19. package/dist/cli/hooks.js +264 -0
  20. package/dist/cli/hooks.js.map +1 -0
  21. package/dist/cli.d.ts +2 -0
  22. package/dist/cli.js +1034 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/codex-contract.d.ts +2 -0
  25. package/dist/codex-contract.js +78 -0
  26. package/dist/codex-contract.js.map +1 -0
  27. package/dist/command.d.ts +34 -0
  28. package/dist/command.js +162 -0
  29. package/dist/command.js.map +1 -0
  30. package/dist/doctor.d.ts +112 -0
  31. package/dist/doctor.js +518 -0
  32. package/dist/doctor.js.map +1 -0
  33. package/dist/eval/baseline.d.ts +7 -0
  34. package/dist/eval/baseline.js +146 -0
  35. package/dist/eval/baseline.js.map +1 -0
  36. package/dist/eval/historical.d.ts +4 -0
  37. package/dist/eval/historical.js +663 -0
  38. package/dist/eval/historical.js.map +1 -0
  39. package/dist/eval/render.d.ts +2 -0
  40. package/dist/eval/render.js +53 -0
  41. package/dist/eval/render.js.map +1 -0
  42. package/dist/eval/scoring.d.ts +21 -0
  43. package/dist/eval/scoring.js +618 -0
  44. package/dist/eval/scoring.js.map +1 -0
  45. package/dist/eval/synthetic.d.ts +36 -0
  46. package/dist/eval/synthetic.js +107 -0
  47. package/dist/eval/synthetic.js.map +1 -0
  48. package/dist/eval/types.d.ts +36 -0
  49. package/dist/eval/types.js +2 -0
  50. package/dist/eval/types.js.map +1 -0
  51. package/dist/eval.d.ts +140 -0
  52. package/dist/eval.js +551 -0
  53. package/dist/eval.js.map +1 -0
  54. package/dist/git.d.ts +17 -0
  55. package/dist/git.js +189 -0
  56. package/dist/git.js.map +1 -0
  57. package/dist/github-release.d.ts +47 -0
  58. package/dist/github-release.js +610 -0
  59. package/dist/github-release.js.map +1 -0
  60. package/dist/github-sync.d.ts +68 -0
  61. package/dist/github-sync.js +345 -0
  62. package/dist/github-sync.js.map +1 -0
  63. package/dist/graph.d.ts +10 -0
  64. package/dist/graph.js +665 -0
  65. package/dist/graph.js.map +1 -0
  66. package/dist/indexer/aliases.d.ts +2 -0
  67. package/dist/indexer/aliases.js +190 -0
  68. package/dist/indexer/aliases.js.map +1 -0
  69. package/dist/indexer/artifact-writing.d.ts +3 -0
  70. package/dist/indexer/artifact-writing.js +79 -0
  71. package/dist/indexer/artifact-writing.js.map +1 -0
  72. package/dist/indexer/discovery.d.ts +2 -0
  73. package/dist/indexer/discovery.js +5 -0
  74. package/dist/indexer/discovery.js.map +1 -0
  75. package/dist/indexer/external-facts.d.ts +6 -0
  76. package/dist/indexer/external-facts.js +45 -0
  77. package/dist/indexer/external-facts.js.map +1 -0
  78. package/dist/indexer/freshness.d.ts +8 -0
  79. package/dist/indexer/freshness.js +56 -0
  80. package/dist/indexer/freshness.js.map +1 -0
  81. package/dist/indexer/graph-stage.d.ts +2 -0
  82. package/dist/indexer/graph-stage.js +21 -0
  83. package/dist/indexer/graph-stage.js.map +1 -0
  84. package/dist/indexer/parsing.d.ts +30 -0
  85. package/dist/indexer/parsing.js +177 -0
  86. package/dist/indexer/parsing.js.map +1 -0
  87. package/dist/indexer/pipeline.d.ts +5 -0
  88. package/dist/indexer/pipeline.js +8 -0
  89. package/dist/indexer/pipeline.js.map +1 -0
  90. package/dist/indexer/ranking.d.ts +4 -0
  91. package/dist/indexer/ranking.js +134 -0
  92. package/dist/indexer/ranking.js.map +1 -0
  93. package/dist/indexer.d.ts +13 -0
  94. package/dist/indexer.js +395 -0
  95. package/dist/indexer.js.map +1 -0
  96. package/dist/init.d.ts +24 -0
  97. package/dist/init.js +566 -0
  98. package/dist/init.js.map +1 -0
  99. package/dist/language.d.ts +8 -0
  100. package/dist/language.js +123 -0
  101. package/dist/language.js.map +1 -0
  102. package/dist/live-index.d.ts +68 -0
  103. package/dist/live-index.js +215 -0
  104. package/dist/live-index.js.map +1 -0
  105. package/dist/lsp/assist.d.ts +44 -0
  106. package/dist/lsp/assist.js +331 -0
  107. package/dist/lsp/assist.js.map +1 -0
  108. package/dist/lsp/client.d.ts +59 -0
  109. package/dist/lsp/client.js +208 -0
  110. package/dist/lsp/client.js.map +1 -0
  111. package/dist/mcp/compaction.d.ts +15 -0
  112. package/dist/mcp/compaction.js +1249 -0
  113. package/dist/mcp/compaction.js.map +1 -0
  114. package/dist/mcp/envelope.d.ts +44 -0
  115. package/dist/mcp/envelope.js +425 -0
  116. package/dist/mcp/envelope.js.map +1 -0
  117. package/dist/mcp/prompts.d.ts +2 -0
  118. package/dist/mcp/prompts.js +109 -0
  119. package/dist/mcp/prompts.js.map +1 -0
  120. package/dist/mcp/resources.d.ts +2 -0
  121. package/dist/mcp/resources.js +132 -0
  122. package/dist/mcp/resources.js.map +1 -0
  123. package/dist/mcp/runtime.d.ts +15 -0
  124. package/dist/mcp/runtime.js +122 -0
  125. package/dist/mcp/runtime.js.map +1 -0
  126. package/dist/mcp/session-memory.d.ts +3 -0
  127. package/dist/mcp/session-memory.js +61 -0
  128. package/dist/mcp/session-memory.js.map +1 -0
  129. package/dist/mcp/tool-registry.d.ts +269 -0
  130. package/dist/mcp/tool-registry.js +284 -0
  131. package/dist/mcp/tool-registry.js.map +1 -0
  132. package/dist/mcp/tools.d.ts +53 -0
  133. package/dist/mcp/tools.js +372 -0
  134. package/dist/mcp/tools.js.map +1 -0
  135. package/dist/mcp-repo-root.d.ts +16 -0
  136. package/dist/mcp-repo-root.js +322 -0
  137. package/dist/mcp-repo-root.js.map +1 -0
  138. package/dist/mcp-tool-catalog.d.ts +2 -0
  139. package/dist/mcp-tool-catalog.js +2 -0
  140. package/dist/mcp-tool-catalog.js.map +1 -0
  141. package/dist/mcp.d.ts +11 -0
  142. package/dist/mcp.js +332 -0
  143. package/dist/mcp.js.map +1 -0
  144. package/dist/outcome-ranking.d.ts +5 -0
  145. package/dist/outcome-ranking.js +115 -0
  146. package/dist/outcome-ranking.js.map +1 -0
  147. package/dist/parser/context.d.ts +28 -0
  148. package/dist/parser/context.js +2 -0
  149. package/dist/parser/context.js.map +1 -0
  150. package/dist/parser/ecma.d.ts +5 -0
  151. package/dist/parser/ecma.js +388 -0
  152. package/dist/parser/ecma.js.map +1 -0
  153. package/dist/parser/facts.d.ts +12 -0
  154. package/dist/parser/facts.js +137 -0
  155. package/dist/parser/facts.js.map +1 -0
  156. package/dist/parser/json.d.ts +3 -0
  157. package/dist/parser/json.js +318 -0
  158. package/dist/parser/json.js.map +1 -0
  159. package/dist/parser/markdown.d.ts +3 -0
  160. package/dist/parser/markdown.js +180 -0
  161. package/dist/parser/markdown.js.map +1 -0
  162. package/dist/parser/nodes.d.ts +5 -0
  163. package/dist/parser/nodes.js +75 -0
  164. package/dist/parser/nodes.js.map +1 -0
  165. package/dist/parser/python.d.ts +2 -0
  166. package/dist/parser/python.js +307 -0
  167. package/dist/parser/python.js.map +1 -0
  168. package/dist/parser/references.d.ts +3 -0
  169. package/dist/parser/references.js +204 -0
  170. package/dist/parser/references.js.map +1 -0
  171. package/dist/parser/risks.d.ts +4 -0
  172. package/dist/parser/risks.js +62 -0
  173. package/dist/parser/risks.js.map +1 -0
  174. package/dist/parser/routes.d.ts +5 -0
  175. package/dist/parser/routes.js +97 -0
  176. package/dist/parser/routes.js.map +1 -0
  177. package/dist/parser/shallow.d.ts +3 -0
  178. package/dist/parser/shallow.js +545 -0
  179. package/dist/parser/shallow.js.map +1 -0
  180. package/dist/parser/source.d.ts +4 -0
  181. package/dist/parser/source.js +127 -0
  182. package/dist/parser/source.js.map +1 -0
  183. package/dist/parser.d.ts +2 -0
  184. package/dist/parser.js +2 -0
  185. package/dist/parser.js.map +1 -0
  186. package/dist/placeholder-signals.d.ts +15 -0
  187. package/dist/placeholder-signals.js +511 -0
  188. package/dist/placeholder-signals.js.map +1 -0
  189. package/dist/post-edit-outcomes.d.ts +167 -0
  190. package/dist/post-edit-outcomes.js +484 -0
  191. package/dist/post-edit-outcomes.js.map +1 -0
  192. package/dist/queries.d.ts +12 -0
  193. package/dist/queries.js +13 -0
  194. package/dist/queries.js.map +1 -0
  195. package/dist/query/change-plan.d.ts +48 -0
  196. package/dist/query/change-plan.js +858 -0
  197. package/dist/query/change-plan.js.map +1 -0
  198. package/dist/query/compact-data.d.ts +25 -0
  199. package/dist/query/compact-data.js +74 -0
  200. package/dist/query/compact-data.js.map +1 -0
  201. package/dist/query/context.d.ts +5 -0
  202. package/dist/query/context.js +1162 -0
  203. package/dist/query/context.js.map +1 -0
  204. package/dist/query/diff.d.ts +5 -0
  205. package/dist/query/diff.js +111 -0
  206. package/dist/query/diff.js.map +1 -0
  207. package/dist/query/edge-evidence.d.ts +3 -0
  208. package/dist/query/edge-evidence.js +36 -0
  209. package/dist/query/edge-evidence.js.map +1 -0
  210. package/dist/query/formatting.d.ts +14 -0
  211. package/dist/query/formatting.js +67 -0
  212. package/dist/query/formatting.js.map +1 -0
  213. package/dist/query/graph-traversal.d.ts +22 -0
  214. package/dist/query/graph-traversal.js +218 -0
  215. package/dist/query/graph-traversal.js.map +1 -0
  216. package/dist/query/graph.d.ts +14 -0
  217. package/dist/query/graph.js +102 -0
  218. package/dist/query/graph.js.map +1 -0
  219. package/dist/query/impact.d.ts +28 -0
  220. package/dist/query/impact.js +568 -0
  221. package/dist/query/impact.js.map +1 -0
  222. package/dist/query/inspection.d.ts +9 -0
  223. package/dist/query/inspection.js +290 -0
  224. package/dist/query/inspection.js.map +1 -0
  225. package/dist/query/next-tools.d.ts +3 -0
  226. package/dist/query/next-tools.js +25 -0
  227. package/dist/query/next-tools.js.map +1 -0
  228. package/dist/query/placeholders.d.ts +24 -0
  229. package/dist/query/placeholders.js +121 -0
  230. package/dist/query/placeholders.js.map +1 -0
  231. package/dist/query/post-edit/decision.d.ts +49 -0
  232. package/dist/query/post-edit/decision.js +130 -0
  233. package/dist/query/post-edit/decision.js.map +1 -0
  234. package/dist/query/post-edit/dirty-scope.d.ts +16 -0
  235. package/dist/query/post-edit/dirty-scope.js +21 -0
  236. package/dist/query/post-edit/dirty-scope.js.map +1 -0
  237. package/dist/query/post-edit/next-actions.d.ts +22 -0
  238. package/dist/query/post-edit/next-actions.js +44 -0
  239. package/dist/query/post-edit/next-actions.js.map +1 -0
  240. package/dist/query/post-edit/snapshot-contract.d.ts +8 -0
  241. package/dist/query/post-edit/snapshot-contract.js +111 -0
  242. package/dist/query/post-edit/snapshot-contract.js.map +1 -0
  243. package/dist/query/post-edit.d.ts +5 -0
  244. package/dist/query/post-edit.js +1108 -0
  245. package/dist/query/post-edit.js.map +1 -0
  246. package/dist/query/quality.d.ts +43 -0
  247. package/dist/query/quality.js +134 -0
  248. package/dist/query/quality.js.map +1 -0
  249. package/dist/query/raw-search.d.ts +23 -0
  250. package/dist/query/raw-search.js +147 -0
  251. package/dist/query/raw-search.js.map +1 -0
  252. package/dist/query/runtime.d.ts +11 -0
  253. package/dist/query/runtime.js +79 -0
  254. package/dist/query/runtime.js.map +1 -0
  255. package/dist/query/search.d.ts +25 -0
  256. package/dist/query/search.js +429 -0
  257. package/dist/query/search.js.map +1 -0
  258. package/dist/query/session-memory.d.ts +3 -0
  259. package/dist/query/session-memory.js +108 -0
  260. package/dist/query/session-memory.js.map +1 -0
  261. package/dist/query/session.d.ts +41 -0
  262. package/dist/query/session.js +90 -0
  263. package/dist/query/session.js.map +1 -0
  264. package/dist/query/targets.d.ts +25 -0
  265. package/dist/query/targets.js +97 -0
  266. package/dist/query/targets.js.map +1 -0
  267. package/dist/query/test-commands.d.ts +10 -0
  268. package/dist/query/test-commands.js +110 -0
  269. package/dist/query/test-commands.js.map +1 -0
  270. package/dist/query/test-plan.d.ts +6 -0
  271. package/dist/query/test-plan.js +104 -0
  272. package/dist/query/test-plan.js.map +1 -0
  273. package/dist/query/tests.d.ts +48 -0
  274. package/dist/query/tests.js +444 -0
  275. package/dist/query/tests.js.map +1 -0
  276. package/dist/query/verification/shell.d.ts +20 -0
  277. package/dist/query/verification/shell.js +164 -0
  278. package/dist/query/verification/shell.js.map +1 -0
  279. package/dist/query/verification.d.ts +47 -0
  280. package/dist/query/verification.js +1123 -0
  281. package/dist/query/verification.js.map +1 -0
  282. package/dist/query/workflow.d.ts +17 -0
  283. package/dist/query/workflow.js +252 -0
  284. package/dist/query/workflow.js.map +1 -0
  285. package/dist/query/workspace-guidance.d.ts +26 -0
  286. package/dist/query/workspace-guidance.js +214 -0
  287. package/dist/query/workspace-guidance.js.map +1 -0
  288. package/dist/query/worktree-state.d.ts +22 -0
  289. package/dist/query/worktree-state.js +32 -0
  290. package/dist/query/worktree-state.js.map +1 -0
  291. package/dist/query/worktree.d.ts +16 -0
  292. package/dist/query/worktree.js +194 -0
  293. package/dist/query/worktree.js.map +1 -0
  294. package/dist/query-data.d.ts +4 -0
  295. package/dist/query-data.js +112 -0
  296. package/dist/query-data.js.map +1 -0
  297. package/dist/repo-files.d.ts +24 -0
  298. package/dist/repo-files.js +105 -0
  299. package/dist/repo-files.js.map +1 -0
  300. package/dist/resolver.d.ts +9 -0
  301. package/dist/resolver.js +555 -0
  302. package/dist/resolver.js.map +1 -0
  303. package/dist/retrieval.d.ts +46 -0
  304. package/dist/retrieval.js +783 -0
  305. package/dist/retrieval.js.map +1 -0
  306. package/dist/risk-ingest.d.ts +16 -0
  307. package/dist/risk-ingest.js +458 -0
  308. package/dist/risk-ingest.js.map +1 -0
  309. package/dist/rules.d.ts +10 -0
  310. package/dist/rules.js +107 -0
  311. package/dist/rules.js.map +1 -0
  312. package/dist/semantic/python.d.ts +9 -0
  313. package/dist/semantic/python.js +817 -0
  314. package/dist/semantic/python.js.map +1 -0
  315. package/dist/semantic/typescript.d.ts +10 -0
  316. package/dist/semantic/typescript.js +714 -0
  317. package/dist/semantic/typescript.js.map +1 -0
  318. package/dist/semantic-retrieval.d.ts +53 -0
  319. package/dist/semantic-retrieval.js +673 -0
  320. package/dist/semantic-retrieval.js.map +1 -0
  321. package/dist/session-memory/derivation.d.ts +6 -0
  322. package/dist/session-memory/derivation.js +400 -0
  323. package/dist/session-memory/derivation.js.map +1 -0
  324. package/dist/session-memory/event-log.d.ts +23 -0
  325. package/dist/session-memory/event-log.js +126 -0
  326. package/dist/session-memory/event-log.js.map +1 -0
  327. package/dist/session-memory/formatting.d.ts +7 -0
  328. package/dist/session-memory/formatting.js +86 -0
  329. package/dist/session-memory/formatting.js.map +1 -0
  330. package/dist/session-memory/model.d.ts +94 -0
  331. package/dist/session-memory/model.js +17 -0
  332. package/dist/session-memory/model.js.map +1 -0
  333. package/dist/session-memory/runtime.d.ts +24 -0
  334. package/dist/session-memory/runtime.js +289 -0
  335. package/dist/session-memory/runtime.js.map +1 -0
  336. package/dist/session-memory/store.d.ts +27 -0
  337. package/dist/session-memory/store.js +447 -0
  338. package/dist/session-memory/store.js.map +1 -0
  339. package/dist/session-memory.d.ts +1 -0
  340. package/dist/session-memory.js +2 -0
  341. package/dist/session-memory.js.map +1 -0
  342. package/dist/static-analysis.d.ts +36 -0
  343. package/dist/static-analysis.js +505 -0
  344. package/dist/static-analysis.js.map +1 -0
  345. package/dist/symbol-report-ingest.d.ts +8 -0
  346. package/dist/symbol-report-ingest.js +504 -0
  347. package/dist/symbol-report-ingest.js.map +1 -0
  348. package/dist/task-snapshots.d.ts +41 -0
  349. package/dist/task-snapshots.js +430 -0
  350. package/dist/task-snapshots.js.map +1 -0
  351. package/dist/types.d.ts +848 -0
  352. package/dist/types.js +12 -0
  353. package/dist/types.js.map +1 -0
  354. package/dist/util.d.ts +11 -0
  355. package/dist/util.js +63 -0
  356. package/dist/util.js.map +1 -0
  357. package/dist/version.d.ts +1 -0
  358. package/dist/version.js +5 -0
  359. package/dist/version.js.map +1 -0
  360. package/package.json +81 -0
  361. package/plugins/codexa/.codex-plugin/plugin.json +38 -0
  362. package/plugins/codexa/.mcp.json +20 -0
  363. package/plugins/codexa/scripts/codexa-mcp.js +100 -0
  364. package/plugins/codexa/skills/codexa/SKILL.md +48 -0
@@ -0,0 +1,610 @@
1
+ import { promises as fs } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { runCommand } from "./command.js";
5
+ import { parseGithubRemote } from "./github-sync.js";
6
+ const DEFAULT_TIMEOUT_MS = 10_000;
7
+ const MAX_CHANGED_AREA_FILES = 8;
8
+ export async function publishProjectGithubRelease(repoInput, options = {}) {
9
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
10
+ const remoteName = options.remote ?? "origin";
11
+ const dryRun = options.dryRun ?? false;
12
+ const createTag = options.createTag ?? true;
13
+ const push = options.push ?? true;
14
+ const githubRelease = options.githubRelease ?? true;
15
+ const latestMode = options.latest ?? "auto";
16
+ if (!["auto", "true", "false"].includes(latestMode)) {
17
+ throw new Error("--latest must be one of: auto, true, false");
18
+ }
19
+ if (githubRelease && !push && !dryRun && !options.notesFile) {
20
+ throw new Error("GitHub Release creation requires pushed tags; pass --push or --no-github-release.");
21
+ }
22
+ const repoRoot = await resolveGitRoot(repoInput, timeoutMs);
23
+ const localHead = await gitText(repoRoot, ["rev-parse", "HEAD"], "resolve HEAD", timeoutMs);
24
+ const shortHead = localHead.slice(0, 7);
25
+ const currentBranch = nonEmpty(await gitText(repoRoot, ["branch", "--show-current"], "resolve current branch", timeoutMs, true));
26
+ const branch = options.branch ?? currentBranch;
27
+ const projectName = options.projectName?.trim() || (await defaultProjectName(repoRoot));
28
+ const projectSlug = sanitizeReleaseRef(projectName.toLowerCase());
29
+ const tag = options.tag ?? (await defaultReleaseTag(repoRoot, shortHead, projectSlug));
30
+ const title = options.title ?? `${projectName} ${tag}`;
31
+ const remoteUrl = await gitText(repoRoot, ["remote", "get-url", remoteName], `resolve ${remoteName} remote`, timeoutMs, true);
32
+ const githubRepo = options.repo ?? (remoteUrl ? parseGithubRemote(remoteUrl) : null);
33
+ const warnings = [];
34
+ const actions = [];
35
+ const dirtyFileCount = await dirtyCount(repoRoot, timeoutMs);
36
+ if (dirtyFileCount > 0 && !options.allowDirty) {
37
+ const message = `working tree has ${dirtyFileCount} dirty file(s); commit or stash before creating a GitHub release`;
38
+ if (dryRun || options.notesFile) {
39
+ warnings.push(message);
40
+ }
41
+ else {
42
+ throw new Error(message);
43
+ }
44
+ }
45
+ if (currentBranch !== "main" && !options.allowNonMain) {
46
+ const message = `current branch is ${currentBranch ?? "detached"}, not main; release from main or pass --allow-non-main`;
47
+ if (dryRun || options.notesFile) {
48
+ warnings.push(message);
49
+ }
50
+ else {
51
+ throw new Error(message);
52
+ }
53
+ }
54
+ if (!githubRepo && (push || githubRelease)) {
55
+ const message = "Could not infer GitHub repository from origin. Pass --repo OWNER/REPO.";
56
+ if (dryRun || options.notesFile) {
57
+ warnings.push(message);
58
+ }
59
+ else {
60
+ throw new Error(message);
61
+ }
62
+ }
63
+ const tagStatus = await localTagStatus(repoRoot, tag, localHead, timeoutMs);
64
+ if (tagStatus === "different") {
65
+ throw new Error(`tag ${tag} already exists and does not point at HEAD ${shortHead}`);
66
+ }
67
+ if (!createTag && tagStatus === "missing") {
68
+ const message = `tag ${tag} does not exist locally and --no-create-tag was passed`;
69
+ if (dryRun || options.notesFile) {
70
+ warnings.push(message);
71
+ }
72
+ else {
73
+ throw new Error(message);
74
+ }
75
+ }
76
+ const shouldPushTag = tagStatus === "same" || createTag;
77
+ if (createTag) {
78
+ if (tagStatus === "same") {
79
+ actions.push(`tag already exists locally: ${tag}`);
80
+ }
81
+ else if (dryRun || options.notesFile) {
82
+ actions.push(`would create annotated tag ${tag} at ${shortHead}`);
83
+ }
84
+ }
85
+ else {
86
+ actions.push("tag creation skipped");
87
+ }
88
+ if (push && !dryRun && !options.notesFile) {
89
+ if (!branch) {
90
+ throw new Error("Cannot push a release without a branch. Check out main or pass --branch.");
91
+ }
92
+ await assertOk(await git(repoRoot, ["fetch", "--quiet", remoteName, branch, "--tags"], timeoutMs), `fetch ${remoteName}/${branch}`);
93
+ const originBranch = `${remoteName}/${branch}`;
94
+ const revList = await git(repoRoot, ["rev-list", "--left-right", "--count", `HEAD...${originBranch}`], timeoutMs);
95
+ await assertOk(revList, `compare HEAD with ${originBranch}`);
96
+ const [ahead = "0", behind = "0"] = revList.stdout.trim().split(/\s+/u);
97
+ if (behind !== "0") {
98
+ throw new Error(`local ${branch} is behind ${originBranch} by ${behind} commit(s); pull with --ff-only before release`);
99
+ }
100
+ if (ahead !== "0") {
101
+ actions.push(`local ${branch} is ahead of ${originBranch} by ${ahead} commit(s)`);
102
+ }
103
+ if (shouldPushTag && tagStatus === "missing") {
104
+ const remoteTag = await git(repoRoot, ["ls-remote", "--exit-code", "--tags", remoteName, `refs/tags/${tag}`], timeoutMs);
105
+ if (remoteTag.ok) {
106
+ throw new Error(`remote tag already exists: ${tag}`);
107
+ }
108
+ }
109
+ await assertOk(await git(repoRoot, ["push", "--dry-run", remoteName, `HEAD:${branch}`], timeoutMs), `dry-run push ${branch}`);
110
+ if (githubRelease) {
111
+ await assertOk(await runCommand("gh", ["auth", "status", "--hostname", "github.com"], { timeoutMs, maxBufferBytes: 32 * 1024, env: noPromptEnv() }), "check gh auth");
112
+ await assertOk(await runCommand("gh", ["repo", "view", githubRepo], { timeoutMs, maxBufferBytes: 32 * 1024, env: noPromptEnv() }), `check GitHub repo ${githubRepo}`);
113
+ }
114
+ }
115
+ else if (push) {
116
+ actions.push(`would push ${branch ?? "current branch"}${shouldPushTag ? ` and ${tag}` : ""} to ${remoteName}`);
117
+ }
118
+ else {
119
+ actions.push("push skipped");
120
+ }
121
+ const notesFile = options.notesFile ? path.resolve(options.notesFile) : path.join(await fs.mkdtemp(path.join(os.tmpdir(), `${projectSlug}-release-notes-`)), "notes.md");
122
+ await writeProjectReleaseNotes(repoRoot, {
123
+ projectName,
124
+ projectSlug,
125
+ tag,
126
+ title,
127
+ githubRepo,
128
+ notesFile,
129
+ timeoutMs
130
+ });
131
+ actions.push(`release notes ${options.notesFile ? "written" : "generated"}: ${notesFile}`);
132
+ if (options.notesFile) {
133
+ actions.push("stopped after writing notes file");
134
+ }
135
+ else if (!dryRun) {
136
+ if (createTag && tagStatus === "missing") {
137
+ await assertOk(await git(repoRoot, ["tag", "-a", tag, localHead, "-m", title, "-m", `Commit: ${localHead}`], timeoutMs), `create tag ${tag}`);
138
+ actions.push(`created tag ${tag}`);
139
+ }
140
+ if (push) {
141
+ await assertOk(await git(repoRoot, ["push", remoteName, `HEAD:${branch}`], timeoutMs), `push ${branch}`);
142
+ actions.push(`pushed ${branch} to ${remoteName}`);
143
+ if (shouldPushTag) {
144
+ await assertOk(await git(repoRoot, ["push", remoteName, `refs/tags/${tag}`], timeoutMs), `push tag ${tag}`);
145
+ actions.push(`pushed tag ${tag} to ${remoteName}`);
146
+ }
147
+ }
148
+ if (githubRelease) {
149
+ await createOrUpdateGithubRelease(githubRepo, tag, title, notesFile, latestMode, timeoutMs, actions);
150
+ }
151
+ }
152
+ else if (githubRelease) {
153
+ actions.push(`would create or update GitHub Release ${tag}`);
154
+ }
155
+ const releaseUrl = githubRepo ? `https://github.com/${githubRepo}/releases/tag/${tag}` : null;
156
+ const data = {
157
+ repoRoot,
158
+ projectName,
159
+ projectSlug,
160
+ branch,
161
+ localHead,
162
+ tag,
163
+ title,
164
+ githubRepo,
165
+ releaseUrl,
166
+ dirtyFileCount,
167
+ dryRun,
168
+ notesFile,
169
+ actions,
170
+ warnings
171
+ };
172
+ return { text: renderProjectGithubRelease(data), data };
173
+ }
174
+ export async function writeProjectReleaseNotes(repoRoot, input) {
175
+ const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;
176
+ const projectName = input.projectName?.trim() || (await defaultProjectName(repoRoot));
177
+ const projectSlug = sanitizeReleaseRef((input.projectSlug?.trim() || projectName).toLowerCase());
178
+ const commitSha = await gitText(repoRoot, ["rev-parse", `${input.tag}^{commit}`], "resolve release commit", timeoutMs, true);
179
+ const effectiveCommit = commitSha || (await gitText(repoRoot, ["rev-parse", "HEAD"], "resolve HEAD", timeoutMs));
180
+ const releaseRevision = commitSha ? input.tag : effectiveCommit;
181
+ const commitDate = await gitText(repoRoot, ["show", "-s", "--format=%cI", effectiveCommit], "resolve commit date", timeoutMs, true);
182
+ const previousTag = await previousProjectReleaseTag(repoRoot, input.tag, timeoutMs);
183
+ const releaseToken = sanitizeReleaseRef(input.tag);
184
+ const compareUrl = input.githubRepo && previousTag
185
+ ? `https://github.com/${input.githubRepo}/compare/${previousTag}...${input.tag}`
186
+ : null;
187
+ const changedFiles = previousTag
188
+ ? await gitText(repoRoot, ["diff", "--stat", `${previousTag}..${releaseRevision}`], "diff previous release", timeoutMs, true)
189
+ : await gitText(repoRoot, ["show", "--stat", "--format=", releaseRevision], "show release stat", timeoutMs, true);
190
+ const changedFileList = await releaseChangedFiles(repoRoot, previousTag, releaseRevision, timeoutMs);
191
+ const releaseCommits = await releaseCommitList(repoRoot, previousTag, releaseRevision, timeoutMs);
192
+ const notes = [
193
+ `${projectName} release timeline entry for \`${input.tag}\`.`,
194
+ "",
195
+ "## Version",
196
+ "",
197
+ `- Tag: \`${input.tag}\``,
198
+ `- Commit: \`${effectiveCommit.slice(0, 7)}\``,
199
+ `- Commit date: \`${commitDate || "unknown"}\``,
200
+ compareUrl ? `- Compare from previous release: ${compareUrl}` : undefined,
201
+ "",
202
+ "## Changelog",
203
+ "",
204
+ ...renderChangelog(releaseCommits, input.githubRepo),
205
+ "",
206
+ "## Changed Areas",
207
+ "",
208
+ ...renderChangedAreaSummary(changedFileList),
209
+ "",
210
+ "## Continue From This Version",
211
+ "",
212
+ "Create a safe branch at this exact release point:",
213
+ "",
214
+ "```bash",
215
+ "git fetch --all --tags --prune",
216
+ `git switch -c ${projectSlug}-from-${releaseToken} ${input.tag}`,
217
+ "```",
218
+ "",
219
+ "Or inspect it without disturbing your current worktree:",
220
+ "",
221
+ "```bash",
222
+ "git fetch --all --tags --prune",
223
+ `git worktree add /path/to/${projectSlug}-${releaseToken} ${input.tag}`,
224
+ "```",
225
+ "",
226
+ "## Restore From GitHub",
227
+ "",
228
+ input.githubRepo
229
+ ? "Recreate a clean checkout from GitHub at this exact release tag:"
230
+ : "Restore from any remote that contains this exact release tag:",
231
+ "",
232
+ "```bash",
233
+ input.githubRepo ? `git clone https://github.com/${input.githubRepo}.git ${projectSlug}-${releaseToken}` : "git fetch --all --tags --prune",
234
+ input.githubRepo ? `cd ${projectSlug}-${releaseToken}` : undefined,
235
+ input.githubRepo ? "git fetch --tags --prune" : undefined,
236
+ `git switch --detach ${input.tag}`,
237
+ "```",
238
+ "",
239
+ "## Revert Changes Via PR",
240
+ "",
241
+ "Use a forward-only revert branch so main history stays intact:",
242
+ "",
243
+ "```bash",
244
+ "git fetch --all --tags --prune",
245
+ "git switch main",
246
+ "git pull --ff-only origin main",
247
+ `git switch -c revert/${projectSlug}-${releaseToken}`,
248
+ `git revert --no-commit ${input.tag}..HEAD`,
249
+ "git add -A",
250
+ `git commit -m "Revert ${projectName} to ${input.tag}"`,
251
+ `git push origin revert/${projectSlug}-${releaseToken}`,
252
+ "```",
253
+ "",
254
+ "## Changed Files",
255
+ "",
256
+ "```text",
257
+ changedFiles.trim() || "No file summary recorded.",
258
+ "```",
259
+ "",
260
+ "## Commits Since Previous Release",
261
+ "",
262
+ "```text",
263
+ renderRawCommitList(releaseCommits) || "No commits recorded.",
264
+ "```",
265
+ ""
266
+ ]
267
+ .filter((line) => line !== undefined)
268
+ .join("\n");
269
+ await fs.mkdir(path.dirname(input.notesFile), { recursive: true });
270
+ await fs.writeFile(input.notesFile, notes, "utf8");
271
+ }
272
+ async function releaseCommitList(repoRoot, previousTag, releaseRevision, timeoutMs) {
273
+ const args = previousTag
274
+ ? ["log", "--format=%H%x1f%s%x1e", `${previousTag}..${releaseRevision}`]
275
+ : ["log", "--format=%H%x1f%s%x1e", "-1", releaseRevision];
276
+ const raw = await gitText(repoRoot, args, "log release commits", timeoutMs, true);
277
+ return parseReleaseCommitList(raw);
278
+ }
279
+ function parseReleaseCommitList(raw) {
280
+ return raw
281
+ .split("\x1e")
282
+ .map((record) => record.trim())
283
+ .filter(Boolean)
284
+ .map((record) => {
285
+ const [sha = "", ...subjectParts] = record.split("\x1f");
286
+ const subject = subjectParts.join("\x1f").trim();
287
+ return sha && subject ? { sha: sha.trim(), subject } : null;
288
+ })
289
+ .filter((commit) => commit !== null);
290
+ }
291
+ async function releaseChangedFiles(repoRoot, previousTag, releaseRevision, timeoutMs) {
292
+ const args = previousTag
293
+ ? ["diff", "--name-only", `${previousTag}..${releaseRevision}`]
294
+ : ["show", "--name-only", "--format=", releaseRevision];
295
+ const raw = await gitText(repoRoot, args, "list release changed files", timeoutMs, true);
296
+ const seen = new Set();
297
+ const files = [];
298
+ for (const file of raw.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean)) {
299
+ if (!seen.has(file)) {
300
+ seen.add(file);
301
+ files.push(file);
302
+ }
303
+ }
304
+ return files;
305
+ }
306
+ function renderChangelog(commits, githubRepo) {
307
+ if (commits.length === 0) {
308
+ return ["No commit summaries recorded."];
309
+ }
310
+ const grouped = new Map();
311
+ for (const commit of commits) {
312
+ const category = changelogCategory(commit.subject);
313
+ grouped.set(category, [...(grouped.get(category) ?? []), commit]);
314
+ }
315
+ const lines = [];
316
+ for (const title of changelogCategoryOrder()) {
317
+ const categoryCommits = grouped.get(title);
318
+ if (!categoryCommits || categoryCommits.length === 0) {
319
+ continue;
320
+ }
321
+ lines.push(`### ${title}`, "");
322
+ lines.push(...categoryCommits.map((commit) => formatCommitBullet(commit, githubRepo)));
323
+ lines.push("");
324
+ }
325
+ return trimTrailingBlank(lines);
326
+ }
327
+ function changelogCategory(subject) {
328
+ const normalized = subject.toLowerCase();
329
+ if (/\b(dependabot|bump|dependency|dependencies|package-lock|npm audit|vulnerab|cve|security)\b/u.test(normalized)) {
330
+ return "Dependencies and security";
331
+ }
332
+ if (/\b(readme|docs?|checklist|guide|runbook|contributing|security policy)\b/u.test(normalized)) {
333
+ return "Documentation";
334
+ }
335
+ if (/\b(test|tests|verify|verification|check|smoke|benchmark|ci|lint|typecheck|fixture)\b/u.test(normalized)) {
336
+ return "Tests and verification";
337
+ }
338
+ if (/\b(release|publish|github release|tag|rollback|revert path|changelog|package hygiene)\b/u.test(normalized)) {
339
+ return "Release and publishing";
340
+ }
341
+ if (/\b(cli|command|hook|mcp|session-start|plugin|integration|claude|codex)\b/u.test(normalized)) {
342
+ return "CLI, hooks, and integrations";
343
+ }
344
+ if (/\b(context|brief|change[- ]plans?|query|retrieval|index|parser|graph|snapshot|candidates?|semantic|lsp|session memory)\b/u.test(normalized)) {
345
+ return "Codexa context engine";
346
+ }
347
+ return "Code and behavior";
348
+ }
349
+ function changelogCategoryOrder() {
350
+ return [
351
+ "Release and publishing",
352
+ "Dependencies and security",
353
+ "CLI, hooks, and integrations",
354
+ "Codexa context engine",
355
+ "Code and behavior",
356
+ "Tests and verification",
357
+ "Documentation"
358
+ ];
359
+ }
360
+ function formatCommitBullet(commit, githubRepo) {
361
+ const shortSha = commit.sha.slice(0, 7);
362
+ const commitRef = githubRepo ? `[${shortSha}](https://github.com/${githubRepo}/commit/${commit.sha})` : `\`${shortSha}\``;
363
+ return `- ${commitRef} ${commit.subject}`;
364
+ }
365
+ function renderChangedAreaSummary(files) {
366
+ if (files.length === 0) {
367
+ return ["No changed file paths recorded."];
368
+ }
369
+ const grouped = new Map();
370
+ for (const file of files) {
371
+ const area = changedArea(file);
372
+ grouped.set(area, [...(grouped.get(area) ?? []), file]);
373
+ }
374
+ const lines = [];
375
+ for (const title of changedAreaOrder()) {
376
+ const areaFiles = grouped.get(title);
377
+ if (!areaFiles || areaFiles.length === 0) {
378
+ continue;
379
+ }
380
+ const visibleFiles = areaFiles.slice(0, MAX_CHANGED_AREA_FILES).map((file) => `\`${file}\``).join(", ");
381
+ const extraCount = areaFiles.length - MAX_CHANGED_AREA_FILES;
382
+ const suffix = extraCount > 0 ? `, plus ${extraCount} more` : "";
383
+ lines.push(`- ${title}: ${visibleFiles}${suffix}`);
384
+ }
385
+ return lines;
386
+ }
387
+ function changedArea(file) {
388
+ const normalized = file.replace(/\\/gu, "/");
389
+ if (normalized === "src/github-release.ts" ||
390
+ normalized === "scripts/verify-release-path.mjs" ||
391
+ normalized === "docs/PUBLIC_RELEASE_CHECKLIST.md" ||
392
+ normalized === ".github/workflows/check.yml" ||
393
+ normalized === ".github/workflows/npm-publish.yml") {
394
+ return "Release and publishing";
395
+ }
396
+ if (normalized === "src/cli.ts" ||
397
+ normalized === "src/mcp.ts" ||
398
+ normalized === "src/init.ts" ||
399
+ normalized.startsWith("integrations/") ||
400
+ normalized.startsWith("plugins/")) {
401
+ return "CLI, hooks, and integrations";
402
+ }
403
+ if (normalized.startsWith("src/query/") ||
404
+ normalized === "src/queries.ts" ||
405
+ normalized === "src/indexer.ts" ||
406
+ normalized === "src/parser.ts" ||
407
+ normalized === "src/retrieval.ts" ||
408
+ normalized === "src/graph.ts" ||
409
+ normalized === "src/task-snapshots.ts" ||
410
+ normalized === "src/semantic-retrieval.ts" ||
411
+ normalized.startsWith("src/semantic/") ||
412
+ normalized.startsWith("src/lsp/")) {
413
+ return "Codexa context engine";
414
+ }
415
+ if (normalized.startsWith("tests/") || normalized === "vitest.config.ts" || normalized.startsWith("scripts/verify-")) {
416
+ return "Tests and verification";
417
+ }
418
+ if (normalized === "README.md" ||
419
+ normalized === "AGENTS.md" ||
420
+ normalized === "CONTRIBUTING.md" ||
421
+ normalized === "SECURITY.md" ||
422
+ normalized === "CODE_OF_CONDUCT.md" ||
423
+ normalized.startsWith("docs/")) {
424
+ return "Documentation";
425
+ }
426
+ if (normalized === "package.json" ||
427
+ normalized === "package-lock.json" ||
428
+ normalized === ".npmrc" ||
429
+ normalized.startsWith("scripts/package-") ||
430
+ normalized.startsWith("scripts/prepare-")) {
431
+ return "Dependencies and packaging";
432
+ }
433
+ if (normalized.startsWith("src/")) {
434
+ return "Code and behavior";
435
+ }
436
+ return "Other files";
437
+ }
438
+ function changedAreaOrder() {
439
+ return [
440
+ "Release and publishing",
441
+ "Dependencies and packaging",
442
+ "CLI, hooks, and integrations",
443
+ "Codexa context engine",
444
+ "Code and behavior",
445
+ "Tests and verification",
446
+ "Documentation",
447
+ "Other files"
448
+ ];
449
+ }
450
+ function renderRawCommitList(commits) {
451
+ return commits.map((commit) => `${commit.sha.slice(0, 7)} ${commit.subject}`).join("\n");
452
+ }
453
+ function trimTrailingBlank(lines) {
454
+ while (lines.at(-1) === "") {
455
+ lines.pop();
456
+ }
457
+ return lines;
458
+ }
459
+ export function sanitizeReleaseRef(value) {
460
+ return value.replace(/[^A-Za-z0-9._-]/gu, "-").replace(/^-+|-+$/gu, "").slice(0, 80) || "release";
461
+ }
462
+ async function defaultProjectName(repoRoot) {
463
+ try {
464
+ const raw = await fs.readFile(path.join(repoRoot, "package.json"), "utf8");
465
+ const parsed = JSON.parse(raw);
466
+ if (typeof parsed.name === "string" && parsed.name.trim()) {
467
+ return packageNameToProjectName(parsed.name.trim());
468
+ }
469
+ }
470
+ catch {
471
+ // Fall through to the directory name for non-package repositories.
472
+ }
473
+ return path.basename(repoRoot) || "project";
474
+ }
475
+ function packageNameToProjectName(value) {
476
+ const bareName = value.startsWith("@") ? value.split("/").at(-1) : value;
477
+ return (bareName ?? value).trim() || "project";
478
+ }
479
+ async function defaultReleaseTag(repoRoot, shortHead, projectSlug) {
480
+ try {
481
+ const raw = await fs.readFile(path.join(repoRoot, "package.json"), "utf8");
482
+ const parsed = JSON.parse(raw);
483
+ if (typeof parsed.version === "string" && parsed.version.trim()) {
484
+ return `v${parsed.version.trim()}`;
485
+ }
486
+ }
487
+ catch {
488
+ // Fall through to a deterministic source tag.
489
+ }
490
+ return `${projectSlug}-release-${new Date().toISOString().replace(/[-:]/gu, "").replace(/\.\d{3}Z$/u, "Z")}-${shortHead}`;
491
+ }
492
+ async function previousProjectReleaseTag(repoRoot, current, timeoutMs) {
493
+ const tags = await gitText(repoRoot, ["tag", "--list", "v[0-9]*", "--sort=-version:refname"], "list release tags", timeoutMs, true);
494
+ const list = tags.split(/\r?\n/u).filter(Boolean);
495
+ const currentIndex = list.indexOf(current);
496
+ if (currentIndex >= 0) {
497
+ return list[currentIndex + 1] ?? null;
498
+ }
499
+ return list.find((tag) => tag !== current) ?? null;
500
+ }
501
+ async function createOrUpdateGithubRelease(githubRepo, tag, title, notesFile, latestMode, timeoutMs, actions) {
502
+ await assertOk(await runCommand("gh", ["auth", "status", "--hostname", "github.com"], { timeoutMs, maxBufferBytes: 32 * 1024, env: noPromptEnv() }), "check gh auth");
503
+ const view = await runCommand("gh", ["release", "view", tag, "-R", githubRepo], { timeoutMs, maxBufferBytes: 32 * 1024, env: noPromptEnv() });
504
+ const createLatestArgs = latestMode === "true" ? ["--latest"] : latestMode === "false" ? ["--latest=false"] : [];
505
+ const editLatestArgs = latestMode === "true" ? ["--latest"] : [];
506
+ if (view.ok) {
507
+ await assertOk(await runCommand("gh", ["release", "edit", tag, "-R", githubRepo, "--title", title, "--notes-file", notesFile, ...editLatestArgs], {
508
+ timeoutMs,
509
+ maxBufferBytes: 64 * 1024,
510
+ env: noPromptEnv()
511
+ }), `edit GitHub Release ${tag}`);
512
+ actions.push(`updated GitHub Release ${tag}`);
513
+ return;
514
+ }
515
+ await assertOk(await runCommand("gh", ["release", "create", tag, "-R", githubRepo, "--verify-tag", "--title", title, "--notes-file", notesFile, ...createLatestArgs], {
516
+ timeoutMs,
517
+ maxBufferBytes: 64 * 1024,
518
+ env: noPromptEnv()
519
+ }), `create GitHub Release ${tag}`);
520
+ actions.push(`created GitHub Release ${tag}`);
521
+ }
522
+ async function localTagStatus(repoRoot, tag, head, timeoutMs) {
523
+ const tagResult = await git(repoRoot, ["rev-parse", "-q", "--verify", `refs/tags/${tag}`], timeoutMs);
524
+ if (!tagResult.ok) {
525
+ return "missing";
526
+ }
527
+ const tagCommit = await gitText(repoRoot, ["rev-parse", `${tag}^{commit}`], `resolve tag ${tag}`, timeoutMs);
528
+ return tagCommit === head ? "same" : "different";
529
+ }
530
+ async function dirtyCount(repoRoot, timeoutMs) {
531
+ const status = await gitText(repoRoot, ["status", "--porcelain=v1", "--untracked-files=all"], "read git status", timeoutMs);
532
+ return status.split(/\r?\n/u).filter(Boolean).length;
533
+ }
534
+ async function resolveGitRoot(repoInput, timeoutMs) {
535
+ const initialRepo = path.resolve(repoInput || process.cwd());
536
+ const root = await gitText(initialRepo, ["rev-parse", "--show-toplevel"], "resolve git root", timeoutMs);
537
+ return root;
538
+ }
539
+ async function gitText(repoRoot, args, label, timeoutMs, allowFailure = false) {
540
+ const result = await git(repoRoot, args, timeoutMs);
541
+ if (!result.ok) {
542
+ if (allowFailure) {
543
+ return "";
544
+ }
545
+ throw new Error(`${label} failed: ${summarizeCommand(result)}`);
546
+ }
547
+ return result.stdout.trim();
548
+ }
549
+ async function git(repoRoot, args, timeoutMs) {
550
+ return await runCommand("git", ["-C", repoRoot, ...args], {
551
+ timeoutMs,
552
+ maxBufferBytes: 512 * 1024,
553
+ env: noPromptEnv()
554
+ });
555
+ }
556
+ async function assertOk(result, label) {
557
+ if (!result.ok) {
558
+ throw new Error(`${label} failed: ${summarizeCommand(result)}`);
559
+ }
560
+ }
561
+ function renderProjectGithubRelease(data) {
562
+ const lines = [
563
+ `${data.projectName} GitHub release`,
564
+ `Repo: ${data.repoRoot}`,
565
+ `Project: ${data.projectName}`,
566
+ `GitHub repo: ${data.githubRepo ?? "unknown"}`,
567
+ `Branch: ${data.branch ?? "unknown"}`,
568
+ `Tag: ${data.tag}`,
569
+ `Commit: ${data.localHead.slice(0, 12)}`,
570
+ `Working tree dirty files: ${data.dirtyFileCount}`,
571
+ `Mode: ${data.dryRun ? "dry-run" : "apply"}`,
572
+ data.releaseUrl ? `Release URL: ${data.releaseUrl}` : undefined,
573
+ "",
574
+ data.warnings.length > 0 ? "Warnings:" : undefined,
575
+ ...data.warnings.map((warning) => `- ${warning}`),
576
+ data.warnings.length > 0 ? "" : undefined,
577
+ "Actions:",
578
+ ...data.actions.map((action) => `- ${action}`),
579
+ "",
580
+ "Revert path:",
581
+ `- Open ${data.releaseUrl ?? "the generated release notes"} and use "Revert Changes Via PR" for forward-only rollback commands.`
582
+ ];
583
+ return lines.filter((line) => line !== undefined).join("\n");
584
+ }
585
+ function summarizeCommand(result) {
586
+ if (result.timedOut) {
587
+ return "timed out";
588
+ }
589
+ if (result.truncated) {
590
+ return "output truncated";
591
+ }
592
+ const text = `${result.stderr}\n${result.stdout}\n${result.error?.message ?? ""}`.trim().replace(/\s+/gu, " ");
593
+ return text ? redactSensitiveText(text).slice(0, 240) : `exit ${result.exitCode ?? "unknown"}`;
594
+ }
595
+ function noPromptEnv() {
596
+ return {
597
+ ...process.env,
598
+ GIT_TERMINAL_PROMPT: "0",
599
+ GCM_INTERACTIVE: "never"
600
+ };
601
+ }
602
+ function redactSensitiveText(value) {
603
+ return value
604
+ .replace(/https:\/\/[^/@\s]+@github\.com\//giu, "https://github.com/")
605
+ .replace(/\b(?:gh[opsu]_|github_pat_)[A-Za-z0-9_]{8,}\b/gu, "[REDACTED_TOKEN]");
606
+ }
607
+ function nonEmpty(value) {
608
+ return value && value.length > 0 ? value : null;
609
+ }
610
+ //# sourceMappingURL=github-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-release.js","sourceRoot":"","sources":["../src/github-release.ts"],"names":[],"mappings":"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"}