@claudexor/cli 3.1.1 → 3.2.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.
- package/dist/about-command.d.ts.map +1 -1
- package/dist/accounts-projection.d.ts +8 -1
- package/dist/accounts-projection.d.ts.map +1 -1
- package/dist/accounts-projection.js +33 -20
- package/dist/accounts-projection.js.map +1 -1
- package/dist/accounts-services.d.ts +206 -0
- package/dist/accounts-services.d.ts.map +1 -0
- package/dist/accounts-services.js +71 -0
- package/dist/accounts-services.js.map +1 -0
- package/dist/acp-surface-runner.d.ts +39 -0
- package/dist/acp-surface-runner.d.ts.map +1 -1
- package/dist/acp-surface-runner.js +104 -30
- package/dist/acp-surface-runner.js.map +1 -1
- package/dist/attachment-upload.d.ts +5 -0
- package/dist/attachment-upload.d.ts.map +1 -0
- package/dist/attachment-upload.js +64 -0
- package/dist/attachment-upload.js.map +1 -0
- package/dist/belt-bridge.d.ts +2 -0
- package/dist/belt-bridge.d.ts.map +1 -0
- package/dist/belt-bridge.js +31 -0
- package/dist/belt-bridge.js.map +1 -0
- package/dist/bridge-serve.d.ts +1 -9
- package/dist/bridge-serve.d.ts.map +1 -1
- package/dist/bridge-serve.js +5 -22
- package/dist/bridge-serve.js.map +1 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +8 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/choice-input.d.ts +7 -0
- package/dist/choice-input.d.ts.map +1 -0
- package/dist/choice-input.js +17 -0
- package/dist/choice-input.js.map +1 -0
- package/dist/claude-oauth-usage.js.map +1 -1
- package/dist/claudexord-entry.d.ts +11 -0
- package/dist/claudexord-entry.d.ts.map +1 -0
- package/dist/claudexord-entry.js +42 -0
- package/dist/claudexord-entry.js.map +1 -0
- package/dist/claudexord.d.ts +2 -17
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +60 -93
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-error.d.ts.map +1 -1
- package/dist/cli-error.js +21 -11
- package/dist/cli-error.js.map +1 -1
- package/dist/cli.js +149 -170
- package/dist/cli.js.map +1 -1
- package/dist/codex-device-login.js.map +1 -1
- package/dist/codex-quota-source.js.map +1 -1
- package/dist/command-flags.d.ts +16 -1
- package/dist/command-flags.d.ts.map +1 -1
- package/dist/command-flags.js +41 -19
- package/dist/command-flags.js.map +1 -1
- package/dist/command-registry.d.ts +21 -8
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +59 -116
- package/dist/command-registry.js.map +1 -1
- package/dist/command-scope.d.ts +13 -0
- package/dist/command-scope.d.ts.map +1 -0
- package/dist/command-scope.js +61 -0
- package/dist/command-scope.js.map +1 -0
- package/dist/control-services.d.ts +1622 -982
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +39 -68
- package/dist/control-services.js.map +1 -1
- package/dist/credential-commands.d.ts.map +1 -1
- package/dist/credential-commands.js +13 -3
- package/dist/credential-commands.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-outcome.d.ts +3 -5
- package/dist/daemon-outcome.d.ts.map +1 -1
- package/dist/daemon-outcome.js +7 -19
- package/dist/daemon-outcome.js.map +1 -1
- package/dist/daemon-run.d.ts +26 -29
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +89 -97
- package/dist/daemon-run.js.map +1 -1
- package/dist/daemon-runtime-shutdown.d.ts +7 -0
- package/dist/daemon-runtime-shutdown.d.ts.map +1 -1
- package/dist/daemon-runtime-shutdown.js +29 -0
- package/dist/daemon-runtime-shutdown.js.map +1 -1
- package/dist/delegation-belt-descriptor.d.ts +20 -36
- package/dist/delegation-belt-descriptor.d.ts.map +1 -1
- package/dist/delegation-belt-descriptor.js +48 -51
- package/dist/delegation-belt-descriptor.js.map +1 -1
- package/dist/delegation-capability.d.ts +4 -0
- package/dist/delegation-capability.d.ts.map +1 -0
- package/dist/delegation-capability.js +29 -0
- package/dist/delegation-capability.js.map +1 -0
- package/dist/delegation-daemon-binding.d.ts +8 -0
- package/dist/delegation-daemon-binding.d.ts.map +1 -0
- package/dist/delegation-daemon-binding.js +18 -0
- package/dist/delegation-daemon-binding.js.map +1 -0
- package/dist/delegation-output.d.ts +18 -0
- package/dist/delegation-output.d.ts.map +1 -0
- package/dist/delegation-output.js +47 -0
- package/dist/delegation-output.js.map +1 -0
- package/dist/harness-command.d.ts +13 -0
- package/dist/harness-command.d.ts.map +1 -0
- package/dist/harness-command.js +35 -0
- package/dist/harness-command.js.map +1 -0
- package/dist/harness-installer.d.ts +79 -0
- package/dist/harness-installer.d.ts.map +1 -0
- package/dist/harness-installer.js +256 -0
- package/dist/harness-installer.js.map +1 -0
- package/dist/interaction-prompt.d.ts +19 -0
- package/dist/interaction-prompt.d.ts.map +1 -0
- package/dist/interaction-prompt.js +114 -0
- package/dist/interaction-prompt.js.map +1 -0
- package/dist/live.d.ts +2 -6
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +92 -75
- package/dist/live.js.map +1 -1
- package/dist/mcp-daemon-unavailable.d.ts +6 -0
- package/dist/mcp-daemon-unavailable.d.ts.map +1 -0
- package/dist/mcp-daemon-unavailable.js +16 -0
- package/dist/mcp-daemon-unavailable.js.map +1 -0
- package/dist/mcp-run-projections.d.ts +42 -0
- package/dist/mcp-run-projections.d.ts.map +1 -0
- package/dist/mcp-run-projections.js +74 -0
- package/dist/mcp-run-projections.js.map +1 -0
- package/dist/mcp-runner.d.ts +19 -1
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +121 -115
- package/dist/mcp-runner.js.map +1 -1
- package/dist/native-login.js.map +1 -1
- package/dist/ops-command-specs.d.ts +64 -0
- package/dist/ops-command-specs.d.ts.map +1 -0
- package/dist/ops-command-specs.js +146 -0
- package/dist/ops-command-specs.js.map +1 -0
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +23 -5
- package/dist/ops-commands.js.map +1 -1
- package/dist/orphan-reaper.js.map +1 -1
- package/dist/output-mode.d.ts +11 -0
- package/dist/output-mode.d.ts.map +1 -0
- package/dist/output-mode.js +28 -0
- package/dist/output-mode.js.map +1 -0
- package/dist/plan-question-loop.d.ts.map +1 -1
- package/dist/plan-question-loop.js +16 -13
- package/dist/plan-question-loop.js.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/primary-output.d.ts +9 -4
- package/dist/primary-output.d.ts.map +1 -1
- package/dist/primary-output.js +50 -2
- package/dist/primary-output.js.map +1 -1
- package/dist/quota-subject-universe.d.ts +6 -0
- package/dist/quota-subject-universe.d.ts.map +1 -0
- package/dist/quota-subject-universe.js +31 -0
- package/dist/quota-subject-universe.js.map +1 -0
- package/dist/registry.js.map +1 -1
- package/dist/release-command.d.ts +1 -1
- package/dist/release-command.js +2 -2
- package/dist/remote-command-specs.d.ts +45 -0
- package/dist/remote-command-specs.d.ts.map +1 -0
- package/dist/remote-command-specs.js +29 -0
- package/dist/remote-command-specs.js.map +1 -0
- package/dist/remote-command.d.ts +11 -0
- package/dist/remote-command.d.ts.map +1 -0
- package/dist/remote-command.js +262 -0
- package/dist/remote-command.js.map +1 -0
- package/dist/remote-filesystem.d.ts +33 -0
- package/dist/remote-filesystem.d.ts.map +1 -0
- package/dist/remote-filesystem.js +280 -0
- package/dist/remote-filesystem.js.map +1 -0
- package/dist/repo-asset-authority.js.map +1 -1
- package/dist/request-preflight.d.ts +11 -2
- package/dist/request-preflight.d.ts.map +1 -1
- package/dist/request-preflight.js +36 -13
- package/dist/request-preflight.js.map +1 -1
- package/dist/retry-command-specs.d.ts.map +1 -1
- package/dist/retry-command-specs.js +2 -0
- package/dist/retry-command-specs.js.map +1 -1
- package/dist/run-applicability.d.ts +74 -0
- package/dist/run-applicability.d.ts.map +1 -0
- package/dist/run-applicability.js +72 -0
- package/dist/run-applicability.js.map +1 -0
- package/dist/run-detail-projections.d.ts +39 -0
- package/dist/run-detail-projections.d.ts.map +1 -0
- package/dist/run-detail-projections.js +64 -0
- package/dist/run-detail-projections.js.map +1 -0
- package/dist/run-detail-response.d.ts +7 -0
- package/dist/run-detail-response.d.ts.map +1 -0
- package/dist/run-detail-response.js +23 -0
- package/dist/run-detail-response.js.map +1 -0
- package/dist/run-facts-projection.d.ts +22 -0
- package/dist/run-facts-projection.d.ts.map +1 -0
- package/dist/run-facts-projection.js +86 -0
- package/dist/run-facts-projection.js.map +1 -0
- package/dist/runtime-replacement-stop.d.ts +25 -0
- package/dist/runtime-replacement-stop.d.ts.map +1 -0
- package/dist/runtime-replacement-stop.js +145 -0
- package/dist/runtime-replacement-stop.js.map +1 -0
- package/dist/settings-command.d.ts +1 -0
- package/dist/settings-command.d.ts.map +1 -1
- package/dist/settings-command.js +27 -21
- package/dist/settings-command.js.map +1 -1
- package/dist/settings-service.d.ts +7 -7
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +3 -3
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-client-pty.d.ts +14 -0
- package/dist/setup-client-pty.d.ts.map +1 -0
- package/dist/setup-client-pty.js +61 -0
- package/dist/setup-client-pty.js.map +1 -0
- package/dist/setup-device-code-disclosure.d.ts +15 -0
- package/dist/setup-device-code-disclosure.d.ts.map +1 -0
- package/dist/setup-device-code-disclosure.js +52 -0
- package/dist/setup-device-code-disclosure.js.map +1 -0
- package/dist/setup-job-reducer.d.ts.map +1 -1
- package/dist/setup-job-reducer.js +1 -0
- package/dist/setup-job-reducer.js.map +1 -1
- package/dist/setup-job-store.d.ts +275 -75
- package/dist/setup-job-store.d.ts.map +1 -1
- package/dist/setup-job-store.js.map +1 -1
- package/dist/setup-job-support.js.map +1 -1
- package/dist/setup-jobs.d.ts +517 -137
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +68 -118
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-lifecycle-binding.d.ts +7 -0
- package/dist/setup-lifecycle-binding.d.ts.map +1 -1
- package/dist/setup-lifecycle-binding.js +6 -0
- package/dist/setup-lifecycle-binding.js.map +1 -1
- package/dist/setup-login-child-lifecycle.d.ts +13 -0
- package/dist/setup-login-child-lifecycle.d.ts.map +1 -0
- package/dist/setup-login-child-lifecycle.js +45 -0
- package/dist/setup-login-child-lifecycle.js.map +1 -0
- package/dist/setup-login-inline.d.ts +11 -12
- package/dist/setup-login-inline.d.ts.map +1 -1
- package/dist/setup-login-inline.js +26 -15
- package/dist/setup-login-inline.js.map +1 -1
- package/dist/setup-login-permit.d.ts +10 -0
- package/dist/setup-login-permit.d.ts.map +1 -0
- package/dist/setup-login-permit.js +52 -0
- package/dist/setup-login-permit.js.map +1 -0
- package/dist/setup-login-protocol.d.ts.map +1 -1
- package/dist/setup-login-protocol.js +9 -2
- package/dist/setup-login-protocol.js.map +1 -1
- package/dist/setup-login-runner.d.ts +1 -0
- package/dist/setup-login-runner.d.ts.map +1 -1
- package/dist/setup-login-runner.js +20 -31
- package/dist/setup-login-runner.js.map +1 -1
- package/dist/setup-supervisor.d.ts.map +1 -1
- package/dist/setup-supervisor.js.map +1 -1
- package/dist/terminal-run-output.d.ts +12 -0
- package/dist/terminal-run-output.d.ts.map +1 -0
- package/dist/terminal-run-output.js +33 -0
- package/dist/terminal-run-output.js.map +1 -0
- package/dist/thread-delivery.d.ts.map +1 -1
- package/dist/thread-delivery.js +4 -3
- package/dist/thread-delivery.js.map +1 -1
- package/dist/thread-execution-workspace.d.ts +15 -0
- package/dist/thread-execution-workspace.d.ts.map +1 -1
- package/dist/thread-execution-workspace.js +39 -5
- package/dist/thread-execution-workspace.js.map +1 -1
- package/dist/thread-turn-services.d.ts +104 -0
- package/dist/thread-turn-services.d.ts.map +1 -0
- package/dist/thread-turn-services.js +27 -0
- package/dist/thread-turn-services.js.map +1 -0
- package/package.json +23 -23
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { closeSync, constants, existsSync, lstatSync, openSync, readlinkSync, renameSync, symlinkSync, unlinkSync, } from "node:fs";
|
|
3
|
+
import { arch, homedir, platform } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { CLAUDEXOR_VERSION } from "@claudexor/util";
|
|
6
|
+
import { awaitDaemonTermination, daemonLeaseOwner, daemonDir, defaultSocketPath, socketAlive, } from "@claudexor/daemon";
|
|
7
|
+
import { ensureDaemon, connectDaemonIfRunning } from "./daemon-run.js";
|
|
8
|
+
import { controlApiFetch, CONTROL_PROTOCOL_MAJOR, handshakeControlApi } from "./live.js";
|
|
9
|
+
import { printJson, printUsageError } from "./cli-io.js";
|
|
10
|
+
import { resolveSetupLoginRunnerPath } from "./setup-job-support.js";
|
|
11
|
+
import { admitAndAwaitRuntimeReplacementStop } from "./runtime-replacement-stop.js";
|
|
12
|
+
function runtimeTarget() {
|
|
13
|
+
return `${platform()}-${arch()}`;
|
|
14
|
+
}
|
|
15
|
+
function endpointPort(baseUrl) {
|
|
16
|
+
const url = new URL(baseUrl);
|
|
17
|
+
if (url.hostname !== "127.0.0.1" && url.hostname !== "localhost" && url.hostname !== "::1") {
|
|
18
|
+
throw new Error("remote control API refused: endpoint is not loopback-bound");
|
|
19
|
+
}
|
|
20
|
+
const port = Number(url.port);
|
|
21
|
+
if (!Number.isInteger(port) || port < 1 || port > 65_535) {
|
|
22
|
+
throw new Error("remote control API reported an invalid port");
|
|
23
|
+
}
|
|
24
|
+
return port;
|
|
25
|
+
}
|
|
26
|
+
async function bootstrap() {
|
|
27
|
+
const { addr } = await ensureDaemon();
|
|
28
|
+
const identity = await handshakeControlApi(addr, "claudexor-macos-remote");
|
|
29
|
+
printJson({
|
|
30
|
+
ok: true,
|
|
31
|
+
target: runtimeTarget(),
|
|
32
|
+
version: CLAUDEXOR_VERSION,
|
|
33
|
+
buildSha: process.env["CLAUDEXOR_BUILD_SHA"] ?? "unknown",
|
|
34
|
+
protocolMajor: CONTROL_PROTOCOL_MAJOR,
|
|
35
|
+
engineVersion: identity.engineVersion,
|
|
36
|
+
engineBuildSha: identity.engineBuildSha,
|
|
37
|
+
endpoint: { host: "127.0.0.1", port: endpointPort(addr.baseUrl), token: addr.token },
|
|
38
|
+
});
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
async function probe() {
|
|
42
|
+
printJson({
|
|
43
|
+
ok: true,
|
|
44
|
+
target: runtimeTarget(),
|
|
45
|
+
platform: platform(),
|
|
46
|
+
arch: arch(),
|
|
47
|
+
home: homedir(),
|
|
48
|
+
version: CLAUDEXOR_VERSION,
|
|
49
|
+
buildSha: process.env["CLAUDEXOR_BUILD_SHA"] ?? "unknown",
|
|
50
|
+
protocolMajor: CONTROL_PROTOCOL_MAJOR,
|
|
51
|
+
});
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
export function assertRemoteEngineIdentity(observed, expectedVersion, expectedBuildSha) {
|
|
55
|
+
if (!/^\d+\.\d+\.\d+$/.test(expectedVersion) || !/^[0-9a-f]{40}$/.test(expectedBuildSha)) {
|
|
56
|
+
throw new Error("remote daemon stop received an invalid expected identity");
|
|
57
|
+
}
|
|
58
|
+
if (observed.engineVersion !== expectedVersion || observed.engineBuildSha !== expectedBuildSha) {
|
|
59
|
+
throw new Error(`remote daemon identity mismatch (expected ${expectedVersion}/${expectedBuildSha}, ` +
|
|
60
|
+
`observed ${observed.engineVersion ?? "unknown"}/${observed.engineBuildSha ?? "unknown"})`);
|
|
61
|
+
}
|
|
62
|
+
return { version: expectedVersion, buildSha: expectedBuildSha };
|
|
63
|
+
}
|
|
64
|
+
async function stop(expectedVersion, expectedBuildSha) {
|
|
65
|
+
const daemon = await connectDaemonIfRunning();
|
|
66
|
+
if (!daemon) {
|
|
67
|
+
if (daemonLeaseOwner(defaultSocketPath()) || (await socketAlive(defaultSocketPath()))) {
|
|
68
|
+
throw new Error("remote daemon is running but its Control API identity cannot be verified");
|
|
69
|
+
}
|
|
70
|
+
printJson({ ok: true, stopped: true, alreadyStopped: true });
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
const identity = await handshakeControlApi(daemon.addr, "claudexor-macos-remote-stop");
|
|
74
|
+
const expectedIdentity = assertRemoteEngineIdentity(identity, expectedVersion, expectedBuildSha);
|
|
75
|
+
const expectedOwner = daemonLeaseOwner(defaultSocketPath());
|
|
76
|
+
if (!expectedOwner) {
|
|
77
|
+
throw new Error("remote daemon is live but its writer-lease identity cannot be verified");
|
|
78
|
+
}
|
|
79
|
+
const expectedTarget = {
|
|
80
|
+
...expectedIdentity,
|
|
81
|
+
leaseOwner: { pid: expectedOwner.pid, token: expectedOwner.token },
|
|
82
|
+
};
|
|
83
|
+
const termination = await admitAndAwaitRuntimeReplacementStop(() => daemon.client.shutdownForRuntimeReplacement(expectedTarget), (options) => awaitDaemonTermination(defaultSocketPath(), options), expectedOwner);
|
|
84
|
+
if (termination.outcome === "still_alive") {
|
|
85
|
+
throw new Error(`remote daemon did not stop: ${termination.detail}`);
|
|
86
|
+
}
|
|
87
|
+
printJson({ ok: true, stopped: true, ...termination });
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
function runtimePointerTarget(value) {
|
|
91
|
+
if (value === "-")
|
|
92
|
+
return null;
|
|
93
|
+
if (!/^versions\/[A-Za-z0-9._-]+$/.test(value) || value.includes("..")) {
|
|
94
|
+
throw new Error("remote runtime pointer target is invalid");
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function readRuntimePointer(root) {
|
|
99
|
+
const current = join(root, "current");
|
|
100
|
+
try {
|
|
101
|
+
if (!lstatSync(current).isSymbolicLink()) {
|
|
102
|
+
throw new Error("remote runtime current pointer is not a symbolic link");
|
|
103
|
+
}
|
|
104
|
+
return readlinkSync(current);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error.code === "ENOENT")
|
|
108
|
+
return null;
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function replaceRuntimePointer(root, name, target) {
|
|
113
|
+
const destination = join(root, name);
|
|
114
|
+
const temporary = join(root, `.${name}.next-${process.pid}`);
|
|
115
|
+
try {
|
|
116
|
+
unlinkSync(temporary);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (error.code !== "ENOENT")
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
symlinkSync(target, temporary);
|
|
123
|
+
try {
|
|
124
|
+
// fs.rename maps to rename(2), which atomically replaces the symlink itself
|
|
125
|
+
// on both Darwin and Linux (unlike platform-divergent `mv` directory logic).
|
|
126
|
+
renameSync(temporary, destination);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
try {
|
|
130
|
+
unlinkSync(temporary);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
/* best effort */
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function switchRemoteRuntimePointer(mode, root, expectedRaw, nextRaw) {
|
|
139
|
+
const expected = runtimePointerTarget(expectedRaw);
|
|
140
|
+
const next = runtimePointerTarget(nextRaw);
|
|
141
|
+
const current = readRuntimePointer(root);
|
|
142
|
+
if (current !== expected) {
|
|
143
|
+
throw new Error(`remote runtime pointer changed concurrently (expected ${expected ?? "-"}, observed ${current ?? "-"})`);
|
|
144
|
+
}
|
|
145
|
+
if (next) {
|
|
146
|
+
const target = join(root, next);
|
|
147
|
+
if (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink()) {
|
|
148
|
+
throw new Error("remote runtime pointer target is not an immutable directory");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (current === next)
|
|
152
|
+
return;
|
|
153
|
+
if (mode === "activate" && expected) {
|
|
154
|
+
replaceRuntimePointer(root, "last-known-good", expected);
|
|
155
|
+
}
|
|
156
|
+
if (next) {
|
|
157
|
+
replaceRuntimePointer(root, "current", next);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
unlinkSync(join(root, "current"));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export async function remoteCommand(args, json) {
|
|
164
|
+
const sub = args._[1] ?? "probe";
|
|
165
|
+
if (!json) {
|
|
166
|
+
return printUsageError(false, "claudexor remote is an internal machine interface; pass --json");
|
|
167
|
+
}
|
|
168
|
+
if (sub === "stop") {
|
|
169
|
+
const expectedVersion = args._[2];
|
|
170
|
+
const expectedBuildSha = args._[3];
|
|
171
|
+
if (args._.length !== 4 ||
|
|
172
|
+
typeof expectedVersion !== "string" ||
|
|
173
|
+
typeof expectedBuildSha !== "string") {
|
|
174
|
+
return printUsageError(json, "usage: claudexor remote stop <expectedVersion> <expectedBuildSha> --json");
|
|
175
|
+
}
|
|
176
|
+
return stop(expectedVersion, expectedBuildSha);
|
|
177
|
+
}
|
|
178
|
+
if (sub === "activate" || sub === "rollback") {
|
|
179
|
+
const expected = args._[2];
|
|
180
|
+
const next = args._[3];
|
|
181
|
+
if (args._.length !== 4 || typeof expected !== "string" || typeof next !== "string") {
|
|
182
|
+
return printUsageError(json, `usage: claudexor remote ${sub} <expectedTarget|-> <nextTarget|-> --json`);
|
|
183
|
+
}
|
|
184
|
+
switchRemoteRuntimePointer(sub, join(homedir(), ".claudexor", "remote"), expected, next);
|
|
185
|
+
printJson({ ok: true, current: next === "-" ? null : next });
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
if (args._.length > 2 || (sub !== "probe" && sub !== "bootstrap")) {
|
|
189
|
+
return printUsageError(json, "usage: claudexor remote probe|bootstrap|stop|activate|rollback --json");
|
|
190
|
+
}
|
|
191
|
+
return sub === "bootstrap" ? bootstrap() : probe();
|
|
192
|
+
}
|
|
193
|
+
function waitForChild(child) {
|
|
194
|
+
return new Promise((resolve, reject) => {
|
|
195
|
+
child.once("error", reject);
|
|
196
|
+
child.once("close", (code, signal) => {
|
|
197
|
+
if (signal) {
|
|
198
|
+
process.stderr.write(`claudexor setup attach: runner exited on ${signal}\n`);
|
|
199
|
+
resolve(1);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
resolve(code ?? 1);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
export function claimSetupAttachment(directory) {
|
|
208
|
+
const path = join(directory, "client-pty-attached");
|
|
209
|
+
let descriptor;
|
|
210
|
+
try {
|
|
211
|
+
descriptor = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
throw new Error("setup job already has a client_pty attachment");
|
|
215
|
+
}
|
|
216
|
+
closeSync(descriptor);
|
|
217
|
+
}
|
|
218
|
+
export async function setupCommand(args, json) {
|
|
219
|
+
const sub = args._[1];
|
|
220
|
+
const jobId = args._[2];
|
|
221
|
+
if (sub !== "attach" ||
|
|
222
|
+
typeof jobId !== "string" ||
|
|
223
|
+
!/^setup-[A-Za-z0-9-]+$/.test(jobId) ||
|
|
224
|
+
args._.length !== 3) {
|
|
225
|
+
return printUsageError(json, "usage: claudexor setup attach <jobId>");
|
|
226
|
+
}
|
|
227
|
+
if (json) {
|
|
228
|
+
return printUsageError(true, "claudexor setup attach owns an interactive PTY and cannot use --json");
|
|
229
|
+
}
|
|
230
|
+
const daemon = await connectDaemonIfRunning();
|
|
231
|
+
if (!daemon)
|
|
232
|
+
throw new Error("setup daemon is not running");
|
|
233
|
+
const response = await controlApiFetch(daemon.addr, `/setup/jobs/${encodeURIComponent(jobId)}`);
|
|
234
|
+
const body = (await response.json());
|
|
235
|
+
if (!response.ok)
|
|
236
|
+
throw new Error(`setup job lookup failed (HTTP ${response.status})`);
|
|
237
|
+
if (body.transport !== "client_pty") {
|
|
238
|
+
throw new Error("setup job is not authorized for client_pty attachment");
|
|
239
|
+
}
|
|
240
|
+
if (!["queued", "running", "waiting_for_input"].includes(body.state ?? "") ||
|
|
241
|
+
!["launching", "awaiting_user"].includes(body.phase ?? "")) {
|
|
242
|
+
throw new Error(`setup job is not attachable (${body.state ?? "unknown"})`);
|
|
243
|
+
}
|
|
244
|
+
const artifactDirectory = join(daemonDir(), "setup-artifacts", jobId);
|
|
245
|
+
const manifest = join(artifactDirectory, "runner-manifest.json");
|
|
246
|
+
if (!existsSync(manifest))
|
|
247
|
+
throw new Error("sealed setup manifest is unavailable");
|
|
248
|
+
const runner = resolveSetupLoginRunnerPath();
|
|
249
|
+
if (!existsSync(runner))
|
|
250
|
+
throw new Error("setup login runner is unavailable");
|
|
251
|
+
// A sealed login job authorizes exactly one terminal runner. O_EXCL is the
|
|
252
|
+
// cross-process fence; the marker intentionally survives a crashed client so
|
|
253
|
+
// users cancel/recreate instead of accidentally launching the vendor login
|
|
254
|
+
// twice against one daemon-owned job.
|
|
255
|
+
claimSetupAttachment(artifactDirectory);
|
|
256
|
+
return waitForChild(spawn(process.execPath, [runner, manifest], {
|
|
257
|
+
cwd: artifactDirectory,
|
|
258
|
+
stdio: "inherit",
|
|
259
|
+
env: process.env,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=remote-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-command.js","sourceRoot":"","sources":["../src/remote-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ProjectStore } from "@claudexor/daemon";
|
|
2
|
+
import { ControlDirectoryListing } from "@claudexor/schema";
|
|
3
|
+
export declare function listRemoteDirectory(requestedPath: string | undefined, homePath?: string): {
|
|
4
|
+
path: string;
|
|
5
|
+
home: string;
|
|
6
|
+
parent: string | null;
|
|
7
|
+
entries: {
|
|
8
|
+
name: string;
|
|
9
|
+
path: string;
|
|
10
|
+
kind: "directory" | "file";
|
|
11
|
+
readable: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
truncated: boolean;
|
|
14
|
+
};
|
|
15
|
+
export interface ScopedProjectFile {
|
|
16
|
+
data: Buffer;
|
|
17
|
+
contentType: string;
|
|
18
|
+
fileName: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function readScopedProjectFile(projects: ProjectStore, projectId: string, requestedPath: string): ScopedProjectFile;
|
|
21
|
+
export interface RemoteFilesystemServices {
|
|
22
|
+
listDirectory?: (path?: string) => Promise<ControlDirectoryListing>;
|
|
23
|
+
fetchProjectFile?: (projectId: string, path: string) => Promise<ScopedProjectFile>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* QA-067: the filesystem routes exist for the SSH remote runtime (the app
|
|
27
|
+
* browses the remote host through the control tunnel). A local daemon must not
|
|
28
|
+
* grow a generic bearer-reachable filesystem surface, so the services — and
|
|
29
|
+
* with them the routes, which answer 501 without a bound service — are wired
|
|
30
|
+
* only when the process runs as the remote runtime.
|
|
31
|
+
*/
|
|
32
|
+
export declare function remoteFilesystemServices(projects: () => ProjectStore, env?: NodeJS.ProcessEnv): RemoteFilesystemServices;
|
|
33
|
+
//# sourceMappingURL=remote-filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-filesystem.d.ts","sourceRoot":"","sources":["../src/remote-filesystem.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAyF5D,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAY;;;;;;;;;;;EAwC1F;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,iBAAiB,CA6HnB;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpE,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,YAAY,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,wBAAwB,CAO1B"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { closeSync, constants, accessSync, fstatSync, openSync, readSync, readdirSync, realpathSync, statSync, } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { ControlDirectoryListing } from "@claudexor/schema";
|
|
5
|
+
const MAX_DIRECTORY_ENTRIES = 1_000;
|
|
6
|
+
const MAX_PROJECT_FILE_BYTES = 25 * 1024 * 1024;
|
|
7
|
+
// Enough bytes to identify every allowed raster signature (WebP needs 12).
|
|
8
|
+
const IMAGE_HEADER_BYTES = 12;
|
|
9
|
+
const PNG_MAGIC = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
10
|
+
/**
|
|
11
|
+
* QA-067: the project-file endpoint exists for exactly one consumer — the
|
|
12
|
+
* remote markdown image gallery. Content type is identified by magic bytes,
|
|
13
|
+
* never by file name: a file whose leading bytes are not a known raster
|
|
14
|
+
* signature is refused before any further content is read. A matching file's
|
|
15
|
+
* REMAINING bytes are then served verbatim — the sniff authenticates the
|
|
16
|
+
* header only, not the whole container, so a raster-prefixed polyglot (PNG
|
|
17
|
+
* magic + arbitrary tail) is served in full. Accepted risk: writing such a
|
|
18
|
+
* file into a registered project already requires owning the remote user.
|
|
19
|
+
* SVG is deliberately excluded: it is a scripting-capable text format, not a
|
|
20
|
+
* raster image.
|
|
21
|
+
*/
|
|
22
|
+
function sniffRasterImage(header) {
|
|
23
|
+
if (header.length >= 8 && header.subarray(0, 8).equals(PNG_MAGIC))
|
|
24
|
+
return "image/png";
|
|
25
|
+
if (header.length >= 3 && header[0] === 0xff && header[1] === 0xd8 && header[2] === 0xff) {
|
|
26
|
+
return "image/jpeg";
|
|
27
|
+
}
|
|
28
|
+
if (header.length >= 6) {
|
|
29
|
+
const gif = header.subarray(0, 6).toString("latin1");
|
|
30
|
+
if (gif === "GIF87a" || gif === "GIF89a")
|
|
31
|
+
return "image/gif";
|
|
32
|
+
}
|
|
33
|
+
if (header.length >= 12 &&
|
|
34
|
+
header.subarray(0, 4).toString("latin1") === "RIFF" &&
|
|
35
|
+
header.subarray(8, 12).toString("latin1") === "WEBP") {
|
|
36
|
+
return "image/webp";
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* QA-067: hidden trees under HOME (`~/.ssh`, `~/.gnupg`, `~/.aws`, harness
|
|
42
|
+
* homes, …) are where credentials and secret-bearing names live, and no
|
|
43
|
+
* legitimate remote project root lives inside one — so the picker neither
|
|
44
|
+
* lists a hidden directory nor lists INTO one.
|
|
45
|
+
*/
|
|
46
|
+
function hiddenUnderHome(home, canonical) {
|
|
47
|
+
const rel = relative(home, canonical);
|
|
48
|
+
if (rel === "")
|
|
49
|
+
return false;
|
|
50
|
+
return rel.split(sep).some((segment) => segment.startsWith("."));
|
|
51
|
+
}
|
|
52
|
+
function contained(root, candidate) {
|
|
53
|
+
const rel = relative(root, candidate);
|
|
54
|
+
return rel === "" || (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* QA-067: a refusal must not be an existence oracle. The listing deliberately
|
|
58
|
+
* hides hidden trees and everything outside HOME, so the four refusal causes
|
|
59
|
+
* — absent, outside home, not a directory, hidden — must be indistinguishable
|
|
60
|
+
* by status, code, and message: one typed refusal with constant text that
|
|
61
|
+
* never echoes the requested path. Distinct responses here would confirm
|
|
62
|
+
* guessed secret-bearing names the listing never discloses.
|
|
63
|
+
*/
|
|
64
|
+
function refuseDirectoryListing() {
|
|
65
|
+
throw Object.assign(new Error("directory is not listable"), {
|
|
66
|
+
status: 404,
|
|
67
|
+
code: "directory_not_listable",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function canonicalDirectory(path, root) {
|
|
71
|
+
// Shape-only validation (no filesystem state involved) may stay specific.
|
|
72
|
+
if (!isAbsolute(path)) {
|
|
73
|
+
throw Object.assign(new Error("directory path must be absolute"), { status: 400 });
|
|
74
|
+
}
|
|
75
|
+
let canonical;
|
|
76
|
+
try {
|
|
77
|
+
canonical = realpathSync(path);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
refuseDirectoryListing();
|
|
81
|
+
}
|
|
82
|
+
if (!contained(root, canonical))
|
|
83
|
+
refuseDirectoryListing();
|
|
84
|
+
if (!statSync(canonical).isDirectory())
|
|
85
|
+
refuseDirectoryListing();
|
|
86
|
+
if (hiddenUnderHome(root, canonical))
|
|
87
|
+
refuseDirectoryListing();
|
|
88
|
+
return canonical;
|
|
89
|
+
}
|
|
90
|
+
export function listRemoteDirectory(requestedPath, homePath = homedir()) {
|
|
91
|
+
const home = realpathSync(homePath);
|
|
92
|
+
const path = canonicalDirectory(requestedPath || home, home);
|
|
93
|
+
const candidates = [];
|
|
94
|
+
for (const name of readdirSync(path)) {
|
|
95
|
+
// QA-067: project selection needs visible directories only — file names
|
|
96
|
+
// and dot-entries are undisclosed (they can carry secret-bearing names).
|
|
97
|
+
if (name.startsWith("."))
|
|
98
|
+
continue;
|
|
99
|
+
const lexical = join(path, name);
|
|
100
|
+
try {
|
|
101
|
+
const target = realpathSync(lexical);
|
|
102
|
+
if (!contained(home, target) || hiddenUnderHome(home, target))
|
|
103
|
+
continue;
|
|
104
|
+
const stat = statSync(target);
|
|
105
|
+
if (!stat.isDirectory())
|
|
106
|
+
continue;
|
|
107
|
+
let readable = true;
|
|
108
|
+
try {
|
|
109
|
+
accessSync(target, constants.R_OK);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
readable = false;
|
|
113
|
+
}
|
|
114
|
+
candidates.push({
|
|
115
|
+
name,
|
|
116
|
+
path: target,
|
|
117
|
+
kind: "directory",
|
|
118
|
+
readable,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Broken and inaccessible symlinks are not actionable picker entries.
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
candidates.sort((left, right) => left.name.localeCompare(right.name));
|
|
126
|
+
const entries = candidates.slice(0, MAX_DIRECTORY_ENTRIES);
|
|
127
|
+
const parentPath = path === home ? null : resolve(path, "..");
|
|
128
|
+
return ControlDirectoryListing.parse({
|
|
129
|
+
path,
|
|
130
|
+
home,
|
|
131
|
+
parent: parentPath && contained(home, parentPath) ? parentPath : null,
|
|
132
|
+
entries,
|
|
133
|
+
truncated: candidates.length > MAX_DIRECTORY_ENTRIES,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
export function readScopedProjectFile(projects, projectId, requestedPath) {
|
|
137
|
+
const project = projects.get(projectId);
|
|
138
|
+
if (!project)
|
|
139
|
+
throw Object.assign(new Error(`no such project: ${projectId}`), { status: 404 });
|
|
140
|
+
if (!requestedPath ||
|
|
141
|
+
isAbsolute(requestedPath) ||
|
|
142
|
+
requestedPath.includes("\0") ||
|
|
143
|
+
requestedPath.split(/[\\/]/).includes("..")) {
|
|
144
|
+
throw Object.assign(new Error("project file path must be a contained relative path"), {
|
|
145
|
+
status: 400,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const root = realpathSync(project.root);
|
|
149
|
+
const lexical = resolve(root, requestedPath);
|
|
150
|
+
let canonical;
|
|
151
|
+
let expected;
|
|
152
|
+
try {
|
|
153
|
+
canonical = realpathSync(lexical);
|
|
154
|
+
expected = statSync(canonical);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
throw Object.assign(new Error("project file does not exist"), { status: 404 });
|
|
158
|
+
}
|
|
159
|
+
if (!contained(root, canonical)) {
|
|
160
|
+
throw Object.assign(new Error("project file path escapes its registered project"), {
|
|
161
|
+
status: 403,
|
|
162
|
+
code: "project_file_path_escape",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
let descriptor;
|
|
166
|
+
try {
|
|
167
|
+
descriptor = openSync(canonical, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
throw Object.assign(new Error("project file changed or is not a regular file"), {
|
|
171
|
+
status: 409,
|
|
172
|
+
code: "project_file_changed",
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const openedPath = openedDescriptorPath(descriptor, canonical);
|
|
177
|
+
if (!contained(root, openedPath)) {
|
|
178
|
+
throw Object.assign(new Error("opened project file escapes its registered project"), {
|
|
179
|
+
status: 403,
|
|
180
|
+
code: "project_file_path_escape",
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const before = fstatSync(descriptor);
|
|
184
|
+
if (before.dev !== expected.dev || before.ino !== expected.ino || !before.isFile()) {
|
|
185
|
+
throw Object.assign(new Error("project file changed before it was opened"), {
|
|
186
|
+
status: 409,
|
|
187
|
+
code: "project_file_changed",
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (before.size > MAX_PROJECT_FILE_BYTES) {
|
|
191
|
+
throw Object.assign(new Error(`project file exceeds the ${MAX_PROJECT_FILE_BYTES} byte fetch limit`), { status: 413, code: "project_file_too_large" });
|
|
192
|
+
}
|
|
193
|
+
const buffer = Buffer.allocUnsafe(Math.min(MAX_PROJECT_FILE_BYTES + 1, before.size + 1));
|
|
194
|
+
let bytes = 0;
|
|
195
|
+
// Sniff the magic bytes FIRST: a non-image is refused before its content
|
|
196
|
+
// is read (QA-067 — this endpoint must never page a secret into memory).
|
|
197
|
+
while (bytes < Math.min(IMAGE_HEADER_BYTES, buffer.length)) {
|
|
198
|
+
const count = readSync(descriptor, buffer, bytes, Math.min(IMAGE_HEADER_BYTES, buffer.length) - bytes, null);
|
|
199
|
+
if (count === 0)
|
|
200
|
+
break;
|
|
201
|
+
bytes += count;
|
|
202
|
+
}
|
|
203
|
+
const contentType = sniffRasterImage(buffer.subarray(0, bytes));
|
|
204
|
+
if (!contentType) {
|
|
205
|
+
throw Object.assign(new Error("project file fetch serves raster images only"), {
|
|
206
|
+
status: 415,
|
|
207
|
+
code: "project_file_not_raster_image",
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
for (;;) {
|
|
211
|
+
const count = readSync(descriptor, buffer, bytes, buffer.length - bytes, null);
|
|
212
|
+
if (count === 0)
|
|
213
|
+
break;
|
|
214
|
+
bytes += count;
|
|
215
|
+
if (bytes > MAX_PROJECT_FILE_BYTES) {
|
|
216
|
+
throw Object.assign(new Error(`project file exceeds the ${MAX_PROJECT_FILE_BYTES} byte fetch limit`), { status: 413, code: "project_file_too_large" });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const after = fstatSync(descriptor);
|
|
220
|
+
let finalPath;
|
|
221
|
+
let final;
|
|
222
|
+
try {
|
|
223
|
+
finalPath = realpathSync(lexical);
|
|
224
|
+
final = statSync(finalPath);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
throw Object.assign(new Error("project file changed while it was being read"), {
|
|
228
|
+
status: 409,
|
|
229
|
+
code: "project_file_changed",
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (before.dev !== after.dev ||
|
|
233
|
+
before.ino !== after.ino ||
|
|
234
|
+
after.size !== bytes ||
|
|
235
|
+
final.dev !== after.dev ||
|
|
236
|
+
final.ino !== after.ino ||
|
|
237
|
+
finalPath !== canonical) {
|
|
238
|
+
throw Object.assign(new Error("project file changed while it was being read"), {
|
|
239
|
+
status: 409,
|
|
240
|
+
code: "project_file_changed",
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
data: buffer.subarray(0, bytes),
|
|
245
|
+
contentType,
|
|
246
|
+
fileName: openedPath.split(sep).at(-1) ?? "remote-file",
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
finally {
|
|
250
|
+
closeSync(descriptor);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* QA-067: the filesystem routes exist for the SSH remote runtime (the app
|
|
255
|
+
* browses the remote host through the control tunnel). A local daemon must not
|
|
256
|
+
* grow a generic bearer-reachable filesystem surface, so the services — and
|
|
257
|
+
* with them the routes, which answer 501 without a bound service — are wired
|
|
258
|
+
* only when the process runs as the remote runtime.
|
|
259
|
+
*/
|
|
260
|
+
export function remoteFilesystemServices(projects, env = process.env) {
|
|
261
|
+
if (env.CLAUDEXOR_REMOTE_RUNTIME !== "1")
|
|
262
|
+
return {};
|
|
263
|
+
return {
|
|
264
|
+
listDirectory: async (path) => listRemoteDirectory(path),
|
|
265
|
+
fetchProjectFile: async (projectId, path) => readScopedProjectFile(projects(), projectId, path),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
function openedDescriptorPath(descriptor, fallback) {
|
|
269
|
+
// Linux exposes the kernel-bound pathname for an open descriptor. Darwin's
|
|
270
|
+
// /dev/fd entries are not symlinks and realpath cannot recover F_GETPATH, so
|
|
271
|
+
// the inode checks before and after the bounded descriptor read remain the
|
|
272
|
+
// portability fence there.
|
|
273
|
+
try {
|
|
274
|
+
return realpathSync(`/proc/self/fd/${descriptor}`);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return fallback;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=remote-filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-filesystem.js","sourceRoot":"","sources":["../src/remote-filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-asset-authority.js","sourceRoot":"","sources":["../src/repo-asset-authority.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,sEAAsE;AACtE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AACrE,6DAA6D;AAC7D,EAAE;AACF,6EAA6E;AAC7E,uEAAuE;AACvE,uEAAuE;AACvE,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AA+B7E,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAsD;IAEtD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwD,CAAC;IACpF,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,OAAO,KAAK,EAAE,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtD,iBAAiB,IAAI,KAAK,CAAC;YAC3B,IAAI,YAAY;gBAAE,qBAAqB,IAAI,KAAK,CAAC;YACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;gBACpB,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK;gBAC7C,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,YAAY;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;SACpF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AAChE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CACtC,QAAsD;IAEtD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,QAAQ,GAAG,GAAG;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;AAC1D,CAAC;AAYD,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"repo-asset-authority.js","sourceRoot":"","sources":["../src/repo-asset-authority.ts"],"names":[],"mappings":"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"}
|