@claudexor/cli 3.1.2 → 3.3.7-rc.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 +208 -0
- package/dist/accounts-services.d.ts.map +1 -0
- package/dist/accounts-services.js +88 -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/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +6 -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.d.ts.map +1 -1
- package/dist/claude-oauth-usage.js +13 -1
- package/dist/claude-oauth-usage.js.map +1 -1
- package/dist/claudexord-entry.js.map +1 -1
- package/dist/claudexord.d.ts +1 -13
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +57 -94
- 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 +143 -163
- 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 +1638 -1003
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +49 -67
- 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 +21 -12
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +59 -40
- 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.js.map +1 -1
- package/dist/delegation-output.d.ts +2 -0
- package/dist/delegation-output.d.ts.map +1 -1
- package/dist/delegation-output.js +3 -1
- package/dist/delegation-output.js.map +1 -1
- 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 +88 -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 +30 -0
- package/dist/mcp-run-projections.d.ts.map +1 -1
- package/dist/mcp-run-projections.js +17 -17
- package/dist/mcp-run-projections.js.map +1 -1
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +81 -39
- 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 +17 -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/retention-service.d.ts.map +1 -1
- package/dist/retention-service.js +6 -1
- package/dist/retention-service.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 +80 -0
- package/dist/run-applicability.js.map +1 -0
- package/dist/run-detail-projections.d.ts +23 -0
- package/dist/run-detail-projections.d.ts.map +1 -1
- package/dist/run-detail-projections.js +32 -1
- package/dist/run-detail-projections.js.map +1 -1
- 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-continuity-context.d.ts +36 -0
- package/dist/thread-continuity-context.d.ts.map +1 -0
- package/dist/thread-continuity-context.js +33 -0
- package/dist/thread-continuity-context.js.map +1 -0
- 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 +107 -0
- package/dist/thread-turn-services.d.ts.map +1 -0
- package/dist/thread-turn-services.js +28 -0
- package/dist/thread-turn-services.js.map +1 -0
- package/package.json +23 -23
package/dist/primary-output.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { lstatSync, realpathSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
2
3
|
import { readTextSafe } from "@claudexor/util";
|
|
3
4
|
export function primaryOutputCandidatesForCli(mode) {
|
|
4
5
|
return mode === "ask"
|
|
@@ -14,12 +15,59 @@ export function primaryOutputCandidatesForCli(mode) {
|
|
|
14
15
|
{ kind: "patch", path: "final/patch.diff" },
|
|
15
16
|
];
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
function presentationArtifactText(root, path) {
|
|
19
|
+
try {
|
|
20
|
+
if (path.includes("\0") || path.includes("\\") || isAbsolute(path))
|
|
21
|
+
return null;
|
|
22
|
+
const parts = path.split("/");
|
|
23
|
+
if (parts.some((part) => part.length === 0 || part === "." || part === ".."))
|
|
24
|
+
return null;
|
|
25
|
+
const rootStat = lstatSync(root);
|
|
26
|
+
if (!rootStat.isDirectory() || rootStat.isSymbolicLink())
|
|
27
|
+
return null;
|
|
28
|
+
const canonicalRoot = realpathSync(root);
|
|
29
|
+
const absolute = resolve(canonicalRoot, path);
|
|
30
|
+
const rel = relative(canonicalRoot, absolute);
|
|
31
|
+
if (rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel))
|
|
32
|
+
return null;
|
|
33
|
+
const stat = lstatSync(absolute);
|
|
34
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
35
|
+
return null;
|
|
36
|
+
const real = realpathSync(absolute);
|
|
37
|
+
const realRel = relative(canonicalRoot, real);
|
|
38
|
+
if (realRel === ".." || realRel.startsWith(`..${sep}`) || isAbsolute(realRel))
|
|
39
|
+
return null;
|
|
40
|
+
return readTextSafe(real);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function primaryOutputForCli(root, mode, context = {}) {
|
|
47
|
+
if (context.presentation) {
|
|
48
|
+
const primary = context.presentation.primary;
|
|
49
|
+
if (!primary)
|
|
50
|
+
return null;
|
|
51
|
+
const text = presentationArtifactText(root, primary.path);
|
|
52
|
+
return text?.trim() ? { ...primary, text } : null;
|
|
53
|
+
}
|
|
18
54
|
for (const candidate of primaryOutputCandidatesForCli(mode)) {
|
|
19
55
|
const text = readTextSafe(join(root, candidate.path));
|
|
20
56
|
if (text?.trim())
|
|
21
57
|
return { ...candidate, text };
|
|
22
58
|
}
|
|
59
|
+
if (mode === "ask" && context.lifecycle === "cancelled") {
|
|
60
|
+
const text = readTextSafe(join(root, "final/summary.md"));
|
|
61
|
+
if (text?.trim())
|
|
62
|
+
return { kind: "diagnostic", path: "final/summary.md", text };
|
|
63
|
+
}
|
|
64
|
+
if (context.failure) {
|
|
65
|
+
return {
|
|
66
|
+
kind: "diagnostic",
|
|
67
|
+
path: context.failure.rawDetailRef ?? "final/failure.yaml",
|
|
68
|
+
text: context.failure.safeMessage,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
23
71
|
const failure = readTextSafe(join(root, "final/failure.yaml"));
|
|
24
72
|
return failure?.trim() ? { kind: "diagnostic", path: "final/failure.yaml", text: failure } : null;
|
|
25
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primary-output.js","sourceRoot":"","sources":["../src/primary-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"primary-output.js","sourceRoot":"","sources":["../src/primary-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QuotaSubject } from "@claudexor/schema";
|
|
2
|
+
/** The registered quota-subject universe for each harness's default credential
|
|
3
|
+
* plus every enabled config-directory profile. Missing refresh results remain
|
|
4
|
+
* visible as typed no-source absences because the universe is config-derived. */
|
|
5
|
+
export declare function quotaSubjectUniverseFromConfig(): QuotaSubject[];
|
|
6
|
+
//# sourceMappingURL=quota-subject-universe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-subject-universe.d.ts","sourceRoot":"","sources":["../src/quota-subject-universe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;iFAEiF;AACjF,wBAAgB,8BAA8B,IAAI,YAAY,EAAE,CAsB/D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { loadConfig } from "@claudexor/config";
|
|
2
|
+
import { noProjectRepoRoot } from "@claudexor/util";
|
|
3
|
+
/** The registered quota-subject universe for each harness's default credential
|
|
4
|
+
* plus every enabled config-directory profile. Missing refresh results remain
|
|
5
|
+
* visible as typed no-source absences because the universe is config-derived. */
|
|
6
|
+
export function quotaSubjectUniverseFromConfig() {
|
|
7
|
+
const profiles = loadConfig(noProjectRepoRoot()).global.credential_profiles;
|
|
8
|
+
const subjects = [];
|
|
9
|
+
for (const harness of ["claude", "codex"]) {
|
|
10
|
+
subjects.push({
|
|
11
|
+
harness,
|
|
12
|
+
credential_route: "vendor_native",
|
|
13
|
+
plan_label: null,
|
|
14
|
+
subject_id: null,
|
|
15
|
+
});
|
|
16
|
+
for (const profile of profiles) {
|
|
17
|
+
if (profile.harness_id !== harness || !profile.enabled)
|
|
18
|
+
continue;
|
|
19
|
+
if (profile.credential_kind !== "config_dir_login")
|
|
20
|
+
continue;
|
|
21
|
+
subjects.push({
|
|
22
|
+
harness,
|
|
23
|
+
credential_route: "vendor_native",
|
|
24
|
+
plan_label: null,
|
|
25
|
+
subject_id: profile.profile_id,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return subjects;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=quota-subject-universe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-subject-universe.js","sourceRoot":"","sources":["../src/quota-subject-universe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;iFAEiF;AACjF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;IAC5E,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAU,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO;YACP,gBAAgB,EAAE,eAAe;YACjC,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,SAAS;YACjE,IAAI,OAAO,CAAC,eAAe,KAAK,kBAAkB;gBAAE,SAAS;YAC7D,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO;gBACP,gBAAgB,EAAE,eAAe;gBACjC,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOjE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { ParsedArgs } from "./args.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* `claudexor release <sub>` dispatch, kept out of cli.ts so the top-level
|
|
4
4
|
* switch stays thin (complexity ratchet). Three read-only subcommands:
|
|
5
|
-
* check-name
|
|
5
|
+
* check-name [name] naming gate across public registries (defaults to Claudexor)
|
|
6
6
|
* check engine-runtime update check (M7 D22 — same manifest the
|
|
7
7
|
* macOS app auto-updater reads; npm users update via npm)
|
|
8
8
|
* stats owner-facing install counter (M7 D23 — GitHub asset
|
package/dist/release-command.js
CHANGED
|
@@ -23,7 +23,7 @@ async function resolveRunningEngineVersion() {
|
|
|
23
23
|
/**
|
|
24
24
|
* `claudexor release <sub>` dispatch, kept out of cli.ts so the top-level
|
|
25
25
|
* switch stays thin (complexity ratchet). Three read-only subcommands:
|
|
26
|
-
* check-name
|
|
26
|
+
* check-name [name] naming gate across public registries (defaults to Claudexor)
|
|
27
27
|
* check engine-runtime update check (M7 D22 — same manifest the
|
|
28
28
|
* macOS app auto-updater reads; npm users update via npm)
|
|
29
29
|
* stats owner-facing install counter (M7 D23 — GitHub asset
|
|
@@ -90,6 +90,6 @@ export async function releaseCommand(args, json) {
|
|
|
90
90
|
}
|
|
91
91
|
return 0;
|
|
92
92
|
}
|
|
93
|
-
return printUsageError(json, "usage: claudexor release check-name
|
|
93
|
+
return printUsageError(json, "usage: claudexor release check-name [name] | check | stats");
|
|
94
94
|
}
|
|
95
95
|
//# sourceMappingURL=release-command.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const REMOTE_COMMAND_SPECS: readonly [{
|
|
2
|
+
readonly id: "remote";
|
|
3
|
+
readonly positionalPatterns: readonly [{
|
|
4
|
+
readonly min: 0;
|
|
5
|
+
readonly max: 0;
|
|
6
|
+
}, {
|
|
7
|
+
readonly prefix: readonly ["probe"];
|
|
8
|
+
readonly min: 1;
|
|
9
|
+
readonly max: 1;
|
|
10
|
+
}, {
|
|
11
|
+
readonly prefix: readonly ["bootstrap"];
|
|
12
|
+
readonly min: 1;
|
|
13
|
+
readonly max: 1;
|
|
14
|
+
}, {
|
|
15
|
+
readonly prefix: readonly ["stop"];
|
|
16
|
+
readonly min: 3;
|
|
17
|
+
readonly max: 3;
|
|
18
|
+
}, {
|
|
19
|
+
readonly prefix: readonly ["activate"];
|
|
20
|
+
readonly min: 3;
|
|
21
|
+
readonly max: 3;
|
|
22
|
+
}, {
|
|
23
|
+
readonly prefix: readonly ["rollback"];
|
|
24
|
+
readonly min: 3;
|
|
25
|
+
readonly max: 3;
|
|
26
|
+
}];
|
|
27
|
+
readonly usageArgs: "probe|bootstrap|stop <expectedVersion> <expectedBuildSha>|activate <expectedTarget|-> <nextTarget|->|rollback <expectedTarget|-> <nextTarget|-> --json";
|
|
28
|
+
readonly summary: "Internal SSH runtime bootstrap interface";
|
|
29
|
+
readonly flags: readonly ["json"];
|
|
30
|
+
readonly mutability: "ops";
|
|
31
|
+
readonly stability: "experimental";
|
|
32
|
+
}, {
|
|
33
|
+
readonly id: "setup";
|
|
34
|
+
readonly positionalPatterns: readonly [{
|
|
35
|
+
readonly prefix: readonly ["attach"];
|
|
36
|
+
readonly min: 2;
|
|
37
|
+
readonly max: 2;
|
|
38
|
+
}];
|
|
39
|
+
readonly usageArgs: "attach <jobId>";
|
|
40
|
+
readonly summary: "Attach this PTY to a daemon-prepared setup login";
|
|
41
|
+
readonly flags: readonly [];
|
|
42
|
+
readonly mutability: "ops";
|
|
43
|
+
readonly stability: "experimental";
|
|
44
|
+
}];
|
|
45
|
+
//# sourceMappingURL=remote-command-specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-command-specs.d.ts","sourceRoot":"","sources":["../src/remote-command-specs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB;iBAEzB,QAAQ;;sBAGH,CAAC;sBAAO,CAAC;;;sBACU,CAAC;sBAAO,CAAC;;;sBACL,CAAC;sBAAO,CAAC;;;sBACd,CAAC;sBAAO,CAAC;;;sBACL,CAAC;sBAAO,CAAC;;;sBACT,CAAC;sBAAO,CAAC;;wBAGtC,wJAAwJ;sBACjJ,0CAA0C;;yBAEvC,KAAK;wBACN,cAAc;;iBAGrB,OAAO;;;sBACqC,CAAC;sBAAO,CAAC;;wBAC9C,gBAAgB;sBAClB,kDAAkD;;yBAE/C,KAAK;wBACN,cAAc;EAEiB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const REMOTE_COMMAND_SPECS = [
|
|
2
|
+
{
|
|
3
|
+
id: "remote",
|
|
4
|
+
positionalPatterns: [
|
|
5
|
+
// The handler's long-standing default action: `remote --json` is probe.
|
|
6
|
+
{ min: 0, max: 0 },
|
|
7
|
+
{ prefix: ["probe"], min: 1, max: 1 },
|
|
8
|
+
{ prefix: ["bootstrap"], min: 1, max: 1 },
|
|
9
|
+
{ prefix: ["stop"], min: 3, max: 3 },
|
|
10
|
+
{ prefix: ["activate"], min: 3, max: 3 },
|
|
11
|
+
{ prefix: ["rollback"], min: 3, max: 3 },
|
|
12
|
+
],
|
|
13
|
+
usageArgs: "probe|bootstrap|stop <expectedVersion> <expectedBuildSha>|activate <expectedTarget|-> <nextTarget|->|rollback <expectedTarget|-> <nextTarget|-> --json",
|
|
14
|
+
summary: "Internal SSH runtime bootstrap interface",
|
|
15
|
+
flags: ["json"],
|
|
16
|
+
mutability: "ops",
|
|
17
|
+
stability: "experimental",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: "setup",
|
|
21
|
+
positionalPatterns: [{ prefix: ["attach"], min: 2, max: 2 }],
|
|
22
|
+
usageArgs: "attach <jobId>",
|
|
23
|
+
summary: "Attach this PTY to a daemon-prepared setup login",
|
|
24
|
+
flags: [],
|
|
25
|
+
mutability: "ops",
|
|
26
|
+
stability: "experimental",
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=remote-command-specs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-command-specs.js","sourceRoot":"","sources":["../src/remote-command-specs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC;QACE,EAAE,EAAE,QAAQ;QACZ,kBAAkB,EAAE;YAClB,wEAAwE;YACxE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YAClB,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACrC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACzC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACpC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;YACxC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SACzC;QACD,SAAS,EACP,wJAAwJ;QAC1J,OAAO,EAAE,0CAA0C;QACnD,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,cAAc;KAC1B;IACD;QACE,EAAE,EAAE,OAAO;QACX,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC5D,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,kDAAkD;QAC3D,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,cAAc;KAC1B;CAC2C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RuntimeReplacementIdentity } from "@claudexor/daemon";
|
|
2
|
+
import { type ParsedArgs } from "./args.js";
|
|
3
|
+
export declare function assertRemoteEngineIdentity(observed: {
|
|
4
|
+
engineVersion: string | null;
|
|
5
|
+
engineBuildSha: string | null;
|
|
6
|
+
}, expectedVersion: string, expectedBuildSha: string): RuntimeReplacementIdentity;
|
|
7
|
+
export declare function switchRemoteRuntimePointer(mode: "activate" | "rollback", root: string, expectedRaw: string, nextRaw: string): void;
|
|
8
|
+
export declare function remoteCommand(args: ParsedArgs, json: boolean): Promise<number>;
|
|
9
|
+
export declare function claimSetupAttachment(directory: string): void;
|
|
10
|
+
export declare function setupCommand(args: ParsedArgs, json: boolean): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=remote-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-command.d.ts","sourceRoot":"","sources":["../src/remote-command.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,0BAA0B,EAOhC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAqD5C,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACzE,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,0BAA0B,CAW5B;AA6ED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,UAAU,GAAG,UAAU,EAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,IAAI,CAwBN;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCpF;AAgBD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAa5D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDnF"}
|
|
@@ -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"}
|