@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 +16 -0
- package/dist/cli/TerminalCredentials.js +2 -2
- package/dist/runtime/SessionController.d.ts.map +1 -1
- package/dist/runtime/SessionController.js +3 -2
- package/dist/runtime/VerificationCommand.d.ts +2 -0
- package/dist/runtime/VerificationCommand.d.ts.map +1 -1
- package/dist/runtime/VerificationCommand.js +28 -0
- package/dist/session/AtomicState.d.ts.map +1 -1
- package/dist/session/AtomicState.js +15 -1
- package/dist/tools/shell/AsyncProcess.d.ts +3 -0
- package/dist/tools/shell/AsyncProcess.d.ts.map +1 -1
- package/dist/tools/shell/AsyncProcess.js +1 -1
- package/dist/tools/shell/HostToolchain.d.ts.map +1 -1
- package/dist/tools/shell/HostToolchain.js +4 -2
- package/dist/tools/shell/IsolatedExecutor.d.ts.map +1 -1
- package/dist/tools/shell/IsolatedExecutor.js +5 -1
- package/package.json +3 -3
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
|
-
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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
|
-
|
|
151
|
-
|
|
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,
|
|
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.
|
|
12
|
-
"@mcoda/shared": "0.1.135-codali.
|
|
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.
|
|
48
|
+
"version": "0.1.135-codali.4"
|
|
49
49
|
}
|