@markusylisiurunen/tau 0.2.102 → 0.2.104

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 (107) hide show
  1. package/README.md +26 -39
  2. package/dist/core/async/server_config.js +0 -1
  3. package/dist/core/async/server_config.js.map +1 -1
  4. package/dist/core/async/session_manager.js +0 -3
  5. package/dist/core/async/session_manager.js.map +1 -1
  6. package/dist/core/async/telegram.js +1 -1
  7. package/dist/core/async/telegram.js.map +1 -1
  8. package/dist/core/cli.js +5 -9
  9. package/dist/core/cli.js.map +1 -1
  10. package/dist/core/commands/registry.js +17 -2
  11. package/dist/core/commands/registry.js.map +1 -1
  12. package/dist/core/config/index.js.map +1 -1
  13. package/dist/core/config/schema.js +21 -61
  14. package/dist/core/config/schema.js.map +1 -1
  15. package/dist/core/debug.js +4 -12
  16. package/dist/core/debug.js.map +1 -1
  17. package/dist/core/diff_review/review_thread.js +4 -7
  18. package/dist/core/diff_review/review_thread.js.map +1 -1
  19. package/dist/core/index.js +2 -1
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/personas.js +44 -1
  22. package/dist/core/personas.js.map +1 -1
  23. package/dist/core/runtime/chat_runtime.js +0 -10
  24. package/dist/core/runtime/chat_runtime.js.map +1 -1
  25. package/dist/core/runtime/runtime_bootstrap.js +5 -67
  26. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  27. package/dist/core/runtime/session_prompt_composer.js +2 -7
  28. package/dist/core/runtime/session_prompt_composer.js.map +1 -1
  29. package/dist/core/session/core_session.js.map +1 -1
  30. package/dist/core/session/session_engine.js +1 -13
  31. package/dist/core/session/session_engine.js.map +1 -1
  32. package/dist/core/static/prompts/diff-review-wrapper.md +4 -3
  33. package/dist/core/tool/cli.js +37 -0
  34. package/dist/core/tool/cli.js.map +1 -0
  35. package/dist/core/tool/errors.js +9 -0
  36. package/dist/core/tool/errors.js.map +1 -0
  37. package/dist/core/tool/index.js +3 -0
  38. package/dist/core/tool/index.js.map +1 -0
  39. package/dist/core/tool/pdf_unpack.js +406 -0
  40. package/dist/core/tool/pdf_unpack.js.map +1 -0
  41. package/dist/core/tools/bash.js +1 -1
  42. package/dist/core/tools/bash.js.map +1 -1
  43. package/dist/core/tools/edit.js +2 -2
  44. package/dist/core/tools/edit.js.map +1 -1
  45. package/dist/core/tools/emit_output.js +1 -1
  46. package/dist/core/tools/emit_output.js.map +1 -1
  47. package/dist/core/tools/execution_backend.js +21 -251
  48. package/dist/core/tools/execution_backend.js.map +1 -1
  49. package/dist/core/tools/grep.js +1 -1
  50. package/dist/core/tools/grep.js.map +1 -1
  51. package/dist/core/tools/list.js +1 -1
  52. package/dist/core/tools/list.js.map +1 -1
  53. package/dist/core/tools/read.js +1 -1
  54. package/dist/core/tools/read.js.map +1 -1
  55. package/dist/core/tools/registry.js.map +1 -1
  56. package/dist/core/tools/send_input_to_agent.js +1 -1
  57. package/dist/core/tools/send_input_to_agent.js.map +1 -1
  58. package/dist/core/tools/spawn_agent.js +7 -39
  59. package/dist/core/tools/spawn_agent.js.map +1 -1
  60. package/dist/core/tools/terminate_agent.js +1 -1
  61. package/dist/core/tools/terminate_agent.js.map +1 -1
  62. package/dist/core/tools/view_image.js +1 -1
  63. package/dist/core/tools/view_image.js.map +1 -1
  64. package/dist/core/tools/wait_for_agent.js +1 -1
  65. package/dist/core/tools/wait_for_agent.js.map +1 -1
  66. package/dist/core/tools/web_fetch.js +1 -1
  67. package/dist/core/tools/web_fetch.js.map +1 -1
  68. package/dist/core/tools/web_search.js +1 -1
  69. package/dist/core/tools/web_search.js.map +1 -1
  70. package/dist/core/tools/write.js +1 -1
  71. package/dist/core/tools/write.js.map +1 -1
  72. package/dist/core/utils/context.js +1 -1
  73. package/dist/core/utils/context.js.map +1 -1
  74. package/dist/core/utils/context_builder.js +1 -11
  75. package/dist/core/utils/context_builder.js.map +1 -1
  76. package/dist/core/utils/gemini_speech.js +367 -0
  77. package/dist/core/utils/gemini_speech.js.map +1 -0
  78. package/dist/core/utils/git.js +2 -7
  79. package/dist/core/utils/git.js.map +1 -1
  80. package/dist/core/utils/mistral_document_ocr.js +186 -0
  81. package/dist/core/utils/mistral_document_ocr.js.map +1 -0
  82. package/dist/core/version.js +1 -1
  83. package/dist/diff_tool/app/dist/assets/{index-AomQ5Wco.js → index-D1e3Qk8w.js} +26 -26
  84. package/dist/diff_tool/app/dist/index.html +1 -1
  85. package/dist/main.js +91 -112
  86. package/dist/main.js.map +1 -1
  87. package/dist/sdk/client.js +0 -1
  88. package/dist/sdk/client.js.map +1 -1
  89. package/dist/sdk/types.d.ts +0 -1
  90. package/dist/tui/app.js.map +1 -1
  91. package/dist/tui/chat_controller.js +231 -151
  92. package/dist/tui/chat_controller.js.map +1 -1
  93. package/dist/tui/chat_view.js +0 -1
  94. package/dist/tui/chat_view.js.map +1 -1
  95. package/dist/tui/terminal.js +8 -0
  96. package/dist/tui/terminal.js.map +1 -1
  97. package/dist/tui/ui/footer.js +6 -7
  98. package/dist/tui/ui/footer.js.map +1 -1
  99. package/package.json +5 -5
  100. package/dist/core/tools/sandbox/docker_sandbox.js +0 -183
  101. package/dist/core/tools/sandbox/docker_sandbox.js.map +0 -1
  102. package/dist/core/utils/agent_environment.js +0 -48
  103. package/dist/core/utils/agent_environment.js.map +0 -1
  104. package/dist/core/utils/sandbox_paths.js +0 -29
  105. package/dist/core/utils/sandbox_paths.js.map +0 -1
  106. package/dist/core/utils/sandbox_prompt_paths.js +0 -86
  107. package/dist/core/utils/sandbox_prompt_paths.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markusylisiurunen/tau",
3
- "version": "0.2.102",
3
+ "version": "0.2.104",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tau": "./dist/main.js"
@@ -27,13 +27,13 @@
27
27
  "access": "public"
28
28
  },
29
29
  "dependencies": {
30
- "@mariozechner/pi-ai": "^0.67.67",
31
- "@mariozechner/pi-tui": "^0.67.67",
32
- "@sinclair/typebox": "^0.34.49",
30
+ "@mariozechner/pi-ai": "^0.69.0",
31
+ "@mariozechner/pi-tui": "^0.69.0",
33
32
  "chalk": "^5.6.2",
34
33
  "file-type": "^21.3.4",
35
34
  "sharp": "^0.34.5",
36
35
  "strip-ansi": "^7.2.0",
36
+ "typebox": "^1.1.31",
37
37
  "yaml": "^2.8.3",
38
38
  "zod": "^4.3.6"
39
39
  },
@@ -43,7 +43,7 @@
43
43
  "colorjs.io": "^0.6.1",
44
44
  "prettier": "^3.8.3",
45
45
  "typescript": "^5.9.3",
46
- "vitest": "^4.1.4"
46
+ "vitest": "^4.1.5"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=24.0.0"
@@ -1,183 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { realpathSync } from "node:fs";
3
- import { getGitRoot } from "../../utils/git.js";
4
- import { normalizeSandboxMountPath, resolveSandboxWorkdir } from "../../utils/sandbox_paths.js";
5
- import { sanitizeEnvironment } from "../../utils/sanitize_env.js";
6
- const DEFAULT_MOUNT_PATH = "/workspace";
7
- const DEFAULT_PRUNE_AFTER_HOURS = 72;
8
- const DOCKER_MAX_CAPTURE_BYTES = 512 * 1024;
9
- const SANDBOX_LABEL = "tau.sandbox";
10
- const SESSION_LABEL = "tau.session_id";
11
- const STARTED_AT_LABEL = "tau.started_at";
12
- const CWD_LABEL = "tau.cwd";
13
- const ROOT_LABEL = "tau.root";
14
- function normalizeSandboxConfig(config) {
15
- const image = config.image?.trim();
16
- if (!image) {
17
- throw new Error("sandbox.image is required when --sandbox is enabled.");
18
- }
19
- const mountPath = normalizeSandboxMountPath(config.mountPath ?? DEFAULT_MOUNT_PATH);
20
- if (!mountPath.startsWith("/")) {
21
- throw new Error("sandbox.mountPath must be an absolute unix path.");
22
- }
23
- const pruneAfterHours = config.pruneAfterHours ?? DEFAULT_PRUNE_AFTER_HOURS;
24
- if (!Number.isFinite(pruneAfterHours) || pruneAfterHours <= 0) {
25
- throw new Error("sandbox.pruneAfterHours must be a positive number.");
26
- }
27
- const extraDockerArgs = (config.extraDockerArgs ?? []).filter((arg) => arg.trim().length > 0);
28
- return {
29
- image,
30
- mountPath: mountPath.endsWith("/") && mountPath.length > 1 ? mountPath.slice(0, -1) : mountPath,
31
- pruneAfterHours,
32
- extraDockerArgs,
33
- environmentInfo: config.environmentInfo,
34
- };
35
- }
36
- async function runDocker(deps, args, options) {
37
- const env = sanitizeEnvironment(deps.env.env());
38
- return deps.spawn("docker", args, {
39
- env,
40
- signal: options?.signal,
41
- timeoutMs: options?.timeoutMs,
42
- maxCaptureBytes: options?.maxCaptureBytes,
43
- maxCaptureMode: options?.maxCaptureMode,
44
- maxCaptureStrategy: options?.maxCaptureStrategy,
45
- captureOutput: options?.captureOutput,
46
- killGraceMs: options?.killGraceMs,
47
- stdio: options?.stdio,
48
- input: options?.input,
49
- });
50
- }
51
- async function ensureDockerAvailable(deps) {
52
- const result = await runDocker(deps, ["version", "--format", "{{.Server.Version}}"]);
53
- if (result.exitCode !== 0) {
54
- const message = result.stderr.trim() || "docker is unavailable or not running.";
55
- throw new Error(`sandbox requires docker: ${message}`);
56
- }
57
- }
58
- async function pruneStaleContainers(deps, cutoffMs) {
59
- const result = await runDocker(deps, [
60
- "ps",
61
- "-a",
62
- "--filter",
63
- `label=${SANDBOX_LABEL}=true`,
64
- "--format",
65
- `{{.ID}}\t{{.Label "${STARTED_AT_LABEL}"}}`,
66
- ], { maxCaptureBytes: DOCKER_MAX_CAPTURE_BYTES });
67
- if (result.exitCode !== 0) {
68
- const message = result.stderr.trim() || "failed to list sandbox containers.";
69
- throw new Error(`sandbox prune failed: ${message}`);
70
- }
71
- const lines = result.stdout.trim().split("\n").filter(Boolean);
72
- for (const line of lines) {
73
- const [id, startedAtRaw] = line.split("\t");
74
- if (!id)
75
- continue;
76
- const startedAt = Number.parseInt((startedAtRaw ?? "").trim(), 10);
77
- if (!Number.isFinite(startedAt) || startedAt <= cutoffMs) {
78
- await runDocker(deps, ["rm", "-f", id], { maxCaptureBytes: DOCKER_MAX_CAPTURE_BYTES }).catch(() => { });
79
- }
80
- }
81
- }
82
- function resolveSandboxPaths(cwd, mountPath) {
83
- const root = getGitRoot(cwd) ?? cwd;
84
- const rootReal = realpathSync(root);
85
- const cwdReal = realpathSync(cwd);
86
- const workdir = resolveSandboxWorkdir({ cwdReal, rootReal, mountPath });
87
- return { rootReal, workdir };
88
- }
89
- async function preflightImage(deps, containerId) {
90
- const required = ["sh", "cat", "ls", "rg", "tee", "mkdir", "tail", "find", "wc", "base64"];
91
- const check = [
92
- ...required.map((cmd) => `command -v ${cmd} >/dev/null 2>&1`),
93
- "find . -maxdepth 0 -printf '' >/dev/null 2>&1",
94
- ].join(" && ");
95
- const result = await runDocker(deps, ["exec", containerId, "sh", "-lc", check]);
96
- if (result.exitCode !== 0) {
97
- throw new Error(`sandbox image missing required commands (or find -printf support): ${required.join(", ")}. ${result.stderr.trim()}`);
98
- }
99
- }
100
- export async function createDockerSandbox(args) {
101
- const normalized = normalizeSandboxConfig(args.config);
102
- const cwd = args.cwd ?? args.deps.env.cwd();
103
- const { rootReal, workdir } = resolveSandboxPaths(cwd, normalized.mountPath);
104
- const deps = args.deps;
105
- await ensureDockerAvailable(deps);
106
- const cutoffMs = deps.clock.now() - normalized.pruneAfterHours * 60 * 60 * 1000;
107
- await pruneStaleContainers(deps, cutoffMs);
108
- const startedAt = deps.clock.now();
109
- const sessionId = randomUUID();
110
- const containerName = `tau-sandbox-${sessionId}`;
111
- const runArgs = [
112
- "run",
113
- "-d",
114
- "--name",
115
- containerName,
116
- "--label",
117
- `${SANDBOX_LABEL}=true`,
118
- "--label",
119
- `${SESSION_LABEL}=${sessionId}`,
120
- "--label",
121
- `${STARTED_AT_LABEL}=${startedAt}`,
122
- "--label",
123
- `${CWD_LABEL}=${cwd}`,
124
- "--label",
125
- `${ROOT_LABEL}=${rootReal}`,
126
- "--mount",
127
- `type=bind,source=${rootReal},target=${normalized.mountPath}`,
128
- "--workdir",
129
- workdir,
130
- ...normalized.extraDockerArgs,
131
- normalized.image,
132
- "sh",
133
- "-lc",
134
- "tail -f /dev/null",
135
- ];
136
- const result = await runDocker(deps, runArgs, { maxCaptureBytes: DOCKER_MAX_CAPTURE_BYTES });
137
- if (result.exitCode !== 0) {
138
- throw new Error(`sandbox failed to start: ${result.stderr.trim() || result.stdout.trim()}`);
139
- }
140
- const containerId = result.stdout.trim().split("\n").filter(Boolean)[0];
141
- if (!containerId) {
142
- throw new Error("sandbox failed to start: could not determine container id.");
143
- }
144
- try {
145
- await preflightImage(deps, containerId);
146
- }
147
- catch (err) {
148
- await runDocker(deps, ["rm", "-f", containerId], {
149
- maxCaptureBytes: DOCKER_MAX_CAPTURE_BYTES,
150
- }).catch(() => { });
151
- throw err;
152
- }
153
- const runtime = {
154
- containerId,
155
- containerName,
156
- mountPath: normalized.mountPath,
157
- workdir,
158
- rootReal,
159
- };
160
- const exec = async (execArgs, options = {}) => {
161
- const args = ["exec"];
162
- if (options.input !== undefined) {
163
- args.push("-i");
164
- }
165
- if (options.cwd) {
166
- args.push("-w", options.cwd);
167
- }
168
- if (options.env) {
169
- for (const [key, value] of Object.entries(options.env)) {
170
- args.push("-e", `${key}=${value}`);
171
- }
172
- }
173
- args.push(containerId, ...execArgs);
174
- return runDocker(deps, args, options);
175
- };
176
- const dispose = async () => {
177
- await runDocker(deps, ["rm", "-f", containerId], {
178
- maxCaptureBytes: DOCKER_MAX_CAPTURE_BYTES,
179
- }).catch(() => { });
180
- };
181
- return { runtime, exec, dispose };
182
- }
183
- //# sourceMappingURL=docker_sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker_sandbox.js","sourceRoot":"","sources":["../../../../src/core/tools/sandbox/docker_sandbox.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { realpathSync } from "node:fs";
2
- import { basename, dirname, resolve } from "node:path";
3
- import { getGitRoot } from "./git.js";
4
- import { normalizeSandboxMountPath, resolveSandboxPathForHostPath, resolveSandboxWorkdir, } from "./sandbox_paths.js";
5
- function resolveSandboxCwd(cwd, config) {
6
- const mountPath = normalizeSandboxMountPath(config?.mountPath);
7
- try {
8
- const root = getGitRoot(cwd) ?? cwd;
9
- const rootReal = realpathSync(root);
10
- const cwdReal = realpathSync(cwd);
11
- return resolveSandboxWorkdir({ cwdReal, rootReal, mountPath });
12
- }
13
- catch {
14
- return mountPath;
15
- }
16
- }
17
- export function resolveAgentCwd(args) {
18
- if (!args.sandboxEnabled) {
19
- return args.cwd;
20
- }
21
- return resolveSandboxCwd(args.cwd, args.sandboxConfig);
22
- }
23
- export function resolveSandboxPath(args) {
24
- const mountPath = normalizeSandboxMountPath(args.sandboxConfig?.mountPath);
25
- try {
26
- const root = getGitRoot(args.cwd) ?? args.cwd;
27
- const rootReal = realpathSync(root);
28
- const hostAbs = resolve(args.hostPath);
29
- const hostDir = dirname(hostAbs);
30
- let hostDirReal = hostDir;
31
- try {
32
- hostDirReal = realpathSync(hostDir);
33
- }
34
- catch {
35
- // fall back to resolved host dir
36
- }
37
- const hostPathRealish = resolve(hostDirReal, basename(hostAbs));
38
- return resolveSandboxPathForHostPath({
39
- hostPath: hostPathRealish,
40
- rootReal,
41
- mountPath,
42
- });
43
- }
44
- catch {
45
- return mountPath;
46
- }
47
- }
48
- //# sourceMappingURL=agent_environment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent_environment.js","sourceRoot":"","sources":["../../../src/core/utils/agent_environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,SAAS,iBAAiB,CAAC,GAAW,EAAE,MAAsB;IAC5D,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAIlC;IACC,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;QAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,WAAW,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC;YACH,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,OAAO,6BAA6B,CAAC;YACnC,QAAQ,EAAE,eAAe;YACzB,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,29 +0,0 @@
1
- import { posix as pathPosix, relative, sep } from "node:path";
2
- const DEFAULT_SANDBOX_MOUNT_PATH = "/workspace";
3
- export function normalizeSandboxMountPath(mountPath) {
4
- const trimmed = (mountPath ?? DEFAULT_SANDBOX_MOUNT_PATH).trim() || DEFAULT_SANDBOX_MOUNT_PATH;
5
- if (trimmed.endsWith("/") && trimmed.length > 1) {
6
- return trimmed.slice(0, -1);
7
- }
8
- return trimmed;
9
- }
10
- export function resolveSandboxWorkdir(args) {
11
- const relCwd = relative(args.rootReal, args.cwdReal) || ".";
12
- if (relCwd === ".." || relCwd.startsWith(`..${sep}`)) {
13
- return args.mountPath;
14
- }
15
- const relPosix = relCwd.split(sep).join(pathPosix.sep);
16
- return relPosix === "." ? args.mountPath : pathPosix.join(args.mountPath, relPosix);
17
- }
18
- export function resolveSandboxPathForHostPath(args) {
19
- const relPath = relative(args.rootReal, args.hostPath);
20
- if (!relPath || relPath === ".") {
21
- return args.mountPath;
22
- }
23
- if (relPath === ".." || relPath.startsWith(`..${sep}`)) {
24
- return args.mountPath;
25
- }
26
- const relPosix = relPath.split(sep).join(pathPosix.sep);
27
- return pathPosix.join(args.mountPath, relPosix);
28
- }
29
- //# sourceMappingURL=sandbox_paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox_paths.js","sourceRoot":"","sources":["../../../src/core/utils/sandbox_paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAEhD,MAAM,UAAU,yBAAyB,CAAC,SAAkB;IAC1D,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,0BAA0B,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;IAC/F,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;IAC5D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAI7C;IACC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC"}
@@ -1,86 +0,0 @@
1
- import { realpathSync } from "node:fs";
2
- import { isAbsolute, posix as pathPosix, relative, resolve, sep } from "node:path";
3
- import { getGitRoot } from "./git.js";
4
- import { normalizeSandboxMountPath, resolveSandboxPathForHostPath } from "./sandbox_paths.js";
5
- function resolvePathRealish(path) {
6
- try {
7
- return realpathSync(path);
8
- }
9
- catch {
10
- return resolve(path);
11
- }
12
- }
13
- function isPathWithinRoot(path, root) {
14
- const rel = relative(root, path);
15
- return rel === "" || rel === "." || !(rel === ".." || rel.startsWith(`..${sep}`));
16
- }
17
- function isSandboxPathWithinMount(path, mountPath) {
18
- const relFromMount = pathPosix.relative(mountPath, path);
19
- return !(relFromMount === ".." || relFromMount.startsWith("../"));
20
- }
21
- export function resolveSandboxPromptPathScope(args) {
22
- if (!args.sandboxEnabled) {
23
- return undefined;
24
- }
25
- const root = args.sandboxHostRoot ?? getGitRoot(args.cwd) ?? args.cwd;
26
- return {
27
- rootReal: resolvePathRealish(root),
28
- mountPath: normalizeSandboxMountPath(args.sandboxConfig?.mountPath),
29
- };
30
- }
31
- export function resolveSandboxPromptPath(path, scope) {
32
- const hostPath = resolvePathRealish(path);
33
- if (!isPathWithinRoot(hostPath, scope.rootReal)) {
34
- return undefined;
35
- }
36
- return resolveSandboxPathForHostPath({
37
- hostPath,
38
- rootReal: scope.rootReal,
39
- mountPath: scope.mountPath,
40
- });
41
- }
42
- export function resolveSandboxHostRoot(args) {
43
- if (!args.sandboxEnabled) {
44
- return undefined;
45
- }
46
- const mountPath = normalizeSandboxMountPath(args.sandboxMountPath);
47
- if (!isSandboxPathWithinMount(args.cwd, mountPath)) {
48
- return undefined;
49
- }
50
- const relFromMount = pathPosix.relative(mountPath, args.cwd);
51
- const depth = relFromMount
52
- .split(pathPosix.sep)
53
- .map((part) => part.trim())
54
- .filter((part) => part.length > 0).length;
55
- let root = resolve(args.hostCwd);
56
- for (let i = 0; i < depth; i++) {
57
- root = resolve(root, "..");
58
- }
59
- return root;
60
- }
61
- export function resolveSandboxMappedWorkingDirectory(args) {
62
- if (!args.workingDirectory) {
63
- return { cwd: args.cwd, hostCwd: args.hostCwd };
64
- }
65
- const cwd = resolve(args.cwd, args.workingDirectory);
66
- const rel = relative(args.cwd, cwd);
67
- if (args.sandboxEnabled) {
68
- const mountPath = normalizeSandboxMountPath(args.sandboxMountPath);
69
- if (!isSandboxPathWithinMount(cwd, mountPath)) {
70
- return {
71
- cwd,
72
- hostCwd: args.hostCwd,
73
- error: `workingDirectory '${cwd}' is outside sandbox mount path '${mountPath}' and ` +
74
- "cannot be mapped to host prompt context.",
75
- };
76
- }
77
- }
78
- if (!isAbsolute(args.workingDirectory)) {
79
- return { cwd, hostCwd: resolve(args.hostCwd, rel) };
80
- }
81
- if (!args.sandboxEnabled) {
82
- return { cwd, hostCwd: cwd };
83
- }
84
- return { cwd, hostCwd: resolve(args.hostCwd, rel) };
85
- }
86
- //# sourceMappingURL=sandbox_prompt_paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox_prompt_paths.js","sourceRoot":"","sources":["../../../src/core/utils/sandbox_prompt_paths.ts"],"names":[],"mappings":"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"}