@mcoda/codali 0.1.135-codali.2 → 0.1.135-codali.4

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/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Retry transient Windows state-file replacement conflicts without deleting the
6
+ previous state or suppressing permanent errors. Retain file durability checks.
7
+ - Resolve native macOS Git within the selected developer installation so sandboxed
8
+ repository inspection works without launching the Xcode wrapper.
9
+
10
+ ## 0.1.135-codali.3 - 2026-10-26
11
+
12
+ - Allow bounded Git diff/status inspection within the final validation budget;
13
+ keep edits blocked and require actual test evidence before verifying code.
14
+ - Disable terminal echo before displaying the API-key prompt, preventing fast
15
+ input from being echoed. Verify masked entry, backspace, cancellation, key
16
+ rotation, logout, credential-cache refresh and bounded piped input.
17
+
18
+ - Tagged candidate; publication was cancelled after Windows CI exposed a
19
+ transient state-file replacement failure addressed above.
20
+
5
21
  ## 0.1.135-codali.2 - 2026-10-26
6
22
 
7
23
  - Keep core tool definitions available across task handoffs, while requiring a
@@ -81,9 +81,9 @@ export const readTerminalCredential = async (fromStdin) => {
81
81
  }
82
82
  }
83
83
  };
84
- process.stderr.write("mSwarm API key: ");
85
84
  process.stdin.setRawMode(true);
86
- process.stdin.resume();
87
85
  process.stdin.on("data", onData);
86
+ process.stdin.resume();
87
+ process.stderr.write("mSwarm API key: ");
88
88
  });
89
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/runtime/SessionController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/runtime/SessionController.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ import { ManagedDocdex } from "../docdex/ManagedDocdex.js";
27
27
  import { ConfiguredEmbeddings } from "../providers/ConfiguredEmbeddings.js";
28
28
  import { runCodaliTask } from "./CodaliRuntime.js";
29
29
  import { WorkspaceLock } from "./WorkspaceLock.js";
30
- import { isVerificationCommand } from "./VerificationCommand.js";
30
+ import { isVerificationCommand, isVerificationInspectionCommand } from "./VerificationCommand.js";
31
31
  import { assertRequestedTestEvidence } from "./RequestedTestEvidence.js";
32
32
  import { readReviewSource } from "./ReviewSource.js";
33
33
  import { taskReviewContext } from "./TaskReviewContext.js";
@@ -849,7 +849,8 @@ export class SessionController {
849
849
  const kind = permissionKind(tool);
850
850
  if (this.docdex && !this.docdexReady && (["write", "shell"].includes(kind) || tool.name.startsWith("docdex_")))
851
851
  throw new ToolExecutionError("docdex_unavailable", "Docdex index is unavailable for this turn. Record the blocker; recover the service before code changes.", { retryable: false });
852
- if ((["write", "media"].includes(kind) || tool.name === "delegate_helper" || kind === "shell" && !isVerificationCommand(args)) && this.usage.tokens + this.validationReserve() > limits.maxTotalTokens)
852
+ const validationShell = isVerificationCommand(args) || tool.name === "run_shell" && isVerificationInspectionCommand(args);
853
+ if ((["write", "media"].includes(kind) || tool.name === "delegate_helper" || kind === "shell" && !validationShell) && this.usage.tokens + this.validationReserve() > limits.maxTotalTokens)
853
854
  throw new ToolExecutionError("tool_permission_denied", "Remaining budget is reserved for verification; checkpoint unfinished work or increase the effort budget");
854
855
  const data = argsObject(args);
855
856
  if (["write", "shell", "media"].includes(kind) || kind === "external" && !tool.readOnly) {
@@ -1,3 +1,5 @@
1
+ /** Budget eligibility for inspection only; never substitutes for test evidence. */
2
+ export declare const isVerificationInspectionCommand: (args: unknown) => boolean;
1
3
  /** Command-shape eligibility only; success, fresh input hashes and review remain mandatory. */
2
4
  export declare const isVerificationCommand: (args: unknown) => boolean;
3
5
  //# sourceMappingURL=VerificationCommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationCommand.d.ts","sourceRoot":"","sources":["../../src/runtime/VerificationCommand.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,eAAO,MAAM,qBAAqB,GAAI,MAAM,OAAO,KAAG,OA6BrD,CAAC"}
1
+ {"version":3,"file":"VerificationCommand.d.ts","sourceRoot":"","sources":["../../src/runtime/VerificationCommand.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,GAAI,MAAM,OAAO,KAAG,OAiB/D,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,qBAAqB,GAAI,MAAM,OAAO,KAAG,OA6BrD,CAAC"}
@@ -1,4 +1,32 @@
1
1
  import path from "node:path";
2
+ /** Budget eligibility for inspection only; never substitutes for test evidence. */
3
+ export const isVerificationInspectionCommand = (args) => {
4
+ if (!args || typeof args !== "object" || Array.isArray(args))
5
+ return false;
6
+ const value = args;
7
+ if (value.command !== "git" || !Array.isArray(value.args) || value.args.some(arg => typeof arg !== "string"))
8
+ return false;
9
+ if (value.writePaths !== undefined && (!Array.isArray(value.writePaths) || value.writePaths.length !== 0))
10
+ return false;
11
+ const argv = value.args;
12
+ const flags = argv[0] === "diff"
13
+ ? ["--no-ext-diff", "--no-textconv", "--no-color", "--stat", "--name-only", "--name-status", "--check", "--cached", "--staged"]
14
+ : argv[0] === "status" ? ["--short", "--porcelain", "--porcelain=v1", "--porcelain=v2", "--branch"] : undefined;
15
+ if (!flags)
16
+ return false;
17
+ let paths = false;
18
+ for (const arg of argv.slice(1)) {
19
+ if (paths) {
20
+ if (!arg)
21
+ return false;
22
+ }
23
+ else if (arg === "--")
24
+ paths = true;
25
+ else if (!flags.includes(arg))
26
+ return false;
27
+ }
28
+ return true;
29
+ };
2
30
  /** Command-shape eligibility only; success, fresh input hashes and review remain mandatory. */
3
31
  export const isVerificationCommand = (args) => {
4
32
  if (!args || typeof args !== "object" || Array.isArray(args))
@@ -1 +1 @@
1
- {"version":3,"file":"AtomicState.d.ts","sourceRoot":"","sources":["../../src/session/AtomicState.ts"],"names":[],"mappings":"AAMA;mFACmF;AACnF,eAAO,MAAM,kBAAkB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAOxE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,OAAO,CAAC,IAAI,CAehF,CAAC;AAIF,6FAA6F;AAC7F,eAAO,MAAM,YAAY,GAAU,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAK3I,CAAC;AACF,eAAO,MAAM,aAAa,GAAU,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,KAAG,OAAO,CAAC,CAAC,CAS/G,CAAC"}
1
+ {"version":3,"file":"AtomicState.d.ts","sourceRoot":"","sources":["../../src/session/AtomicState.ts"],"names":[],"mappings":"AAMA;mFACmF;AACnF,eAAO,MAAM,kBAAkB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAOxE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,OAAO,CAAC,IAAI,CAyBhF,CAAC;AAIF,6FAA6F;AAC7F,eAAO,MAAM,YAAY,GAAU,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAK3I,CAAC;AACF,eAAO,MAAM,aAAa,GAAU,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,KAAG,OAAO,CAAC,CAAC,CAS/G,CAAC"}
@@ -28,7 +28,21 @@ export const atomicWriteJson = async (file, value) => {
28
28
  await handle.writeFile(`${JSON.stringify(value, null, 2)}\n`, "utf8");
29
29
  await handle.sync();
30
30
  await handle.close();
31
- await fs.rename(temporary, file);
31
+ // A concurrent Windows reader or scanner can briefly deny replacement.
32
+ // Retry the same atomic rename; never remove the previous durable state.
33
+ for (let attempt = 0;; attempt++) {
34
+ try {
35
+ await fs.rename(temporary, file);
36
+ break;
37
+ }
38
+ catch (error) {
39
+ const code = error.code ?? "";
40
+ if (process.platform !== "win32" || !["EPERM", "EACCES", "EBUSY"].includes(code) || attempt >= 7)
41
+ throw error;
42
+ await assertRegularStateFile(file);
43
+ await new Promise(resolve => setTimeout(resolve, Math.min(20 * 2 ** attempt, 160)));
44
+ }
45
+ }
32
46
  await syncStateDirectory(path.dirname(file));
33
47
  }
34
48
  finally {
@@ -11,6 +11,9 @@ export interface ProcessEnvironment {
11
11
  PYTHONUSERBASE?: string;
12
12
  SDKROOT?: string;
13
13
  DEVELOPER_DIR?: string;
14
+ GIT_CONFIG_NOSYSTEM?: string;
15
+ GIT_CONFIG_GLOBAL?: string;
16
+ GIT_ATTR_NOSYSTEM?: string;
14
17
  }
15
18
  export declare const runProcess: (command: string, args: string[], context: ToolContext, environment?: ProcessEnvironment) => Promise<ToolHandlerResult>;
16
19
  //# sourceMappingURL=AsyncProcess.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncProcess.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/AsyncProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,eAAO,MAAM,sBAAsB,QAAO,MAAM,CAAC,UAGhD,CAAC;AAEF,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,SAAS,WAAW,EAAE,cAAa,kBAAuB,KAAG,OAAO,CAAC,iBAAiB,CAgDjJ,CAAC"}
1
+ {"version":3,"file":"AsyncProcess.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/AsyncProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,eAAO,MAAM,sBAAsB,QAAO,MAAM,CAAC,UAGhD,CAAC;AAEF,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACtF;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,SAAS,WAAW,EAAE,cAAa,kBAAuB,KAAG,OAAO,CAAC,iBAAiB,CAgDjJ,CAAC"}
@@ -14,7 +14,7 @@ export const runProcess = (command, args, context, environment = {}) => {
14
14
  return new Promise((resolve, reject) => {
15
15
  const group = process.platform !== "win32";
16
16
  const env = safeProcessEnvironment();
17
- for (const key of ["HOME", "TMPDIR", "PATH", "CARGO_HOME", "XDG_CACHE_HOME", "PYTHONPYCACHEPREFIX", "PYTHONUSERBASE", "SDKROOT", "DEVELOPER_DIR"])
17
+ for (const key of ["HOME", "TMPDIR", "PATH", "CARGO_HOME", "XDG_CACHE_HOME", "PYTHONPYCACHEPREFIX", "PYTHONUSERBASE", "SDKROOT", "DEVELOPER_DIR", "GIT_CONFIG_NOSYSTEM", "GIT_CONFIG_GLOBAL", "GIT_ATTR_NOSYSTEM"])
18
18
  if (typeof environment[key] === "string")
19
19
  env[key] = environment[key];
20
20
  const child = spawn(command, args, { cwd, env, detached: group, stdio: ["ignore", "pipe", "pipe"], windowsHide: true });
@@ -1 +1 @@
1
- {"version":3,"file":"HostToolchain.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/HostToolchain.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAAG,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;CAAE;AAC/E,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/D,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAgID;;kFAEkF;AAClF,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,mBAAmC,KAAG,WAAW,EA0D7G,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,WAAW,EAAE,KAAG,gBAAgB,EAM5E,CAAC"}
1
+ {"version":3,"file":"HostToolchain.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/HostToolchain.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAAG,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;CAAE;AAC/E,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/D,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAkID;;kFAEkF;AAClF,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,mBAAmC,KAAG,WAAW,EA0D7G,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,WAAW,EAAE,KAAG,gBAAgB,EAM5E,CAAC"}
@@ -147,8 +147,10 @@ const darwinDeveloperTools = (workspace, home) => {
147
147
  const sdk = query("/usr/bin/xcrun", ["--sdk", "macosx", "--show-sdk-path"]);
148
148
  if (!within(sdk, developer) || !existsSync(path.join(sdk, "SDKSettings.plist")))
149
149
  return [];
150
- return ["cc", "ar"].map(name => {
151
- const executable = query("/usr/bin/xcrun", ["--find", name === "cc" ? "clang" : "ar"]);
150
+ // /usr/bin/git is an Apple launcher that may invoke xcodebuild and inspect
151
+ // files outside Developer. Select native Git within the same trusted root.
152
+ return ["cc", "ar", "git"].map(name => {
153
+ const executable = query("/usr/bin/xcrun", ["--find", name === "cc" ? "clang" : name]);
152
154
  if (!within(executable, developer) || !executableBinary(executable))
153
155
  throw new Error("Developer tool escapes selected installation");
154
156
  return { name, executable, readOnlyRoot: developer, directory: true, environment: { SDKROOT: sdk, DEVELOPER_DIR: developer } };
@@ -1 +1 @@
1
- {"version":3,"file":"IsolatedExecutor.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/IsolatedExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjG,MAAM,WAAW,cAAc;IAAG,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAEhI,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,EAAE,UAAU,WAAW,EAAE,EAAE,iBAAe,KAAG,MAyBpI,CAAC;AAQF,eAAO,MAAM,cAAc,QAAO,cAcjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,KAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAkD3L,CAAC"}
1
+ {"version":3,"file":"IsolatedExecutor.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/IsolatedExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjG,MAAM,WAAW,cAAc;IAAG,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAEhI,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,EAAE,UAAU,WAAW,EAAE,EAAE,iBAAe,KAAG,MA2BpI,CAAC;AAQF,eAAO,MAAM,cAAc,QAAO,cAcjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,KAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAoD3L,CAAC"}
@@ -22,6 +22,8 @@ export const darwinSandboxProfile = (root, scratch, writePaths, runtimes, networ
22
22
  // realpath/lstat needs ancestor metadata, not directory contents or sibling files.
23
23
  ...[...ancestors].map(parent => `(allow file-read-metadata (literal ${quoted(parent)}))`),
24
24
  '(allow file-read* (subpath "/usr") (subpath "/bin") (subpath "/sbin") (subpath "/System") (subpath "/Library") (subpath "/private/etc") (subpath "/dev"))',
25
+ // Git and other native tools open the null device read/write for discarded IO.
26
+ '(allow file-write-data (literal "/dev/null"))',
25
27
  // Apple's /bin/sh reads this system selector before starting npm scripts.
26
28
  // Permit only that selector, not other private /var files or directories.
27
29
  '(allow file-read* (literal "/private/var/select/sh") (literal "/var/select/sh"))',
@@ -101,7 +103,7 @@ export const createIsolatedExecutor = (options = {}) => {
101
103
  for (const file of writePaths)
102
104
  launch.push("--bind", file, file);
103
105
  launch.push("--chdir", cwd, "--dir", "/tmp/home", "--setenv", "HOME", "/tmp/home", "--setenv", "TMPDIR", "/tmp", "--setenv", "PATH", "/tmp/codali-bin:/usr/local/bin:/usr/bin:/bin");
104
- for (const [key, value] of Object.entries({ CARGO_HOME: "/tmp/home/cargo", XDG_CACHE_HOME: "/tmp/home/cache", PYTHONPYCACHEPREFIX: "/tmp/home/pycache", PYTHONUSERBASE: "/tmp/home/python" }))
106
+ for (const [key, value] of Object.entries({ CARGO_HOME: "/tmp/home/cargo", XDG_CACHE_HOME: "/tmp/home/cache", PYTHONPYCACHEPREFIX: "/tmp/home/pycache", PYTHONUSERBASE: "/tmp/home/python", GIT_CONFIG_NOSYSTEM: "1", GIT_CONFIG_GLOBAL: "/dev/null", GIT_ATTR_NOSYSTEM: "1" }))
105
107
  launch.push("--setenv", key, value);
106
108
  // Git hooks/config and private session state are not part of executable workspace access.
107
109
  for (const dir of [".git", ".mcoda"])
@@ -125,6 +127,8 @@ export const createIsolatedExecutor = (options = {}) => {
125
127
  HOME: privateHome, TMPDIR: scratch, PATH: `${privateBin}:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`,
126
128
  CARGO_HOME: path.join(privateHome, "cargo"), XDG_CACHE_HOME: path.join(privateHome, "cache"),
127
129
  PYTHONPYCACHEPREFIX: path.join(privateHome, "pycache"), PYTHONUSERBASE: path.join(privateHome, "python"),
130
+ // Host Git settings can invoke external helpers or read private paths.
131
+ GIT_CONFIG_NOSYSTEM: "1", GIT_CONFIG_GLOBAL: "/dev/null", GIT_ATTR_NOSYSTEM: "1",
128
132
  });
129
133
  }
130
134
  finally {
package/package.json CHANGED
@@ -8,8 +8,8 @@
8
8
  "url": "https://github.com/bekirdag/mcoda/issues"
9
9
  },
10
10
  "dependencies": {
11
- "@mcoda/db": "0.1.135-codali.2",
12
- "@mcoda/shared": "0.1.135-codali.2",
11
+ "@mcoda/db": "0.1.135-codali.4",
12
+ "@mcoda/shared": "0.1.135-codali.4",
13
13
  "@modelcontextprotocol/sdk": "1.30.0",
14
14
  "zod": "4.5.2"
15
15
  },
@@ -45,5 +45,5 @@
45
45
  },
46
46
  "type": "module",
47
47
  "types": "dist/index.d.ts",
48
- "version": "0.1.135-codali.2"
48
+ "version": "0.1.135-codali.4"
49
49
  }