@claudexor/cli 1.0.1 → 2.1.2
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/acp-surface-runner.d.ts +17 -0
- package/dist/acp-surface-runner.d.ts.map +1 -0
- package/dist/acp-surface-runner.js +187 -0
- package/dist/acp-surface-runner.js.map +1 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js.map +1 -1
- package/dist/bridge-serve.d.ts +3 -0
- package/dist/bridge-serve.d.ts.map +1 -0
- package/dist/bridge-serve.js +39 -0
- package/dist/bridge-serve.js.map +1 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +12 -3
- package/dist/capabilities.js.map +1 -1
- package/dist/claude-oauth-usage.d.ts +33 -0
- package/dist/claude-oauth-usage.d.ts.map +1 -0
- package/dist/claude-oauth-usage.js +190 -0
- package/dist/claude-oauth-usage.js.map +1 -0
- package/dist/claude-statusline.d.ts +25 -0
- package/dist/claude-statusline.d.ts.map +1 -0
- package/dist/claude-statusline.js +259 -0
- package/dist/claude-statusline.js.map +1 -0
- package/dist/claudexord.js +346 -543
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-io.d.ts +8 -9
- package/dist/cli-io.d.ts.map +1 -1
- package/dist/cli-io.js +11 -7
- package/dist/cli-io.js.map +1 -1
- package/dist/cli.js +475 -516
- package/dist/cli.js.map +1 -1
- package/dist/codex-quota-source.d.ts +11 -0
- package/dist/codex-quota-source.d.ts.map +1 -0
- package/dist/codex-quota-source.js +181 -0
- package/dist/codex-quota-source.js.map +1 -0
- package/dist/command-flags.d.ts +18 -0
- package/dist/command-flags.d.ts.map +1 -0
- package/dist/command-flags.js +124 -0
- package/dist/command-flags.js.map +1 -0
- package/dist/command-registry.d.ts +2 -40
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +74 -164
- package/dist/command-registry.js.map +1 -1
- package/dist/control-services.d.ts +2483 -0
- package/dist/control-services.d.ts.map +1 -0
- package/dist/control-services.js +437 -0
- package/dist/control-services.js.map +1 -0
- package/dist/credential-commands.d.ts +9 -0
- package/dist/credential-commands.d.ts.map +1 -0
- package/dist/credential-commands.js +224 -0
- package/dist/credential-commands.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +7 -3
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +40 -12
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-run.d.ts +2 -0
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +62 -14
- package/dist/daemon-run.js.map +1 -1
- package/dist/daemon-runtime-shutdown.d.ts +58 -0
- package/dist/daemon-runtime-shutdown.d.ts.map +1 -0
- package/dist/daemon-runtime-shutdown.js +142 -0
- package/dist/daemon-runtime-shutdown.js.map +1 -0
- package/dist/decision.d.ts.map +1 -1
- package/dist/decision.js +12 -3
- package/dist/decision.js.map +1 -1
- package/dist/live.d.ts +29 -0
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +117 -6
- package/dist/live.js.map +1 -1
- package/dist/local-attachment.d.ts +14 -0
- package/dist/local-attachment.d.ts.map +1 -0
- package/dist/local-attachment.js +67 -0
- package/dist/local-attachment.js.map +1 -0
- package/dist/mcp-runner.d.ts +4 -15
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +273 -145
- package/dist/mcp-runner.js.map +1 -1
- package/dist/native-login.d.ts +21 -0
- package/dist/native-login.d.ts.map +1 -0
- package/dist/native-login.js +111 -0
- package/dist/native-login.js.map +1 -0
- package/dist/ops-commands.d.ts +8 -6
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +250 -168
- package/dist/ops-commands.js.map +1 -1
- package/dist/orchestrate-options.d.ts.map +1 -1
- package/dist/orchestrate-options.js +1 -1
- package/dist/orchestrate-options.js.map +1 -1
- package/dist/orphan-reaper.d.ts +4 -5
- package/dist/orphan-reaper.d.ts.map +1 -1
- package/dist/orphan-reaper.js +29 -56
- package/dist/orphan-reaper.js.map +1 -1
- package/dist/orphan-sweeper.d.ts +1 -2
- package/dist/orphan-sweeper.d.ts.map +1 -1
- package/dist/orphan-sweeper.js +29 -48
- package/dist/orphan-sweeper.js.map +1 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +196 -64
- package/dist/plugins.js.map +1 -1
- package/dist/primary-output.d.ts.map +1 -1
- package/dist/primary-output.js.map +1 -1
- package/dist/profile-registration.d.ts +15 -0
- package/dist/profile-registration.d.ts.map +1 -0
- package/dist/profile-registration.js +68 -0
- package/dist/profile-registration.js.map +1 -0
- package/dist/project-command.d.ts +3 -0
- package/dist/project-command.d.ts.map +1 -0
- package/dist/project-command.js +87 -0
- package/dist/project-command.js.map +1 -0
- package/dist/quota-command.d.ts +3 -0
- package/dist/quota-command.d.ts.map +1 -0
- package/dist/quota-command.js +59 -0
- package/dist/quota-command.js.map +1 -0
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +16 -4
- package/dist/registry.js.map +1 -1
- package/dist/release.d.ts.map +1 -1
- package/dist/release.js +15 -3
- package/dist/release.js.map +1 -1
- package/dist/repl.d.ts +3 -8
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +23 -122
- package/dist/repl.js.map +1 -1
- package/dist/request-preflight.d.ts +13 -0
- package/dist/request-preflight.d.ts.map +1 -0
- package/dist/request-preflight.js +81 -0
- package/dist/request-preflight.js.map +1 -0
- package/dist/retention-service.d.ts +24 -0
- package/dist/retention-service.d.ts.map +1 -0
- package/dist/retention-service.js +100 -0
- package/dist/retention-service.js.map +1 -0
- package/dist/retry-command-specs.d.ts +3 -0
- package/dist/retry-command-specs.d.ts.map +1 -0
- package/dist/retry-command-specs.js +21 -0
- package/dist/retry-command-specs.js.map +1 -0
- package/dist/retry-command.d.ts +4 -0
- package/dist/retry-command.d.ts.map +1 -0
- package/dist/retry-command.js +57 -0
- package/dist/retry-command.js.map +1 -0
- package/dist/review-command.d.ts.map +1 -1
- package/dist/review-command.js +47 -12
- package/dist/review-command.js.map +1 -1
- package/dist/run-options.d.ts +2 -2
- package/dist/run-options.d.ts.map +1 -1
- package/dist/run-options.js +27 -5
- package/dist/run-options.js.map +1 -1
- package/dist/settings-command.d.ts.map +1 -1
- package/dist/settings-command.js +143 -188
- package/dist/settings-command.js.map +1 -1
- package/dist/settings-service.d.ts +50 -0
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +67 -1
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-job-reducer.d.ts +9 -0
- package/dist/setup-job-reducer.d.ts.map +1 -0
- package/dist/setup-job-reducer.js +290 -0
- package/dist/setup-job-reducer.js.map +1 -0
- package/dist/setup-job-store.d.ts +250 -0
- package/dist/setup-job-store.d.ts.map +1 -0
- package/dist/setup-job-store.js +359 -0
- package/dist/setup-job-store.js.map +1 -0
- package/dist/setup-job-support.d.ts +27 -0
- package/dist/setup-job-support.d.ts.map +1 -0
- package/dist/setup-job-support.js +141 -0
- package/dist/setup-job-support.js.map +1 -0
- package/dist/setup-jobs.d.ts +437 -22
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +813 -423
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-lifecycle-binding.d.ts +40 -0
- package/dist/setup-lifecycle-binding.d.ts.map +1 -0
- package/dist/setup-lifecycle-binding.js +159 -0
- package/dist/setup-lifecycle-binding.js.map +1 -0
- package/dist/setup-login-protocol.d.ts +13 -0
- package/dist/setup-login-protocol.d.ts.map +1 -0
- package/dist/setup-login-protocol.js +179 -0
- package/dist/setup-login-protocol.js.map +1 -0
- package/dist/setup-login-runner.d.ts +20 -0
- package/dist/setup-login-runner.d.ts.map +1 -0
- package/dist/setup-login-runner.js +225 -0
- package/dist/setup-login-runner.js.map +1 -0
- package/dist/setup-supervisor.d.ts +53 -0
- package/dist/setup-supervisor.d.ts.map +1 -0
- package/dist/setup-supervisor.js +177 -0
- package/dist/setup-supervisor.js.map +1 -0
- package/dist/spec.d.ts +9 -20
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +49 -21
- package/dist/spec.js.map +1 -1
- package/dist/thread-delivery.d.ts +18 -0
- package/dist/thread-delivery.d.ts.map +1 -0
- package/dist/thread-delivery.js +67 -0
- package/dist/thread-delivery.js.map +1 -0
- package/dist/thread-select.d.ts +9 -0
- package/dist/thread-select.d.ts.map +1 -0
- package/dist/thread-select.js +12 -0
- package/dist/thread-select.js.map +1 -0
- package/dist/trust-command.d.ts.map +1 -1
- package/dist/trust-command.js +69 -61
- package/dist/trust-command.js.map +1 -1
- package/dist/trust-services.d.ts +5 -6
- package/dist/trust-services.d.ts.map +1 -1
- package/dist/trust-services.js +42 -13
- package/dist/trust-services.js.map +1 -1
- package/package.json +24 -22
- package/dist/attachment-resolver.d.ts +0 -11
- package/dist/attachment-resolver.d.ts.map +0 -1
- package/dist/attachment-resolver.js +0 -61
- package/dist/attachment-resolver.js.map +0 -1
- package/dist/settings-display.d.ts +0 -3
- package/dist/settings-display.d.ts.map +0 -1
- package/dist/settings-display.js +0 -33
- package/dist/settings-display.js.map +0 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential surfaces: the managed secret store and INV-135 credential
|
|
3
|
+
* profiles. Thin clients — the daemon owns storage and doctor probes; the
|
|
4
|
+
* profile login spawns the SAME vendor command the setup jobs run, in this
|
|
5
|
+
* interactive terminal, scoped to the profile's config dir.
|
|
6
|
+
*/
|
|
7
|
+
import { spawnSync } from "node:child_process";
|
|
8
|
+
import { registerConfigDirProfile } from "./profile-registration.js";
|
|
9
|
+
import { ControlCredentialProfileDeleteResponse, ControlCredentialProfilesResponse, ControlSecretListResponse, ControlSecretMutationResponse, ControlSecretSetRequest, } from "@claudexor/schema";
|
|
10
|
+
import { MANAGED_SECRET_NAMES, isManagedSecretName } from "@claudexor/secrets";
|
|
11
|
+
import { canonicalProfileConfigDir } from "@claudexor/harness-claude";
|
|
12
|
+
import { canonicalCodexProfileHome } from "@claudexor/harness-codex";
|
|
13
|
+
import { flagStr } from "./args.js";
|
|
14
|
+
import { print, printJson, printUsageError } from "./cli-io.js";
|
|
15
|
+
import { ensureDaemon } from "./daemon-run.js";
|
|
16
|
+
import { controlApiFetch } from "./live.js";
|
|
17
|
+
import { daemonGet } from "./ops-commands.js";
|
|
18
|
+
import { nativeLoginEnv, nativeLoginSpec } from "./native-login.js";
|
|
19
|
+
async function stdinText() {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for await (const chunk of process.stdin)
|
|
22
|
+
chunks.push(chunk);
|
|
23
|
+
return Buffer.concat(chunks).toString("utf8").trim();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Thin client over the daemon's credential-profile listing (INV-135): the
|
|
27
|
+
* durable registry lives in the global config; readiness is the daemon
|
|
28
|
+
* doctor's projection — this command never probes vendors itself.
|
|
29
|
+
*/
|
|
30
|
+
export async function profilesCommand(args, json) {
|
|
31
|
+
const sub = args._[1] ?? "list";
|
|
32
|
+
if (sub === "login") {
|
|
33
|
+
// INV-135 profile login: the SAME vendor login command the setup jobs run,
|
|
34
|
+
// spawned interactively in THIS terminal with the profile's scoped config
|
|
35
|
+
// dir. The default vendor store is never touched; the doctor probe after
|
|
36
|
+
// exit is the verification truth.
|
|
37
|
+
const harness = args._[2];
|
|
38
|
+
const profileId = args._[3];
|
|
39
|
+
if (!harness || !profileId) {
|
|
40
|
+
return printUsageError(json, "usage: claudexor profiles login <harness> <profile-id>");
|
|
41
|
+
}
|
|
42
|
+
const listing = ControlCredentialProfilesResponse.parse(await daemonGet("/credential-profiles"));
|
|
43
|
+
const entry = listing.profiles.find((p) => p.profile.harness_id === harness && p.profile.profile_id === profileId);
|
|
44
|
+
if (!entry) {
|
|
45
|
+
return printUsageError(json, `no credential profile "${profileId}" for harness "${harness}" (register it in the global config's credential_profiles)`);
|
|
46
|
+
}
|
|
47
|
+
const profile = entry.profile;
|
|
48
|
+
if (!profile.enabled)
|
|
49
|
+
return printUsageError(json, `profile "${profileId}" is disabled`);
|
|
50
|
+
if (profile.credential_kind !== "config_dir_login") {
|
|
51
|
+
return printUsageError(json, `profile "${profileId}" is ${profile.credential_kind}; only config_dir_login profiles have a login flow (store its secret instead)`);
|
|
52
|
+
}
|
|
53
|
+
// Only harnesses with a RELOCATABLE config-dir login may profile-login
|
|
54
|
+
// (release wave tier1 #1): cursor's native login is a singleton keychain
|
|
55
|
+
// store — running it here would mutate the operator's real credentials
|
|
56
|
+
// while claiming profile isolation.
|
|
57
|
+
if (harness !== "claude" && harness !== "codex") {
|
|
58
|
+
return printUsageError(json, `harness "${harness}" has no isolated config-dir login; only claude and codex profiles can log in here`);
|
|
59
|
+
}
|
|
60
|
+
const spec = nativeLoginSpec(harness);
|
|
61
|
+
if (!spec) {
|
|
62
|
+
return printUsageError(json, `no native login command for harness "${harness}"`);
|
|
63
|
+
}
|
|
64
|
+
const configDir = harness === "claude"
|
|
65
|
+
? canonicalProfileConfigDir(profile.isolation_locator ?? "")
|
|
66
|
+
: canonicalCodexProfileHome(profile.isolation_locator ?? "");
|
|
67
|
+
print(`running ${spec.displayCommand} into ${configDir}`);
|
|
68
|
+
const child = spawnSync(spec.binary, spec.args, {
|
|
69
|
+
stdio: "inherit",
|
|
70
|
+
env: nativeLoginEnv(harness, process.env, configDir),
|
|
71
|
+
});
|
|
72
|
+
if (child.status !== 0) {
|
|
73
|
+
print(`login command exited with ${child.status ?? child.signal ?? "unknown"}`);
|
|
74
|
+
}
|
|
75
|
+
const after = ControlCredentialProfilesResponse.parse(await daemonGet("/credential-profiles")).profiles.find((p) => p.profile.harness_id === harness && p.profile.profile_id === profileId);
|
|
76
|
+
const status = after?.status;
|
|
77
|
+
if (json)
|
|
78
|
+
printJson({ profile: after?.profile ?? profile, status: status ?? null });
|
|
79
|
+
else
|
|
80
|
+
print(`${harness}/${profileId}: ${status?.availability ?? "unknown"}${status?.detail ? ` — ${status.detail}` : ""}`);
|
|
81
|
+
return status?.verification === "passed" ? 0 : 1;
|
|
82
|
+
}
|
|
83
|
+
if (sub === "add") {
|
|
84
|
+
// ONE registration owner shared with POST /v2/credential-profiles
|
|
85
|
+
// (profile-registration.ts): locked global-config write, duplicate ids
|
|
86
|
+
// refused loudly, login dir created under the confinement root.
|
|
87
|
+
const harness = args._[2];
|
|
88
|
+
const profileId = args._[3];
|
|
89
|
+
if (!harness || !profileId) {
|
|
90
|
+
return printUsageError(json, "usage: claudexor profiles add <claude|codex> <profile-id> [--display-name NAME]");
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const { profile, configPath } = registerConfigDirProfile({
|
|
94
|
+
harnessId: harness,
|
|
95
|
+
profileId,
|
|
96
|
+
displayName: flagStr(args, "display-name"),
|
|
97
|
+
});
|
|
98
|
+
if (json)
|
|
99
|
+
printJson({
|
|
100
|
+
registered: { harness, profileId, locator: profile.isolation_locator },
|
|
101
|
+
config: configPath,
|
|
102
|
+
});
|
|
103
|
+
else {
|
|
104
|
+
print(`registered ${harness}/${profileId} (login dir ${profile.isolation_locator})`);
|
|
105
|
+
print(`next: claudexor profiles login ${harness} ${profileId}`);
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
return printUsageError(json, err instanceof Error ? err.message : String(err));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (sub === "remove" || sub === "rm") {
|
|
114
|
+
const harness = args._[2];
|
|
115
|
+
const profileId = args._[3];
|
|
116
|
+
if (!harness || !profileId) {
|
|
117
|
+
return printUsageError(json, "usage: claudexor profiles remove <harness> <profile-id>");
|
|
118
|
+
}
|
|
119
|
+
// Daemon-owned removal (one mutation path): registry entry + the profile's
|
|
120
|
+
// own credential material (scoped login dir / namespaced secret); refuses
|
|
121
|
+
// while a login job for the account is active.
|
|
122
|
+
const { addr } = await ensureDaemon();
|
|
123
|
+
const response = await controlApiFetch(addr, `/credential-profiles/${encodeURIComponent(harness)}/${encodeURIComponent(profileId)}`, { method: "DELETE", headers: { Authorization: `Bearer ${addr.token}` } });
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
return printUsageError(json, `profile removal failed (${response.status}): ${await response.text()}`);
|
|
126
|
+
}
|
|
127
|
+
const receipt = ControlCredentialProfileDeleteResponse.parse(await response.json());
|
|
128
|
+
if (json)
|
|
129
|
+
printJson(receipt);
|
|
130
|
+
else {
|
|
131
|
+
print(`removed ${harness}/${profileId} (${receipt.credentialCleanup})`);
|
|
132
|
+
if (receipt.cleanupWarning)
|
|
133
|
+
print(`warning: ${receipt.cleanupWarning}`);
|
|
134
|
+
}
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
if (sub !== "list") {
|
|
138
|
+
return printUsageError(json, "usage: claudexor profiles [list | add <harness> <profile-id> | login <harness> <profile-id> | remove <harness> <profile-id>]");
|
|
139
|
+
}
|
|
140
|
+
const result = ControlCredentialProfilesResponse.parse(await daemonGet("/credential-profiles"));
|
|
141
|
+
if (json)
|
|
142
|
+
printJson(result);
|
|
143
|
+
else if (result.profiles.length === 0) {
|
|
144
|
+
print("no credential profiles registered (add credential_profiles entries to the global config)");
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
for (const { profile, status } of result.profiles) {
|
|
148
|
+
const state = profile.enabled ? status.availability : "disabled";
|
|
149
|
+
print(`${profile.harness_id}/${profile.profile_id} [${profile.credential_kind}] ${state}${status.detail ? ` — ${status.detail}` : ""}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
export async function secretsCommand(args, json) {
|
|
155
|
+
const sub = args._[1] ?? "list";
|
|
156
|
+
if (sub === "list") {
|
|
157
|
+
const result = ControlSecretListResponse.parse(await daemonGet("/secrets"));
|
|
158
|
+
if (json)
|
|
159
|
+
printJson(result);
|
|
160
|
+
else {
|
|
161
|
+
if (result.secrets.length === 0)
|
|
162
|
+
print(`no stored secrets (${result.backend})`);
|
|
163
|
+
for (const secret of result.secrets)
|
|
164
|
+
print(`${secret.name} [${secret.backend}]`);
|
|
165
|
+
}
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
if (sub === "set") {
|
|
169
|
+
const name = args._[2];
|
|
170
|
+
if (!name) {
|
|
171
|
+
return printUsageError(json, "usage: claudexor secrets set <name> --from-env <ENV_VAR> # or pipe value on stdin");
|
|
172
|
+
}
|
|
173
|
+
if (!isManagedSecretName(name)) {
|
|
174
|
+
return printUsageError(json, `secret name must be a managed name (${MANAGED_SECRET_NAMES.join(", ")}) or a managed base:profile slot (e.g. claude_oauth:work — profiles REQUIRE the namespaced form)`);
|
|
175
|
+
}
|
|
176
|
+
const envVar = flagStr(args, "from-env");
|
|
177
|
+
const value = envVar ? process.env[envVar] : process.stdin.isTTY ? "" : await stdinText();
|
|
178
|
+
if (!value) {
|
|
179
|
+
return printUsageError(json, "secret value required via --from-env or stdin; values are not accepted as positional args");
|
|
180
|
+
}
|
|
181
|
+
const body = ControlSecretSetRequest.parse({ name, value });
|
|
182
|
+
const { addr } = await ensureDaemon();
|
|
183
|
+
const response = await controlApiFetch(addr, "/secrets", {
|
|
184
|
+
method: "POST",
|
|
185
|
+
headers: { Authorization: `Bearer ${addr.token}`, "Content-Type": "application/json" },
|
|
186
|
+
body: JSON.stringify(body),
|
|
187
|
+
});
|
|
188
|
+
if (!response.ok)
|
|
189
|
+
throw new Error(`secret write failed (${response.status}): ${await response.text()}`);
|
|
190
|
+
const receipt = ControlSecretMutationResponse.parse(await response.json());
|
|
191
|
+
if (json)
|
|
192
|
+
printJson(receipt);
|
|
193
|
+
else {
|
|
194
|
+
print(`stored ${name} in ${receipt.backend}`);
|
|
195
|
+
if (receipt.warning)
|
|
196
|
+
print(`warning: ${receipt.warning}`);
|
|
197
|
+
}
|
|
198
|
+
return 0;
|
|
199
|
+
}
|
|
200
|
+
if (sub === "delete" || sub === "rm") {
|
|
201
|
+
const name = args._[2];
|
|
202
|
+
if (!name) {
|
|
203
|
+
return printUsageError(json, "usage: claudexor secrets delete <name>");
|
|
204
|
+
}
|
|
205
|
+
if (!isManagedSecretName(name)) {
|
|
206
|
+
return printUsageError(json, `secret name must be a managed name (${MANAGED_SECRET_NAMES.join(", ")}) or a managed base:profile slot (e.g. claude_oauth:work — profiles REQUIRE the namespaced form)`);
|
|
207
|
+
}
|
|
208
|
+
const { addr } = await ensureDaemon();
|
|
209
|
+
const response = await controlApiFetch(addr, `/secrets/${encodeURIComponent(name)}`, {
|
|
210
|
+
method: "DELETE",
|
|
211
|
+
headers: { Authorization: `Bearer ${addr.token}` },
|
|
212
|
+
});
|
|
213
|
+
if (!response.ok)
|
|
214
|
+
throw new Error(`secret delete failed (${response.status}): ${await response.text()}`);
|
|
215
|
+
const receipt = ControlSecretMutationResponse.parse(await response.json());
|
|
216
|
+
if (json)
|
|
217
|
+
printJson(receipt);
|
|
218
|
+
else
|
|
219
|
+
print(`deleted ${name}`);
|
|
220
|
+
return 0;
|
|
221
|
+
}
|
|
222
|
+
return printUsageError(json, "usage: claudexor secrets list|set|delete");
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=credential-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-commands.js","sourceRoot":"","sources":["../src/credential-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
interface LifecycleDeps {
|
|
2
2
|
daemonDir: string;
|
|
3
3
|
logPath: string;
|
|
4
|
-
|
|
4
|
+
/** Enter the shutdown state machine (DaemonRuntimeShutdown.beginShutdown). */
|
|
5
|
+
beginShutdown: (reason: string) => Promise<void>;
|
|
6
|
+
signals?: Pick<NodeJS.Process, "on" | "off">;
|
|
7
|
+
snapshot?: (path: string) => void;
|
|
5
8
|
}
|
|
9
|
+
export declare const logLine: (path: string, message: string) => void;
|
|
6
10
|
/** Pre-start: kill surviving children of a previous daemon life, then GC
|
|
7
11
|
* envelopes/branches/tmp-homes nothing owns anymore. */
|
|
8
12
|
export declare function runStartupCrashGc(deps: Pick<LifecycleDeps, "daemonDir" | "logPath">): Promise<void>;
|
|
9
13
|
/**
|
|
10
14
|
* Post-start: periodic live-children snapshots (the reap list a crash leaves
|
|
11
|
-
* behind) and SIGTERM/SIGINT ->
|
|
12
|
-
* close). Returns the
|
|
15
|
+
* behind) and SIGTERM/SIGINT -> the shutdown state machine (abort children,
|
|
16
|
+
* persist, close, bounded escalation). Returns the finalizer for main()'s tail.
|
|
13
17
|
*/
|
|
14
18
|
export declare function armDaemonLifecycle(deps: LifecycleDeps): {
|
|
15
19
|
finalize: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-lifecycle.d.ts","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon-lifecycle.d.ts","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"AAaA,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,IAMvD,CAAC;AAEF;wDACwD;AACxD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CA8ChF"}
|
package/dist/daemon-lifecycle.js
CHANGED
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
* Daemon process-lifecycle wiring: pre-start crash GC (orphan
|
|
3
3
|
* reap + workspace sweep), live-children bookkeeping, and graceful shutdown
|
|
4
4
|
* signals. Kept out of claudexord's main() so the entrypoint stays a thin
|
|
5
|
-
* composition root.
|
|
5
|
+
* composition root. OS signals are just one TRIGGER of the single shutdown
|
|
6
|
+
* state machine (DaemonRuntimeShutdown, W3.5) — the escalation ladder lives
|
|
7
|
+
* there so a socket-RPC stop gets the same bounded termination.
|
|
6
8
|
*/
|
|
7
9
|
import { appendFileSync } from "node:fs";
|
|
8
10
|
import { join } from "node:path";
|
|
9
11
|
import { reapRecordedOrphans, writePidsSnapshot } from "./orphan-reaper.js";
|
|
10
12
|
import { sweepOrphanWorkspaces } from "./orphan-sweeper.js";
|
|
11
|
-
const logLine = (path, message) => {
|
|
12
|
-
|
|
13
|
+
export const logLine = (path, message) => {
|
|
14
|
+
try {
|
|
15
|
+
appendFileSync(path, `[${new Date().toISOString()}] ${message}\n`);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
/* lifecycle safety must not depend on diagnostic I/O */
|
|
19
|
+
}
|
|
13
20
|
};
|
|
14
21
|
/** Pre-start: kill surviving children of a previous daemon life, then GC
|
|
15
22
|
* envelopes/branches/tmp-homes nothing owns anymore. */
|
|
@@ -20,8 +27,7 @@ export async function runStartupCrashGc(deps) {
|
|
|
20
27
|
}
|
|
21
28
|
try {
|
|
22
29
|
const sweepActions = await sweepOrphanWorkspaces({
|
|
23
|
-
|
|
24
|
-
threadsPath: join(deps.daemonDir, "threads.json"),
|
|
30
|
+
journalRoot: join(deps.daemonDir, "journal"),
|
|
25
31
|
});
|
|
26
32
|
for (const action of sweepActions) {
|
|
27
33
|
logLine(deps.logPath, `sweep: ${action}`);
|
|
@@ -33,29 +39,51 @@ export async function runStartupCrashGc(deps) {
|
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
41
|
* Post-start: periodic live-children snapshots (the reap list a crash leaves
|
|
36
|
-
* behind) and SIGTERM/SIGINT ->
|
|
37
|
-
* close). Returns the
|
|
42
|
+
* behind) and SIGTERM/SIGINT -> the shutdown state machine (abort children,
|
|
43
|
+
* persist, close, bounded escalation). Returns the finalizer for main()'s tail.
|
|
38
44
|
*/
|
|
39
45
|
export function armDaemonLifecycle(deps) {
|
|
40
46
|
const pidsPath = join(deps.daemonDir, "pids.json");
|
|
41
|
-
const
|
|
47
|
+
const signals = deps.signals ?? process;
|
|
48
|
+
const snapshot = deps.snapshot ?? writePidsSnapshot;
|
|
49
|
+
const writeSnapshot = () => {
|
|
50
|
+
try {
|
|
51
|
+
snapshot(pidsPath);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
logLine(deps.logPath, `pid snapshot FAILED: ${error instanceof Error ? error.message : String(error)}`);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const pidsTimer = setInterval(writeSnapshot, 2_000);
|
|
42
58
|
pidsTimer.unref?.();
|
|
43
59
|
let stopping = false;
|
|
60
|
+
let finalized = false;
|
|
44
61
|
const onShutdownSignal = (sig) => {
|
|
62
|
+
// Duplicate deliveries coalesce (launchd/tooling may re-signal); the
|
|
63
|
+
// machine's deadline timer guarantees termination.
|
|
45
64
|
if (stopping)
|
|
46
65
|
return;
|
|
47
66
|
stopping = true;
|
|
48
67
|
logLine(deps.logPath, `${sig} received; stopping daemon`);
|
|
49
|
-
void deps.
|
|
68
|
+
void deps.beginShutdown(sig).catch(() => {
|
|
69
|
+
// The machine logged the failure and keeps its deadline armed.
|
|
70
|
+
});
|
|
50
71
|
};
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
const onSigterm = () => onShutdownSignal("SIGTERM");
|
|
73
|
+
const onSigint = () => onShutdownSignal("SIGINT");
|
|
74
|
+
signals.on("SIGTERM", onSigterm);
|
|
75
|
+
signals.on("SIGINT", onSigint);
|
|
53
76
|
return {
|
|
54
77
|
finalize: () => {
|
|
78
|
+
if (finalized)
|
|
79
|
+
return;
|
|
80
|
+
finalized = true;
|
|
55
81
|
clearInterval(pidsTimer);
|
|
82
|
+
signals.off("SIGTERM", onSigterm);
|
|
83
|
+
signals.off("SIGINT", onSigint);
|
|
56
84
|
// Graceful stop aborted all children; one final snapshot records any
|
|
57
85
|
// that survived the grace window (SIGKILL escalation may be in flight).
|
|
58
|
-
|
|
86
|
+
writeSnapshot();
|
|
59
87
|
},
|
|
60
88
|
};
|
|
61
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon-run.d.ts
CHANGED
|
@@ -60,6 +60,8 @@ export declare function enqueueAndAwait(client: DaemonClientType, addr: ControlA
|
|
|
60
60
|
}): Promise<DaemonRunOutcome>;
|
|
61
61
|
/** Daemon job state -> CLI exit code (success terminals are 0; everything else 1). */
|
|
62
62
|
export declare function exitCodeForState(state: string): number;
|
|
63
|
+
/** Keep internal command-state spelling out of the public run-result envelope. */
|
|
64
|
+
export declare function runStatusForCli(state: string): string;
|
|
63
65
|
/**
|
|
64
66
|
* The run's derived apply-gate verdict from GET /runs/:id (single producer:
|
|
65
67
|
* the delivery gate via the control API). Soft-fails to null — a detail
|
package/dist/daemon-run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-run.d.ts","sourceRoot":"","sources":["../src/daemon-run.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,YAAY,IAAI,gBAAgB,EACtC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-run.d.ts","sourceRoot":"","sources":["../src/daemon-run.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,YAAY,IAAI,gBAAgB,EACtC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AA2BnB;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,SAAS,SAAS,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAwDhE;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,iBAAiB,CAAC;CACzB,GAAG,IAAI,CAAC,CAQR;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,SAAS,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAAC,CAQvE;AAkBD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,GAAE;IACJ,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;6EAEyE;IACzE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAuG3B;AA2BD,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GAAG,IAAI,CAAC,CAoBR;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,GAAG,SAAS,CAOrB"}
|
package/dist/daemon-run.js
CHANGED
|
@@ -4,7 +4,8 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { DaemonClient, daemonDir, defaultSocketPath, ensureToken, readToken, } from "@claudexor/daemon";
|
|
6
6
|
import { harnessRuntimeEnv } from "@claudexor/core";
|
|
7
|
-
import {
|
|
7
|
+
import { hashJson } from "@claudexor/util";
|
|
8
|
+
import { controlApiAddress, controlApiFetch, handshakeControlApi, processExitCodeForRunStatus, } from "./live.js";
|
|
8
9
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
9
10
|
/** Is something accepting on the daemon socket right now? (cheap reachability probe). */
|
|
10
11
|
async function daemonReachable(client) {
|
|
@@ -20,8 +21,11 @@ async function daemonReachable(client) {
|
|
|
20
21
|
async function controlApiReachable() {
|
|
21
22
|
try {
|
|
22
23
|
const addr = controlApiAddress();
|
|
23
|
-
const res = await
|
|
24
|
-
|
|
24
|
+
const res = await controlApiFetch(addr, "/healthz", { signal: AbortSignal.timeout(1500) });
|
|
25
|
+
if (!res.ok)
|
|
26
|
+
return null;
|
|
27
|
+
await handshakeControlApi(addr);
|
|
28
|
+
return addr;
|
|
25
29
|
}
|
|
26
30
|
catch {
|
|
27
31
|
return null;
|
|
@@ -46,7 +50,11 @@ export async function ensureDaemon(timeoutMs = 30_000) {
|
|
|
46
50
|
if (!existsSync(daemonScript)) {
|
|
47
51
|
throw new Error(`cannot auto-start the daemon: entry not found at ${daemonScript} (run \`pnpm build\`)`);
|
|
48
52
|
}
|
|
49
|
-
const child = spawn(process.execPath, [daemonScript], {
|
|
53
|
+
const child = spawn(process.execPath, [daemonScript], {
|
|
54
|
+
detached: true,
|
|
55
|
+
stdio: "ignore",
|
|
56
|
+
env: harnessRuntimeEnv(),
|
|
57
|
+
});
|
|
50
58
|
child.unref();
|
|
51
59
|
// Wait for the socket to accept connections (health round-trip).
|
|
52
60
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -124,7 +132,9 @@ const TERMINAL_STATES = new Set([
|
|
|
124
132
|
"blocked",
|
|
125
133
|
"failed",
|
|
126
134
|
"cancelled",
|
|
127
|
-
"
|
|
135
|
+
"interrupted_unknown",
|
|
136
|
+
"cost_unverifiable",
|
|
137
|
+
"exhausted_overshoot",
|
|
128
138
|
"exhausted",
|
|
129
139
|
"not_converged",
|
|
130
140
|
"stuck_no_progress",
|
|
@@ -137,7 +147,8 @@ const TERMINAL_STATES = new Set([
|
|
|
137
147
|
* `claudexor decision`.
|
|
138
148
|
*/
|
|
139
149
|
export async function enqueueAndAwait(client, addr, body, opts = { waitForTerminal: true }) {
|
|
140
|
-
|
|
150
|
+
await ensureRunProject(addr, body);
|
|
151
|
+
const startRes = await controlApiFetch(addr, "/runs", {
|
|
141
152
|
method: "POST",
|
|
142
153
|
headers: { Authorization: `Bearer ${addr.token}`, "content-type": "application/json" },
|
|
143
154
|
body: JSON.stringify(body),
|
|
@@ -145,7 +156,9 @@ export async function enqueueAndAwait(client, addr, body, opts = { waitForTermin
|
|
|
145
156
|
const startText = await startRes.text();
|
|
146
157
|
const start = startText ? JSON.parse(startText) : {};
|
|
147
158
|
if (!startRes.ok) {
|
|
148
|
-
throw new Error(typeof start["
|
|
159
|
+
throw new Error(typeof start["message"] === "string"
|
|
160
|
+
? start["message"]
|
|
161
|
+
: `run enqueue failed (HTTP ${startRes.status})`);
|
|
149
162
|
}
|
|
150
163
|
const jobId = String(start["jobId"] ?? "");
|
|
151
164
|
let runId = typeof start["runId"] === "string" ? start["runId"] : "";
|
|
@@ -161,15 +174,17 @@ export async function enqueueAndAwait(client, addr, body, opts = { waitForTermin
|
|
|
161
174
|
if (sigCount >= 2)
|
|
162
175
|
process.exit(130);
|
|
163
176
|
process.stderr.write("\ncancelling daemon run (Ctrl-C again to detach)...\n");
|
|
164
|
-
void
|
|
177
|
+
void controlApiFetch(addr, `/runs/${encodeURIComponent(jobId)}/control`, {
|
|
165
178
|
method: "POST",
|
|
166
179
|
headers: { Authorization: `Bearer ${addr.token}`, "content-type": "application/json" },
|
|
167
180
|
body: JSON.stringify({ control: { kind: "cancel", reason: "ctrl-c on the waiting CLI" } }),
|
|
168
|
-
})
|
|
181
|
+
})
|
|
182
|
+
.then(async (res) => {
|
|
169
183
|
if (!res.ok) {
|
|
170
184
|
process.stderr.write(`cancel request failed: HTTP ${res.status} ${(await res.text()).slice(0, 200)}\n`);
|
|
171
185
|
}
|
|
172
|
-
})
|
|
186
|
+
})
|
|
187
|
+
.catch((err) => {
|
|
173
188
|
process.stderr.write(`cancel request failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
174
189
|
});
|
|
175
190
|
};
|
|
@@ -212,7 +227,13 @@ export async function enqueueAndAwait(client, addr, body, opts = { waitForTermin
|
|
|
212
227
|
for (;;) {
|
|
213
228
|
const rec = await client.status(jobId);
|
|
214
229
|
if (TERMINAL_STATES.has(rec.state)) {
|
|
215
|
-
return {
|
|
230
|
+
return {
|
|
231
|
+
runId: rec.runId ?? runId,
|
|
232
|
+
runDir: rec.runDir ?? runDir,
|
|
233
|
+
status: rec.state,
|
|
234
|
+
jobId,
|
|
235
|
+
error: rec.error,
|
|
236
|
+
};
|
|
216
237
|
}
|
|
217
238
|
if (opts.onPollTick)
|
|
218
239
|
await opts.onPollTick({ runId: rec.runId ?? runId });
|
|
@@ -223,9 +244,34 @@ export async function enqueueAndAwait(client, addr, body, opts = { waitForTermin
|
|
|
223
244
|
removeSignalHandlers();
|
|
224
245
|
}
|
|
225
246
|
}
|
|
247
|
+
async function ensureRunProject(addr, body) {
|
|
248
|
+
const scope = body["scope"];
|
|
249
|
+
if (!scope || typeof scope !== "object" || Array.isArray(scope))
|
|
250
|
+
return;
|
|
251
|
+
const project = scope;
|
|
252
|
+
if (project["kind"] !== "project" || typeof project["root"] !== "string")
|
|
253
|
+
return;
|
|
254
|
+
const root = project["root"];
|
|
255
|
+
const response = await controlApiFetch(addr, "/projects", {
|
|
256
|
+
method: "POST",
|
|
257
|
+
headers: {
|
|
258
|
+
"content-type": "application/json",
|
|
259
|
+
"Idempotency-Key": `auto-register-${hashJson(root)}`,
|
|
260
|
+
},
|
|
261
|
+
body: JSON.stringify({ root }),
|
|
262
|
+
});
|
|
263
|
+
if (!response.ok) {
|
|
264
|
+
const detail = await response.text().catch(() => "");
|
|
265
|
+
throw new Error(`project registration failed (HTTP ${response.status})${detail ? `: ${detail}` : ""}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
226
268
|
/** Daemon job state -> CLI exit code (success terminals are 0; everything else 1). */
|
|
227
269
|
export function exitCodeForState(state) {
|
|
228
|
-
return state
|
|
270
|
+
return processExitCodeForRunStatus(state);
|
|
271
|
+
}
|
|
272
|
+
/** Keep internal command-state spelling out of the public run-result envelope. */
|
|
273
|
+
export function runStatusForCli(state) {
|
|
274
|
+
return state === "succeeded" ? "success" : state;
|
|
229
275
|
}
|
|
230
276
|
/**
|
|
231
277
|
* The run's derived apply-gate verdict from GET /runs/:id (single producer:
|
|
@@ -237,14 +283,16 @@ export async function fetchApplyEligibility(addr, runId) {
|
|
|
237
283
|
if (!runId)
|
|
238
284
|
return null;
|
|
239
285
|
try {
|
|
240
|
-
const res = await
|
|
286
|
+
const res = await controlApiFetch(addr, `/runs/${encodeURIComponent(runId)}`, {
|
|
241
287
|
headers: { authorization: `Bearer ${addr.token}` },
|
|
242
288
|
});
|
|
243
289
|
if (!res.ok)
|
|
244
290
|
return null;
|
|
245
291
|
const detail = (await res.json());
|
|
246
292
|
const v = detail["applyEligibility"];
|
|
247
|
-
return v && typeof v === "object"
|
|
293
|
+
return v && typeof v === "object"
|
|
294
|
+
? v
|
|
295
|
+
: null;
|
|
248
296
|
}
|
|
249
297
|
catch {
|
|
250
298
|
return null;
|
package/dist/daemon-run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-run.js","sourceRoot":"","sources":["../src/daemon-run.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,SAAS,GAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"daemon-run.js","sourceRoot":"","sources":["../src/daemon-run.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,SAAS,GAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,2BAA2B,GAE5B,MAAM,WAAW,CAAC;AAEnB,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnF,yFAAyF;AACzF,KAAK,UAAU,eAAe,CAAC,MAAwB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAS,GAAG,MAAM;IAElB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,8EAA8E;QAC9E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,oDAAoD,YAAY,uBAAuB,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;YACpD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,iBAAiB,EAAE;SACzB,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,iEAAiE;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,4EAA4E;YAC5E,0EAA0E;YAC1E,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,8BAA8B,UAAU,oCAAoC,CAC1I,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,+EAA+E;IAC/E,IAAI,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,yDAAyD,SAAS,EAAE,sEAAsE,CAC3I,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAI1C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAS,GAAG,MAAM;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,OAAO;IACP,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,QAAQ;IACR,WAAW;IACX,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,WAAW;IACX,eAAe;IACf,mBAAmB;CACpB,CAAC,CAAC;AAWH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,IAAuB,EACvB,IAA6B,EAC7B,OAOI,EAAE,eAAe,EAAE,IAAI,EAAE;IAE7B,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACtF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;YAClC,CAAC,CAAE,KAAK,CAAC,SAAS,CAAY;YAC9B,CAAC,CAAC,4BAA4B,QAAQ,CAAC,MAAM,GAAG,CACnD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,IAAI,MAAM,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpF,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,0DAA0D;IAC1D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,QAAQ,IAAI,CAAC,CAAC;QACd,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC9E,KAAK,eAAe,CAAC,IAAI,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YACtF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,CAAC;SAC3F,CAAC;aACC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAClF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC/E,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,MAAM,oBAAoB,GAAG,GAAS,EAAE;QACtC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK;gBAAE,MAAM;YAClB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC5B,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAClD,wEAAwE;gBACxE,6CAA6C;gBAC7C,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAC5F,CAAC;YACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,GAAG,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,sEAAsE;YACtE,+CAA+C;YAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;QACnE,CAAC;QAED,6EAA6E;QAC7E,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;oBACL,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK;oBACzB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;oBAC5B,MAAM,EAAE,GAAG,CAAC,KAAK;oBACjB,KAAK;oBACL,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;YAC1E,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,oBAAoB,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAuB,EACvB,IAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IACxE,MAAM,OAAO,GAAG,KAAgC,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ;QAAE,OAAO;IACjF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,iBAAiB,EAAE,iBAAiB,QAAQ,CAAC,IAAI,CAAC,EAAE;SACrD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAuB,EACvB,KAAa;IAOb,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE;YAC5E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAC/B,CAAC,CAAE,CAKC;YACJ,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAIpC;IACC,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAChC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,4DAA4D,GAAG,CAAC,KAAK,2CAA2C,CAAC;IAC1H,CAAC;IACD,OAAO,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;AAC7B,CAAC"}
|