@claudexor/orchestrator 3.1.2 → 3.3.7-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attemptFinalize.d.ts +14 -11
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +41 -14
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/attemptTelemetry.d.ts +7 -0
- package/dist/attemptTelemetry.d.ts.map +1 -1
- package/dist/attemptTelemetry.js +2 -1
- package/dist/attemptTelemetry.js.map +1 -1
- package/dist/attemptUsageCost.d.ts +24 -2
- package/dist/attemptUsageCost.d.ts.map +1 -1
- package/dist/attemptUsageCost.js +18 -2
- package/dist/attemptUsageCost.js.map +1 -1
- package/dist/budgetFailure.d.ts +1 -1
- package/dist/budgetFailure.d.ts.map +1 -1
- package/dist/budgetFailure.js.map +1 -1
- package/dist/candidateEvidence.d.ts +24 -0
- package/dist/candidateEvidence.d.ts.map +1 -1
- package/dist/candidateEvidence.js +26 -0
- package/dist/candidateEvidence.js.map +1 -1
- package/dist/credential-profile-rotation.d.ts +145 -0
- package/dist/credential-profile-rotation.d.ts.map +1 -0
- package/dist/credential-profile-rotation.js +335 -0
- package/dist/credential-profile-rotation.js.map +1 -0
- package/dist/credential-profiles.d.ts +90 -130
- package/dist/credential-profiles.d.ts.map +1 -1
- package/dist/credential-profiles.js +156 -290
- package/dist/credential-profiles.js.map +1 -1
- package/dist/decisionBudget.d.ts +2 -2
- package/dist/decisionBudget.d.ts.map +1 -1
- package/dist/deepScanReducer.d.ts +14 -44
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +240 -128
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegatedHome.d.ts +156 -0
- package/dist/delegatedHome.d.ts.map +1 -0
- package/dist/delegatedHome.js +179 -0
- package/dist/delegatedHome.js.map +1 -0
- package/dist/delegationBudgetAuthority.d.ts.map +1 -1
- package/dist/delegationBudgetAuthority.js.map +1 -1
- package/dist/delegationFailure.d.ts.map +1 -1
- package/dist/git-precondition.d.ts +11 -0
- package/dist/git-precondition.d.ts.map +1 -0
- package/dist/git-precondition.js +69 -0
- package/dist/git-precondition.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +14 -6
- package/dist/interaction.d.ts.map +1 -1
- package/dist/interaction.js +106 -19
- package/dist/interaction.js.map +1 -1
- package/dist/orchestrator.d.ts +64 -83
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +578 -691
- package/dist/orchestrator.js.map +1 -1
- package/dist/planBrief.d.ts +27 -0
- package/dist/planBrief.d.ts.map +1 -0
- package/dist/planBrief.js +42 -0
- package/dist/planBrief.js.map +1 -0
- package/dist/planQuestions.js +4 -1
- package/dist/planQuestions.js.map +1 -1
- package/dist/planRun.d.ts +4 -3
- package/dist/planRun.d.ts.map +1 -1
- package/dist/planRun.js +33 -33
- package/dist/planRun.js.map +1 -1
- package/dist/plannerAttempt.d.ts +64 -0
- package/dist/plannerAttempt.d.ts.map +1 -0
- package/dist/plannerAttempt.js +235 -0
- package/dist/plannerAttempt.js.map +1 -0
- package/dist/policyFindings.js.map +1 -1
- package/dist/requestRequirements.d.ts +43 -3
- package/dist/requestRequirements.d.ts.map +1 -1
- package/dist/requestRequirements.js +106 -13
- package/dist/requestRequirements.js.map +1 -1
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/root-ledger.d.ts.map +1 -1
- package/dist/root-ledger.js +2 -0
- package/dist/root-ledger.js.map +1 -1
- package/dist/run-bounded.d.ts.map +1 -1
- package/dist/run-bounded.js +7 -1
- package/dist/run-bounded.js.map +1 -1
- package/dist/run-input-resolution.d.ts.map +1 -1
- package/dist/run-input-resolution.js +26 -8
- package/dist/run-input-resolution.js.map +1 -1
- package/dist/runEventLog.d.ts +48 -0
- package/dist/runEventLog.d.ts.map +1 -0
- package/dist/runEventLog.js +63 -0
- package/dist/runEventLog.js.map +1 -0
- package/dist/runFacts.d.ts +23 -0
- package/dist/runFacts.d.ts.map +1 -0
- package/dist/runFacts.js +179 -0
- package/dist/runFacts.js.map +1 -0
- package/dist/runFactsBuilder.d.ts +5 -0
- package/dist/runFactsBuilder.d.ts.map +1 -0
- package/dist/runFactsBuilder.js +412 -0
- package/dist/runFactsBuilder.js.map +1 -0
- package/dist/runFactsDeliverable.d.ts +13 -0
- package/dist/runFactsDeliverable.d.ts.map +1 -0
- package/dist/runFactsDeliverable.js +94 -0
- package/dist/runFactsDeliverable.js.map +1 -0
- package/dist/runFactsPresentation.d.ts +7 -0
- package/dist/runFactsPresentation.d.ts.map +1 -0
- package/dist/runFactsPresentation.js +113 -0
- package/dist/runFactsPresentation.js.map +1 -0
- package/dist/runFactsReview.d.ts +7 -0
- package/dist/runFactsReview.d.ts.map +1 -0
- package/dist/runFactsReview.js +63 -0
- package/dist/runFactsReview.js.map +1 -0
- package/dist/runSupport.d.ts +17 -15
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +16 -0
- package/dist/runSupport.js.map +1 -1
- package/dist/runTerminalContext.d.ts +31 -0
- package/dist/runTerminalContext.d.ts.map +1 -0
- package/dist/runTerminalContext.js +12 -0
- package/dist/runTerminalContext.js.map +1 -0
- package/dist/runTerminalResults.d.ts +80 -0
- package/dist/runTerminalResults.d.ts.map +1 -0
- package/dist/runTerminalResults.js +164 -0
- package/dist/runTerminalResults.js.map +1 -0
- package/dist/runTerminals.d.ts +4 -80
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +357 -260
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +3 -0
- package/dist/secretDiff.d.ts.map +1 -1
- package/dist/secretDiff.js +7 -0
- package/dist/secretDiff.js.map +1 -1
- package/dist/structuredOutput.d.ts.map +1 -1
- package/dist/structuredOutput.js.map +1 -1
- package/dist/task-contract-builder.d.ts +35 -0
- package/dist/task-contract-builder.d.ts.map +1 -0
- package/dist/task-contract-builder.js +114 -0
- package/dist/task-contract-builder.js.map +1 -0
- package/dist/transientClassify.js.map +1 -1
- package/package.json +17 -17
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { ConfinementHost } from "@claudexor/core";
|
|
2
|
+
import type { AccessProfile, HarnessConfinement, WorkspaceEnvelope } from "@claudexor/schema";
|
|
3
|
+
import type { WorkspaceManager } from "@claudexor/workspace";
|
|
4
|
+
/** What one attempt's harness HOME actually resolved to, and whether it is scoped. */
|
|
5
|
+
export interface ScopedHarnessHome {
|
|
6
|
+
/** Env patch to spread onto the harness spec; absent when the attempt inherits the operator's env. */
|
|
7
|
+
env?: Record<string, string>;
|
|
8
|
+
/** Applied fact, recorded on the attempt so the caller can verify rather than trust. */
|
|
9
|
+
isolated: boolean;
|
|
10
|
+
/** The scoped home directory, or null when the attempt inherits the operator's. */
|
|
11
|
+
homeDir: string | null;
|
|
12
|
+
/** The APPLIED OS boundary, or null when this attempt runs without one. */
|
|
13
|
+
confinement: HarnessConfinement | null;
|
|
14
|
+
/**
|
|
15
|
+
* Why this attempt got NO boundary, when it asked for one and the host had
|
|
16
|
+
* none. Null both when a boundary WAS applied and when none was ever asked
|
|
17
|
+
* for — an ordinary run is not "unconfined", it is out of scope, and the
|
|
18
|
+
* terminal gate below depends on being able to tell those apart.
|
|
19
|
+
*/
|
|
20
|
+
confinementUnavailableReason: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** Access profiles under which the harness can modify the filesystem. */
|
|
23
|
+
export declare function isMutatingAccess(access: AccessProfile): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether this run's lanes should be told to stand their own sandbox down.
|
|
26
|
+
*
|
|
27
|
+
* Only a delegated run asks for an engine-provided boundary, and only a host
|
|
28
|
+
* that can actually provide one earns the trade. Telling a harness to drop its
|
|
29
|
+
* native sandbox where Claudexor will NOT replace it is a pure loss — strictly
|
|
30
|
+
* worse than never having asked — so the two conditions are one expression
|
|
31
|
+
* rather than a flag the caller passes and a check nobody makes.
|
|
32
|
+
*/
|
|
33
|
+
export declare function externallyConfinedLane(delegated: boolean, host?: ConfinementHost): boolean;
|
|
34
|
+
/** Roots the confinement is drawn against; overridable so tests never touch the real home. */
|
|
35
|
+
export interface ConfinementRoots {
|
|
36
|
+
operatorHome: string;
|
|
37
|
+
runtimeRoot: string;
|
|
38
|
+
nativeStateRoot: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function defaultConfinementRoots(): ConfinementRoots;
|
|
41
|
+
/**
|
|
42
|
+
* Decide the harness HOME and the OS boundary one attempt runs under.
|
|
43
|
+
*
|
|
44
|
+
* Unchanged for ordinary runs: an ISOLATED envelope gets the envelope's scoped
|
|
45
|
+
* home, while an IN-PLACE attempt deliberately inherits the operator's native
|
|
46
|
+
* environment so a harness whose native session store hangs off `$HOME` can
|
|
47
|
+
* resume its vendor conversation.
|
|
48
|
+
*
|
|
49
|
+
* A DELEGATED run (`execution.delegated`) is scoped either way, and that is a
|
|
50
|
+
* BEHAVIORAL CHANGE against that deliberate design — live + agent is exactly
|
|
51
|
+
* the configuration a delegated mutating subagent uses. It is taken knowingly:
|
|
52
|
+
* the caller is a machine orchestrator that owns the workspace, and the
|
|
53
|
+
* operator's real `$HOME` holds material no delegated harness may read, above
|
|
54
|
+
* all `~/.claudexor/v3/daemon/token`, which grants the entire control API.
|
|
55
|
+
*
|
|
56
|
+
* THE SCOPED HOME IS NOT THE BOUNDARY. It redirects `~`-relative lookups and
|
|
57
|
+
* nothing more; the token above is one absolute path away, and a live probe
|
|
58
|
+
* read it out of an ordinary `workspace_write` agent run. So a delegated
|
|
59
|
+
* MUTATING attempt additionally gets an OS-ENFORCED boundary
|
|
60
|
+
* (`applyConfinement`), verified against a path it denies before the harness is
|
|
61
|
+
* spawned. A delegated READ-ONLY attempt keeps the harness's own read-only
|
|
62
|
+
* enforcement instead: confinement stands that enforcement down (macOS refuses
|
|
63
|
+
* nested sandboxes), which would be a net loss where there is no shell to
|
|
64
|
+
* confine.
|
|
65
|
+
*
|
|
66
|
+
* WHERE THE HOST HAS NO BOUNDARY the attempt still runs, and says so: the
|
|
67
|
+
* reason travels onto the attempt record, into the child's prompt and into the
|
|
68
|
+
* caller's result. A delegated run that refused on every platform Claudexor has
|
|
69
|
+
* not implemented a mechanism for would be a macOS-only feature wearing a
|
|
70
|
+
* general name.
|
|
71
|
+
*
|
|
72
|
+
* THE COST of the scoped home, stated plainly: an in-place delegated attempt
|
|
73
|
+
* CANNOT resume a native vendor session whose store lives under the real `$HOME`
|
|
74
|
+
* — cursor (`~/.cursor`) and opencode (XDG data under `$HOME`) lose resume.
|
|
75
|
+
* codex and claude keep it: their native session stores are Claudexor-owned
|
|
76
|
+
* directories that the adapter re-points on top of this env and that the
|
|
77
|
+
* confinement carves back out, and the macOS login Keychain is reached through
|
|
78
|
+
* the declared scoped-home bridge (INV-067), so subscription auth is unaffected.
|
|
79
|
+
*
|
|
80
|
+
* Never degrades silently: a delegated attempt whose scoped home is not on disk,
|
|
81
|
+
* or whose boundary cannot be applied and proven, refuses.
|
|
82
|
+
*/
|
|
83
|
+
export declare function scopedHarnessHome(wsm: WorkspaceManager, envelope: WorkspaceEnvelope, inPlaceEnvelope: boolean, delegated: boolean, access?: AccessProfile, roots?: ConfinementRoots, host?: ConfinementHost): ScopedHarnessHome;
|
|
84
|
+
/**
|
|
85
|
+
* What the CHILD is told, when it is running without an OS boundary.
|
|
86
|
+
*
|
|
87
|
+
* Second of the three places the absence is disclosed (the attempt record and
|
|
88
|
+
* the caller's result are the other two). A model that believes it is sandboxed
|
|
89
|
+
* when it is not is the one reader whose behaviour actually changes on this
|
|
90
|
+
* fact, so it is stated to the model in plain words rather than left in an
|
|
91
|
+
* artifact it never reads.
|
|
92
|
+
*/
|
|
93
|
+
export declare function confinementNotice(home: ScopedHarnessHome | null | undefined): string | null;
|
|
94
|
+
/**
|
|
95
|
+
* What an attempt's harness process ACTUALLY ran under.
|
|
96
|
+
*
|
|
97
|
+
* One shape, written by the success path and the failure path alike. An attempt
|
|
98
|
+
* that spawned a harness and then died still ran a process, and the caller of a
|
|
99
|
+
* delegated run still needs to know what that process could reach — "it failed"
|
|
100
|
+
* is not an answer to "was it confined".
|
|
101
|
+
*/
|
|
102
|
+
export interface AppliedAttemptFacts {
|
|
103
|
+
harness_home_isolated: boolean;
|
|
104
|
+
harness_home_dir: string | null;
|
|
105
|
+
access_applied: AccessProfile;
|
|
106
|
+
credential_profile_applied: string | null;
|
|
107
|
+
/**
|
|
108
|
+
* OPAQUE mechanism label, never a platform and never a promise: it is written
|
|
109
|
+
* only together with the path below, which is the proof it was enforced.
|
|
110
|
+
*/
|
|
111
|
+
confinement_mechanism: string | null;
|
|
112
|
+
confinement_profile_digest: string | null;
|
|
113
|
+
confinement_verified_denied_path: string | null;
|
|
114
|
+
/**
|
|
115
|
+
* Why this attempt ran with NO boundary. This is the field that makes an
|
|
116
|
+
* honestly unconfined attempt DIFFERENT from an attempt whose evidence is
|
|
117
|
+
* simply missing — the first is auditable, the second is not.
|
|
118
|
+
*/
|
|
119
|
+
confinement_unavailable_reason: string | null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* `home` is nullable on purpose: an attempt that died BEFORE its home was
|
|
123
|
+
* decided still writes the block, with every field null. A record that omits
|
|
124
|
+
* the fields entirely is indistinguishable from one written by an engine that
|
|
125
|
+
* never had them, which is the ambiguity the terminal check exists to close.
|
|
126
|
+
*/
|
|
127
|
+
export declare function appliedAttemptFacts(home: ScopedHarnessHome | null | undefined, access: AccessProfile, credentialProfileId: string | null): AppliedAttemptFacts;
|
|
128
|
+
/**
|
|
129
|
+
* Whether an attempt's record is auditable for a delegated MUTATING run.
|
|
130
|
+
*
|
|
131
|
+
* The distinction this predicate exists to draw: evidence that is MISSING is
|
|
132
|
+
* still a reason to refuse — an attempt that cannot say what it ran under is
|
|
133
|
+
* indistinguishable from one that ran unconfined behind a green terminal.
|
|
134
|
+
* Evidence that honestly says "no boundary here, and here is why" is COMPLETE;
|
|
135
|
+
* the absence of a boundary is a fact about the host, not a gap in the record,
|
|
136
|
+
* and refusing on it would make a delegated mutating run impossible wherever
|
|
137
|
+
* Claudexor has not implemented a mechanism.
|
|
138
|
+
*
|
|
139
|
+
* A named mechanism is a claim, and only `verified_denied_path` discharges it —
|
|
140
|
+
* so a record carrying the name without the proof is NOT complete, and neither
|
|
141
|
+
* is one that claims a boundary and a reason for its absence at the same time.
|
|
142
|
+
*/
|
|
143
|
+
export declare function appliedEvidenceComplete(facts: AppliedAttemptFacts | null | undefined): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* The terminal gate, shared by every lane that assembles attempts.
|
|
146
|
+
*
|
|
147
|
+
* A delegated MUTATING run may only reach a terminal when EVERY attempt it ran
|
|
148
|
+
* can state what it ran under. One lane checking and its twin not is how a
|
|
149
|
+
* mutating child ends up unconfined behind a green run, so the rule lives here
|
|
150
|
+
* and both callers spend it.
|
|
151
|
+
*/
|
|
152
|
+
export declare function assertDelegatedEvidence(delegated: boolean, access: AccessProfile, attempts: readonly {
|
|
153
|
+
attemptId: string;
|
|
154
|
+
applied?: AppliedAttemptFacts;
|
|
155
|
+
}[]): void;
|
|
156
|
+
//# sourceMappingURL=delegatedHome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegatedHome.d.ts","sourceRoot":"","sources":["../src/delegatedHome.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOvD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAChC,sGAAsG;IACtG,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wFAAwF;IACxF,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2EAA2E;IAC3E,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC;;;;;OAKG;IACH,4BAA4B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAE1F;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,CAM1D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,EAAE,OAAO,EACxB,SAAS,EAAE,OAAO,EAClB,MAAM,GAAE,aAAiC,EACzC,KAAK,GAAE,gBAA4C,EACnD,IAAI,CAAC,EAAE,eAAe,GACrB,iBAAiB,CAoCnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU3F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,aAAa,CAAC;IAC9B,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD;;;;OAIG;IACH,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,EAAE,aAAa,EACrB,mBAAmB,EAAE,MAAM,GAAG,IAAI,GACjC,mBAAmB,CAWrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAM9F;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAE,EAAE,GACxE,IAAI,CAON"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { applyConfinement, confinementBoundaryAvailable, DelegatedEvidenceIncompleteError, DelegatedHomeUnavailableError, } from "@claudexor/core";
|
|
3
|
+
import { confinementBoundaryProven } from "@claudexor/schema";
|
|
4
|
+
import { claudexorOwnedRoot, nativeHarnessStateRoot, userHomeDir } from "@claudexor/util";
|
|
5
|
+
/** Access profiles under which the harness can modify the filesystem. */
|
|
6
|
+
export function isMutatingAccess(access) {
|
|
7
|
+
return access !== "readonly";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Whether this run's lanes should be told to stand their own sandbox down.
|
|
11
|
+
*
|
|
12
|
+
* Only a delegated run asks for an engine-provided boundary, and only a host
|
|
13
|
+
* that can actually provide one earns the trade. Telling a harness to drop its
|
|
14
|
+
* native sandbox where Claudexor will NOT replace it is a pure loss — strictly
|
|
15
|
+
* worse than never having asked — so the two conditions are one expression
|
|
16
|
+
* rather than a flag the caller passes and a check nobody makes.
|
|
17
|
+
*/
|
|
18
|
+
export function externallyConfinedLane(delegated, host) {
|
|
19
|
+
return delegated && confinementBoundaryAvailable(host).available;
|
|
20
|
+
}
|
|
21
|
+
export function defaultConfinementRoots() {
|
|
22
|
+
return {
|
|
23
|
+
operatorHome: userHomeDir(),
|
|
24
|
+
runtimeRoot: claudexorOwnedRoot(),
|
|
25
|
+
nativeStateRoot: nativeHarnessStateRoot(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decide the harness HOME and the OS boundary one attempt runs under.
|
|
30
|
+
*
|
|
31
|
+
* Unchanged for ordinary runs: an ISOLATED envelope gets the envelope's scoped
|
|
32
|
+
* home, while an IN-PLACE attempt deliberately inherits the operator's native
|
|
33
|
+
* environment so a harness whose native session store hangs off `$HOME` can
|
|
34
|
+
* resume its vendor conversation.
|
|
35
|
+
*
|
|
36
|
+
* A DELEGATED run (`execution.delegated`) is scoped either way, and that is a
|
|
37
|
+
* BEHAVIORAL CHANGE against that deliberate design — live + agent is exactly
|
|
38
|
+
* the configuration a delegated mutating subagent uses. It is taken knowingly:
|
|
39
|
+
* the caller is a machine orchestrator that owns the workspace, and the
|
|
40
|
+
* operator's real `$HOME` holds material no delegated harness may read, above
|
|
41
|
+
* all `~/.claudexor/v3/daemon/token`, which grants the entire control API.
|
|
42
|
+
*
|
|
43
|
+
* THE SCOPED HOME IS NOT THE BOUNDARY. It redirects `~`-relative lookups and
|
|
44
|
+
* nothing more; the token above is one absolute path away, and a live probe
|
|
45
|
+
* read it out of an ordinary `workspace_write` agent run. So a delegated
|
|
46
|
+
* MUTATING attempt additionally gets an OS-ENFORCED boundary
|
|
47
|
+
* (`applyConfinement`), verified against a path it denies before the harness is
|
|
48
|
+
* spawned. A delegated READ-ONLY attempt keeps the harness's own read-only
|
|
49
|
+
* enforcement instead: confinement stands that enforcement down (macOS refuses
|
|
50
|
+
* nested sandboxes), which would be a net loss where there is no shell to
|
|
51
|
+
* confine.
|
|
52
|
+
*
|
|
53
|
+
* WHERE THE HOST HAS NO BOUNDARY the attempt still runs, and says so: the
|
|
54
|
+
* reason travels onto the attempt record, into the child's prompt and into the
|
|
55
|
+
* caller's result. A delegated run that refused on every platform Claudexor has
|
|
56
|
+
* not implemented a mechanism for would be a macOS-only feature wearing a
|
|
57
|
+
* general name.
|
|
58
|
+
*
|
|
59
|
+
* THE COST of the scoped home, stated plainly: an in-place delegated attempt
|
|
60
|
+
* CANNOT resume a native vendor session whose store lives under the real `$HOME`
|
|
61
|
+
* — cursor (`~/.cursor`) and opencode (XDG data under `$HOME`) lose resume.
|
|
62
|
+
* codex and claude keep it: their native session stores are Claudexor-owned
|
|
63
|
+
* directories that the adapter re-points on top of this env and that the
|
|
64
|
+
* confinement carves back out, and the macOS login Keychain is reached through
|
|
65
|
+
* the declared scoped-home bridge (INV-067), so subscription auth is unaffected.
|
|
66
|
+
*
|
|
67
|
+
* Never degrades silently: a delegated attempt whose scoped home is not on disk,
|
|
68
|
+
* or whose boundary cannot be applied and proven, refuses.
|
|
69
|
+
*/
|
|
70
|
+
export function scopedHarnessHome(wsm, envelope, inPlaceEnvelope, delegated, access = "workspace_write", roots = defaultConfinementRoots(), host) {
|
|
71
|
+
if (inPlaceEnvelope && !delegated) {
|
|
72
|
+
return {
|
|
73
|
+
isolated: false,
|
|
74
|
+
homeDir: null,
|
|
75
|
+
confinement: null,
|
|
76
|
+
confinementUnavailableReason: null,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const env = wsm.envFor(envelope);
|
|
80
|
+
const homeDir = env["HOME"];
|
|
81
|
+
if (delegated && (!homeDir || !existsSync(homeDir))) {
|
|
82
|
+
throw new DelegatedHomeUnavailableError(`delegated run cannot be confined: the scoped harness home for attempt ${envelope.attempt_id} is missing (${homeDir || "unset"})`);
|
|
83
|
+
}
|
|
84
|
+
const outcome = delegated && isMutatingAccess(access)
|
|
85
|
+
? applyConfinement({
|
|
86
|
+
operatorHome: roots.operatorHome,
|
|
87
|
+
runtimeRoot: roots.runtimeRoot,
|
|
88
|
+
nativeStateRoot: roots.nativeStateRoot,
|
|
89
|
+
scopedHome: homeDir,
|
|
90
|
+
worktree: envelope.worktree_path,
|
|
91
|
+
}, host)
|
|
92
|
+
: { confinement: null, unavailableReason: null };
|
|
93
|
+
return {
|
|
94
|
+
env,
|
|
95
|
+
isolated: true,
|
|
96
|
+
homeDir: homeDir ?? null,
|
|
97
|
+
confinement: outcome.confinement,
|
|
98
|
+
confinementUnavailableReason: outcome.unavailableReason,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* What the CHILD is told, when it is running without an OS boundary.
|
|
103
|
+
*
|
|
104
|
+
* Second of the three places the absence is disclosed (the attempt record and
|
|
105
|
+
* the caller's result are the other two). A model that believes it is sandboxed
|
|
106
|
+
* when it is not is the one reader whose behaviour actually changes on this
|
|
107
|
+
* fact, so it is stated to the model in plain words rather than left in an
|
|
108
|
+
* artifact it never reads.
|
|
109
|
+
*/
|
|
110
|
+
export function confinementNotice(home) {
|
|
111
|
+
const reason = home?.confinementUnavailableReason;
|
|
112
|
+
if (!reason)
|
|
113
|
+
return null;
|
|
114
|
+
return [
|
|
115
|
+
"Engine disclosure — NO OS-ENFORCED BOUNDARY: this delegated run was asked to put your",
|
|
116
|
+
`process inside a kernel-enforced filesystem boundary and could not: ${reason}.`,
|
|
117
|
+
"Nothing outside this notice stops you from reading or writing any path this user account",
|
|
118
|
+
"can reach. Confine yourself to the worktree you were given and the HOME you were given,",
|
|
119
|
+
"and do not read the operator's credential stores or Claudexor's own runtime directory.",
|
|
120
|
+
].join("\n");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* `home` is nullable on purpose: an attempt that died BEFORE its home was
|
|
124
|
+
* decided still writes the block, with every field null. A record that omits
|
|
125
|
+
* the fields entirely is indistinguishable from one written by an engine that
|
|
126
|
+
* never had them, which is the ambiguity the terminal check exists to close.
|
|
127
|
+
*/
|
|
128
|
+
export function appliedAttemptFacts(home, access, credentialProfileId) {
|
|
129
|
+
return {
|
|
130
|
+
harness_home_isolated: home?.isolated ?? false,
|
|
131
|
+
harness_home_dir: home?.homeDir ?? null,
|
|
132
|
+
access_applied: access,
|
|
133
|
+
credential_profile_applied: credentialProfileId,
|
|
134
|
+
confinement_mechanism: home?.confinement?.mechanism ?? null,
|
|
135
|
+
confinement_profile_digest: home?.confinement?.profile_digest ?? null,
|
|
136
|
+
confinement_verified_denied_path: home?.confinement?.verified_denied_path ?? null,
|
|
137
|
+
confinement_unavailable_reason: home?.confinementUnavailableReason ?? null,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Whether an attempt's record is auditable for a delegated MUTATING run.
|
|
142
|
+
*
|
|
143
|
+
* The distinction this predicate exists to draw: evidence that is MISSING is
|
|
144
|
+
* still a reason to refuse — an attempt that cannot say what it ran under is
|
|
145
|
+
* indistinguishable from one that ran unconfined behind a green terminal.
|
|
146
|
+
* Evidence that honestly says "no boundary here, and here is why" is COMPLETE;
|
|
147
|
+
* the absence of a boundary is a fact about the host, not a gap in the record,
|
|
148
|
+
* and refusing on it would make a delegated mutating run impossible wherever
|
|
149
|
+
* Claudexor has not implemented a mechanism.
|
|
150
|
+
*
|
|
151
|
+
* A named mechanism is a claim, and only `verified_denied_path` discharges it —
|
|
152
|
+
* so a record carrying the name without the proof is NOT complete, and neither
|
|
153
|
+
* is one that claims a boundary and a reason for its absence at the same time.
|
|
154
|
+
*/
|
|
155
|
+
export function appliedEvidenceComplete(facts) {
|
|
156
|
+
if (!facts || !facts.harness_home_isolated || !facts.harness_home_dir)
|
|
157
|
+
return false;
|
|
158
|
+
if (facts.confinement_mechanism) {
|
|
159
|
+
return confinementBoundaryProven(facts) && !facts.confinement_unavailable_reason;
|
|
160
|
+
}
|
|
161
|
+
return Boolean(facts.confinement_unavailable_reason);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The terminal gate, shared by every lane that assembles attempts.
|
|
165
|
+
*
|
|
166
|
+
* A delegated MUTATING run may only reach a terminal when EVERY attempt it ran
|
|
167
|
+
* can state what it ran under. One lane checking and its twin not is how a
|
|
168
|
+
* mutating child ends up unconfined behind a green run, so the rule lives here
|
|
169
|
+
* and both callers spend it.
|
|
170
|
+
*/
|
|
171
|
+
export function assertDelegatedEvidence(delegated, access, attempts) {
|
|
172
|
+
if (!delegated || !isMutatingAccess(access))
|
|
173
|
+
return;
|
|
174
|
+
const unauditable = attempts.filter((attempt) => !appliedEvidenceComplete(attempt.applied));
|
|
175
|
+
if (unauditable.length === 0)
|
|
176
|
+
return;
|
|
177
|
+
throw new DelegatedEvidenceIncompleteError(`delegated mutating run cannot terminalize: ${unauditable.length} attempt(s) state neither a proven confinement nor a reason there was none (${unauditable.map((attempt) => attempt.attemptId).join(", ")})`);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=delegatedHome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegatedHome.js","sourceRoot":"","sources":["../src/delegatedHome.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegationBudgetAuthority.d.ts","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD,MAAM,WAAW,gCAAgC;IAC/C;6EACyE;IACzE,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IAIxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;
|
|
1
|
+
{"version":3,"file":"delegationBudgetAuthority.d.ts","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD,MAAM,WAAW,gCAAgC;IAC/C;6EACyE;IACzE,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IAIxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,YAA6B,OAAO,GAAE,gCAAqC,EAAI;IAE/E,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgBxD;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgB7C;IAED,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKhE;IAED,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAIlE;IAED,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,KAClD,IAAI,GACR,YAAY,CAmBd;IAED,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG1C;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD5E;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAmB9B;IAED,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9C;IAED,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;CAIxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegationBudgetAuthority.js","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAkB3D;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAIP;
|
|
1
|
+
{"version":3,"file":"delegationBudgetAuthority.js","sourceRoot":"","sources":["../src/delegationBudgetAuthority.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegationFailure.d.ts","sourceRoot":"","sources":["../src/delegationFailure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;uCAEuC;AACvC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI,CAIvF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,GAChB,qBAAqB,GAAG,mBAAmB,GAAG,IAAI,CAIpD;AAED;;iFAEiF;AACjF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAK3F;AAED;gDACgD;AAChD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa
|
|
1
|
+
{"version":3,"file":"delegationFailure.d.ts","sourceRoot":"","sources":["../src/delegationFailure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;uCAEuC;AACvC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI,CAIvF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,GAChB,qBAAqB,GAAG,mBAAmB,GAAG,IAAI,CAIpD;AAED;;iFAEiF;AACjF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAK3F;AAED;gDACgD;AAChD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;;;;QAenF,QAAQ,EAAE,eAAe;QACzB,SAAS;QACT,SAAS;QACT,YAAY;QACZ,WAAW;;EAQhB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;;;;QAdlF,QAAQ,EAAE,eAAe;QACzB,SAAS;QACT,SAAS;QACT,YAAY;QACZ,WAAW;;EA0ChB;AAED;;oEAEoE;AACpE,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ArtifactStore } from "@claudexor/artifact-store";
|
|
2
|
+
import type { EventLog } from "@claudexor/event-log";
|
|
3
|
+
import { type ModeKind, type RunReason } from "@claudexor/schema";
|
|
4
|
+
import { type EnsureGitRepositoryResult } from "@claudexor/workspace";
|
|
5
|
+
export interface GitPreconditionFailure {
|
|
6
|
+
message: string;
|
|
7
|
+
reason: RunReason;
|
|
8
|
+
}
|
|
9
|
+
/** Establish the write-mode Git boundary and own its typed terminal failure. */
|
|
10
|
+
export declare function ensureWriteModeGitBoundary(repoRoot: string, log: EventLog, store: ArtifactStore, paths: ReturnType<ArtifactStore["runPaths"]>, runId: string, mode: ModeKind, ensureRepository?: (repoRoot: string) => Promise<EnsureGitRepositoryResult>): Promise<GitPreconditionFailure | null>;
|
|
11
|
+
//# sourceMappingURL=git-precondition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-precondition.d.ts","sourceRoot":"","sources":["../src/git-precondition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;CACnB;AAID,gFAAgF;AAChF,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,EACd,gBAAgB,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,CAAuB,GAC/F,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA4DxC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { makeOutcomeFacts } from "@claudexor/schema";
|
|
3
|
+
import { noProjectRepoRoot } from "@claudexor/util";
|
|
4
|
+
import { ensureGitRepository, GitCapabilityError, GitInitializationError, } from "@claudexor/workspace";
|
|
5
|
+
import { writeFailure } from "./runTerminalResults.js";
|
|
6
|
+
import { safeErrorMessage } from "./runSupport.js";
|
|
7
|
+
const NO_PROJECT_ROOT = noProjectRepoRoot();
|
|
8
|
+
/** Establish the write-mode Git boundary and own its typed terminal failure. */
|
|
9
|
+
export async function ensureWriteModeGitBoundary(repoRoot, log, store, paths, runId, mode, ensureRepository = ensureGitRepository) {
|
|
10
|
+
if (repoRoot === NO_PROJECT_ROOT)
|
|
11
|
+
return null;
|
|
12
|
+
try {
|
|
13
|
+
const result = await ensureRepository(repoRoot);
|
|
14
|
+
if (result.initialized || result.baselineCommitted) {
|
|
15
|
+
log.emit("project.git.initialized", {
|
|
16
|
+
repo_root: repoRoot,
|
|
17
|
+
initialized: result.initialized,
|
|
18
|
+
baseline_committed: result.baselineCommitted,
|
|
19
|
+
gitignore_seeded: result.gitignoreSeeded,
|
|
20
|
+
head_sha: result.headSha,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = safeErrorMessage(error);
|
|
27
|
+
const prerequisite = error instanceof GitCapabilityError;
|
|
28
|
+
if (error instanceof GitInitializationError) {
|
|
29
|
+
log.emit("project.git.initialized", {
|
|
30
|
+
repo_root: repoRoot,
|
|
31
|
+
initialized: error.progress.initialized,
|
|
32
|
+
baseline_committed: error.progress.baselineCommitted,
|
|
33
|
+
gitignore_seeded: error.progress.gitignoreSeeded,
|
|
34
|
+
head_sha: error.progress.headSha,
|
|
35
|
+
partial: true,
|
|
36
|
+
failed_stage: error.progress.failedStage,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// This boundary runs before a harness is admitted. Capability, filesystem,
|
|
40
|
+
// and repository-initialization failures are all workspace failures; none
|
|
41
|
+
// is evidence that a provider process failed.
|
|
42
|
+
const reason = "workspace_unavailable";
|
|
43
|
+
writeFailure(store, paths, {
|
|
44
|
+
phase: "workspace",
|
|
45
|
+
category: "project",
|
|
46
|
+
safeMessage: message,
|
|
47
|
+
runDir: paths.root,
|
|
48
|
+
nextActions: prerequisite
|
|
49
|
+
? [error.capability.remediation ?? "Install Git and retry", "Retry the run"]
|
|
50
|
+
: [
|
|
51
|
+
"Check the project folder permissions",
|
|
52
|
+
"Initialize git manually (git init)",
|
|
53
|
+
"Retry the run",
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
store.writeText(join(paths.finalDir, "summary.md"), `# Run ${runId} (${mode})\n\n- Lifecycle: failed\n- Phase: workspace\n\n${message}\n`);
|
|
57
|
+
log.emit("output.ready", { kind: "summary", path: "final/summary.md", state: "diagnostic" });
|
|
58
|
+
log.emit("run.failed", {
|
|
59
|
+
lifecycle: "failed",
|
|
60
|
+
facts: makeOutcomeFacts("failed", { reason }),
|
|
61
|
+
reason,
|
|
62
|
+
phase: "workspace",
|
|
63
|
+
error: message,
|
|
64
|
+
failure_ref: "final/failure.yaml",
|
|
65
|
+
});
|
|
66
|
+
return { message, reason };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=git-precondition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-precondition.js","sourceRoot":"","sources":["../src/git-precondition.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export * from "./orchestrator.js";
|
|
|
2
2
|
export * from "./requestRequirements.js";
|
|
3
3
|
export * from "./delegationBudgetAuthority.js";
|
|
4
4
|
export * from "./routing-failure.js";
|
|
5
|
-
export { nextUpIdentity } from "./credential-profiles.js";
|
|
5
|
+
export { defaultCredentialRoute, effectiveAuthPreference, nextUpIdentity, probeCredentialProfileStatus, profileStatusAdmits, vendorVerifiedProfileStatus, } from "./credential-profiles.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,5 +2,5 @@ export * from "./orchestrator.js";
|
|
|
2
2
|
export * from "./requestRequirements.js";
|
|
3
3
|
export * from "./delegationBudgetAuthority.js";
|
|
4
4
|
export * from "./routing-failure.js";
|
|
5
|
-
export { nextUpIdentity } from "./credential-profiles.js";
|
|
5
|
+
export { defaultCredentialRoute, effectiveAuthPreference, nextUpIdentity, probeCredentialProfileStatus, profileStatusAdmits, vendorVerifiedProfileStatus, } from "./credential-profiles.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC"}
|
package/dist/interaction.d.ts
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-attempt interaction channel. Emits the typed lifecycle events
|
|
3
3
|
* (`interaction.requested` / `interaction.answered` / `interaction.timeout`)
|
|
4
|
-
* around the caller-provided answer surface
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* around the caller-provided answer surface. The wait policy is finite or has
|
|
5
|
+
* automatic expiry disabled; answers, cancellation, terminal cleanup, and
|
|
6
|
+
* registry release still end either form. Undefined when the caller provides
|
|
7
|
+
* no surface — the adapter then runs non-interactive.
|
|
7
8
|
*
|
|
8
9
|
* Capability gate: the channel is OFFERED only to routes whose manifest
|
|
9
10
|
* declares `interactive` — a non-interactive harness never gets a surface it
|
|
10
11
|
* cannot raise questions through.
|
|
11
12
|
*/
|
|
12
13
|
import type { InteractionChannel } from "@claudexor/core";
|
|
13
|
-
import type {
|
|
14
|
+
import type { InteractionHandlerResult } from "@claudexor/schema";
|
|
14
15
|
import type { EventLog } from "@claudexor/event-log";
|
|
15
16
|
import type { PendingInteractionContext } from "./orchestrator.js";
|
|
16
17
|
export interface InteractionChannelWiring {
|
|
17
|
-
onInteraction?: (ctx: PendingInteractionContext) => Promise<
|
|
18
|
-
interactionTimeoutMs?: number;
|
|
18
|
+
onInteraction?: (ctx: PendingInteractionContext) => Promise<InteractionHandlerResult>;
|
|
19
|
+
interactionTimeoutMs?: number | null;
|
|
19
20
|
signal?: AbortSignal;
|
|
20
21
|
}
|
|
22
|
+
export type InteractionTimeoutPolicy = {
|
|
23
|
+
kind: "finite";
|
|
24
|
+
timeoutMs: number;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "disabled";
|
|
27
|
+
};
|
|
28
|
+
export declare function resolveInteractionTimeoutPolicy(configured: number | null | undefined, defaultTimeoutMs: number): InteractionTimeoutPolicy;
|
|
21
29
|
export declare function interactionChannelFor(input: InteractionChannelWiring, log: EventLog, runId: string, taskId: string, attemptId: string, harnessId: string, supportsInteractive: boolean, defaultTimeoutMs: number): InteractionChannel | undefined;
|
|
22
30
|
//# sourceMappingURL=interaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAGV,wBAAwB,EAEzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtF,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpG,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,gBAAgB,EAAE,MAAM,GACvB,wBAAwB,CAU1B;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,wBAAwB,EAC/B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,OAAO,EAC5B,gBAAgB,EAAE,MAAM,GACvB,kBAAkB,GAAG,SAAS,CAgKhC"}
|