@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
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import type { AdapterRegistry } from "@claudexor/core";
|
|
2
2
|
import type { ResourceStore } from "@claudexor/daemon";
|
|
3
3
|
import type { HarnessStatus } from "@claudexor/gateway";
|
|
4
|
-
import type
|
|
4
|
+
import { type AccessProfile, type ControlRunStartRequest, type GitCapability } from "@claudexor/schema";
|
|
5
5
|
interface RunRequirementsPreflightDependencies {
|
|
6
6
|
statusAll?: (cwd: string) => Promise<Array<Pick<HarnessStatus, "id" | "status" | "enabledIntents">>>;
|
|
7
7
|
registry?: AdapterRegistry;
|
|
8
8
|
accessDefault?: (cwd: string) => AccessProfile;
|
|
9
|
+
gitCapability?: () => Promise<GitCapability>;
|
|
10
|
+
requiresGit?: (request: ControlRunStartRequest) => boolean;
|
|
9
11
|
}
|
|
12
|
+
export interface RunRequirementsPreflightPolicy {
|
|
13
|
+
/** Thread turns defer Git to the durable daemon job; direct runs keep eager admission. */
|
|
14
|
+
git?: "eager" | "durable_job";
|
|
15
|
+
}
|
|
16
|
+
/** Canonical Git admission used both eagerly by direct runs and immediately
|
|
17
|
+
* pre-provider by durable thread jobs. */
|
|
18
|
+
export declare function preflightRunGitRequirement(request: ControlRunStartRequest, dependencies?: Pick<RunRequirementsPreflightDependencies, "gitCapability" | "requiresGit">): Promise<void>;
|
|
10
19
|
/** Refuse requests that no selected lane can satisfy before a run or turn is created. */
|
|
11
|
-
export declare function createRunRequirementsPreflight(resources: Pick<ResourceStore, "resolve">, noProjectRoot: string, dependencies?: RunRequirementsPreflightDependencies): (request: ControlRunStartRequest) => Promise<void>;
|
|
20
|
+
export declare function createRunRequirementsPreflight(resources: Pick<ResourceStore, "resolve">, noProjectRoot: string, dependencies?: RunRequirementsPreflightDependencies, policy?: RunRequirementsPreflightPolicy): (request: ControlRunStartRequest) => Promise<void>;
|
|
12
21
|
export {};
|
|
13
22
|
//# sourceMappingURL=request-preflight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-preflight.d.ts","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"request-preflight.d.ts","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAU3B,UAAU,oCAAoC;IAC5C,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,8BAA8B;IAC7C,0FAA0F;IAC1F,GAAG,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CAC/B;AAED;0CAC0C;AAC1C,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,sBAAsB,EAC/B,YAAY,GAAE,IAAI,CAAC,oCAAoC,EAAE,eAAe,GAAG,aAAa,CAAM,GAC7F,OAAO,CAAC,IAAI,CAAC,CAef;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EACzC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,oCAAyC,EACvD,MAAM,GAAE,8BAAmC,GAC1C,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAkFpD"}
|
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
import { loadConfig } from "@claudexor/config";
|
|
2
2
|
import { RequestRequirementsResolver } from "@claudexor/orchestrator";
|
|
3
|
+
import { runStartRequiresGit, } from "@claudexor/schema";
|
|
4
|
+
import { gitCapabilityProblem, probeGitCapability } from "@claudexor/workspace";
|
|
3
5
|
import { buildGateway, buildRegistry } from "./registry.js";
|
|
4
6
|
const modeIntent = {
|
|
5
7
|
agent: "implement",
|
|
6
8
|
ask: "explain",
|
|
7
9
|
plan: "plan",
|
|
8
10
|
};
|
|
11
|
+
/** Canonical Git admission used both eagerly by direct runs and immediately
|
|
12
|
+
* pre-provider by durable thread jobs. */
|
|
13
|
+
export async function preflightRunGitRequirement(request, dependencies = {}) {
|
|
14
|
+
if (!(dependencies.requiresGit ?? runStartRequiresGit)(request))
|
|
15
|
+
return;
|
|
16
|
+
const git = await (dependencies.gitCapability ?? probeGitCapability)();
|
|
17
|
+
const blocker = gitCapabilityProblem(git);
|
|
18
|
+
if (!blocker)
|
|
19
|
+
return;
|
|
20
|
+
throw Object.assign(new Error(blocker.reason), {
|
|
21
|
+
status: 503,
|
|
22
|
+
code: blocker.code,
|
|
23
|
+
retryable: true,
|
|
24
|
+
requiredActions: [blocker.remediation ?? "Install Git and retry."],
|
|
25
|
+
context: {
|
|
26
|
+
capability: "git",
|
|
27
|
+
capabilityStatus: git.status,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
9
31
|
/** Refuse requests that no selected lane can satisfy before a run or turn is created. */
|
|
10
|
-
export function createRunRequirementsPreflight(resources, noProjectRoot, dependencies = {}) {
|
|
32
|
+
export function createRunRequirementsPreflight(resources, noProjectRoot, dependencies = {}, policy = {}) {
|
|
11
33
|
const requirements = new RequestRequirementsResolver();
|
|
12
34
|
return async (request) => {
|
|
35
|
+
if ((policy.git ?? "eager") === "eager")
|
|
36
|
+
await preflightRunGitRequirement(request, dependencies);
|
|
13
37
|
if ((request.attachments?.length ?? 0) === 0 && request.browser !== true)
|
|
14
38
|
return;
|
|
15
39
|
const cwd = request.scope.kind === "project" ? request.scope.root : noProjectRoot;
|
|
@@ -35,19 +59,18 @@ export function createRunRequirementsPreflight(resources, noProjectRoot, depende
|
|
|
35
59
|
throw requestError(`unknown harness lane: ${harnessId}`, 400, "harness_unavailable");
|
|
36
60
|
return { harnessId, manifest: await adapter.discover() };
|
|
37
61
|
}));
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
compatibleManifests.push({ harnessId, manifest });
|
|
47
|
-
}
|
|
48
|
-
if (compatibleManifests.length === 0) {
|
|
49
|
-
throw requestError("no eligible harness lane can receive every required attachment", 400, "attachment_pool_unsupported");
|
|
62
|
+
const attachmentAdmission = requirements.resolveAttachmentPool(explicitPool ? "explicit" : "auto", attachments, manifests.map(({ harnessId, manifest }) => ({
|
|
63
|
+
harnessId,
|
|
64
|
+
declarations: manifest.capability_profile.attachment_inputs,
|
|
65
|
+
available: true,
|
|
66
|
+
})));
|
|
67
|
+
if (attachmentAdmission.outcome === "refused") {
|
|
68
|
+
throw requestError(attachmentAdmission.message ??
|
|
69
|
+
"no eligible harness lane can receive every required attachment", 400, "attachment_pool_unsupported");
|
|
50
70
|
}
|
|
71
|
+
const compatibleManifests = attachmentAdmission.admittedHarnessIds
|
|
72
|
+
.map((harnessId) => manifests.find((entry) => entry.harnessId === harnessId))
|
|
73
|
+
.filter((entry) => entry !== undefined);
|
|
51
74
|
if (request.browser !== true)
|
|
52
75
|
return;
|
|
53
76
|
const access = intent === "implement"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-preflight.js","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"request-preflight.js","sourceRoot":"","sources":["../src/request-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-command-specs.d.ts","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,
|
|
1
|
+
{"version":3,"file":"retry-command-specs.d.ts","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EAqBxD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const RETRY_COMMAND_SPECS = [
|
|
2
2
|
{
|
|
3
3
|
id: "retry",
|
|
4
|
+
positionalPatterns: [{ min: 1, max: 1 }],
|
|
4
5
|
usageArgs: "<run_id>",
|
|
5
6
|
summary: "Exact Retry with the immutable original request and fresh preflight",
|
|
6
7
|
flags: ["json"],
|
|
@@ -10,6 +11,7 @@ export const RETRY_COMMAND_SPECS = [
|
|
|
10
11
|
},
|
|
11
12
|
{
|
|
12
13
|
id: "run-again",
|
|
14
|
+
positionalPatterns: [{ min: 1, max: 1 }],
|
|
13
15
|
usageArgs: "<run_id>",
|
|
14
16
|
summary: "Print an editable draft copied from a prior run",
|
|
15
17
|
flags: ["json"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-command-specs.js","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D;QACE,EAAE,EAAE,OAAO;QACX,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,qEAAqE;QAC9E,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;IACD;QACE,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"retry-command-specs.js","sourceRoot":"","sources":["../src/retry-command-specs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAA8B;IAC5D;QACE,EAAE,EAAE,OAAO;QACX,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACxC,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,qEAAqE;QAC9E,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;IACD;QACE,EAAE,EAAE,WAAW;QACf,kBAAkB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACxC,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type GitCapability, type RunGitApplicabilityMatrix } from "@claudexor/schema";
|
|
2
|
+
export interface RunApplicabilityDependencies {
|
|
3
|
+
gitCapability?: () => Promise<GitCapability>;
|
|
4
|
+
protectedPaths?: (repoRoot: string) => readonly string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Project one complete matrix through the same predicate the actual thread
|
|
8
|
+
* resolver and run preflight use. Clients only select a cell from their exact
|
|
9
|
+
* outgoing wire; they never reproduce Git/worktree business rules.
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildRunApplicabilityMatrix(input: {
|
|
12
|
+
repoRoot: string;
|
|
13
|
+
protectedPaths: readonly string[];
|
|
14
|
+
git: GitCapability;
|
|
15
|
+
}): RunGitApplicabilityMatrix;
|
|
16
|
+
/** Root-scoped service behind GET /run-applicability. */
|
|
17
|
+
export declare function projectRunApplicability(requestedRoot: string, dependencies?: RunApplicabilityDependencies): Promise<{
|
|
18
|
+
repoRoot: string;
|
|
19
|
+
git: {
|
|
20
|
+
status: "available" | "developer_tools_stub" | "failed" | "missing";
|
|
21
|
+
version: string | null;
|
|
22
|
+
detail: string | null;
|
|
23
|
+
remediation: string | null;
|
|
24
|
+
};
|
|
25
|
+
matrix: {
|
|
26
|
+
in_place: {
|
|
27
|
+
read_only: {
|
|
28
|
+
applicable: boolean;
|
|
29
|
+
requiresGit: boolean;
|
|
30
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
31
|
+
reason: string | null;
|
|
32
|
+
remediation: string | null;
|
|
33
|
+
};
|
|
34
|
+
agent_convergence: {
|
|
35
|
+
applicable: boolean;
|
|
36
|
+
requiresGit: boolean;
|
|
37
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
38
|
+
reason: string | null;
|
|
39
|
+
remediation: string | null;
|
|
40
|
+
};
|
|
41
|
+
agent_other: {
|
|
42
|
+
applicable: boolean;
|
|
43
|
+
requiresGit: boolean;
|
|
44
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
45
|
+
reason: string | null;
|
|
46
|
+
remediation: string | null;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
isolated: {
|
|
50
|
+
read_only: {
|
|
51
|
+
applicable: boolean;
|
|
52
|
+
requiresGit: boolean;
|
|
53
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
54
|
+
reason: string | null;
|
|
55
|
+
remediation: string | null;
|
|
56
|
+
};
|
|
57
|
+
agent_convergence: {
|
|
58
|
+
applicable: boolean;
|
|
59
|
+
requiresGit: boolean;
|
|
60
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
61
|
+
reason: string | null;
|
|
62
|
+
remediation: string | null;
|
|
63
|
+
};
|
|
64
|
+
agent_other: {
|
|
65
|
+
applicable: boolean;
|
|
66
|
+
requiresGit: boolean;
|
|
67
|
+
code: "git_developer_tools_stub" | "git_failed" | "git_missing" | null;
|
|
68
|
+
reason: string | null;
|
|
69
|
+
remediation: string | null;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
//# sourceMappingURL=run-applicability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-applicability.d.ts","sourceRoot":"","sources":["../src/run-applicability.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAElB,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CAC1D;AA+BD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,aAAa,CAAC;CACpB,GAAG,yBAAyB,CAqB5B;AAED,yDAAyD;AACzD,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,4BAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAehD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { loadConfig } from "@claudexor/config";
|
|
2
|
+
import { normalizeExistingProjectRoot } from "@claudexor/control-api";
|
|
3
|
+
import { ControlRunApplicabilityResponse, ThreadWorkspace, } from "@claudexor/schema";
|
|
4
|
+
import { gitCapabilityProblem, probeGitCapability } from "@claudexor/workspace";
|
|
5
|
+
import { threadRunStartRequiresGit } from "./thread-execution-workspace.js";
|
|
6
|
+
function requestFor(repoRoot, shape) {
|
|
7
|
+
const base = {
|
|
8
|
+
prompt: "run applicability projection",
|
|
9
|
+
scope: { kind: "project", root: repoRoot, context: "auto" },
|
|
10
|
+
execution: { isolation: shape === "read_only" ? "envelope" : "live" },
|
|
11
|
+
};
|
|
12
|
+
if (shape === "read_only")
|
|
13
|
+
return { ...base, mode: "ask" };
|
|
14
|
+
if (shape === "agent_convergence")
|
|
15
|
+
return { ...base, mode: "agent", untilClean: true };
|
|
16
|
+
return { ...base, mode: "agent" };
|
|
17
|
+
}
|
|
18
|
+
function cell(requiresGit, git) {
|
|
19
|
+
const blocker = gitCapabilityProblem(git);
|
|
20
|
+
if (!requiresGit || blocker === null) {
|
|
21
|
+
return {
|
|
22
|
+
applicable: true,
|
|
23
|
+
requiresGit,
|
|
24
|
+
code: null,
|
|
25
|
+
reason: null,
|
|
26
|
+
remediation: null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
applicable: false,
|
|
31
|
+
requiresGit: true,
|
|
32
|
+
...blocker,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Project one complete matrix through the same predicate the actual thread
|
|
37
|
+
* resolver and run preflight use. Clients only select a cell from their exact
|
|
38
|
+
* outgoing wire; they never reproduce Git/worktree business rules.
|
|
39
|
+
*/
|
|
40
|
+
export function buildRunApplicabilityMatrix(input) {
|
|
41
|
+
const workspace = (mode) => ({
|
|
42
|
+
workspace: ThreadWorkspace.parse({ mode }),
|
|
43
|
+
});
|
|
44
|
+
const project = (mode) => {
|
|
45
|
+
const thread = workspace(mode);
|
|
46
|
+
const projectCell = (shape) => cell(threadRunStartRequiresGit(requestFor(input.repoRoot, shape), thread, input.protectedPaths), input.git);
|
|
47
|
+
return {
|
|
48
|
+
read_only: projectCell("read_only"),
|
|
49
|
+
agent_convergence: projectCell("agent_convergence"),
|
|
50
|
+
agent_other: projectCell("agent_other"),
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
in_place: project("in_place"),
|
|
55
|
+
isolated: project("isolated"),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Root-scoped service behind GET /run-applicability. */
|
|
59
|
+
export async function projectRunApplicability(requestedRoot, dependencies = {}) {
|
|
60
|
+
const repoRoot = normalizeExistingProjectRoot(requestedRoot);
|
|
61
|
+
const [git, protectedPaths] = await Promise.all([
|
|
62
|
+
(dependencies.gitCapability ?? probeGitCapability)(),
|
|
63
|
+
Promise.resolve(dependencies.protectedPaths?.(repoRoot) ??
|
|
64
|
+
loadConfig(repoRoot).project.constraints.protected_paths),
|
|
65
|
+
]);
|
|
66
|
+
return ControlRunApplicabilityResponse.parse({
|
|
67
|
+
repoRoot,
|
|
68
|
+
git,
|
|
69
|
+
matrix: buildRunApplicabilityMatrix({ repoRoot, protectedPaths, git }),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=run-applicability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-applicability.js","sourceRoot":"","sources":["../src/run-applicability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,+BAA+B,EAC/B,eAAe,GAMhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAS5E,SAAS,UAAU,CAAC,QAAgB,EAAE,KAAe;IACnD,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,8BAA8B;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAe,EAAE;QAC7E,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAE,UAAoB,CAAC,CAAC,CAAE,MAAgB,EAAE;KAC5F,CAAC;IACF,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,IAAI,CAAC,WAAoB,EAAE,GAAkB;IACpD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,WAAW;YACX,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,IAAI;QACjB,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAI3C;IACC,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,CAAC;QAC1C,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;KAC3C,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,KAAe,EAAE,EAAE,CACtC,IAAI,CACF,yBAAyB,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAC1F,KAAK,CAAC,GAAG,CACV,CAAC;QACJ,OAAO;YACL,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC;YACnC,iBAAiB,EAAE,WAAW,CAAC,mBAAmB,CAAC;YACnD,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC;SACxC,CAAC;IACJ,CAAC,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;QAC7B,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,YAAY,GAAiC,EAAE;IAE/C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,CAAC,YAAY,CAAC,aAAa,IAAI,kBAAkB,CAAC,EAAE;QACpD,OAAO,CAAC,OAAO,CACb,YAAY,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;YACrC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAC3D;KACF,CAAC,CAAC;IACH,OAAO,+BAA+B,CAAC,KAAK,CAAC;QAC3C,QAAQ;QACR,GAAG;QACH,MAAM,EAAE,2BAA2B,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;KACvE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type ControlPrimaryOutput as ControlPrimaryOutputType, type RunFailure as RunFailureType } from "@claudexor/schema";
|
|
2
|
+
export type PrimaryOutputPresentation = Pick<ControlPrimaryOutputType, "kind" | "path" | "text"> & {
|
|
3
|
+
truncated?: boolean;
|
|
4
|
+
};
|
|
5
|
+
/** Schema-validate the Control API's single primary-output owner. */
|
|
6
|
+
export declare function projectRunPrimaryOutput(detail: Record<string, unknown> | null): ControlPrimaryOutputType | null;
|
|
7
|
+
/** Inline non-patch output with an honest bounded-preview disclosure. */
|
|
8
|
+
export declare function presentRunPrimaryOutput(output: PrimaryOutputPresentation | null): string | null;
|
|
9
|
+
export type ApplyEligibilityProjection = {
|
|
10
|
+
eligible: boolean;
|
|
11
|
+
state: string | null;
|
|
12
|
+
reason: string | null;
|
|
13
|
+
requiredAction: string | null;
|
|
14
|
+
};
|
|
15
|
+
export declare function projectApplyEligibility(detail: Record<string, unknown> | null): ApplyEligibilityProjection | null;
|
|
16
|
+
export declare function projectRunSpendUsd(detail: Record<string, unknown> | null): number | null;
|
|
17
|
+
export declare function projectRunCouncil(detail: Record<string, unknown> | null): unknown;
|
|
18
|
+
/** Preserve only the schema-owned typed terminal failure. Every surface uses
|
|
19
|
+
* this projection instead of forwarding an arbitrary failure-shaped object. */
|
|
20
|
+
export declare function projectRunFailure(detail: Record<string, unknown> | null): RunFailureType | null;
|
|
21
|
+
export declare function projectRunLineage(detail: Record<string, unknown> | null): {
|
|
22
|
+
parentRunId: string | null;
|
|
23
|
+
delegatedFromRunId: string | null;
|
|
24
|
+
delegation: Record<string, unknown> | null;
|
|
25
|
+
};
|
|
26
|
+
export declare function projectOutcomeBanner(detail: Record<string, unknown> | null): string | null;
|
|
27
|
+
/** Typed description of a raised post-terminal run-detail problem for surfaces
|
|
28
|
+
* that must DEGRADE instead of failing the caller (MCP results, ACP turn
|
|
29
|
+
* results, --json outcome projections): the finished run's result survives with
|
|
30
|
+
* its runId, and this field discloses WHY its detail projections are absent.
|
|
31
|
+
* The CLI's own terminal path keeps the raise (renderCliFailure, non-zero
|
|
32
|
+
* exit) — there the run result IS the process outcome. */
|
|
33
|
+
export interface RunDetailProblem {
|
|
34
|
+
code: string | null;
|
|
35
|
+
message: string;
|
|
36
|
+
retryable: boolean | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function describeRunDetailProblem(error: unknown): RunDetailProblem;
|
|
39
|
+
//# sourceMappingURL=run-detail-projections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-detail-projections.d.ts","sourceRoot":"","sources":["../src/run-detail-projections.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,IAAI,wBAAwB,EACrD,KAAK,UAAU,IAAI,cAAc,EAClC,MAAM,mBAAmB,CAAC;AAG3B,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG;IACjG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACrC,wBAAwB,GAAG,IAAI,CAGjC;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAO/F;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,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,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACrC,0BAA0B,GAAG,IAAI,CAGnC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOxF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAGjF;AAED;+EAC+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAG/F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C,CAcA;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG1F;AAED;;;;;0DAK0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAOzE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ControlPrimaryOutput, CouncilProjection, RunFailure, } from "@claudexor/schema";
|
|
2
|
+
import { redactSecrets } from "@claudexor/util";
|
|
3
|
+
/** Schema-validate the Control API's single primary-output owner. */
|
|
4
|
+
export function projectRunPrimaryOutput(detail) {
|
|
5
|
+
const parsed = ControlPrimaryOutput.safeParse(detail?.["primaryOutput"]);
|
|
6
|
+
return parsed.success ? parsed.data : null;
|
|
7
|
+
}
|
|
8
|
+
/** Inline non-patch output with an honest bounded-preview disclosure. */
|
|
9
|
+
export function presentRunPrimaryOutput(output) {
|
|
10
|
+
if (!output || output.kind === "patch" || typeof output.text !== "string")
|
|
11
|
+
return null;
|
|
12
|
+
const text = output.text.trim();
|
|
13
|
+
if (!text)
|
|
14
|
+
return null;
|
|
15
|
+
return output.truncated === true
|
|
16
|
+
? `${text}\n\n[Inline preview bounded; full artifact: ${output.path}]`
|
|
17
|
+
: text;
|
|
18
|
+
}
|
|
19
|
+
export function projectApplyEligibility(detail) {
|
|
20
|
+
const value = detail?.["applyEligibility"];
|
|
21
|
+
return value && typeof value === "object" ? value : null;
|
|
22
|
+
}
|
|
23
|
+
export function projectRunSpendUsd(detail) {
|
|
24
|
+
const summary = detail?.["summary"];
|
|
25
|
+
const spend = summary && typeof summary === "object"
|
|
26
|
+
? summary.spendUsd
|
|
27
|
+
: undefined;
|
|
28
|
+
return typeof spend === "number" && Number.isFinite(spend) ? spend : null;
|
|
29
|
+
}
|
|
30
|
+
export function projectRunCouncil(detail) {
|
|
31
|
+
const parsed = CouncilProjection.safeParse(detail?.["council"]);
|
|
32
|
+
return parsed.success ? parsed.data : null;
|
|
33
|
+
}
|
|
34
|
+
/** Preserve only the schema-owned typed terminal failure. Every surface uses
|
|
35
|
+
* this projection instead of forwarding an arbitrary failure-shaped object. */
|
|
36
|
+
export function projectRunFailure(detail) {
|
|
37
|
+
const parsed = RunFailure.safeParse(detail?.["failure"]);
|
|
38
|
+
return parsed.success ? parsed.data : null;
|
|
39
|
+
}
|
|
40
|
+
export function projectRunLineage(detail) {
|
|
41
|
+
const summary = detail?.["summary"] && typeof detail["summary"] === "object"
|
|
42
|
+
? detail["summary"]
|
|
43
|
+
: null;
|
|
44
|
+
return {
|
|
45
|
+
parentRunId: typeof summary?.["parentRunId"] === "string" ? summary["parentRunId"] : null,
|
|
46
|
+
delegatedFromRunId: typeof summary?.["delegatedFromRunId"] === "string" ? summary["delegatedFromRunId"] : null,
|
|
47
|
+
delegation: summary?.["delegation"] && typeof summary["delegation"] === "object"
|
|
48
|
+
? summary["delegation"]
|
|
49
|
+
: null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function projectOutcomeBanner(detail) {
|
|
53
|
+
const banner = detail?.["outcomeBanner"];
|
|
54
|
+
return typeof banner === "string" && banner.length > 0 ? banner : null;
|
|
55
|
+
}
|
|
56
|
+
export function describeRunDetailProblem(error) {
|
|
57
|
+
const record = error && typeof error === "object" ? error : {};
|
|
58
|
+
return {
|
|
59
|
+
code: typeof record["code"] === "string" && record["code"] ? record["code"] : null,
|
|
60
|
+
message: redactSecrets(error instanceof Error ? error.message : String(error)),
|
|
61
|
+
retryable: typeof record["retryable"] === "boolean" ? record["retryable"] : null,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=run-detail-projections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-detail-projections.js","sourceRoot":"","sources":["../src/run-detail-projections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type JsonResponse = {
|
|
2
|
+
json(): Promise<unknown>;
|
|
3
|
+
};
|
|
4
|
+
/** Decode and schema-check a successful Control API run-detail response. */
|
|
5
|
+
export declare function readRunDetailResponse(response: JsonResponse): Promise<Record<string, unknown>>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=run-detail-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-detail-response.d.ts","sourceRoot":"","sources":["../src/run-detail-response.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAEjD,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ControlRunDetail } from "@claudexor/schema";
|
|
2
|
+
import { CliError } from "./cli-error.js";
|
|
3
|
+
/** Decode and schema-check a successful Control API run-detail response. */
|
|
4
|
+
export async function readRunDetailResponse(response) {
|
|
5
|
+
let body;
|
|
6
|
+
try {
|
|
7
|
+
body = await response.json();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw invalidRunDetailResponse("run detail endpoint returned malformed JSON");
|
|
11
|
+
}
|
|
12
|
+
if (!ControlRunDetail.safeParse(body).success) {
|
|
13
|
+
throw invalidRunDetailResponse("run detail endpoint returned an invalid response");
|
|
14
|
+
}
|
|
15
|
+
return body;
|
|
16
|
+
}
|
|
17
|
+
function invalidRunDetailResponse(message) {
|
|
18
|
+
return new CliError("operational", message, {
|
|
19
|
+
code: "invalid_service_response",
|
|
20
|
+
retryable: true,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=run-detail-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-detail-response.js","sourceRoot":"","sources":["../src/run-detail-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAsB;IAEtB,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,wBAAwB,CAAC,6CAA6C,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,wBAAwB,CAAC,kDAAkD,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,IAA+B,CAAC;AACzC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAC/C,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE;QAC1C,IAAI,EAAE,0BAA0B;QAChC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ExpectedRunFactsIdentity, type RunFacts as RunFactsType } from "@claudexor/schema";
|
|
2
|
+
import { type ApplyEligibilityProjection } from "./run-detail-projections.js";
|
|
3
|
+
type RunDetail = Record<string, unknown> | null;
|
|
4
|
+
export type { ExpectedRunFactsIdentity } from "@claudexor/schema";
|
|
5
|
+
/** Exact validated terminal receipt from an already-fetched run detail. */
|
|
6
|
+
export declare function projectRunFacts(detail: RunDetail, expected?: ExpectedRunFactsIdentity): RunFactsType | null;
|
|
7
|
+
/**
|
|
8
|
+
* Shared fields appended to both terminal machine surfaces. RunFacts is
|
|
9
|
+
* intentionally always present; only a genuinely missing legacy receipt
|
|
10
|
+
* projects to null, while present malformed data fails loudly.
|
|
11
|
+
*/
|
|
12
|
+
export declare function projectTerminalDetailFields(detail: RunDetail, expected?: ExpectedRunFactsIdentity): {
|
|
13
|
+
outcomeBanner?: string;
|
|
14
|
+
applyEligibility?: ApplyEligibilityProjection;
|
|
15
|
+
runFacts: RunFactsType | null;
|
|
16
|
+
};
|
|
17
|
+
type YamlArtifactReader = {
|
|
18
|
+
readYaml(path: string): unknown;
|
|
19
|
+
};
|
|
20
|
+
/** Read the canonical immutable RunFacts artifact without reconstructing it. */
|
|
21
|
+
export declare function readRunFactsArtifact(reader: YamlArtifactReader, finalDir: string, expected?: ExpectedRunFactsIdentity): RunFactsType | null;
|
|
22
|
+
//# sourceMappingURL=run-facts-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-facts-projection.d.ts","sourceRoot":"","sources":["../src/run-facts-projection.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,IAAI,YAAY,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;AAKhD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,2EAA2E;AAC3E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,QAAQ,GAAE,wBAA6B,GACtC,YAAY,GAAG,IAAI,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,QAAQ,GAAE,wBAA6B,GACtC;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B,CAQA;AAED,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,wBAA6B,GACtC,YAAY,GAAG,IAAI,CAmBrB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { lstatSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { RunFactsInvalidError, validateRunFactsReceipt, } from "@claudexor/schema";
|
|
4
|
+
import { projectApplyEligibility, projectOutcomeBanner, } from "./run-detail-projections.js";
|
|
5
|
+
/** Exact validated terminal receipt from an already-fetched run detail. */
|
|
6
|
+
export function projectRunFacts(detail, expected = {}) {
|
|
7
|
+
if (!detail)
|
|
8
|
+
return null;
|
|
9
|
+
const value = detail["runFacts"];
|
|
10
|
+
if (value === null || value === undefined)
|
|
11
|
+
return null;
|
|
12
|
+
return validateRunFactsReceipt(value, expectedIdentityFromDetail(detail, expected));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Shared fields appended to both terminal machine surfaces. RunFacts is
|
|
16
|
+
* intentionally always present; only a genuinely missing legacy receipt
|
|
17
|
+
* projects to null, while present malformed data fails loudly.
|
|
18
|
+
*/
|
|
19
|
+
export function projectTerminalDetailFields(detail, expected = {}) {
|
|
20
|
+
const outcomeBanner = projectOutcomeBanner(detail);
|
|
21
|
+
const applyEligibility = projectApplyEligibility(detail);
|
|
22
|
+
return {
|
|
23
|
+
...(outcomeBanner ? { outcomeBanner } : {}),
|
|
24
|
+
...(applyEligibility ? { applyEligibility } : {}),
|
|
25
|
+
runFacts: projectRunFacts(detail, expected),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Read the canonical immutable RunFacts artifact without reconstructing it. */
|
|
29
|
+
export function readRunFactsArtifact(reader, finalDir, expected = {}) {
|
|
30
|
+
const path = join(finalDir, "run_facts.yaml");
|
|
31
|
+
const finalDirStat = lstatOrNull(finalDir);
|
|
32
|
+
if (finalDirStat === null)
|
|
33
|
+
return null;
|
|
34
|
+
if (!finalDirStat.isDirectory() || finalDirStat.isSymbolicLink()) {
|
|
35
|
+
throw new RunFactsInvalidError();
|
|
36
|
+
}
|
|
37
|
+
const artifactStat = lstatOrNull(path);
|
|
38
|
+
if (artifactStat === null)
|
|
39
|
+
return null;
|
|
40
|
+
if (!artifactStat.isFile() || artifactStat.isSymbolicLink())
|
|
41
|
+
throw new RunFactsInvalidError();
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = reader.readYaml(path);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new RunFactsInvalidError();
|
|
48
|
+
}
|
|
49
|
+
return validateRunFactsReceipt(raw, expected);
|
|
50
|
+
}
|
|
51
|
+
function expectedIdentityFromDetail(detail, expected) {
|
|
52
|
+
const summary = detail["summary"];
|
|
53
|
+
if (!summary || typeof summary !== "object")
|
|
54
|
+
return expected;
|
|
55
|
+
const record = summary;
|
|
56
|
+
const summaryRunId = typeof record["runId"] === "string" ? record["runId"] : undefined;
|
|
57
|
+
const summaryTaskId = typeof record["taskId"] === "string" ? record["taskId"] : undefined;
|
|
58
|
+
if ((expected.runId !== undefined &&
|
|
59
|
+
summaryRunId !== undefined &&
|
|
60
|
+
expected.runId !== summaryRunId) ||
|
|
61
|
+
(expected.taskId !== undefined &&
|
|
62
|
+
summaryTaskId !== undefined &&
|
|
63
|
+
expected.taskId !== summaryTaskId)) {
|
|
64
|
+
throw new RunFactsInvalidError();
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
runId: expected.runId ?? summaryRunId,
|
|
68
|
+
taskId: expected.taskId ?? summaryTaskId,
|
|
69
|
+
...(expected.lifecycle !== undefined ? { lifecycle: expected.lifecycle } : {}),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function lstatOrNull(path) {
|
|
73
|
+
try {
|
|
74
|
+
return lstatSync(path);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error &&
|
|
78
|
+
typeof error === "object" &&
|
|
79
|
+
"code" in error &&
|
|
80
|
+
error.code === "ENOENT") {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
throw new RunFactsInvalidError();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=run-facts-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-facts-projection.js","sourceRoot":"","sources":["../src/run-facts-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type AwaitDaemonTerminationOptions, type DaemonTerminationOutcome, type DaemonLeaseOwner, DaemonClient, awaitDaemonTermination } from "@claudexor/daemon";
|
|
2
|
+
interface RuntimeReplacementStopDeps {
|
|
3
|
+
socketPath(): string;
|
|
4
|
+
readToken(): string | null;
|
|
5
|
+
socketAlive(path: string): Promise<boolean>;
|
|
6
|
+
leaseOwner(path: string): DaemonLeaseOwner | null;
|
|
7
|
+
client(path: string, token: string): Pick<DaemonClient, "shutdownForRuntimeReplacement">;
|
|
8
|
+
awaitTermination(path: string, options: AwaitDaemonTerminationOptions): ReturnType<typeof awaitDaemonTermination>;
|
|
9
|
+
write(line: string): void;
|
|
10
|
+
}
|
|
11
|
+
/** One owner for the admission/termination uncertainty boundary used by both
|
|
12
|
+
* local and remote runtime replacement. Only a proven
|
|
13
|
+
* `{ok:true,fenced:true,targetBound:true}` receipt grants
|
|
14
|
+
* signal authority for the pre-RPC writer-lease owner.
|
|
15
|
+
* A lost, legacy, or untyped response may passively prove that the pinned
|
|
16
|
+
* daemon exited, but can never turn into a kill. */
|
|
17
|
+
export declare function admitAndAwaitRuntimeReplacementStop(requestAdmission: () => Promise<unknown>, awaitTermination: (options: AwaitDaemonTerminationOptions) => Promise<DaemonTerminationOutcome>, expectedOwner: DaemonLeaseOwner): Promise<DaemonTerminationOutcome>;
|
|
18
|
+
/** Handle `claudexord --stop`: the identity-proven, admission-safe shutdown the
|
|
19
|
+
* macOS installer runs before an atomic pointer swap. Unlike explicit operator
|
|
20
|
+
* shutdown, this asks the daemon to atomically prove idle and fence every ingress
|
|
21
|
+
* before stopping. The pinned termination proof remains authoritative when the
|
|
22
|
+
* accepted RPC response is lost as the socket closes. */
|
|
23
|
+
export declare function runStopIfRequested(argv: readonly string[], deps?: RuntimeReplacementStopDeps): Promise<boolean>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=runtime-replacement-stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-replacement-stop.d.ts","sourceRoot":"","sources":["../src/runtime-replacement-stop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,YAAY,EAGZ,sBAAsB,EAIvB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,0BAA0B;IAClC,UAAU,IAAI,MAAM,CAAC;IACrB,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,+BAA+B,CAAC,CAAC;IACzF,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,6BAA6B,GACrC,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAoED;;;;;oDAKoD;AACpD,wBAAsB,mCAAmC,CACvD,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EACxC,gBAAgB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,wBAAwB,CAAC,EAC/F,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAgCnC;AAED;;;;yDAIyD;AACzD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,0BAA2C,GAChD,OAAO,CAAC,OAAO,CAAC,CAwElB"}
|