@linzumi/cli 1.0.182 → 1.0.183

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "1.0.182",
3
+ "version": "1.0.183",
4
4
  "description": "Linzumi CLI \u2014 point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -85,6 +85,7 @@ import {
85
85
  codexThreadRuntimeOverrides,
86
86
  codexTurnRuntimeOverrides,
87
87
  codexWireApprovalPolicy,
88
+ codexWireApprovalPolicyIsNeverEquivalentGranular,
88
89
  } from './src/codexRuntimeOptions';
89
90
  import { upstreamHttpStatusFate } from './src/terminalFailureRetry';
90
91
  import {
@@ -282,6 +283,13 @@ function runCase(input) {
282
283
  sandboxedNeverDefault: input.sandboxedNeverDefault,
283
284
  })
284
285
  );
286
+ case 'wireApprovalPolicyIsNeverEquivalentGranular':
287
+ // Total (never throws) - the #3819 pin-scoping predicate.
288
+ return codexWireApprovalPolicyIsNeverEquivalentGranular(
289
+ input.approvalPolicy ?? undefined,
290
+ input.sandbox ?? undefined,
291
+ { sandboxedNeverDefault: input.sandboxedNeverDefault }
292
+ );
285
293
  case 'threadRuntimeOverrides':
286
294
  return tryCall(() => codexThreadRuntimeOverrides(input.options));
287
295
  case 'turnRuntimeOverrides':
@@ -197,7 +197,18 @@ async function handle(testCase) {
197
197
  }
198
198
  return {
199
199
  config,
200
- codexArgs: outcome(() => codexMcpConfigArgs(config.value)),
200
+ // Both approval-scoping branches (#3819 security P1): the pin rides
201
+ // codexArgs ONLY for granular never-equivalent sessions.
202
+ codexArgs: outcome(() =>
203
+ codexMcpConfigArgs(config.value, {
204
+ neverEquivalentGranularApprovalPolicy: false,
205
+ })
206
+ ),
207
+ codexArgsNeverEquivalentGranular: outcome(() =>
208
+ codexMcpConfigArgs(config.value, {
209
+ neverEquivalentGranularApprovalPolicy: true,
210
+ })
211
+ ),
201
212
  codexToml: outcome(() => codexMcpConfigToml(config.value)),
202
213
  claudeCodeJson: outcome(() => claudeCodeMcpConfigJson(config.value)),
203
214
  claudeSdkMcpServers: outcome(() =>
@@ -182,7 +182,12 @@ function handleAgentSeams(testCase) {
182
182
  operatingMode: testCase.mcp.operatingMode,
183
183
  toolScope: testCase.mcp.toolScope,
184
184
  cwd: testCase.mcp.cwd,
185
- })
185
+ }),
186
+ // The discovery exec lane rides the plain approval_policy
187
+ // "never" config string, never the granular never-equivalent
188
+ // wire object - no tool-approval pin (#3819 security P1),
189
+ // matching onboardingDiscoveryAgent.ts.
190
+ { neverEquivalentGranularApprovalPolicy: false }
186
191
  ),
187
192
  dangerousReason: assessment.dangerous ? assessment.reason : null,
188
193
  };
@@ -372,7 +377,10 @@ await build({
372
377
  platform: 'node',
373
378
  target: 'node20',
374
379
  format: 'esm',
375
- outfile: join(packageRoot, '.differential/onboarding-discovery-parity-oracle.mjs'),
380
+ outfile: join(
381
+ packageRoot,
382
+ '.differential/onboarding-discovery-parity-oracle.mjs'
383
+ ),
376
384
  minify: false,
377
385
  sourcemap: false,
378
386
  legalComments: 'none',
@@ -1023,6 +1023,13 @@ async function handle(testCase) {
1023
1023
  ...(testCase.mcp.agentSession === undefined
1024
1024
  ? {}
1025
1025
  : { agentSession: testCase.mcp.agentSession }),
1026
+ ...(testCase.mcp.neverEquivalentGranularApprovalPolicy ===
1027
+ undefined
1028
+ ? {}
1029
+ : {
1030
+ neverEquivalentGranularApprovalPolicy:
1031
+ testCase.mcp.neverEquivalentGranularApprovalPolicy,
1032
+ }),
1026
1033
  },
1027
1034
  mcpServerBundlePath: bundlePath,
1028
1035
  })