ctxr-cli 0.37.0 → 0.39.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 (109) hide show
  1. package/README.md +15 -4
  2. package/dist/commands/land.d.ts +5 -0
  3. package/dist/commands/land.d.ts.map +1 -1
  4. package/dist/commands/land.js +12 -3
  5. package/dist/commands/land.js.map +1 -1
  6. package/dist/commands/review-list.d.ts +5 -1
  7. package/dist/commands/review-list.d.ts.map +1 -1
  8. package/dist/commands/review-list.js +2 -2
  9. package/dist/commands/review-list.js.map +1 -1
  10. package/dist/commands/second-opinion.d.ts +6 -2
  11. package/dist/commands/second-opinion.d.ts.map +1 -1
  12. package/dist/commands/second-opinion.js.map +1 -1
  13. package/dist/commands/serve.d.ts +2 -0
  14. package/dist/commands/serve.d.ts.map +1 -1
  15. package/dist/commands/serve.js +1 -1
  16. package/dist/commands/serve.js.map +1 -1
  17. package/dist/commands/session-list.d.ts +2 -0
  18. package/dist/commands/session-list.d.ts.map +1 -1
  19. package/dist/commands/session-list.js +1 -1
  20. package/dist/commands/session-list.js.map +1 -1
  21. package/dist/commands/session-start.d.ts.map +1 -1
  22. package/dist/commands/session-start.js +2 -1
  23. package/dist/commands/session-start.js.map +1 -1
  24. package/dist/commands/session-submit.d.ts +9 -1
  25. package/dist/commands/session-submit.d.ts.map +1 -1
  26. package/dist/commands/session-submit.js +1 -1
  27. package/dist/commands/session-submit.js.map +1 -1
  28. package/dist/commands/shared-stores-status.d.ts +9 -1
  29. package/dist/commands/shared-stores-status.d.ts.map +1 -1
  30. package/dist/commands/shared-stores-status.js +13 -7
  31. package/dist/commands/shared-stores-status.js.map +1 -1
  32. package/dist/commands/shared-stores-sync.d.ts +13 -0
  33. package/dist/commands/shared-stores-sync.d.ts.map +1 -1
  34. package/dist/commands/shared-stores-sync.js +60 -13
  35. package/dist/commands/shared-stores-sync.js.map +1 -1
  36. package/dist/commands/sync.d.ts +3 -0
  37. package/dist/commands/sync.d.ts.map +1 -1
  38. package/dist/commands/sync.js +9 -7
  39. package/dist/commands/sync.js.map +1 -1
  40. package/dist/commands/update.d.ts.map +1 -1
  41. package/dist/commands/update.js +8 -5
  42. package/dist/commands/update.js.map +1 -1
  43. package/dist/core/approval/session-group.d.ts +10 -1
  44. package/dist/core/approval/session-group.d.ts.map +1 -1
  45. package/dist/core/approval/session-group.js +4 -0
  46. package/dist/core/approval/session-group.js.map +1 -1
  47. package/dist/core/errors.d.ts +9 -0
  48. package/dist/core/errors.d.ts.map +1 -1
  49. package/dist/core/errors.js +11 -0
  50. package/dist/core/errors.js.map +1 -1
  51. package/dist/core/forge/credentials.d.ts +23 -3
  52. package/dist/core/forge/credentials.d.ts.map +1 -1
  53. package/dist/core/forge/credentials.js +99 -5
  54. package/dist/core/forge/credentials.js.map +1 -1
  55. package/dist/core/forge/github.d.ts +2 -0
  56. package/dist/core/forge/github.d.ts.map +1 -1
  57. package/dist/core/forge/github.js +1 -0
  58. package/dist/core/forge/github.js.map +1 -1
  59. package/dist/core/git/worktree.d.ts +6 -1
  60. package/dist/core/git/worktree.d.ts.map +1 -1
  61. package/dist/core/git/worktree.js +7 -2
  62. package/dist/core/git/worktree.js.map +1 -1
  63. package/dist/core/mcp/tool-map.d.ts +12 -1
  64. package/dist/core/mcp/tool-map.d.ts.map +1 -1
  65. package/dist/core/mcp/tool-map.js +15 -0
  66. package/dist/core/mcp/tool-map.js.map +1 -1
  67. package/dist/core/mcp/tools/cli.d.ts +6 -0
  68. package/dist/core/mcp/tools/cli.d.ts.map +1 -1
  69. package/dist/core/mcp/tools/cli.js +77 -4
  70. package/dist/core/mcp/tools/cli.js.map +1 -1
  71. package/dist/core/mcp/tools/index.d.ts +2 -0
  72. package/dist/core/mcp/tools/index.d.ts.map +1 -1
  73. package/dist/core/mcp/tools/index.js +1 -1
  74. package/dist/core/mcp/tools/index.js.map +1 -1
  75. package/dist/core/plugin/commands.d.ts.map +1 -1
  76. package/dist/core/plugin/commands.js +2 -0
  77. package/dist/core/plugin/commands.js.map +1 -1
  78. package/dist/core/second-opinion/confine.d.ts +50 -0
  79. package/dist/core/second-opinion/confine.d.ts.map +1 -0
  80. package/dist/core/second-opinion/confine.js +162 -0
  81. package/dist/core/second-opinion/confine.js.map +1 -0
  82. package/dist/core/second-opinion/launch.d.ts +6 -1
  83. package/dist/core/second-opinion/launch.d.ts.map +1 -1
  84. package/dist/core/second-opinion/launch.js +31 -3
  85. package/dist/core/second-opinion/launch.js.map +1 -1
  86. package/dist/core/second-opinion/lineup.d.ts +11 -0
  87. package/dist/core/second-opinion/lineup.d.ts.map +1 -1
  88. package/dist/core/second-opinion/lineup.js +15 -0
  89. package/dist/core/second-opinion/lineup.js.map +1 -1
  90. package/dist/core/second-opinion/modes.d.ts +19 -2
  91. package/dist/core/second-opinion/modes.d.ts.map +1 -1
  92. package/dist/core/second-opinion/modes.js +103 -29
  93. package/dist/core/second-opinion/modes.js.map +1 -1
  94. package/dist/core/session/start.d.ts +2 -2
  95. package/dist/core/skills.d.ts +1 -2
  96. package/dist/core/skills.d.ts.map +1 -1
  97. package/dist/core/skills.js +3 -2
  98. package/dist/core/skills.js.map +1 -1
  99. package/dist/run.d.ts.map +1 -1
  100. package/dist/run.js +4 -1
  101. package/dist/run.js.map +1 -1
  102. package/dist/version.d.ts +1 -1
  103. package/dist/version.js +1 -1
  104. package/package.json +1 -1
  105. package/templates/mcp/ctxr.md +1 -0
  106. package/templates/second-opinion/critic-contract.md +2 -1
  107. package/templates/skills/ctxr-capture-circleback/sweep.mjs +70 -3
  108. package/templates/skills/ctxr-capture-circleback.md +7 -0
  109. package/templates/skills/ctxr-second-opinion.md +34 -13
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5D,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAInH"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU5D,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAInH"}
@@ -13,6 +13,8 @@ export const PLUGIN_COMMANDS = {
13
13
  mission: 'ctxr-mission',
14
14
  session: 'ctxr-session-lifecycle',
15
15
  submit: 'ctxr-submit',
16
+ // serve-the-second-opinion-to-chat-apps: the skill drives `ctxr second-opinion`, so the command takes its name.
17
+ 'second-opinion': 'ctxr-second-opinion',
16
18
  };
17
19
  /** Each command whose skill the plugin does not carry, named with the skill it asks for. */
18
20
  export function commandMapProblems(commands, carried) {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,2BAA2B;IACnC,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,wBAAwB;IACjC,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,QAA0C,EAAE,OAA0B;IACvG,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,OAAO,UAAU,KAAK,mCAAmC,CAAC,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/core/plugin/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,2BAA2B;IACnC,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,wBAAwB;IACjC,MAAM,EAAE,aAAa;IACrB,gHAAgH;IAChH,gBAAgB,EAAE,qBAAqB;CACxC,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,QAA0C,EAAE,OAA0B;IACvG,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,OAAO,UAAU,KAAK,mCAAmC,CAAC,CAAC;AACrG,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * serve-the-second-opinion-to-chat-apps D1: each model CLI runs from a fresh
3
+ * folder that is its `HOME` and its working directory, seeded with a copy of
4
+ * its own login and nothing else, and wrapped in `setpriv`'s Landlock rules so
5
+ * the kernel lets it read only the system paths, its own install directory and
6
+ * that folder. Landlock needs no privilege and no user namespace, which
7
+ * Docker's default seccomp profile refuses; `setpriv` has it from util-linux
8
+ * 2.40. Where it is missing the run stays as before and says so.
9
+ */
10
+ /** Whether runs on this machine can be confined, and if not, why. */
11
+ export type Confinement = {
12
+ confined: true;
13
+ setpriv: string;
14
+ } | {
15
+ confined: false;
16
+ reason: string;
17
+ };
18
+ /** What one confined run needs beyond its argument vector. */
19
+ export interface ConfinedRun {
20
+ setpriv: string;
21
+ /** The real home the logins are copied from and back to. */
22
+ sourceHome: string;
23
+ /** The CLI's login files, relative to a home. */
24
+ logins: readonly string[];
25
+ /** How many directories above the binary's own the install directory is; 0 allows the binary file alone. */
26
+ installLevels: number;
27
+ }
28
+ /** The executable a bare command name resolves to on a search path, or null. */
29
+ export declare function onPath(cmd: string, searchPath: string | undefined): string | null;
30
+ /**
31
+ * `setpriv`'s arguments, ending in the binary and its own: the system paths
32
+ * and the install directory readable, the folder fully usable, nothing else.
33
+ */
34
+ export declare function landlockArgs(binary: string, args: readonly string[], folder: string, run: ConfinedRun, env: Record<string, string>): string[];
35
+ export interface SeededLogin {
36
+ source: string;
37
+ copy: string;
38
+ sourceHash: string;
39
+ }
40
+ /** Copies each login present in the real home into the folder, recording what was copied. */
41
+ export declare function seedLogins(run: ConfinedRun, folder: string): SeededLogin[];
42
+ /**
43
+ * A login the run refreshed goes back over the original, unless the original
44
+ * changed meanwhile: Codex rotates its refresh token, so dropping the copy
45
+ * would break the real login, and overwriting a newer original would too.
46
+ */
47
+ export declare function returnLogins(seeded: readonly SeededLogin[]): void;
48
+ /** The fresh folder's environment: it is the home, and temporary files stay inside it. */
49
+ export declare function confinedEnv(env: Record<string, string>, folder: string): Record<string, string>;
50
+ //# sourceMappingURL=confine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confine.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/confine.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpG,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,4GAA4G;IAC5G,aAAa,EAAE,MAAM,CAAC;CACvB;AAgCD,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWjF;AAyCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAgB7I;AAUD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAa1E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI,CAUjE;AAED,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI/F"}
@@ -0,0 +1,162 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { accessSync, chmodSync, constants, copyFileSync, existsSync, mkdirSync, openSync, readFileSync, readSync, closeSync, realpathSync, renameSync, statSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ const DIR_READ = 'execute,read-file,read-dir';
5
+ const FILE_READ = 'execute,read-file';
6
+ const DEVICE = 'read-file,write-file';
7
+ const DIR_ALL = 'execute,write-file,read-file,read-dir,remove-dir,remove-file,make-char,make-dir,make-reg,make-sock,make-fifo,make-block,make-sym,refer,truncate';
8
+ /** What any program needs to start, resolve a host and verify TLS: read-only, and only where present. */
9
+ const SYSTEM_READ = [
10
+ '/usr',
11
+ '/lib',
12
+ '/lib32',
13
+ '/lib64',
14
+ '/libx32',
15
+ '/bin',
16
+ '/sbin',
17
+ '/proc',
18
+ '/etc/ssl',
19
+ '/etc/ca-certificates',
20
+ '/etc/pki',
21
+ '/etc/alternatives',
22
+ '/etc/resolv.conf',
23
+ '/etc/hosts',
24
+ '/etc/host.conf',
25
+ '/etc/nsswitch.conf',
26
+ '/etc/gai.conf',
27
+ '/etc/passwd',
28
+ '/etc/group',
29
+ '/etc/localtime',
30
+ ];
31
+ const DEVICES = ['/dev/null', '/dev/zero', '/dev/random', '/dev/urandom'];
32
+ /** The executable a bare command name resolves to on a search path, or null. */
33
+ export function onPath(cmd, searchPath) {
34
+ for (const dir of (searchPath ?? '').split(path.delimiter).filter(Boolean)) {
35
+ const candidate = path.join(dir, cmd);
36
+ try {
37
+ accessSync(candidate, constants.X_OK);
38
+ if (statSync(candidate).isFile())
39
+ return candidate;
40
+ }
41
+ catch {
42
+ // not here
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ /** A `#!` script's interpreter, resolved through `env` when the script names it that way. */
48
+ function interpreterOf(file, searchPath) {
49
+ const buf = Buffer.alloc(256);
50
+ let n = 0;
51
+ try {
52
+ const fd = openSync(file, 'r');
53
+ try {
54
+ n = readSync(fd, buf, 0, buf.length, 0);
55
+ }
56
+ finally {
57
+ closeSync(fd);
58
+ }
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ const head = buf.subarray(0, n).toString('utf8');
64
+ if (!head.startsWith('#!'))
65
+ return null;
66
+ const words = head.slice(2).split('\n')[0].trim().split(/\s+/);
67
+ if (words[0] === undefined)
68
+ return null;
69
+ if (path.basename(words[0]) !== 'env')
70
+ return words[0];
71
+ const name = words.slice(1).find((w) => !w.startsWith('-'));
72
+ return name === undefined ? null : onPath(name, searchPath);
73
+ }
74
+ function rule(file, dirRights, fileRights) {
75
+ try {
76
+ const rights = statSync(file).isDirectory() ? dirRights : fileRights;
77
+ return ['--landlock-rule', `path-beneath:${rights}:${file}`];
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ }
83
+ /** The directory `levels - 1` above the binary's own, or the binary itself at 0. */
84
+ function installRoot(binary, levels) {
85
+ let root = levels === 0 ? binary : path.dirname(binary);
86
+ for (let i = 1; i < levels; i++)
87
+ root = path.dirname(root);
88
+ return root;
89
+ }
90
+ /**
91
+ * `setpriv`'s arguments, ending in the binary and its own: the system paths
92
+ * and the install directory readable, the folder fully usable, nothing else.
93
+ */
94
+ export function landlockArgs(binary, args, folder, run, env) {
95
+ const real = realpathSync(binary);
96
+ const readable = [...SYSTEM_READ, installRoot(real, run.installLevels)];
97
+ const interpreter = interpreterOf(real, env.PATH);
98
+ if (interpreter !== null)
99
+ readable.push(realpathSync(interpreter));
100
+ if (env.NODE_EXTRA_CA_CERTS)
101
+ readable.push(env.NODE_EXTRA_CA_CERTS);
102
+ return [
103
+ '--landlock-access',
104
+ 'fs',
105
+ ...readable.flatMap((p) => rule(p, DIR_READ, FILE_READ)),
106
+ ...DEVICES.flatMap((p) => rule(p, DEVICE, DEVICE)),
107
+ ...rule(folder, DIR_ALL, DIR_ALL),
108
+ '--',
109
+ binary,
110
+ ...args,
111
+ ];
112
+ }
113
+ const hashOf = (file) => {
114
+ try {
115
+ return createHash('sha256').update(readFileSync(file)).digest('hex');
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ };
121
+ /** Copies each login present in the real home into the folder, recording what was copied. */
122
+ export function seedLogins(run, folder) {
123
+ const seeded = [];
124
+ for (const rel of run.logins) {
125
+ const source = path.join(run.sourceHome, rel);
126
+ const sourceHash = hashOf(source);
127
+ if (sourceHash === null)
128
+ continue;
129
+ const copy = path.join(folder, rel);
130
+ mkdirSync(path.dirname(copy), { recursive: true, mode: 0o700 });
131
+ copyFileSync(source, copy);
132
+ chmodSync(copy, 0o600);
133
+ seeded.push({ source, copy, sourceHash });
134
+ }
135
+ return seeded;
136
+ }
137
+ /**
138
+ * A login the run refreshed goes back over the original, unless the original
139
+ * changed meanwhile: Codex rotates its refresh token, so dropping the copy
140
+ * would break the real login, and overwriting a newer original would too.
141
+ */
142
+ export function returnLogins(seeded) {
143
+ for (const login of seeded) {
144
+ const copyHash = hashOf(login.copy);
145
+ if (copyHash === null || copyHash === login.sourceHash)
146
+ continue;
147
+ if (hashOf(login.source) !== login.sourceHash)
148
+ continue;
149
+ const staged = `${login.source}.ctxr-${process.pid}`;
150
+ copyFileSync(login.copy, staged);
151
+ chmodSync(staged, 0o600);
152
+ renameSync(staged, login.source);
153
+ }
154
+ }
155
+ /** The fresh folder's environment: it is the home, and temporary files stay inside it. */
156
+ export function confinedEnv(env, folder) {
157
+ const tmp = path.join(folder, '.tmp');
158
+ if (!existsSync(tmp))
159
+ mkdirSync(tmp, { mode: 0o700 });
160
+ return { ...env, HOME: folder, TMPDIR: tmp };
161
+ }
162
+ //# sourceMappingURL=confine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confine.js","sourceRoot":"","sources":["../../../src/core/second-opinion/confine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
+ import { type ConfinedRun } from './confine.js';
1
2
  /**
2
3
  * run-the-second-opinion-from-the-cli: the one place a model CLI is
3
4
  * launched. No shell anywhere: an argument vector plus standard input, in a
4
5
  * fresh empty scratch directory, with the allowlisted environment the caller
5
6
  * built (D3). Ported from the skill's `run.mjs` unchanged in behaviour.
7
+ *
8
+ * serve-the-second-opinion-to-chat-apps D1: given a confined run, the scratch
9
+ * directory is also the CLI's home, seeded with its login, and the CLI starts
10
+ * under `setpriv`'s Landlock rules.
6
11
  */
7
12
  export interface CliResult {
8
13
  ok: boolean;
@@ -12,5 +17,5 @@ export interface CliResult {
12
17
  }
13
18
  export declare const firstLines: (text: string, n: number) => string;
14
19
  /** Runs one CLI. Resolves with what it printed and, on failure, why; never rejects. */
15
- export declare function runCli(cmd: string, args: readonly string[], stdin: string, timeoutSec: number, env: Record<string, string>): Promise<CliResult>;
20
+ export declare function runCli(cmd: string, args: readonly string[], stdin: string, timeoutSec: number, env: Record<string, string>, confine?: ConfinedRun): Promise<CliResult>;
16
21
  //# sourceMappingURL=launch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/launch.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,KAAK,MAAM,KAAG,MAAuE,CAAC;AAE7H,uFAAuF;AACvF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CA6D/I"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/launch.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+D,KAAK,WAAW,EAAoB,MAAM,cAAc,CAAC;AAE/H;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,KAAK,MAAM,KAAG,MAAuE,CAAC;AAE7H,uFAAuF;AACvF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAsFtK"}
@@ -2,11 +2,13 @@ import { spawn } from 'node:child_process';
2
2
  import { mkdtempSync, rmSync } from 'node:fs';
3
3
  import { tmpdir } from 'node:os';
4
4
  import path from 'node:path';
5
+ import { confinedEnv, landlockArgs, onPath, returnLogins, seedLogins } from './confine.js';
5
6
  export const firstLines = (text, n) => text.trim().split('\n').slice(0, n).join(' | ').slice(0, 400);
6
7
  /** Runs one CLI. Resolves with what it printed and, on failure, why; never rejects. */
7
- export function runCli(cmd, args, stdin, timeoutSec, env) {
8
+ export function runCli(cmd, args, stdin, timeoutSec, env, confine) {
8
9
  return new Promise((resolve) => {
9
10
  const scratch = mkdtempSync(path.join(tmpdir(), 'ctxr-second-opinion-'));
11
+ let seeded = [];
10
12
  let settled = false;
11
13
  let stdout = '';
12
14
  let stderr = '';
@@ -18,6 +20,12 @@ export function runCli(cmd, args, stdin, timeoutSec, env) {
18
20
  settled = true;
19
21
  if (timer)
20
22
  clearTimeout(timer);
23
+ try {
24
+ returnLogins(seeded);
25
+ }
26
+ catch {
27
+ // the original stays as it was; the next run seeds from it
28
+ }
21
29
  try {
22
30
  rmSync(scratch, { recursive: true, force: true });
23
31
  }
@@ -26,10 +34,30 @@ export function runCli(cmd, args, stdin, timeoutSec, env) {
26
34
  }
27
35
  resolve({ stdout, stderr, ...result });
28
36
  };
37
+ let program = cmd;
38
+ let argv = [...args];
39
+ let childEnv = env;
40
+ if (confine) {
41
+ const binary = onPath(cmd, env.PATH);
42
+ if (binary === null) {
43
+ done({ ok: false, cause: `'${cmd}' not found on PATH` });
44
+ return;
45
+ }
46
+ try {
47
+ seeded = seedLogins(confine, scratch);
48
+ program = confine.setpriv;
49
+ argv = landlockArgs(binary, args, scratch, confine, env);
50
+ childEnv = confinedEnv(env, scratch);
51
+ }
52
+ catch (err) {
53
+ done({ ok: false, cause: `could not prepare ${cmd}'s folder: ${err instanceof Error ? err.message : String(err)}` });
54
+ return;
55
+ }
56
+ }
29
57
  let child;
30
58
  try {
31
59
  // detached: the CLI leads its own process group, so a timeout can stop everything it started.
32
- child = spawn(cmd, [...args], { cwd: scratch, env, stdio: ['pipe', 'pipe', 'pipe'], detached: true });
60
+ child = spawn(program, argv, { cwd: scratch, env: childEnv, stdio: ['pipe', 'pipe', 'pipe'], detached: true });
33
61
  }
34
62
  catch (err) {
35
63
  done({ ok: false, cause: `could not start ${cmd}: ${err instanceof Error ? err.message : String(err)}` });
@@ -58,7 +86,7 @@ export function runCli(cmd, args, stdin, timeoutSec, env) {
58
86
  child.stderr?.on('data', (d) => {
59
87
  stderr += d;
60
88
  });
61
- child.on('error', (err) => done({ ok: false, cause: err.code === 'ENOENT' ? `'${cmd}' not found on PATH` : `could not start ${cmd}: ${err.message}` }));
89
+ child.on('error', (err) => done({ ok: false, cause: err.code === 'ENOENT' ? `'${program === cmd ? cmd : program}' not found on PATH` : `could not start ${cmd}: ${err.message}` }));
62
90
  child.on('close', (code) => {
63
91
  if (timedOut)
64
92
  return done({ ok: false, cause: `timed out after ${timeoutSec}s` });
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/core/second-opinion/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE7H,uFAAuF;AACvF,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,IAAuB,EAAE,KAAa,EAAE,UAAkB,EAAE,GAA2B;IACzH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QACzE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,KAAiC,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,MAAuC,EAAQ,EAAE;YAC7D,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QACF,IAAI,KAA+B,CAAC;QACpC,IAAI,CAAC;YACH,8FAA8F;YAC9F,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1G,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAQ,EAAE;YACjD,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACvD,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;QACtB,8EAA8E;QAC9E,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,IAAI,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,IAAI,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE,CAC/C,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAC5H,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,QAAQ;gBAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,UAAU,GAAG,EAAE,CAAC,CAAC;YAClF,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtG,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC5B,qDAAqD;QACvD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/core/second-opinion/launch.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,17 @@ export declare const FLAGS_USED: Record<Cli, {
53
53
  helpArgs: string[];
54
54
  flags: string[];
55
55
  }>;
56
+ /**
57
+ * serve-the-second-opinion-to-chat-apps D1: what a confined run copies into a
58
+ * CLI's fresh home, and how much of its install it may read. The logins are
59
+ * the files each CLI keeps its sign-in in, relative to the home (seen
60
+ * 2026-11-11). The install directory is counted up from the directory holding
61
+ * the binary's real path: claude's `share/claude/versions/<v>` reads
62
+ * `share/claude`, codex's `releases/<v>/bin/codex` reads `releases/<v>`, and
63
+ * agy is one self-contained file.
64
+ */
65
+ export declare const LOGIN_FILES: Record<Cli, readonly string[]>;
66
+ export declare const INSTALL_LEVELS: Record<Cli, number>;
56
67
  export interface Invocation {
57
68
  cmd: Cli;
58
69
  args: string[];
@@ -1 +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"}
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;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAItD,CAAC;AACF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAmC,CAAC;AAEnF,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"}
@@ -56,6 +56,21 @@ export const FLAGS_USED = {
56
56
  codex: { helpArgs: ['exec', '--help'], flags: ['--skip-git-repo-check', '--sandbox', '--ephemeral', '--color', '--config', '--model'] },
57
57
  agy: { helpArgs: ['--help'], flags: ['--print', '--sandbox', '--disable-slash-commands', '--model'] },
58
58
  };
59
+ /**
60
+ * serve-the-second-opinion-to-chat-apps D1: what a confined run copies into a
61
+ * CLI's fresh home, and how much of its install it may read. The logins are
62
+ * the files each CLI keeps its sign-in in, relative to the home (seen
63
+ * 2026-11-11). The install directory is counted up from the directory holding
64
+ * the binary's real path: claude's `share/claude/versions/<v>` reads
65
+ * `share/claude`, codex's `releases/<v>/bin/codex` reads `releases/<v>`, and
66
+ * agy is one self-contained file.
67
+ */
68
+ export const LOGIN_FILES = {
69
+ claude: ['.claude/.credentials.json'],
70
+ codex: ['.codex/auth.json'],
71
+ agy: ['.gemini/antigravity-cli/antigravity-oauth-token'],
72
+ };
73
+ export const INSTALL_LEVELS = { claude: 2, codex: 2, agy: 0 };
59
74
  /**
60
75
  * How each family is contained. Only claude and codex offer a mode that removes the ability to
61
76
  * act; agy does not (its headless plan mode still wrote a file), so it is held to an empty working
@@ -1 +1 @@
1
- {"version":3,"file":"lineup.js","sourceRoot":"","sources":["../../../src/core/second-opinion/lineup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lineup.js","sourceRoot":"","sources":["../../../src/core/second-opinion/lineup.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface CommonOptions {
21
21
  tier?: string;
22
22
  timeout?: string;
23
23
  only?: string;
24
+ /** End before any model CLI starts when the run cannot be confined (serve-the-second-opinion-to-chat-apps). */
25
+ requireConfinement?: boolean;
24
26
  }
25
27
  export interface PreflightEntry {
26
28
  cli: Cli;
@@ -30,6 +32,9 @@ export interface PreflightEntry {
30
32
  export interface PreflightResult {
31
33
  tier: Tier;
32
34
  ok: boolean;
35
+ /** Whether each CLI ran confined; not confined alone does not fail the preflight. */
36
+ confined: boolean;
37
+ confinement_reason: string | null;
33
38
  clis: PreflightEntry[];
34
39
  /** On a failing preflight only: the variables withheld from the CLIs, by name. Never values. */
35
40
  withheld?: string[];
@@ -40,6 +45,7 @@ export interface CritiqueOptions extends CommonOptions {
40
45
  planFile?: string;
41
46
  out?: string;
42
47
  seed?: string;
48
+ print?: boolean;
43
49
  }
44
50
  export interface CritiqueEntry {
45
51
  letter: string | null;
@@ -60,10 +66,15 @@ export interface CritiqueManifest {
60
66
  critiques: CritiqueEntry[];
61
67
  valid: number;
62
68
  partial: boolean;
69
+ confined: boolean;
70
+ confinement_reason: string | null;
63
71
  }
64
72
  export interface CritiqueResult {
65
- out: string;
73
+ /** The output directory, or null with `--print`. */
74
+ out: string | null;
66
75
  manifest: CritiqueManifest;
76
+ /** With `--print`: each critique's text by letter. */
77
+ texts?: Record<string, string>;
67
78
  lines: string[];
68
79
  }
69
80
  export declare function critique(ctx: SecondOpinionContext, opts: CritiqueOptions): Promise<CritiqueResult>;
@@ -73,6 +84,7 @@ export interface PollOptions extends CommonOptions {
73
84
  lens?: string;
74
85
  /** False with `--no-wrap`: the question goes out without the answer scaffold. */
75
86
  wrap?: boolean;
87
+ print?: boolean;
76
88
  }
77
89
  export interface PollAnswer {
78
90
  cli: Cli;
@@ -88,10 +100,15 @@ export interface PollManifest {
88
100
  valid: number;
89
101
  partial: boolean;
90
102
  answers: PollAnswer[];
103
+ confined: boolean;
104
+ confinement_reason: string | null;
91
105
  }
92
106
  export interface PollResult {
93
- out: string;
107
+ /** The output directory, or null with `--print`. */
108
+ out: string | null;
94
109
  manifest: PollManifest;
110
+ /** With `--print`: each answer's text by model CLI. */
111
+ texts?: Record<string, string>;
95
112
  lines: string[];
96
113
  }
97
114
  export declare function poll(ctx: SecondOpinionContext, opts: PollOptions): Promise<PollResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/modes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../../src/core/second-opinion/modes.ts"],"names":[],"mappings":"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"}