@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,375 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { renderCodexUseContract } from "./codex-contract.js";
4
+ import { ADVANCED_MCP_TOOL_NAMES, NO_SOURCE_MUTATION_CONTRACT, PRIMARY_MCP_TOOL_NAMES } from "./mcp-tool-catalog.js";
5
+ import { isPlaceholderRisk, placeholderCategory } from "./placeholder-signals.js";
6
+ import { escapeMarkdown, formatPathLine, topBy } from "./util.js";
7
+ export async function writeArtifacts(index, outputDir) {
8
+ await fs.mkdir(path.join(outputDir, "modules"), { recursive: true });
9
+ await fs.mkdir(path.join(outputDir, "playbooks"), { recursive: true });
10
+ await Promise.all([
11
+ fs.writeFile(path.join(outputDir, "README.md"), renderReadme(index), "utf8"),
12
+ fs.writeFile(path.join(outputDir, "codex-contract.md"), renderCodexUseContract(index.freshness), "utf8"),
13
+ fs.writeFile(path.join(outputDir, "repo-map.md"), renderRepoMap(index), "utf8"),
14
+ fs.writeFile(path.join(outputDir, "risk-map.md"), renderRiskMap(index), "utf8"),
15
+ fs.writeFile(path.join(outputDir, "placeholder-map.md"), renderPlaceholderMap(index), "utf8"),
16
+ fs.writeFile(path.join(outputDir, "test-map.md"), renderTestMap(index), "utf8"),
17
+ fs.writeFile(path.join(outputDir, "conventions.md"), renderConventions(index), "utf8"),
18
+ fs.writeFile(path.join(outputDir, "workflows.md"), renderWorkflows(index), "utf8"),
19
+ fs.writeFile(path.join(outputDir, "playbooks", "README.md"), renderPlaybookIndex(index), "utf8"),
20
+ ...index.modules.slice(0, 40).map((module) => fs.writeFile(path.join(outputDir, "modules", `${safeModuleName(module.name)}.md`), renderModule(index, module), "utf8")),
21
+ ...index.modules.slice(0, 20).map((module) => fs.writeFile(path.join(outputDir, "playbooks", `${safeModuleName(module.name)}.md`), renderModulePlaybook(index, module), "utf8"))
22
+ ]);
23
+ }
24
+ function renderReadme(index) {
25
+ const dirty = index.freshness.dirtyFiles.length;
26
+ const staleLine = index.freshness.stale ? `WARNING: index stale (${index.freshness.reason}).` : `Index fresh (${index.freshness.reason}).`;
27
+ return `# Codexa Codebase Context
28
+
29
+ ${staleLine}
30
+
31
+ - Repo: \`<repo>\`
32
+ - Commit: \`${index.snapshot.headCommit ?? "none"}\`
33
+ - Indexed: \`${index.snapshot.indexedAt}\`
34
+ - Dirty files at index time: ${dirty}
35
+ - Parser errors: ${index.parserErrors.length}
36
+
37
+ ## Read First
38
+
39
+ ${index.files.slice(0, 12).map((file, idx) => `${idx + 1}. \`${file.path}\` - rank ${file.rank.toFixed(2)} (${rankReasonText(file)})`).join("\n")}
40
+
41
+ ## Dynamic Queries
42
+
43
+ Use the primary Codexa MCP tools for the normal edit loop:
44
+
45
+ ${PRIMARY_MCP_TOOL_NAMES.map((tool) => `- \`${tool}\``).join("\n")}
46
+
47
+ Advanced MCP tools remain available for deeper inspection:
48
+
49
+ ${ADVANCED_MCP_TOOL_NAMES.map((tool) => `- \`${tool}\``).join("\n")}
50
+
51
+ MCP resources expose this generated artifact set under \`codexa://repo/codebase/...\`.
52
+ MCP prompts provide small workflows for snapshot-backed editing, impact-before-edit,
53
+ dirty-diff review, and targeted test planning.
54
+ Use \`search\` as the first-class target-discovery surface when a task is
55
+ ambiguous; it combines raw hits, semantic retrieval when configured, Codexa
56
+ ranking, likely tests, and gaps before \`task_brief\`.
57
+ Read \`codex-contract.md\` first when a new Codex session needs the automatic-use
58
+ rules without loading broader maps.
59
+
60
+ Facts carry \`source\` and \`confidence\`. Treat Python dynamic/framework edges marked \`heuristic\` as leads, not proof.
61
+ ${NO_SOURCE_MUTATION_CONTRACT}
62
+ `;
63
+ }
64
+ function renderRepoMap(index) {
65
+ const modules = index.modules.slice(0, 20);
66
+ return `# Repo Map
67
+
68
+ ## Top Modules
69
+
70
+ ${modules.map((mod) => `- \`${mod.name}\` - ${mod.files.length} files, rank ${mod.rank.toFixed(2)}`).join("\n")}
71
+
72
+ ## Top Files
73
+
74
+ ${table(["Rank", "File", "Lang", "Symbols", "Usage", "Risk"], index.files.slice(0, 40).map((file) => [
75
+ file.rank.toFixed(2),
76
+ `\`${file.path}\``,
77
+ file.language,
78
+ String(file.symbolCount),
79
+ String(file.usageCount),
80
+ file.riskScore.toFixed(1)
81
+ ]))}
82
+
83
+ ## Notable Symbols
84
+
85
+ ${rankSymbols(index)
86
+ .slice(0, 80)
87
+ .map((symbol) => `- \`${symbol.qualifiedName}\` (${symbol.kind}, ${symbol.language}) at \`${formatPathLine(symbol.path, symbol.range?.startLine)}\``)
88
+ .join("\n")}
89
+ `;
90
+ }
91
+ function renderRiskMap(index) {
92
+ const riskyFiles = topBy(index.files, (file) => file.riskScore + file.rankReasons.dirtyRisk + file.rankReasons.publicSurface, 40);
93
+ return `# Risk Map
94
+
95
+ Freshness: ${index.freshness.stale ? `STALE (${index.freshness.reason})` : index.freshness.reason}
96
+
97
+ ## Highest-Risk Files
98
+
99
+ ${table(["File", "Risk", "Dirty", "Reasons"], riskyFiles.map((file) => [
100
+ `\`${file.path}\``,
101
+ file.riskScore.toFixed(1),
102
+ file.dirty ? "yes" : "no",
103
+ rankReasonText(file)
104
+ ]))}
105
+
106
+ ## Risk Signals
107
+
108
+ ${index.risks
109
+ .slice(0, 120)
110
+ .map((risk) => `- \`${formatPathLine(risk.path, risk.range?.startLine)}\` - ${risk.signal}: ${risk.reason} (${risk.confidence})`)
111
+ .join("\n")}
112
+ `;
113
+ }
114
+ function renderPlaceholderMap(index) {
115
+ const placeholderRisks = index.risks.filter(isPlaceholderRisk);
116
+ const fileByPath = new Map(index.files.map((file) => [file.path, file]));
117
+ const fileScores = new Map();
118
+ for (const risk of placeholderRisks) {
119
+ const current = fileScores.get(risk.path) ?? { count: 0, score: 0 };
120
+ current.count += 1;
121
+ current.score += risk.score;
122
+ fileScores.set(risk.path, current);
123
+ }
124
+ const categoryCounts = [...placeholderRisks.reduce((map, risk) => {
125
+ const category = placeholderCategory(risk.signal);
126
+ map.set(category, (map.get(category) ?? 0) + 1);
127
+ return map;
128
+ }, new Map()).entries()].sort(([a], [b]) => a.localeCompare(b));
129
+ const contextCounts = [...placeholderRisks.reduce((map, risk) => {
130
+ const file = fileByPath.get(risk.path);
131
+ const context = file?.generated
132
+ ? "generated"
133
+ : file?.test
134
+ ? "test"
135
+ : file?.language === "markdown" || /(^|\/)docs?\//u.test(risk.path)
136
+ ? "docs"
137
+ : "production";
138
+ map.set(context, (map.get(context) ?? 0) + 1);
139
+ return map;
140
+ }, new Map()).entries()].sort(([a], [b]) => a.localeCompare(b));
141
+ const topFiles = [...fileScores.entries()]
142
+ .sort((a, b) => b[1].score - a[1].score || b[1].count - a[1].count || a[0].localeCompare(b[0]))
143
+ .slice(0, 40);
144
+ const shownSignals = [...placeholderRisks]
145
+ .sort((a, b) => b.score - a.score || a.path.localeCompare(b.path) || (a.range?.startLine ?? 0) - (b.range?.startLine ?? 0) || a.signal.localeCompare(b.signal))
146
+ .slice(0, 160);
147
+ return `# Placeholder Map
148
+
149
+ Freshness: ${index.freshness.stale ? `STALE (${index.freshness.reason})` : index.freshness.reason}
150
+
151
+ Placeholder findings are indexed as normal risk signals. \`change_plan\` stores
152
+ their baseline, and \`post_edit_review\` reports newly introduced placeholder
153
+ signals and removed signals within the saved baseline scope as risk deltas.
154
+
155
+ ## Summary
156
+
157
+ - Total placeholder signals: ${placeholderRisks.length}
158
+ - Files with placeholder signals: ${fileScores.size}
159
+
160
+ ## Categories
161
+
162
+ ${categoryCounts.length > 0 ? categoryCounts.map(([category, count]) => `- ${category}: ${count}`).join("\n") : "- none"}
163
+
164
+ ## Contexts
165
+
166
+ ${contextCounts.length > 0 ? contextCounts.map(([context, count]) => `- ${context}: ${count}`).join("\n") : "- none"}
167
+
168
+ ## Highest Placeholder Files
169
+
170
+ ${table(["File", "Findings", "Score"], topFiles.map(([filePath, summary]) => [`\`${filePath}\``, String(summary.count), summary.score.toFixed(2)]))}
171
+
172
+ ## Placeholder Signals
173
+
174
+ Showing ${shownSignals.length} of ${placeholderRisks.length}.
175
+
176
+ ${shownSignals.length > 0
177
+ ? shownSignals
178
+ .map((risk) => `- \`${formatPathLine(risk.path, risk.range?.startLine)}\` - ${risk.signal}: ${risk.reason} (${risk.confidence}, score ${risk.score.toFixed(2)})`)
179
+ .join("\n")
180
+ : "- none detected"}
181
+ `;
182
+ }
183
+ function renderTestMap(index) {
184
+ const testFiles = index.files.filter((file) => file.test);
185
+ return `# Test Map
186
+
187
+ ## Likely Test Files
188
+
189
+ ${testFiles.slice(0, 80).map((file) => `- \`${file.path}\` - rank ${file.rank.toFixed(2)}`).join("\n")}
190
+
191
+ ## Test Edges
192
+
193
+ ${index.testEdges
194
+ .slice(0, 120)
195
+ .map((edge) => `- \`${edge.path}\`${edge.targetPath ? ` -> \`${edge.targetPath}\`` : ""}: ${edge.reason} (${edge.confidence})`)
196
+ .join("\n")}
197
+ `;
198
+ }
199
+ function renderConventions(index) {
200
+ const languages = [...new Set(index.files.map((file) => file.language))].sort();
201
+ const tests = index.files.filter((file) => file.test).length;
202
+ return `# Conventions
203
+
204
+ - Languages indexed: ${languages.join(", ")}
205
+ - Test files detected: ${tests}
206
+ - Source facts come from Tree-sitter, git, manifests, or explicit heuristics.
207
+ - Python definitions/imports are authoritative syntax facts.
208
+ - Python call/reference links are derived unless dynamic/framework behavior makes them heuristic.
209
+ - Generated Codexa artifacts are additive. Do not overwrite human-maintained \`AGENTS.md\`.
210
+ - Use freshness status before trusting impact or test-plan output.
211
+ - Candidate test commands require package/Python metadata provenance; missing
212
+ provenance means Codexa should omit the command instead of inventing one.
213
+ - Context packs include known gaps such as parser errors, stale state,
214
+ heuristic-only links, and changed files without symbol ranges.
215
+ - For code edits, use \`change_plan\` with \`saveSnapshot: true\` before editing
216
+ and \`post_edit_review\` after editing.
217
+ - Use \`session_memory\` to recall or explicitly save session-local working
218
+ memory. Auto-recorded \`viewed\` entries are Codexa-derived; agent claims stay
219
+ agent-asserted and must not be promoted into codebase facts.
220
+ - Use \`focus_brief\` for broad natural-language tasks before falling back to
221
+ top-ranked files. Use \`workflow_path\` for route/job/process changes and
222
+ \`dependency_path\` for explicit source-to-target relationship questions.
223
+ - Rule signals cover queue/run lifecycle, generator-node invariants,
224
+ manifest/adapter contracts, managed output, frontend polling, and
225
+ release/service-control boundaries when those facts are present.
226
+ `;
227
+ }
228
+ function renderWorkflows(index) {
229
+ return `# Workflow Map
230
+
231
+ Workflow traces are heuristic process maps built from route/job decorators,
232
+ manifest node facts, typed endpoint/store/adapter/UI/test edges, call/reference
233
+ links, imports, risks, and test edges.
234
+ Treat them as read-first guidance, then verify with source.
235
+
236
+ ${index.workflows
237
+ .slice(0, 80)
238
+ .map((workflow) => `## ${workflow.title}
239
+
240
+ - Kind: ${workflow.workflowKind}
241
+ - Confidence: ${workflow.confidence}
242
+ - Rank: ${workflow.rank.toFixed(2)}
243
+ - Entry: \`${formatPathLine(workflow.entryPath, workflow.range?.startLine)}\`
244
+ - Related files: ${workflow.relatedFiles.slice(0, 8).map((file) => `\`${file}\``).join(", ") || "none"}
245
+ - Tests: ${workflow.tests.slice(0, 8).map((file) => `\`${file}\``).join(", ") || "none"}
246
+
247
+ ${workflow.summary}
248
+
249
+ ${workflow.steps
250
+ .slice(0, 12)
251
+ .map((step, index) => `${index + 1}. ${step.kind}: \`${formatPathLine(step.path, step.line)}\` - ${step.label} (${step.confidence})`)
252
+ .join("\n")}
253
+ `)
254
+ .join("\n")}
255
+ `;
256
+ }
257
+ function renderPlaybookIndex(index) {
258
+ return `# Codexa Change Playbooks
259
+
260
+ These playbooks are generated from indexed facts. They are meant to tell Codex
261
+ how to approach changes safely without loading the whole graph.
262
+
263
+ ## General Protocol
264
+
265
+ 1. Run \`focus_brief\` for broad or ambiguous tasks.
266
+ 2. Run \`change_plan\` with \`saveSnapshot: true\` before editing concrete files.
267
+ 3. Run \`workflow_path\` for route, job, queue, adapter, or manifest changes.
268
+ 4. Run \`callers\`, \`callees\`, or \`dependency_path\` for API and rename work.
269
+ 5. Run \`post_edit_review\` after edits, then \`test_plan\` before final verification.
270
+
271
+ ## Module Playbooks
272
+
273
+ ${index.modules.slice(0, 20).map((module) => `- \`playbooks/${safeModuleName(module.name)}.md\` - ${module.files.length} files, rank ${module.rank.toFixed(2)}`).join("\n")}
274
+ `;
275
+ }
276
+ function renderModulePlaybook(index, module) {
277
+ const moduleFiles = module.files
278
+ .map((filePath) => index.files.find((file) => file.path === filePath))
279
+ .filter((file) => Boolean(file))
280
+ .sort((a, b) => b.rank - a.rank || a.path.localeCompare(b.path));
281
+ const risks = index.risks.filter((risk) => module.files.includes(risk.path)).slice(0, 20);
282
+ const workflows = index.workflows.filter((workflow) => workflow.relatedFiles.some((file) => module.files.includes(file))).slice(0, 10);
283
+ const tests = index.testEdges.filter((edge) => module.files.includes(edge.targetPath ?? "") || module.files.includes(edge.path)).slice(0, 20);
284
+ const languages = [...new Set(moduleFiles.map((file) => file.language))].sort();
285
+ return `# Playbook: ${module.name}
286
+
287
+ ${module.summary}
288
+
289
+ ## When Editing This Module
290
+
291
+ - Languages: ${languages.join(", ") || "unknown"}
292
+ - Read first: ${moduleFiles.slice(0, 8).map((file) => `\`${file.path}\``).join(", ") || "none"}
293
+ - Use \`task_brief\` with the concrete file/symbol once the target is known.
294
+ - Use \`workflow_path\` if any workflow below is related to the change.
295
+ - Treat heuristic risks as prompts to verify source, not as proof.
296
+
297
+ ## Invariants And Risks
298
+
299
+ ${risks.length > 0 ? risks.map((risk) => `- \`${formatPathLine(risk.path, risk.range?.startLine)}\`: ${risk.signal} - ${risk.reason} (${risk.confidence})`).join("\n") : "- none detected"}
300
+
301
+ ## Workflows
302
+
303
+ ${workflows.length > 0 ? workflows.map((workflow) => `- ${workflow.title}: ${workflow.summary}`).join("\n") : "- none detected"}
304
+
305
+ ## Tests
306
+
307
+ ${tests.length > 0 ? tests.map((edge) => `- \`${edge.path}\`${edge.targetPath ? ` covers \`${edge.targetPath}\`` : ""}: ${edge.reason} (${edge.confidence})`).join("\n") : "- no direct test edges detected"}
308
+
309
+ ## Safe Change Recipe
310
+
311
+ 1. Read the target and the top importer/caller from Codexa output.
312
+ 2. Check risk signals before changing public surface, adapters, config, routes, or generated manifests.
313
+ 3. Prefer tests listed above; if none are listed, inspect repo test metadata before inventing commands.
314
+ 4. Run \`post_edit_review\` after edits if a snapshot exists; otherwise re-run
315
+ \`task_brief\` if freshness reports \`dirty-files-changed\`.
316
+ `;
317
+ }
318
+ function renderModule(index, module) {
319
+ const files = module.files
320
+ .map((filePath) => index.files.find((file) => file.path === filePath))
321
+ .filter((file) => Boolean(file))
322
+ .sort((a, b) => b.rank - a.rank || a.path.localeCompare(b.path));
323
+ const symbols = index.symbols.filter((symbol) => module.files.includes(symbol.path)).slice(0, 60);
324
+ return `# Module: ${module.name}
325
+
326
+ ${module.summary}
327
+
328
+ ## Read First
329
+
330
+ ${files.slice(0, 12).map((file) => `- \`${file.path}\` - rank ${file.rank.toFixed(2)} (${rankReasonText(file)})`).join("\n")}
331
+
332
+ ## Symbols
333
+
334
+ ${symbols.map((symbol) => `- \`${symbol.qualifiedName}\` (${symbol.kind}) at \`${formatPathLine(symbol.path, symbol.range?.startLine)}\``).join("\n")}
335
+ `;
336
+ }
337
+ function rankReasonText(file) {
338
+ const entries = Object.entries(file.rankReasons)
339
+ .filter(([, value]) => value > 0)
340
+ .sort((a, b) => b[1] - a[1])
341
+ .slice(0, 4)
342
+ .map(([key, value]) => `${key} ${value.toFixed(1)}`);
343
+ return entries.join(", ") || "baseline";
344
+ }
345
+ function rankSymbols(index) {
346
+ const fileRanks = new Map(index.files.map((file) => [file.path, file.rank]));
347
+ const usageCounts = new Map();
348
+ for (const usage of index.usageSites) {
349
+ if (usage.targetSymbolId) {
350
+ usageCounts.set(usage.targetSymbolId, (usageCounts.get(usage.targetSymbolId) ?? 0) + 1);
351
+ }
352
+ }
353
+ return [...index.symbols].sort((a, b) => {
354
+ const scoreA = symbolScore(a, fileRanks, usageCounts);
355
+ const scoreB = symbolScore(b, fileRanks, usageCounts);
356
+ return scoreB - scoreA || a.path.localeCompare(b.path) || (a.range?.startLine ?? 0) - (b.range?.startLine ?? 0);
357
+ });
358
+ }
359
+ function symbolScore(symbol, fileRanks, usageCounts) {
360
+ const kindBoost = ["route", "class", "function", "method"].includes(symbol.kind) ? 1 : 0;
361
+ return (fileRanks.get(symbol.path) ?? 0) + Math.log2((usageCounts.get(symbol.id) ?? 0) + 1) + (symbol.exported ? 2 : 0) + kindBoost;
362
+ }
363
+ function table(headers, rows) {
364
+ const escapedHeaders = headers.map(escapeMarkdown);
365
+ const escapedRows = rows.map((row) => row.map(escapeMarkdown));
366
+ return [
367
+ `| ${escapedHeaders.join(" | ")} |`,
368
+ `| ${headers.map(() => "---").join(" | ")} |`,
369
+ ...escapedRows.map((row) => `| ${row.join(" | ")} |`)
370
+ ].join("\n");
371
+ }
372
+ function safeModuleName(name) {
373
+ return name.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "root";
374
+ }
375
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type CodexaAutonomyMode = "read-only" | "full-access";
2
+ export type CodexaAutonomySource = "env:CODEXA_AUTOVERIFY" | "env:CODEXA_AUTONOMY" | "user-repo-policy" | "user-default-policy" | "default";
3
+ export interface CodexaAutonomyStatus {
4
+ mode: CodexaAutonomyMode;
5
+ source: CodexaAutonomySource;
6
+ configPath: string;
7
+ repoRoot?: string;
8
+ }
9
+ export declare function parseAutonomyMode(value: string): CodexaAutonomyMode;
10
+ export declare function effectiveAutonomyMode(repoRoot: string, env?: NodeJS.ProcessEnv): Promise<CodexaAutonomyStatus>;
11
+ export declare function defaultAutonomyMode(env?: NodeJS.ProcessEnv): Promise<CodexaAutonomyStatus>;
12
+ export declare function setAutonomyMode(input: {
13
+ repoRoot?: string;
14
+ global?: boolean;
15
+ mode: CodexaAutonomyMode;
16
+ env?: NodeJS.ProcessEnv;
17
+ }): Promise<CodexaAutonomyStatus>;
@@ -0,0 +1,124 @@
1
+ import { promises as fs } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ export function parseAutonomyMode(value) {
5
+ const normalized = value.trim().toLowerCase();
6
+ if (normalized === "full" || normalized === "full-access" || normalized === "bypass") {
7
+ return "full-access";
8
+ }
9
+ if (normalized === "read-only" || normalized === "readonly" || normalized === "off") {
10
+ return "read-only";
11
+ }
12
+ throw new Error(`Invalid autonomy mode: ${value}. Use read-only or full-access.`);
13
+ }
14
+ export async function effectiveAutonomyMode(repoRoot, env = process.env) {
15
+ const configPath = autonomyConfigPath(env);
16
+ const autoVerifyEnv = env.CODEXA_AUTOVERIFY?.trim().toLowerCase();
17
+ if (autoVerifyEnv === "1" || autoVerifyEnv === "true") {
18
+ return { mode: "full-access", source: "env:CODEXA_AUTOVERIFY", configPath, repoRoot: path.resolve(repoRoot) };
19
+ }
20
+ if (autoVerifyEnv === "0" || autoVerifyEnv === "false" || autoVerifyEnv === "off") {
21
+ return { mode: "read-only", source: "env:CODEXA_AUTOVERIFY", configPath, repoRoot: path.resolve(repoRoot) };
22
+ }
23
+ const autonomyEnv = env.CODEXA_AUTONOMY;
24
+ if (autonomyEnv) {
25
+ return { mode: parseAutonomyMode(autonomyEnv), source: "env:CODEXA_AUTONOMY", configPath, repoRoot: path.resolve(repoRoot) };
26
+ }
27
+ const config = await readAutonomyConfig(configPath);
28
+ const repoKey = await repoPolicyKey(repoRoot);
29
+ const repoPolicy = config.repos?.[repoKey];
30
+ if (repoPolicy) {
31
+ return { mode: repoPolicy.mode, source: "user-repo-policy", configPath, repoRoot: repoKey };
32
+ }
33
+ if (config.defaultMode) {
34
+ return { mode: config.defaultMode, source: "user-default-policy", configPath, repoRoot: repoKey };
35
+ }
36
+ return { mode: "read-only", source: "default", configPath, repoRoot: repoKey };
37
+ }
38
+ export async function defaultAutonomyMode(env = process.env) {
39
+ const configPath = autonomyConfigPath(env);
40
+ const config = await readAutonomyConfig(configPath);
41
+ if (config.defaultMode) {
42
+ return { mode: config.defaultMode, source: "user-default-policy", configPath };
43
+ }
44
+ return { mode: "read-only", source: "default", configPath };
45
+ }
46
+ export async function setAutonomyMode(input) {
47
+ const env = input.env ?? process.env;
48
+ const configPath = autonomyConfigPath(env);
49
+ const config = await readAutonomyConfig(configPath);
50
+ if (input.global || !input.repoRoot) {
51
+ config.defaultMode = input.mode;
52
+ await writeAutonomyConfig(configPath, config);
53
+ return { mode: input.mode, source: "user-default-policy", configPath };
54
+ }
55
+ else {
56
+ const repoKey = await repoPolicyKey(input.repoRoot);
57
+ config.repos = config.repos ?? {};
58
+ config.repos[repoKey] = {
59
+ mode: input.mode,
60
+ trustedAt: new Date().toISOString()
61
+ };
62
+ }
63
+ await writeAutonomyConfig(configPath, config);
64
+ return effectiveAutonomyMode(input.repoRoot, env);
65
+ }
66
+ function autonomyConfigPath(env) {
67
+ if (env.CODEXA_HOME) {
68
+ return path.join(path.resolve(env.CODEXA_HOME), "autonomy.json");
69
+ }
70
+ const configHome = env.XDG_CONFIG_HOME ? path.resolve(env.XDG_CONFIG_HOME) : path.join(os.homedir(), ".config");
71
+ return path.join(configHome, "codexa", "autonomy.json");
72
+ }
73
+ async function repoPolicyKey(repoRoot) {
74
+ const resolved = path.resolve(repoRoot);
75
+ try {
76
+ return await fs.realpath(resolved);
77
+ }
78
+ catch {
79
+ return resolved;
80
+ }
81
+ }
82
+ async function readAutonomyConfig(configPath) {
83
+ try {
84
+ const parsed = JSON.parse(await fs.readFile(configPath, "utf8"));
85
+ return {
86
+ schemaVersion: 1,
87
+ defaultMode: isAutonomyMode(parsed.defaultMode) ? parsed.defaultMode : undefined,
88
+ repos: normalizeRepoPolicies(parsed.repos)
89
+ };
90
+ }
91
+ catch {
92
+ return { schemaVersion: 1 };
93
+ }
94
+ }
95
+ async function writeAutonomyConfig(configPath, config) {
96
+ await fs.mkdir(path.dirname(configPath), { recursive: true, mode: 0o700 });
97
+ const temp = `${configPath}.${process.pid}.tmp`;
98
+ await fs.writeFile(temp, `${JSON.stringify(config, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
99
+ await fs.rename(temp, configPath);
100
+ await fs.chmod(configPath, 0o600).catch(() => undefined);
101
+ }
102
+ function normalizeRepoPolicies(value) {
103
+ if (!value || typeof value !== "object") {
104
+ return undefined;
105
+ }
106
+ const repos = {};
107
+ for (const [repo, policy] of Object.entries(value)) {
108
+ if (!policy || typeof policy !== "object") {
109
+ continue;
110
+ }
111
+ const record = policy;
112
+ if (isAutonomyMode(record.mode)) {
113
+ repos[repo] = {
114
+ mode: record.mode,
115
+ trustedAt: typeof record.trustedAt === "string" ? record.trustedAt : ""
116
+ };
117
+ }
118
+ }
119
+ return Object.keys(repos).length > 0 ? repos : undefined;
120
+ }
121
+ function isAutonomyMode(value) {
122
+ return value === "read-only" || value === "full-access";
123
+ }
124
+ //# sourceMappingURL=autonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomy.js","sourceRoot":"","sources":["../src/autonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const AUTO_VERIFY_POLICY_ID = "local-targeted-tests-v1";
2
+ export declare const AUTO_VERIFY_POLICY_DIGEST: string;
3
+ export declare function autoVerifyPolicySignature(): string;
4
+ export declare function isTrustedAutoVerifyReport(report: unknown): boolean;
5
+ export declare function markTrustedAutoVerifyReport<T extends object>(report: T): T;
@@ -0,0 +1,18 @@
1
+ import { stableId } from "../util.js";
2
+ export const AUTO_VERIFY_POLICY_ID = "local-targeted-tests-v1";
3
+ export const AUTO_VERIFY_POLICY_DIGEST = stableId(AUTO_VERIFY_POLICY_ID, "hook-only", "minimal-env", "targeted-tests", "no-shell", "no-lifecycle-hooks", "source-mutation-non-covering");
4
+ const AUTO_VERIFY_TRUST_TOKEN = Symbol("codexa.autoverify.trusted-report");
5
+ export function autoVerifyPolicySignature() {
6
+ return `${AUTO_VERIFY_POLICY_ID}:${AUTO_VERIFY_POLICY_DIGEST}`;
7
+ }
8
+ export function isTrustedAutoVerifyReport(report) {
9
+ return Boolean(report && typeof report === "object" && report[AUTO_VERIFY_TRUST_TOKEN] === true);
10
+ }
11
+ export function markTrustedAutoVerifyReport(report) {
12
+ Object.defineProperty(report, AUTO_VERIFY_TRUST_TOKEN, {
13
+ value: true,
14
+ enumerable: false
15
+ });
16
+ return report;
17
+ }
18
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/autoverify/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAC/C,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,8BAA8B,CAC/B,CAAC;AAEF,MAAM,uBAAuB,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAE3E,MAAM,UAAU,yBAAyB;IACvC,OAAO,GAAG,qBAAqB,IAAI,yBAAyB,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACvD,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAK,MAAkD,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC,CAAC;AAChJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAmB,MAAS;IACrE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,uBAAuB,EAAE;QACrD,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { VerificationCommandReport } from "./types.js";
2
+ export interface AutoVerifyResult {
3
+ reports: AutoVerifyCommandReport[];
4
+ attempted: string[];
5
+ skipped: string[];
6
+ }
7
+ export interface AutoVerifyCommandReport extends VerificationCommandReport {
8
+ runner: AutoVerifyReportRunner;
9
+ }
10
+ export declare function isTrustedAutoVerifyCommandReport(report: unknown): report is AutoVerifyCommandReport;
11
+ export declare function autoVerifyPolicySignature(): string;
12
+ export interface AutoVerifyReportRunner {
13
+ schemaVersion: 1;
14
+ reportKind: "codexa-autoverify-report";
15
+ runnerName: "codexa";
16
+ runnerVersion: string;
17
+ policyId: "local-targeted-tests-v1";
18
+ policyDigest: string;
19
+ taskId: string;
20
+ snapshotDigest: string;
21
+ commandId: string;
22
+ candidateDigest: string;
23
+ headCommit: string | null;
24
+ dirtyHashBefore: string;
25
+ dirtyHashAfter: string;
26
+ cwdRealpath: string;
27
+ targetRealpaths: string[];
28
+ envMode: "minimal";
29
+ allowedBy: string[];
30
+ sourceMutationDetected: boolean;
31
+ timedOut: boolean;
32
+ startedAt: string;
33
+ finishedAt: string;
34
+ signal?: string;
35
+ outputRedacted: boolean;
36
+ canonicalDigest: string;
37
+ skippedReason?: string;
38
+ }
39
+ export declare function runAutoVerifyForPostEdit(repoRoot: string, data: unknown): Promise<AutoVerifyResult>;
40
+ export declare function autoVerifyDirtyHashFromParts(input: {
41
+ headCommit: string | null;
42
+ dirtyFiles: string[];
43
+ dirtyFileHashes: Record<string, string>;
44
+ }): string;
45
+ export declare function sanitizeAutoVerifyText(value: string | undefined, repoRoot: string): string | undefined;