ctxr-cli 0.33.0 → 0.34.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 (273) hide show
  1. package/README.md +15 -1
  2. package/dist/commands/archive.d.ts +5 -4
  3. package/dist/commands/archive.d.ts.map +1 -1
  4. package/dist/commands/archive.js +7 -7
  5. package/dist/commands/archive.js.map +1 -1
  6. package/dist/commands/catalog-show.d.ts +8 -0
  7. package/dist/commands/catalog-show.d.ts.map +1 -1
  8. package/dist/commands/catalog-show.js +29 -2
  9. package/dist/commands/catalog-show.js.map +1 -1
  10. package/dist/commands/context-gather.d.ts.map +1 -1
  11. package/dist/commands/context-gather.js +3 -2
  12. package/dist/commands/context-gather.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +5 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +4 -0
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/graph-build.d.ts +4 -1
  18. package/dist/commands/graph-build.d.ts.map +1 -1
  19. package/dist/commands/graph-build.js +14 -5
  20. package/dist/commands/graph-build.js.map +1 -1
  21. package/dist/commands/land.d.ts +27 -7
  22. package/dist/commands/land.d.ts.map +1 -1
  23. package/dist/commands/land.js +307 -32
  24. package/dist/commands/land.js.map +1 -1
  25. package/dist/commands/publish-gather.d.ts.map +1 -1
  26. package/dist/commands/publish-gather.js +2 -3
  27. package/dist/commands/publish-gather.js.map +1 -1
  28. package/dist/commands/review-list.d.ts +19 -5
  29. package/dist/commands/review-list.d.ts.map +1 -1
  30. package/dist/commands/review-list.js +55 -6
  31. package/dist/commands/review-list.js.map +1 -1
  32. package/dist/commands/rollup-gather.d.ts.map +1 -1
  33. package/dist/commands/rollup-gather.js +2 -3
  34. package/dist/commands/rollup-gather.js.map +1 -1
  35. package/dist/commands/second-opinion.d.ts +33 -0
  36. package/dist/commands/second-opinion.d.ts.map +1 -0
  37. package/dist/commands/second-opinion.js +56 -0
  38. package/dist/commands/second-opinion.js.map +1 -0
  39. package/dist/commands/serve.d.ts.map +1 -1
  40. package/dist/commands/serve.js +4 -0
  41. package/dist/commands/serve.js.map +1 -1
  42. package/dist/commands/session-discard.d.ts +18 -0
  43. package/dist/commands/session-discard.d.ts.map +1 -0
  44. package/dist/commands/session-discard.js +31 -0
  45. package/dist/commands/session-discard.js.map +1 -0
  46. package/dist/commands/session-list.d.ts +17 -6
  47. package/dist/commands/session-list.d.ts.map +1 -1
  48. package/dist/commands/session-list.js +31 -11
  49. package/dist/commands/session-list.js.map +1 -1
  50. package/dist/commands/session-rebase.d.ts +18 -0
  51. package/dist/commands/session-rebase.d.ts.map +1 -0
  52. package/dist/commands/session-rebase.js +43 -0
  53. package/dist/commands/session-rebase.js.map +1 -0
  54. package/dist/commands/session-start.d.ts +8 -0
  55. package/dist/commands/session-start.d.ts.map +1 -1
  56. package/dist/commands/session-start.js +45 -5
  57. package/dist/commands/session-start.js.map +1 -1
  58. package/dist/commands/session-status.d.ts +17 -0
  59. package/dist/commands/session-status.d.ts.map +1 -0
  60. package/dist/commands/session-status.js +38 -0
  61. package/dist/commands/session-status.js.map +1 -0
  62. package/dist/commands/session-submit.d.ts +23 -0
  63. package/dist/commands/session-submit.d.ts.map +1 -0
  64. package/dist/commands/session-submit.js +42 -0
  65. package/dist/commands/session-submit.js.map +1 -0
  66. package/dist/commands/shared-stores-status.d.ts +24 -0
  67. package/dist/commands/shared-stores-status.d.ts.map +1 -0
  68. package/dist/commands/shared-stores-status.js +51 -0
  69. package/dist/commands/shared-stores-status.js.map +1 -0
  70. package/dist/commands/shared-stores-sync.d.ts +27 -0
  71. package/dist/commands/shared-stores-sync.d.ts.map +1 -0
  72. package/dist/commands/shared-stores-sync.js +115 -0
  73. package/dist/commands/shared-stores-sync.js.map +1 -0
  74. package/dist/commands/verify.d.ts.map +1 -1
  75. package/dist/commands/verify.js +2 -4
  76. package/dist/commands/verify.js.map +1 -1
  77. package/dist/config/schema.d.ts +16 -0
  78. package/dist/config/schema.d.ts.map +1 -1
  79. package/dist/config/schema.js +32 -0
  80. package/dist/config/schema.js.map +1 -1
  81. package/dist/core/agents-doc.d.ts +10 -0
  82. package/dist/core/agents-doc.d.ts.map +1 -1
  83. package/dist/core/agents-doc.js +26 -1
  84. package/dist/core/agents-doc.js.map +1 -1
  85. package/dist/core/approval/decision.d.ts +39 -1
  86. package/dist/core/approval/decision.d.ts.map +1 -1
  87. package/dist/core/approval/decision.js +53 -6
  88. package/dist/core/approval/decision.js.map +1 -1
  89. package/dist/core/approval/session-group.d.ts +156 -0
  90. package/dist/core/approval/session-group.d.ts.map +1 -0
  91. package/dist/core/approval/session-group.js +359 -0
  92. package/dist/core/approval/session-group.js.map +1 -0
  93. package/dist/core/approval/session-marker.d.ts +79 -0
  94. package/dist/core/approval/session-marker.d.ts.map +1 -0
  95. package/dist/core/approval/session-marker.js +146 -0
  96. package/dist/core/approval/session-marker.js.map +1 -0
  97. package/dist/core/approval/store-forges.d.ts +15 -0
  98. package/dist/core/approval/store-forges.d.ts.map +1 -0
  99. package/dist/core/approval/store-forges.js +33 -0
  100. package/dist/core/approval/store-forges.js.map +1 -0
  101. package/dist/core/browse/approve.d.ts +8 -0
  102. package/dist/core/browse/approve.d.ts.map +1 -1
  103. package/dist/core/browse/approve.js +366 -48
  104. package/dist/core/browse/approve.js.map +1 -1
  105. package/dist/core/browse/link-resolver.d.ts +9 -4
  106. package/dist/core/browse/link-resolver.d.ts.map +1 -1
  107. package/dist/core/browse/link-resolver.js +12 -7
  108. package/dist/core/browse/link-resolver.js.map +1 -1
  109. package/dist/core/browse/review.d.ts +5 -0
  110. package/dist/core/browse/review.d.ts.map +1 -1
  111. package/dist/core/browse/review.js +8 -0
  112. package/dist/core/browse/review.js.map +1 -1
  113. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  114. package/dist/core/checks/integrity-checks.js +7 -1
  115. package/dist/core/checks/integrity-checks.js.map +1 -1
  116. package/dist/core/checks/manifest.d.ts.map +1 -1
  117. package/dist/core/checks/manifest.js +2 -0
  118. package/dist/core/checks/manifest.js.map +1 -1
  119. package/dist/core/checks/shared-stores-checks.d.ts +17 -0
  120. package/dist/core/checks/shared-stores-checks.d.ts.map +1 -0
  121. package/dist/core/checks/shared-stores-checks.js +84 -0
  122. package/dist/core/checks/shared-stores-checks.js.map +1 -0
  123. package/dist/core/errors.d.ts +17 -0
  124. package/dist/core/errors.d.ts.map +1 -1
  125. package/dist/core/errors.js +21 -0
  126. package/dist/core/errors.js.map +1 -1
  127. package/dist/core/forge/github.d.ts +14 -0
  128. package/dist/core/forge/github.d.ts.map +1 -1
  129. package/dist/core/forge/github.js +17 -0
  130. package/dist/core/forge/github.js.map +1 -1
  131. package/dist/core/git/fast-forward.d.ts +23 -0
  132. package/dist/core/git/fast-forward.d.ts.map +1 -0
  133. package/dist/core/git/fast-forward.js +38 -0
  134. package/dist/core/git/fast-forward.js.map +1 -0
  135. package/dist/core/git/repo.d.ts +11 -0
  136. package/dist/core/git/repo.d.ts.map +1 -1
  137. package/dist/core/git/repo.js +25 -0
  138. package/dist/core/git/repo.js.map +1 -1
  139. package/dist/core/graph/model.d.ts +27 -0
  140. package/dist/core/graph/model.d.ts.map +1 -1
  141. package/dist/core/graph/model.js +68 -2
  142. package/dist/core/graph/model.js.map +1 -1
  143. package/dist/core/graph/persist.d.ts.map +1 -1
  144. package/dist/core/graph/persist.js +3 -2
  145. package/dist/core/graph/persist.js.map +1 -1
  146. package/dist/core/mcp/sessions.d.ts +11 -14
  147. package/dist/core/mcp/sessions.d.ts.map +1 -1
  148. package/dist/core/mcp/sessions.js +23 -43
  149. package/dist/core/mcp/sessions.js.map +1 -1
  150. package/dist/core/notes/list.d.ts.map +1 -1
  151. package/dist/core/notes/list.js +5 -0
  152. package/dist/core/notes/list.js.map +1 -1
  153. package/dist/core/reconcile.d.ts.map +1 -1
  154. package/dist/core/reconcile.js +2 -1
  155. package/dist/core/reconcile.js.map +1 -1
  156. package/dist/core/retrieval/pass.d.ts.map +1 -1
  157. package/dist/core/retrieval/pass.js +5 -4
  158. package/dist/core/retrieval/pass.js.map +1 -1
  159. package/dist/core/rollup.d.ts.map +1 -1
  160. package/dist/core/rollup.js +2 -3
  161. package/dist/core/rollup.js.map +1 -1
  162. package/dist/core/root.d.ts.map +1 -1
  163. package/dist/core/root.js +33 -2
  164. package/dist/core/root.js.map +1 -1
  165. package/dist/core/second-opinion/environment.d.ts +21 -0
  166. package/dist/core/second-opinion/environment.d.ts.map +1 -0
  167. package/dist/core/second-opinion/environment.js +70 -0
  168. package/dist/core/second-opinion/environment.js.map +1 -0
  169. package/dist/core/second-opinion/judge.d.ts +29 -0
  170. package/dist/core/second-opinion/judge.d.ts.map +1 -0
  171. package/dist/core/second-opinion/judge.js +55 -0
  172. package/dist/core/second-opinion/judge.js.map +1 -0
  173. package/dist/core/second-opinion/launch.d.ts +16 -0
  174. package/dist/core/second-opinion/launch.d.ts.map +1 -0
  175. package/dist/core/second-opinion/launch.js +75 -0
  176. package/dist/core/second-opinion/launch.js.map +1 -0
  177. package/dist/core/second-opinion/lineup.d.ts +82 -0
  178. package/dist/core/second-opinion/lineup.d.ts.map +1 -0
  179. package/dist/core/second-opinion/lineup.js +113 -0
  180. package/dist/core/second-opinion/lineup.js.map +1 -0
  181. package/dist/core/second-opinion/modes.d.ts +98 -0
  182. package/dist/core/second-opinion/modes.d.ts.map +1 -0
  183. package/dist/core/second-opinion/modes.js +224 -0
  184. package/dist/core/second-opinion/modes.js.map +1 -0
  185. package/dist/core/second-opinion/prompts.d.ts +18 -0
  186. package/dist/core/second-opinion/prompts.d.ts.map +1 -0
  187. package/dist/core/second-opinion/prompts.js +65 -0
  188. package/dist/core/second-opinion/prompts.js.map +1 -0
  189. package/dist/core/session/commit.d.ts +29 -0
  190. package/dist/core/session/commit.d.ts.map +1 -0
  191. package/dist/core/session/commit.js +22 -0
  192. package/dist/core/session/commit.js.map +1 -0
  193. package/dist/core/session/discard.d.ts +24 -0
  194. package/dist/core/session/discard.d.ts.map +1 -0
  195. package/dist/core/session/discard.js +68 -0
  196. package/dist/core/session/discard.js.map +1 -0
  197. package/dist/core/session/list.d.ts +48 -0
  198. package/dist/core/session/list.d.ts.map +1 -0
  199. package/dist/core/session/list.js +55 -0
  200. package/dist/core/session/list.js.map +1 -0
  201. package/dist/core/session/rebase.d.ts +34 -0
  202. package/dist/core/session/rebase.d.ts.map +1 -0
  203. package/dist/core/session/rebase.js +87 -0
  204. package/dist/core/session/rebase.js.map +1 -0
  205. package/dist/core/session/remote.d.ts +80 -0
  206. package/dist/core/session/remote.d.ts.map +1 -0
  207. package/dist/core/session/remote.js +102 -0
  208. package/dist/core/session/remote.js.map +1 -0
  209. package/dist/core/session/resolve.d.ts +41 -0
  210. package/dist/core/session/resolve.d.ts.map +1 -0
  211. package/dist/core/session/resolve.js +109 -0
  212. package/dist/core/session/resolve.js.map +1 -0
  213. package/dist/core/session/status.d.ts +47 -0
  214. package/dist/core/session/status.d.ts.map +1 -0
  215. package/dist/core/session/status.js +55 -0
  216. package/dist/core/session/status.js.map +1 -0
  217. package/dist/core/session/submit.d.ts +67 -0
  218. package/dist/core/session/submit.d.ts.map +1 -0
  219. package/dist/core/session/submit.js +254 -0
  220. package/dist/core/session/submit.js.map +1 -0
  221. package/dist/core/shared-stores-location.d.ts +17 -0
  222. package/dist/core/shared-stores-location.d.ts.map +1 -0
  223. package/dist/core/shared-stores-location.js +22 -0
  224. package/dist/core/shared-stores-location.js.map +1 -0
  225. package/dist/core/shared-stores.d.ts +69 -0
  226. package/dist/core/shared-stores.d.ts.map +1 -0
  227. package/dist/core/shared-stores.js +100 -0
  228. package/dist/core/shared-stores.js.map +1 -0
  229. package/dist/core/skills.d.ts.map +1 -1
  230. package/dist/core/skills.js +14 -10
  231. package/dist/core/skills.js.map +1 -1
  232. package/dist/run.d.ts.map +1 -1
  233. package/dist/run.js +122 -6
  234. package/dist/run.js.map +1 -1
  235. package/dist/version.d.ts +1 -1
  236. package/dist/version.js +1 -1
  237. package/package.json +1 -1
  238. package/templates/agents/shared-stores.md +11 -0
  239. package/templates/approve/copies-missing.md +1 -0
  240. package/templates/approve/elsewhere-heading.md +1 -0
  241. package/templates/approve/elsewhere-intro.md +1 -0
  242. package/templates/approve/homed-elsewhere.md +1 -0
  243. package/templates/approve/not-decider.md +1 -0
  244. package/templates/approve/part-heading.md +1 -0
  245. package/templates/approve/parts-changed.md +1 -0
  246. package/templates/approve/session-decision-note.md +1 -0
  247. package/templates/approve/session-intro.md +1 -0
  248. package/templates/approve/session-no-decision.md +1 -0
  249. package/templates/approve/store-unreachable.md +1 -0
  250. package/templates/land/resolver.md +2 -0
  251. package/templates/second-opinion/poll-answer.md +7 -0
  252. package/templates/second-opinion/taste-panel.md +14 -0
  253. package/templates/session/pages/bare-route.md +2 -0
  254. package/templates/session/pages/block.md +8 -0
  255. package/templates/session/pages/condition-preview.md +1 -0
  256. package/templates/session/pages/condition.md +1 -0
  257. package/templates/session/pages/moved.md +1 -0
  258. package/templates/session/pages/stops-working.md +1 -0
  259. package/templates/session/pages/table-head-preview.md +2 -0
  260. package/templates/session/pages/table-head.md +2 -0
  261. package/templates/skills/ctxr-connection-finding.md +4 -1
  262. package/templates/skills/ctxr-land.md +26 -7
  263. package/templates/skills/ctxr-placement.md +10 -0
  264. package/templates/skills/ctxr-rollup.md +3 -0
  265. package/templates/skills/ctxr-second-opinion.md +52 -36
  266. package/templates/skills/ctxr-session-lifecycle.md +60 -33
  267. package/templates/skills/ctxr-submit.md +65 -56
  268. package/templates/skills/ctxr-second-opinion/run.mjs +0 -542
  269. /package/templates/{skills/ctxr-second-opinion → second-opinion}/critic-contract.md +0 -0
  270. /package/templates/{skills/ctxr-second-opinion → second-opinion}/lenses.md +0 -0
  271. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/architect.md +0 -0
  272. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/pragmatist.md +0 -0
  273. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/skeptic.md +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/core/second-opinion/launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { SourceEnv } from './environment.js';
2
+ /**
3
+ * run-the-second-opinion-from-the-cli D1: the vendor CLI names and flags stay
4
+ * internal to this directory, behind contexture's own options (`--tier`,
5
+ * `--only`). The preflight still checks each CLI's help text for them, so a
6
+ * drifted flag fails loudly. Ported from the skill's `run.mjs`.
7
+ */
8
+ export declare const ALL_CLIS: readonly ['claude', 'codex', 'agy'];
9
+ export type Cli = (typeof ALL_CLIS)[number];
10
+ export declare const TIERS: readonly ['strong', 'fast'];
11
+ export type Tier = (typeof TIERS)[number];
12
+ export declare const ROLE_CLI: {
13
+ readonly architect: 'claude';
14
+ readonly skeptic: 'codex';
15
+ readonly pragmatist: 'agy';
16
+ };
17
+ export type Role = keyof typeof ROLE_CLI;
18
+ export declare const ROLES: Role[];
19
+ /** A second opinion needs at least this many valid answers, and this many CLIs requested. */
20
+ export declare const QUORUM = 2;
21
+ /** Linux caps one argv element at 128 KiB; agy is the only CLI given its prompt as argv. */
22
+ export declare const MAX_ARGV_BYTES = 120000;
23
+ interface CliModel {
24
+ model: string;
25
+ effort?: string | null;
26
+ }
27
+ /**
28
+ * Model choice lives here, in one table. Override by environment, never by editing a store.
29
+ *
30
+ * The tiers name a class of model, not a price. `strong` is each family's frontier model and `fast` its
31
+ * workhorse: claude `fable` and `opus`; codex `gpt-6-astra` ("frontier intelligence") and `gpt-6.1-sol`
32
+ * ("latest workhorse"), as codex's model catalog described them on 2026-10-15; agy `Gemini 4 Argon` and
33
+ * `Gemini 3.8 Flash`, once agy offered Argon (2026-10-19). The tiers differ in model only: every model runs at
34
+ * its provider's default effort.
35
+ *
36
+ * Effort is each provider's own recommended default, not one this command picked:
37
+ * - claude: no --effort at all, so Claude Code applies its own default for the model.
38
+ * - codex: the default its model catalog declares (`default_reasoning_level`), which was `low` for both
39
+ * gpt-6-astra and gpt-6.1-sol on 2026-10-15. It is passed explicitly because the flag cannot simply be
40
+ * left off: with no pin in config.toml, codex resolves to `reasoning effort: none` on a ChatGPT login
41
+ * (seen 2026-10-05), which is no review at all. Set CTXR_SECOND_OPINION_CODEX_EFFORT to use another.
42
+ * - agy: the effort is part of the model name. The default thinking level is `(Medium)` for Gemini 4 Argon
43
+ * and `(High)` for Gemini 3.8 Flash. agy rejects an unknown name, and preflight tests it.
44
+ */
45
+ export declare function tiers(source: SourceEnv): Record<Tier, Record<Cli, CliModel>>;
46
+ /**
47
+ * The flags this command passes, so preflight can confirm each CLI's --help still lists them. Only flags
48
+ * the help text documents belong here: `claude` still accepts a hidden --max-turns, but with `--tools ""`
49
+ * there is no tool turn to bound, so it is not passed at all. --effort is not listed because it is only
50
+ * passed when the environment asks for one.
51
+ */
52
+ export declare const FLAGS_USED: Record<Cli, {
53
+ helpArgs: string[];
54
+ flags: string[];
55
+ }>;
56
+ export interface Invocation {
57
+ cmd: Cli;
58
+ args: string[];
59
+ stdin: string;
60
+ }
61
+ /**
62
+ * How each family is contained. Only claude and codex offer a mode that removes the ability to
63
+ * act; agy does not (its headless plan mode still wrote a file), so it is held to an empty working
64
+ * directory and an untrusted plan should run without it.
65
+ */
66
+ export declare function buildInvocation(cli: Cli, prompt: string, tier: Tier, source: SourceEnv): Invocation;
67
+ /** Normalizes a CLI's raw output to answer text plus the model it says it ran. */
68
+ export declare function normalize(cli: Cli, raw: {
69
+ stdout: string;
70
+ stderr: string;
71
+ }): {
72
+ text: string;
73
+ model: string | null;
74
+ };
75
+ /**
76
+ * Codex wraps its answer in a session banner and repeats it after a `tokens used` trailer.
77
+ * The answer starts at the first line of the required shape; failing that, the trailer is cut and
78
+ * everything else is kept, so real content is never eaten.
79
+ */
80
+ export declare function stripCodexNoise(text: string): string;
81
+ export {};
82
+ //# sourceMappingURL=lineup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineup.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/lineup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,YAAI,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C,eAAO,MAAM,KAAK,YAAI,QAAQ,EAAE,MAAM,CAAU,CAAC;AACjD,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,eAAO,MAAM,QAAQ;wBAAgB,QAAQ;sBAAW,OAAO;yBAAc,KAAK;CAAyC,CAAC;AAC5H,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,QAAQ,CAAC;AACzC,eAAO,MAAM,KAAK,EAA4B,IAAI,EAAE,CAAC;AAErD,6FAA6F;AAC7F,eAAO,MAAM,MAAM,IAAI,CAAC;AAExB,4FAA4F;AAC5F,eAAO,MAAM,cAAc,SAAU,CAAC;AAEtC,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAc5E;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAI3E,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU,CAcnG;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAenH;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * run-the-second-opinion-from-the-cli D1: the vendor CLI names and flags stay
3
+ * internal to this directory, behind contexture's own options (`--tier`,
4
+ * `--only`). The preflight still checks each CLI's help text for them, so a
5
+ * drifted flag fails loudly. Ported from the skill's `run.mjs`.
6
+ */
7
+ export const ALL_CLIS = ['claude', 'codex', 'agy'];
8
+ export const TIERS = ['strong', 'fast'];
9
+ export const ROLE_CLI = { architect: 'claude', skeptic: 'codex', pragmatist: 'agy' };
10
+ export const ROLES = Object.keys(ROLE_CLI);
11
+ /** A second opinion needs at least this many valid answers, and this many CLIs requested. */
12
+ export const QUORUM = 2;
13
+ /** Linux caps one argv element at 128 KiB; agy is the only CLI given its prompt as argv. */
14
+ export const MAX_ARGV_BYTES = 120_000;
15
+ /**
16
+ * Model choice lives here, in one table. Override by environment, never by editing a store.
17
+ *
18
+ * The tiers name a class of model, not a price. `strong` is each family's frontier model and `fast` its
19
+ * workhorse: claude `fable` and `opus`; codex `gpt-6-astra` ("frontier intelligence") and `gpt-6.1-sol`
20
+ * ("latest workhorse"), as codex's model catalog described them on 2026-10-15; agy `Gemini 4 Argon` and
21
+ * `Gemini 3.8 Flash`, once agy offered Argon (2026-10-19). The tiers differ in model only: every model runs at
22
+ * its provider's default effort.
23
+ *
24
+ * Effort is each provider's own recommended default, not one this command picked:
25
+ * - claude: no --effort at all, so Claude Code applies its own default for the model.
26
+ * - codex: the default its model catalog declares (`default_reasoning_level`), which was `low` for both
27
+ * gpt-6-astra and gpt-6.1-sol on 2026-10-15. It is passed explicitly because the flag cannot simply be
28
+ * left off: with no pin in config.toml, codex resolves to `reasoning effort: none` on a ChatGPT login
29
+ * (seen 2026-10-05), which is no review at all. Set CTXR_SECOND_OPINION_CODEX_EFFORT to use another.
30
+ * - agy: the effort is part of the model name. The default thinking level is `(Medium)` for Gemini 4 Argon
31
+ * and `(High)` for Gemini 3.8 Flash. agy rejects an unknown name, and preflight tests it.
32
+ */
33
+ export function tiers(source) {
34
+ const env = (name, fallback) => source[`CTXR_SECOND_OPINION_${name}`] || fallback;
35
+ return {
36
+ strong: {
37
+ claude: { model: env('CLAUDE_MODEL', 'fable'), effort: env('CLAUDE_EFFORT', null) },
38
+ codex: { model: env('CODEX_MODEL', 'gpt-6-astra'), effort: env('CODEX_EFFORT', 'low') },
39
+ agy: { model: env('AGY_MODEL', 'Gemini 4 Argon (Medium)') },
40
+ },
41
+ fast: {
42
+ claude: { model: env('CLAUDE_MODEL', 'opus'), effort: env('CLAUDE_EFFORT', null) },
43
+ codex: { model: env('CODEX_MODEL', 'gpt-6.1-sol'), effort: env('CODEX_EFFORT', 'low') },
44
+ agy: { model: env('AGY_MODEL', 'Gemini 3.8 Flash (High)') },
45
+ },
46
+ };
47
+ }
48
+ /**
49
+ * The flags this command passes, so preflight can confirm each CLI's --help still lists them. Only flags
50
+ * the help text documents belong here: `claude` still accepts a hidden --max-turns, but with `--tools ""`
51
+ * there is no tool turn to bound, so it is not passed at all. --effort is not listed because it is only
52
+ * passed when the environment asks for one.
53
+ */
54
+ export const FLAGS_USED = {
55
+ claude: { helpArgs: ['--help'], flags: ['--tools', '--model', '--no-session-persistence', '--disable-slash-commands', '--output-format'] },
56
+ codex: { helpArgs: ['exec', '--help'], flags: ['--skip-git-repo-check', '--sandbox', '--ephemeral', '--color', '--config', '--model'] },
57
+ agy: { helpArgs: ['--help'], flags: ['--print', '--sandbox', '--disable-slash-commands', '--model'] },
58
+ };
59
+ /**
60
+ * How each family is contained. Only claude and codex offer a mode that removes the ability to
61
+ * act; agy does not (its headless plan mode still wrote a file), so it is held to an empty working
62
+ * directory and an untrusted plan should run without it.
63
+ */
64
+ export function buildInvocation(cli, prompt, tier, source) {
65
+ const t = tiers(source)[tier][cli];
66
+ if (cli === 'claude') {
67
+ const args = ['-p', '--tools', '', '--model', t.model, '--no-session-persistence', '--disable-slash-commands', '--output-format', 'json'];
68
+ if (t.effort)
69
+ args.push('--effort', t.effort);
70
+ return { cmd: 'claude', args, stdin: prompt };
71
+ }
72
+ if (cli === 'codex') {
73
+ const args = ['exec', '--skip-git-repo-check', '--sandbox', 'read-only', '--ephemeral', '--color', 'never', '--model', t.model];
74
+ if (t.effort)
75
+ args.push('-c', `model_reasoning_effort=${t.effort}`);
76
+ args.push('-');
77
+ return { cmd: 'codex', args, stdin: prompt };
78
+ }
79
+ return { cmd: 'agy', args: ['-p', prompt, '--sandbox', '--disable-slash-commands', '--model', t.model], stdin: '' };
80
+ }
81
+ /** Normalizes a CLI's raw output to answer text plus the model it says it ran. */
82
+ export function normalize(cli, raw) {
83
+ if (cli === 'claude') {
84
+ try {
85
+ const j = JSON.parse(raw.stdout);
86
+ const models = Object.keys(j.modelUsage ?? {});
87
+ return { text: String(j.result ?? '').trim(), model: models.length ? models.join(', ') : null };
88
+ }
89
+ catch {
90
+ return { text: raw.stdout.trim(), model: null };
91
+ }
92
+ }
93
+ if (cli === 'codex') {
94
+ const model = /^model:\s*(.+)$/m.exec(`${raw.stdout}\n${raw.stderr}`)?.[1]?.trim() ?? null;
95
+ return { text: stripCodexNoise(raw.stdout), model };
96
+ }
97
+ return { text: raw.stdout.trim(), model: null };
98
+ }
99
+ /**
100
+ * Codex wraps its answer in a session banner and repeats it after a `tokens used` trailer.
101
+ * The answer starts at the first line of the required shape; failing that, the trailer is cut and
102
+ * everything else is kept, so real content is never eaten.
103
+ */
104
+ export function stripCodexNoise(text) {
105
+ const lines = text.split('\n');
106
+ const start = lines.findIndex((l) => /^## (Role|Verdict):/.test(l));
107
+ let body = start >= 0 ? lines.slice(start) : lines;
108
+ const trailer = body.findIndex((l) => /^tokens used\b/i.test(l.trim()));
109
+ if (trailer >= 0)
110
+ body = body.slice(0, trailer);
111
+ return body.join('\n').trim();
112
+ }
113
+ //# sourceMappingURL=lineup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineup.js","sourceRoot":"","sources":["../../../src/core/second-opinion/lineup.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAG5D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAyC,CAAC;AAE5H,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAW,CAAC;AAErD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AAExB,4FAA4F;AAC5F,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAOtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,KAAK,CAAC,MAAiB;IACrC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,QAAuB,EAAiB,EAAE,CAAC,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;IACxH,OAAO;QACL,MAAM,EAAE;YACN,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,OAAO,CAAE,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE;YACpF,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE,aAAa,CAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE;YACxF,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,yBAAyB,CAAE,EAAE;SAC7D;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,CAAE,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE;YACnF,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE,aAAa,CAAE,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE;YACxF,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,yBAAyB,CAAE,EAAE;SAC7D;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAyD;IAC9E,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,iBAAiB,CAAC,EAAE;IAC1I,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,uBAAuB,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;IACvI,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE,SAAS,CAAC,EAAE;CACtG,CAAC;AAQF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAQ,EAAE,MAAc,EAAE,IAAU,EAAE,MAAiB;IACrF,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC1I,IAAI,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChI,IAAI,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,GAAQ,EAAE,GAAuC;IACzE,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAA+D,CAAC;YAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC3F,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { type SourceEnv } from './environment.js';
2
+ import { type Cli, type Role, type Tier } from './lineup.js';
3
+ /**
4
+ * run-the-second-opinion-from-the-cli: the three modes of `ctxr second-opinion`,
5
+ * ported from the skill's `run.mjs`. Behaviour is the script's; what changed is
6
+ * the exit-code mapping (D2, done by the command) and the child environment
7
+ * (D3, built here once per run). Each mode returns the lines the script
8
+ * printed to stdout, plus a structured result for `--json`.
9
+ */
10
+ export interface SecondOpinionContext {
11
+ /** The command's own environment: the source the allowlist filters, and where the lineup overrides are read. */
12
+ source: SourceEnv;
13
+ cwd: string;
14
+ home: string;
15
+ /** Progress narration, for stderr. */
16
+ progress(line: string): void;
17
+ /** Piped standard input, or null when stdin is a terminal. */
18
+ readStdin(): Promise<string | null>;
19
+ }
20
+ export interface CommonOptions {
21
+ tier?: string;
22
+ timeout?: string;
23
+ only?: string;
24
+ }
25
+ export interface PreflightEntry {
26
+ cli: Cli;
27
+ ok: boolean;
28
+ detail: string;
29
+ }
30
+ export interface PreflightResult {
31
+ tier: Tier;
32
+ ok: boolean;
33
+ clis: PreflightEntry[];
34
+ /** On a failing preflight only: the variables withheld from the CLIs, by name. Never values. */
35
+ withheld?: string[];
36
+ lines: string[];
37
+ }
38
+ export declare function preflight(ctx: SecondOpinionContext, opts: CommonOptions): Promise<PreflightResult>;
39
+ export interface CritiqueOptions extends CommonOptions {
40
+ planFile?: string;
41
+ out?: string;
42
+ seed?: string;
43
+ }
44
+ export interface CritiqueEntry {
45
+ letter: string | null;
46
+ role: Role;
47
+ cli: Cli;
48
+ model_reported: string | null;
49
+ status: 'valid' | 'blind' | 'failed';
50
+ cause: string | null;
51
+ verdict: string | null;
52
+ findings: number;
53
+ veto: boolean;
54
+ duration_ms: number;
55
+ }
56
+ export interface CritiqueManifest {
57
+ mode: 'critique';
58
+ tier: Tier;
59
+ quorum: number;
60
+ critiques: CritiqueEntry[];
61
+ valid: number;
62
+ partial: boolean;
63
+ }
64
+ export interface CritiqueResult {
65
+ out: string;
66
+ manifest: CritiqueManifest;
67
+ lines: string[];
68
+ }
69
+ export declare function critique(ctx: SecondOpinionContext, opts: CritiqueOptions): Promise<CritiqueResult>;
70
+ export interface PollOptions extends CommonOptions {
71
+ promptFile?: string;
72
+ out?: string;
73
+ lens?: string;
74
+ /** False with `--no-wrap`: the question goes out without the answer scaffold. */
75
+ wrap?: boolean;
76
+ }
77
+ export interface PollAnswer {
78
+ cli: Cli;
79
+ status: 'valid' | 'failed';
80
+ cause: string | null;
81
+ model: string | null;
82
+ }
83
+ export interface PollManifest {
84
+ mode: 'poll';
85
+ tier: Tier;
86
+ lens: string | null;
87
+ quorum: number;
88
+ valid: number;
89
+ partial: boolean;
90
+ answers: PollAnswer[];
91
+ }
92
+ export interface PollResult {
93
+ out: string;
94
+ manifest: PollManifest;
95
+ lines: string[];
96
+ }
97
+ export declare function poll(ctx: SecondOpinionContext, opts: PollOptions): Promise<PollResult>;
98
+ //# sourceMappingURL=modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/modes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ import { mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import path from 'node:path';
4
+ import { SecondOpinionUsageError } from '../errors.js';
5
+ import { childEnvironment, PASS_ENV_VARIABLE, protectedPassThroughNames } from './environment.js';
6
+ import { judgeCritique } from './judge.js';
7
+ import { firstLines, runCli } from './launch.js';
8
+ import { ALL_CLIS, buildInvocation, FLAGS_USED, MAX_ARGV_BYTES, normalize, QUORUM, ROLE_CLI, ROLES, TIERS, tiers } from './lineup.js';
9
+ import { critiquePrompt, pollPrompt } from './prompts.js';
10
+ /** Every refusal happens here, before any CLI launches. */
11
+ function resolve(ctx, opts, needQuorum) {
12
+ const tier = (opts.tier ?? 'strong');
13
+ if (!TIERS.includes(tier))
14
+ throw new SecondOpinionUsageError('--tier is strong or fast');
15
+ const timeout = opts.timeout === undefined ? 600 : Number(opts.timeout);
16
+ if (!Number.isFinite(timeout) || timeout <= 0)
17
+ throw new SecondOpinionUsageError('--timeout must be a positive number of seconds');
18
+ let clis = [...ALL_CLIS];
19
+ if (opts.only !== undefined) {
20
+ const named = opts.only.split(',').map((c) => c.trim()).filter(Boolean);
21
+ const bad = named.filter((c) => !ALL_CLIS.includes(c));
22
+ if (bad.length)
23
+ throw new SecondOpinionUsageError(`unknown CLI in --only: ${bad.join(', ')} (valid: ${ALL_CLIS.join(', ')})`);
24
+ clis = [...new Set(named)];
25
+ }
26
+ if (needQuorum && clis.length < QUORUM) {
27
+ throw new SecondOpinionUsageError(`--only names ${clis.length} CLI; a second opinion needs at least ${QUORUM}`);
28
+ }
29
+ // D3 and Revisions after critique 1: the protected prefixes win over the pass-through, and naming one stops the run.
30
+ const refused = protectedPassThroughNames(ctx.source);
31
+ if (refused.length) {
32
+ throw new SecondOpinionUsageError(`${PASS_ENV_VARIABLE} names ${refused.join(', ')}; forge and contexture variables are never passed to a model CLI`, { variables: refused });
33
+ }
34
+ const { env, withheld } = childEnvironment(ctx.source, ctx.home);
35
+ return { tier, timeout, clis, env, withheld };
36
+ }
37
+ export async function preflight(ctx, opts) {
38
+ const r = resolve(ctx, opts, false);
39
+ const results = await Promise.all(r.clis.map(async (cli) => {
40
+ const spec = FLAGS_USED[cli];
41
+ const help = await runCli(cli, spec.helpArgs, '', 30, r.env);
42
+ if (!help.ok)
43
+ return { cli, ok: false, detail: help.cause ?? 'failed' };
44
+ const helpText = help.stdout + help.stderr;
45
+ const missing = spec.flags.filter((f) => !helpText.includes(f));
46
+ // The ping runs at the tier the run will use. A fixed tier left the other tier's model untested, so a
47
+ // model name agy no longer accepted passed preflight and failed the critique (2026-10-13).
48
+ const inv = buildInvocation(cli, 'say PONG only', r.tier, ctx.source);
49
+ const ping = await runCli(inv.cmd, inv.args, inv.stdin, Math.min(r.timeout, 60), r.env);
50
+ if (!ping.ok)
51
+ return { cli, ok: false, detail: ping.cause ?? 'failed' };
52
+ const { text } = normalize(cli, ping);
53
+ if (!/pong/i.test(text))
54
+ return { cli, ok: false, detail: `unexpected reply: ${firstLines(text, 2)}` };
55
+ if (missing.length)
56
+ return { cli, ok: false, detail: `answers, but its --help no longer lists: ${missing.join(' ')}` };
57
+ const model = tiers(ctx.source)[r.tier][cli].model;
58
+ return { cli, ok: true, detail: model ? `PONG (${model})` : 'PONG' };
59
+ }));
60
+ const ok = results.every((x) => x.ok);
61
+ const lines = results.map((x) => `[${x.ok ? 'OK ' : 'DOWN'}] ${x.cli.padEnd(7)} ${x.detail}`);
62
+ if (!ok) {
63
+ lines.push('', 'At least one CLI is down. Re-authenticate it, or run with --only on the ones that are up.');
64
+ // D3: a variable the allowlist dropped may be what a CLI needed. Names only, never values.
65
+ if (r.withheld.length) {
66
+ lines.push(`Withheld from the CLIs: ${r.withheld.join(', ')}. To pass one through, name it in ${PASS_ENV_VARIABLE}.`);
67
+ }
68
+ }
69
+ return { tier: r.tier, ok, clis: results, ...(ok ? {} : { withheld: r.withheld }), lines };
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Input and output.
73
+ // ---------------------------------------------------------------------------
74
+ async function readInput(ctx, file, flag) {
75
+ if (file !== undefined) {
76
+ const absolute = path.resolve(ctx.cwd, file);
77
+ try {
78
+ return readFileSync(absolute, 'utf8');
79
+ }
80
+ catch (err) {
81
+ throw new SecondOpinionUsageError(`cannot read ${file}: ${err instanceof Error ? err.message : String(err)}`);
82
+ }
83
+ }
84
+ const piped = await ctx.readStdin();
85
+ if (piped !== null && piped.trim())
86
+ return piped;
87
+ throw new SecondOpinionUsageError(`no input: pass ${flag} PATH or pipe it on stdin`);
88
+ }
89
+ function outDir(ctx, out) {
90
+ const dir = out !== undefined ? path.resolve(ctx.cwd, out) : mkdtempSync(path.join(tmpdir(), 'ctxr-second-opinion-out-'));
91
+ mkdirSync(path.join(dir, 'raw'), { recursive: true });
92
+ return dir;
93
+ }
94
+ function rng(seed) {
95
+ if (seed === null || Number.isNaN(seed))
96
+ return Math.random;
97
+ let a = seed >>> 0; // mulberry32: deterministic, for tests
98
+ return () => {
99
+ a = (a + 0x6d2b79f5) >>> 0;
100
+ let t = a;
101
+ t = Math.imul(t ^ (t >>> 15), t | 1);
102
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
103
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
104
+ };
105
+ }
106
+ function shuffled(items, random) {
107
+ const a = [...items];
108
+ for (let i = a.length - 1; i > 0; i--) {
109
+ const j = Math.floor(random() * (i + 1));
110
+ [a[i], a[j]] = [a[j], a[i]];
111
+ }
112
+ return a;
113
+ }
114
+ const tooLong = (prompt, cause) => Buffer.byteLength(prompt) > MAX_ARGV_BYTES ? { ok: false, stdout: '', stderr: '', cause } : null;
115
+ export async function critique(ctx, opts) {
116
+ const r = resolve(ctx, opts, true);
117
+ const seed = opts.seed === undefined ? null : Number(opts.seed);
118
+ const plan = await readInput(ctx, opts.planFile, '--plan-file');
119
+ const roles = ROLES.filter((role) => r.clis.includes(ROLE_CLI[role]));
120
+ const dir = outDir(ctx, opts.out);
121
+ ctx.progress(`plan: ${plan.length} characters (about ${Math.ceil(plan.length / 4)} tokens) · tier: ${r.tier} · critics: ${roles.length} · each may take 1-3 minutes`);
122
+ const runs = await Promise.all(roles.map(async (role) => {
123
+ const cli = ROLE_CLI[role];
124
+ const prompt = critiquePrompt(role, plan);
125
+ const started = Date.now();
126
+ let raw;
127
+ const refused = cli === 'agy' ? tooLong(prompt, `prompt is ${Buffer.byteLength(prompt)} bytes; agy takes it as one argument and the limit is ${MAX_ARGV_BYTES}`) : null;
128
+ if (refused)
129
+ raw = refused;
130
+ else {
131
+ const inv = buildInvocation(cli, prompt, r.tier, ctx.source);
132
+ raw = await runCli(inv.cmd, inv.args, inv.stdin, r.timeout, r.env);
133
+ }
134
+ writeFileSync(path.join(dir, 'raw', `${role}-${cli}.txt`), `${raw.stdout}\n--- stderr ---\n${raw.stderr}\n`);
135
+ const base = { role, cli, duration_ms: Date.now() - started };
136
+ if (!raw.ok)
137
+ return { ...base, status: 'failed', cause: raw.cause ?? null, model: null, text: '', verdict: null, findings: 0, veto: false };
138
+ const { text, model } = normalize(cli, raw);
139
+ const judged = judgeCritique(text, plan);
140
+ return { ...base, status: judged.status, cause: judged.cause, model, text, verdict: judged.verdict, findings: judged.findings.length, veto: judged.veto };
141
+ }));
142
+ // Letters go to every critique that produced text (valid or blind), in an order that does not follow the roster.
143
+ const answered = runs.filter((x) => x.status !== 'failed');
144
+ const letters = shuffled(answered, rng(seed)).map((x, i) => ({ ...x, letter: String.fromCharCode(65 + i) }));
145
+ for (const x of letters)
146
+ writeFileSync(path.join(dir, `critique-${x.letter}.md`), `${x.text}\n`);
147
+ const valid = runs.filter((x) => x.status === 'valid').length;
148
+ const manifest = {
149
+ mode: 'critique',
150
+ tier: r.tier,
151
+ quorum: QUORUM,
152
+ critiques: runs.map((x) => ({
153
+ letter: letters.find((l) => l.role === x.role)?.letter ?? null,
154
+ role: x.role,
155
+ cli: x.cli,
156
+ model_reported: x.model,
157
+ status: x.status,
158
+ cause: x.cause,
159
+ verdict: x.verdict,
160
+ findings: x.findings,
161
+ veto: x.veto,
162
+ duration_ms: x.duration_ms,
163
+ })),
164
+ valid,
165
+ partial: valid < QUORUM,
166
+ };
167
+ writeFileSync(path.join(dir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`);
168
+ // stdout names letters, never roles or models; a failed critic has no letter and is named by CLI, since that is what to fix.
169
+ const lines = [`out: ${dir}`, `valid: ${valid} blind: ${runs.filter((x) => x.status === 'blind').length} failed: ${runs.filter((x) => x.status === 'failed').length}`];
170
+ for (const x of [...letters].sort((a, b) => a.letter.localeCompare(b.letter))) {
171
+ lines.push(` ${x.letter} ${x.status} ${x.verdict ?? '-'} findings=${x.findings}${x.veto ? ' veto' : ''}`);
172
+ }
173
+ for (const x of runs.filter((y) => y.status === 'failed'))
174
+ lines.push(` failed ${x.cli} ${x.cause}`);
175
+ if (manifest.partial)
176
+ lines.push(`PARTIAL: fewer than ${QUORUM} valid critiques. Report this as a partial result, not a consensus.`);
177
+ lines.push(`Read the critique files first; open ${path.join(dir, 'manifest.json')} last.`);
178
+ return { out: dir, manifest, lines };
179
+ }
180
+ export async function poll(ctx, opts) {
181
+ const r = resolve(ctx, opts, true);
182
+ const question = await readInput(ctx, opts.promptFile, '--prompt-file');
183
+ const prompt = pollPrompt(question, { lens: opts.lens, wrap: opts.wrap !== false });
184
+ const dir = outDir(ctx, opts.out);
185
+ ctx.progress(`question: ${question.length} characters · tier: ${r.tier} · models: ${r.clis.length}${opts.lens ? ` · lenses: ${opts.lens}` : ''}`);
186
+ const runs = await Promise.all(r.clis.map(async (cli) => {
187
+ let raw;
188
+ const refused = cli === 'agy' ? tooLong(prompt, `prompt exceeds the ${MAX_ARGV_BYTES}-byte argument limit`) : null;
189
+ if (refused)
190
+ raw = refused;
191
+ else {
192
+ const inv = buildInvocation(cli, prompt, r.tier, ctx.source);
193
+ raw = await runCli(inv.cmd, inv.args, inv.stdin, r.timeout, r.env);
194
+ }
195
+ writeFileSync(path.join(dir, 'raw', `poll-${cli}.txt`), `${raw.stdout}\n--- stderr ---\n${raw.stderr}\n`);
196
+ if (!raw.ok)
197
+ return { cli, status: 'failed', cause: raw.cause ?? null, model: null, text: '' };
198
+ const { text, model } = normalize(cli, raw);
199
+ if (!text)
200
+ return { cli, status: 'failed', cause: 'empty output', model, text };
201
+ return { cli, status: 'valid', cause: null, model, text };
202
+ }));
203
+ // A poll is read model against model (the lens grid's columns are models), so files are named by model here.
204
+ for (const x of runs.filter((y) => y.status === 'valid'))
205
+ writeFileSync(path.join(dir, `poll-${x.cli}.md`), `${x.text}\n`);
206
+ const valid = runs.filter((x) => x.status === 'valid').length;
207
+ const manifest = {
208
+ mode: 'poll',
209
+ tier: r.tier,
210
+ lens: opts.lens ?? null,
211
+ quorum: QUORUM,
212
+ valid,
213
+ partial: valid < QUORUM,
214
+ answers: runs.map(({ text: _text, ...rest }) => rest),
215
+ };
216
+ writeFileSync(path.join(dir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`);
217
+ const lines = [`out: ${dir}`, `valid: ${valid} failed: ${runs.length - valid}`];
218
+ for (const x of runs)
219
+ lines.push(` ${x.cli} ${x.status}${x.cause ? ` ${x.cause}` : ''}${x.model ? ` model=${x.model}` : ''}`);
220
+ if (manifest.partial)
221
+ lines.push(`PARTIAL: fewer than ${QUORUM} answers. Report it as a partial result.`);
222
+ return { out: dir, manifest, lines };
223
+ }
224
+ //# sourceMappingURL=modes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.js","sourceRoot":"","sources":["../../../src/core/second-opinion/modes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Role } from './lineup.js';
2
+ export declare function critiquePrompt(role: Role, plan: string): string;
3
+ /** The built-in lenses, by name, from the roster's `- **name** — description` lines. */
4
+ export declare function lensRoster(): Map<string, string>;
5
+ /**
6
+ * Splits `--lens` into one string per lens. Lenses are comma-separated, but an inline description may itself
7
+ * contain commas: a fragment starts a NEW lens only when it is exactly a roster name or begins `Name:`;
8
+ * any other fragment continues the lens before it. So `minimalist,House taste:blunt, anti-slogan` is two
9
+ * lenses, and a description must not contain a colon (that would read as the start of another lens).
10
+ */
11
+ export declare function splitLenses(spec: string, roster: ReadonlyMap<string, string>): string[];
12
+ /** One `- name — description` line per lens; refuses an unknown lens and a count outside two to three. */
13
+ export declare function lensLines(spec: string): string[];
14
+ export declare function pollPrompt(question: string, opts: {
15
+ lens?: string;
16
+ wrap: boolean;
17
+ }): string;
18
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAUxC,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wFAAwF;AACxF,wBAAgB,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIhD;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAQvF;AAED,0GAA0G;AAC1G,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAehD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAM3F"}