codex-orchestrator 2.0.11 → 2.0.12
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/CHANGELOG.md +15 -0
- package/README.md +25 -51
- package/dist/src/index.d.ts +2 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/v2/acceptance-proof.d.ts +46 -31
- package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
- package/dist/src/v2/acceptance-proof.js +157 -195
- package/dist/src/v2/acceptance-proof.js.map +1 -1
- package/dist/src/v2/active-attempt.d.ts +94 -0
- package/dist/src/v2/active-attempt.d.ts.map +1 -0
- package/dist/src/v2/active-attempt.js +200 -0
- package/dist/src/v2/active-attempt.js.map +1 -0
- package/dist/src/v2/adapters/command.d.ts +6 -0
- package/dist/src/v2/adapters/command.d.ts.map +1 -1
- package/dist/src/v2/adapters/command.js +43 -2
- package/dist/src/v2/adapters/command.js.map +1 -1
- package/dist/src/v2/candidate.d.ts +15 -31
- package/dist/src/v2/candidate.d.ts.map +1 -1
- package/dist/src/v2/candidate.js +7 -29
- package/dist/src/v2/candidate.js.map +1 -1
- package/dist/src/v2/checked-change.d.ts +3 -2
- package/dist/src/v2/checked-change.d.ts.map +1 -1
- package/dist/src/v2/checked-change.js +4 -3
- package/dist/src/v2/checked-change.js.map +1 -1
- package/dist/src/v2/cli-contract.d.ts +1 -1
- package/dist/src/v2/cli-contract.d.ts.map +1 -1
- package/dist/src/v2/cli-contract.js +4 -6
- package/dist/src/v2/cli-contract.js.map +1 -1
- package/dist/src/v2/cli.d.ts +8 -0
- package/dist/src/v2/cli.d.ts.map +1 -1
- package/dist/src/v2/cli.js +13 -0
- package/dist/src/v2/cli.js.map +1 -1
- package/dist/src/v2/code-review-report.d.ts +10 -18
- package/dist/src/v2/code-review-report.d.ts.map +1 -1
- package/dist/src/v2/code-review-report.js +63 -60
- package/dist/src/v2/code-review-report.js.map +1 -1
- package/dist/src/v2/codex-process.d.ts +6 -2
- package/dist/src/v2/codex-process.d.ts.map +1 -1
- package/dist/src/v2/codex-process.js +25 -9
- package/dist/src/v2/codex-process.js.map +1 -1
- package/dist/src/v2/config.d.ts +0 -2
- package/dist/src/v2/config.d.ts.map +1 -1
- package/dist/src/v2/config.js +3 -6
- package/dist/src/v2/config.js.map +1 -1
- package/dist/src/v2/contained-report-operation.d.ts +41 -196
- package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
- package/dist/src/v2/contained-report-operation.js +139 -466
- package/dist/src/v2/contained-report-operation.js.map +1 -1
- package/dist/src/v2/containment.d.ts +1 -0
- package/dist/src/v2/containment.d.ts.map +1 -1
- package/dist/src/v2/containment.js +12 -2
- package/dist/src/v2/containment.js.map +1 -1
- package/dist/src/v2/delivery-authority.d.ts +26 -0
- package/dist/src/v2/delivery-authority.d.ts.map +1 -0
- package/dist/src/v2/delivery-authority.js +44 -0
- package/dist/src/v2/delivery-authority.js.map +1 -0
- package/dist/src/v2/direct-delivery.d.ts +16 -36
- package/dist/src/v2/direct-delivery.d.ts.map +1 -1
- package/dist/src/v2/direct-delivery.js +135 -122
- package/dist/src/v2/direct-delivery.js.map +1 -1
- package/dist/src/v2/immutable-workflow-publisher.d.ts.map +1 -1
- package/dist/src/v2/immutable-workflow-publisher.js +3 -1
- package/dist/src/v2/immutable-workflow-publisher.js.map +1 -1
- package/dist/src/v2/implementation-report.d.ts +3 -1
- package/dist/src/v2/implementation-report.d.ts.map +1 -1
- package/dist/src/v2/implementation-report.js +17 -4
- package/dist/src/v2/implementation-report.js.map +1 -1
- package/dist/src/v2/implementation-reviewer.d.ts +41 -12
- package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
- package/dist/src/v2/implementation-reviewer.js +114 -42
- package/dist/src/v2/implementation-reviewer.js.map +1 -1
- package/dist/src/v2/pending-effect-settlement.d.ts +44 -0
- package/dist/src/v2/pending-effect-settlement.d.ts.map +1 -0
- package/dist/src/v2/pending-effect-settlement.js +69 -0
- package/dist/src/v2/pending-effect-settlement.js.map +1 -0
- package/dist/src/v2/process-identity.d.ts +45 -0
- package/dist/src/v2/process-identity.d.ts.map +1 -0
- package/dist/src/v2/process-identity.js +118 -0
- package/dist/src/v2/process-identity.js.map +1 -0
- package/dist/src/v2/proof-report.d.ts +2 -1
- package/dist/src/v2/proof-report.d.ts.map +1 -1
- package/dist/src/v2/proof-report.js +10 -4
- package/dist/src/v2/proof-report.js.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.js +1 -1
- package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
- package/dist/src/v2/review-feedback.d.ts +14 -20
- package/dist/src/v2/review-feedback.d.ts.map +1 -1
- package/dist/src/v2/review-feedback.js +45 -87
- package/dist/src/v2/review-feedback.js.map +1 -1
- package/dist/src/v2/run-issue.d.ts +129 -88
- package/dist/src/v2/run-issue.d.ts.map +1 -1
- package/dist/src/v2/run-issue.js +1965 -2381
- package/dist/src/v2/run-issue.js.map +1 -1
- package/dist/src/v2/run-state-projections.d.ts +84 -0
- package/dist/src/v2/run-state-projections.d.ts.map +1 -0
- package/dist/src/v2/run-state-projections.js +142 -0
- package/dist/src/v2/run-state-projections.js.map +1 -0
- package/dist/src/v2/run-store.d.ts +99 -81
- package/dist/src/v2/run-store.d.ts.map +1 -1
- package/dist/src/v2/run-store.js +245 -542
- package/dist/src/v2/run-store.js.map +1 -1
- package/dist/src/v2/runtime-assets.d.ts +3 -0
- package/dist/src/v2/runtime-assets.d.ts.map +1 -1
- package/dist/src/v2/runtime-assets.js +104 -0
- package/dist/src/v2/runtime-assets.js.map +1 -1
- package/dist/src/v2/runtime.d.ts +56 -44
- package/dist/src/v2/runtime.d.ts.map +1 -1
- package/dist/src/v2/runtime.js +383 -503
- package/dist/src/v2/runtime.js.map +1 -1
- package/dist/src/v2/setup.js +0 -2
- package/dist/src/v2/setup.js.map +1 -1
- package/dist/src/v2/validation-progression.d.ts +70 -0
- package/dist/src/v2/validation-progression.d.ts.map +1 -0
- package/dist/src/v2/validation-progression.js +247 -0
- package/dist/src/v2/validation-progression.js.map +1 -0
- package/dist/src/v2/workflow-assets.d.ts +9 -3
- package/dist/src/v2/workflow-assets.d.ts.map +1 -1
- package/dist/src/v2/workflow-assets.js +256 -43
- package/dist/src/v2/workflow-assets.js.map +1 -1
- package/internal-workflow/docs/agents/bug-workflow-routing.md +9 -7
- package/internal-workflow/docs/agents/coding-skill-routing.md +170 -120
- package/internal-workflow/docs/agents/tool-usage.md +23 -12
- package/internal-workflow/manifest.json +1 -1
- package/internal-workflow/operations/code-review/SKILL.md +34 -15
- package/internal-workflow/operations/implementation/SKILL.md +21 -16
- package/internal-workflow/profiles/implementer.toml +9 -0
- package/internal-workflow/profiles/review_coordinator.toml +9 -0
- package/internal-workflow/profiles/spec_reviewer.toml +9 -0
- package/internal-workflow/profiles/standards_reviewer.toml +9 -0
- package/internal-workflow/schemas/code-review-v1.json +1 -1
- package/internal-workflow/schemas/implementation-report-v1.json +1 -1
- package/internal-workflow/schemas/proof-report-v1.json +1 -1
- package/internal-workflow/skills/bug-root-cause-explainer/SKILL.md +114 -0
- package/internal-workflow/skills/bug-root-cause-explainer/agents/openai.yaml +7 -0
- package/internal-workflow/skills/bug-root-cause-explainer/evals/evals.json +18 -0
- package/internal-workflow/skills/code-review/SKILL.md +84 -306
- package/internal-workflow/skills/code-review/agents/openai.yaml +5 -3
- package/internal-workflow/skills/code-review/evals/evals.json +83 -0
- package/internal-workflow/skills/code-review/references/standards-smells.md +41 -0
- package/internal-workflow/skills/diagnosing-bugs/SKILL.md +69 -32
- package/internal-workflow/skills/diagnosing-bugs/agents/openai.yaml +2 -2
- package/internal-workflow/skills/diagnosing-bugs/evals/evals.json +63 -0
- package/internal-workflow/skills/grilling/SKILL.md +51 -0
- package/internal-workflow/skills/grilling/agents/openai.yaml +6 -0
- package/internal-workflow/skills/grilling/evals/evals.json +47 -0
- package/internal-workflow/skills/implement/SKILL.md +135 -0
- package/internal-workflow/skills/implement/agents/openai.yaml +6 -0
- package/internal-workflow/skills/implement/evals/evals.json +150 -0
- package/internal-workflow/skills/plan/SKILL.md +59 -0
- package/internal-workflow/skills/plan/agents/openai.yaml +6 -0
- package/internal-workflow/skills/plan/evals/evals.json +36 -0
- package/internal-workflow/skills/prototype/LOGIC.md +130 -0
- package/internal-workflow/skills/prototype/SKILL.md +69 -0
- package/internal-workflow/skills/prototype/UI.md +157 -0
- package/internal-workflow/skills/prototype/agents/openai.yaml +6 -0
- package/internal-workflow/skills/prototype/evals/evals.json +67 -0
- package/internal-workflow/skills/research/SKILL.md +110 -0
- package/internal-workflow/skills/research/agents/openai.yaml +6 -0
- package/internal-workflow/skills/research/evals/evals.json +49 -0
- package/internal-workflow/skills/tdd/SKILL.md +72 -67
- package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
- package/internal-workflow/skills/tdd/evals/evals.json +12 -0
- package/internal-workflow/skills/tdd/mocking.md +48 -1
- package/internal-workflow/skills/tdd/refactoring.md +3 -3
- package/internal-workflow/skills/tickets-orchestrator/SKILL.md +199 -0
- package/internal-workflow/skills/tickets-orchestrator/agents/openai.yaml +6 -0
- package/internal-workflow/skills/tickets-orchestrator/evals/evals.json +126 -0
- package/internal-workflow/skills/tickets-orchestrator/references/delegate-integrate.md +83 -0
- package/internal-workflow/skills/tickets-orchestrator/references/finish-delivery.md +69 -0
- package/internal-workflow/skills/tickets-orchestrator/references/stop-completion.md +63 -0
- package/internal-workflow/skills/to-spec/SKILL.md +133 -0
- package/internal-workflow/skills/to-spec/agents/openai.yaml +6 -0
- package/internal-workflow/skills/to-spec/evals/evals.json +24 -0
- package/internal-workflow/skills/to-tickets/SKILL.md +189 -0
- package/internal-workflow/skills/to-tickets/agents/openai.yaml +6 -0
- package/internal-workflow/skills/to-tickets/evals/evals.json +79 -0
- package/internal-workflow/skills/to-tickets/references/publishing-details.md +117 -0
- package/package.json +1 -1
- package/dist/src/v2/proof-store.d.ts +0 -54
- package/dist/src/v2/proof-store.d.ts.map +0 -1
- package/dist/src/v2/proof-store.js +0 -301
- package/dist/src/v2/proof-store.js.map +0 -1
- package/dist/src/v2/route-continuations.d.ts +0 -32
- package/dist/src/v2/route-continuations.d.ts.map +0 -1
- package/dist/src/v2/route-continuations.js +0 -2
- package/dist/src/v2/route-continuations.js.map +0 -1
- package/dist/src/v2/route-coordinator.d.ts +0 -72
- package/dist/src/v2/route-coordinator.d.ts.map +0 -1
- package/dist/src/v2/route-coordinator.js +0 -275
- package/dist/src/v2/route-coordinator.js.map +0 -1
- package/dist/src/v2/route-decision.d.ts +0 -120
- package/dist/src/v2/route-decision.d.ts.map +0 -1
- package/dist/src/v2/route-decision.js +0 -380
- package/dist/src/v2/route-decision.js.map +0 -1
- package/dist/src/v2/spec-coordinator.d.ts +0 -73
- package/dist/src/v2/spec-coordinator.d.ts.map +0 -1
- package/dist/src/v2/spec-coordinator.js +0 -126
- package/dist/src/v2/spec-coordinator.js.map +0 -1
- package/dist/src/v2/spec-delivery.d.ts +0 -112
- package/dist/src/v2/spec-delivery.d.ts.map +0 -1
- package/dist/src/v2/spec-delivery.js +0 -336
- package/dist/src/v2/spec-delivery.js.map +0 -1
- package/dist/src/v2/triage-route.d.ts +0 -68
- package/dist/src/v2/triage-route.d.ts.map +0 -1
- package/dist/src/v2/triage-route.js +0 -223
- package/dist/src/v2/triage-route.js.map +0 -1
- package/dist/src/v2/waiting-human-coordinator.d.ts +0 -49
- package/dist/src/v2/waiting-human-coordinator.d.ts.map +0 -1
- package/dist/src/v2/waiting-human-coordinator.js +0 -509
- package/dist/src/v2/waiting-human-coordinator.js.map +0 -1
- package/dist/src/v2/waiting-human.d.ts +0 -143
- package/dist/src/v2/waiting-human.d.ts.map +0 -1
- package/dist/src/v2/waiting-human.js +0 -408
- package/dist/src/v2/waiting-human.js.map +0 -1
- package/internal-workflow/docs/agents/contract-test-ledger.md +0 -71
- package/internal-workflow/docs/agents/review-gates.md +0 -42
- package/internal-workflow/docs/agents/review-protocol.md +0 -98
- package/internal-workflow/evals/coding-skill-evals.json +0 -373
- package/internal-workflow/operations/ambiguity-review/SKILL.md +0 -5
- package/internal-workflow/operations/qualification-repair/SKILL.md +0 -17
- package/internal-workflow/operations/spec-author/SKILL.md +0 -12
- package/internal-workflow/operations/spec-review/SKILL.md +0 -12
- package/internal-workflow/operations/triage/SKILL.md +0 -12
- package/internal-workflow/profiles/analyst_deep.toml +0 -9
- package/internal-workflow/profiles/implementer_standard.toml +0 -9
- package/internal-workflow/profiles/proof_agent.toml +0 -8
- package/internal-workflow/profiles/reviewer_deep.toml +0 -9
- package/internal-workflow/profiles/reviewer_standard.toml +0 -9
- package/internal-workflow/schemas/ambiguity-review-v1.json +0 -1
- package/internal-workflow/schemas/spec-author-v1.json +0 -1
- package/internal-workflow/schemas/spec-review-v1.json +0 -30
- package/internal-workflow/schemas/triage-route-v1.json +0 -1
- package/internal-workflow/skills/agent-auto/SKILL.md +0 -19
- package/internal-workflow/skills/agent-auto/agents/openai.yaml +0 -6
- package/internal-workflow/skills/code-debugger/SKILL.md +0 -122
- package/internal-workflow/skills/code-debugger/agents/openai.yaml +0 -7
- package/internal-workflow/skills/code-review/references/bug-classes.md +0 -56
- package/internal-workflow/skills/code-review/references/cleanup-lens.md +0 -52
- package/internal-workflow/skills/code-review/references/framework-lenses.md +0 -34
- package/internal-workflow/skills/code-review/references/targeted-recipes.md +0 -49
- package/internal-workflow/skills/implementation-spec-maker/SKILL.md +0 -107
- package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +0 -6
- package/internal-workflow/skills/implementation-spec-maker/references/source-modes.md +0 -32
- package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +0 -146
- package/internal-workflow/skills/implementation-spec-review/SKILL.md +0 -131
- package/internal-workflow/skills/implementation-spec-review/agents/openai.yaml +0 -6
- package/internal-workflow/skills/implementation-spec-review/evals/evals.json +0 -78
- package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +0 -121
- package/internal-workflow/skills/small-task-implementer/SKILL.md +0 -112
- package/internal-workflow/skills/small-task-implementer/agents/openai.yaml +0 -6
- package/internal-workflow/skills/spec-implementer/SKILL.md +0 -133
- package/internal-workflow/skills/spec-implementer/agents/openai.yaml +0 -6
- package/internal-workflow/skills/spec-implementer/evals/evals.json +0 -30
- package/internal-workflow/skills/spec-implementer/references/review-loop.md +0 -100
- package/internal-workflow/skills/triage/AGENT-BRIEF.md +0 -192
- package/internal-workflow/skills/triage/OUT-OF-SCOPE.md +0 -101
- package/internal-workflow/skills/triage/SKILL.md +0 -134
- package/internal-workflow/skills/triage/agents/openai.yaml +0 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export type ProcessStartIdentity = {
|
|
2
|
+
kind: 'linux-start-ticks';
|
|
3
|
+
value: string;
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'unavailable';
|
|
6
|
+
platform: 'darwin';
|
|
7
|
+
};
|
|
8
|
+
export interface AttemptProcessIdentity {
|
|
9
|
+
host: string;
|
|
10
|
+
bootId: string;
|
|
11
|
+
pid: number;
|
|
12
|
+
processGroupId: number;
|
|
13
|
+
processStartIdentity: ProcessStartIdentity;
|
|
14
|
+
launchedAt: string;
|
|
15
|
+
}
|
|
16
|
+
interface AttemptBase {
|
|
17
|
+
attemptId: string;
|
|
18
|
+
runId: string;
|
|
19
|
+
operationId: string;
|
|
20
|
+
operationSourceId: string;
|
|
21
|
+
incarnationId: string;
|
|
22
|
+
resultPath: string;
|
|
23
|
+
preparedAt: string;
|
|
24
|
+
cleanup: 'pending' | 'confirmed';
|
|
25
|
+
cleanupConfirmedAt: string | null;
|
|
26
|
+
}
|
|
27
|
+
export type ActiveAttempt = (AttemptBase & {
|
|
28
|
+
stage: 'prepared';
|
|
29
|
+
}) | (AttemptBase & {
|
|
30
|
+
stage: 'launched';
|
|
31
|
+
process: AttemptProcessIdentity;
|
|
32
|
+
}) | (AttemptBase & {
|
|
33
|
+
stage: 'observed';
|
|
34
|
+
process: AttemptProcessIdentity;
|
|
35
|
+
observation: {
|
|
36
|
+
leader: 'absent' | 'reused';
|
|
37
|
+
group: 'absent';
|
|
38
|
+
observedAt: string;
|
|
39
|
+
};
|
|
40
|
+
result: {
|
|
41
|
+
path: string;
|
|
42
|
+
sha256: string;
|
|
43
|
+
} | null;
|
|
44
|
+
}) | (AttemptBase & {
|
|
45
|
+
stage: 'adopted';
|
|
46
|
+
process: AttemptProcessIdentity;
|
|
47
|
+
observation: {
|
|
48
|
+
leader: 'absent' | 'reused';
|
|
49
|
+
group: 'absent';
|
|
50
|
+
observedAt: string;
|
|
51
|
+
};
|
|
52
|
+
result: {
|
|
53
|
+
path: string;
|
|
54
|
+
sha256: string;
|
|
55
|
+
};
|
|
56
|
+
adoptedAt: string;
|
|
57
|
+
});
|
|
58
|
+
export declare function createActiveAttempt(input: {
|
|
59
|
+
runId: string;
|
|
60
|
+
operationId: string;
|
|
61
|
+
operationSourceId: string;
|
|
62
|
+
resultPath: string;
|
|
63
|
+
preparedAt: string;
|
|
64
|
+
}, createIncarnationId?: () => string): Extract<ActiveAttempt, {
|
|
65
|
+
stage: 'prepared';
|
|
66
|
+
}>;
|
|
67
|
+
export declare function launchActiveAttempt(attempt: Extract<ActiveAttempt, {
|
|
68
|
+
stage: 'prepared';
|
|
69
|
+
}>, process: AttemptProcessIdentity): Extract<ActiveAttempt, {
|
|
70
|
+
stage: 'launched';
|
|
71
|
+
}>;
|
|
72
|
+
export declare function observeActiveAttempt(attempt: Extract<ActiveAttempt, {
|
|
73
|
+
stage: 'launched';
|
|
74
|
+
}>, observation: {
|
|
75
|
+
leader: 'same' | 'reused' | 'absent' | 'unknown';
|
|
76
|
+
group: 'live' | 'absent' | 'unknown';
|
|
77
|
+
result: {
|
|
78
|
+
path: string;
|
|
79
|
+
sha256: string;
|
|
80
|
+
} | null;
|
|
81
|
+
observedAt: string;
|
|
82
|
+
}): Extract<ActiveAttempt, {
|
|
83
|
+
stage: 'observed';
|
|
84
|
+
}>;
|
|
85
|
+
export declare function adoptActiveAttempt(attempt: Extract<ActiveAttempt, {
|
|
86
|
+
stage: 'observed';
|
|
87
|
+
}>, adoptedAt: string): Extract<ActiveAttempt, {
|
|
88
|
+
stage: 'adopted';
|
|
89
|
+
}>;
|
|
90
|
+
export declare function confirmActiveAttemptCleanup<T extends ActiveAttempt>(attempt: T, confirmedAt: string): T;
|
|
91
|
+
export declare function clearActiveAttempt(attempt: ActiveAttempt): undefined;
|
|
92
|
+
export declare function validateActiveAttempt(value: unknown): ActiveAttempt;
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=active-attempt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-attempt.d.ts","sourceRoot":"","sources":["../../../src/v2/active-attempt.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;IACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GACrB,CAAC,WAAW,GAAG;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,GACrC,CAAC,WAAW,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAC,GACtE,CAAC,WAAW,GAAG;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,EAAE;QAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjD,CAAC,GACF,CAAC,WAAW,GAAG;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,EAAE;QAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEP,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,EAAE,mBAAmB,GAAE,MAAM,MAAmB,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAqBhG;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,EACtD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAI/C;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,EACtD,WAAW,EAAE;IACX,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAiB/C;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,EACtD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC,CAK9C;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,CAQvG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAIpE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAyCnE"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { canonicalJson, sha256 } from './containment.js';
|
|
3
|
+
const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
|
|
4
|
+
const SHA256 = /^[0-9a-f]{64}$/u;
|
|
5
|
+
export function createActiveAttempt(input, createIncarnationId = randomUUID) {
|
|
6
|
+
const incarnationId = createIncarnationId();
|
|
7
|
+
uuid(input.runId, 'runId');
|
|
8
|
+
uuid(incarnationId, 'incarnationId');
|
|
9
|
+
text(input.operationId, 'operationId');
|
|
10
|
+
text(input.operationSourceId, 'operationSourceId');
|
|
11
|
+
absolutePath(input.resultPath);
|
|
12
|
+
timestamp(input.preparedAt, 'preparedAt');
|
|
13
|
+
return {
|
|
14
|
+
...structuredClone(input),
|
|
15
|
+
incarnationId,
|
|
16
|
+
attemptId: sha256(canonicalJson({
|
|
17
|
+
runId: input.runId,
|
|
18
|
+
operationId: input.operationId,
|
|
19
|
+
operationSourceId: input.operationSourceId,
|
|
20
|
+
incarnationId,
|
|
21
|
+
})),
|
|
22
|
+
stage: 'prepared',
|
|
23
|
+
cleanup: 'pending',
|
|
24
|
+
cleanupConfirmedAt: null,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function launchActiveAttempt(attempt, process) {
|
|
28
|
+
requireStage(validateActiveAttempt(attempt), 'prepared');
|
|
29
|
+
validateProcess(process);
|
|
30
|
+
return { ...structuredClone(attempt), stage: 'launched', process: structuredClone(process) };
|
|
31
|
+
}
|
|
32
|
+
export function observeActiveAttempt(attempt, observation) {
|
|
33
|
+
requireStage(validateActiveAttempt(attempt), 'launched');
|
|
34
|
+
if (!['absent', 'reused'].includes(observation.leader) || observation.group !== 'absent') {
|
|
35
|
+
throw new Error('active attempt process absence is not confirmed');
|
|
36
|
+
}
|
|
37
|
+
const leader = observation.leader;
|
|
38
|
+
timestamp(observation.observedAt, 'observedAt');
|
|
39
|
+
if (observation.result) {
|
|
40
|
+
if (observation.result.path !== attempt.resultPath)
|
|
41
|
+
throw new Error('active attempt result path mismatch');
|
|
42
|
+
if (!SHA256.test(observation.result.sha256))
|
|
43
|
+
throw new Error('active attempt result hash is invalid');
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
...structuredClone(attempt),
|
|
47
|
+
stage: 'observed',
|
|
48
|
+
observation: { leader, group: 'absent', observedAt: observation.observedAt },
|
|
49
|
+
result: structuredClone(observation.result),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function adoptActiveAttempt(attempt, adoptedAt) {
|
|
53
|
+
requireStage(validateActiveAttempt(attempt), 'observed');
|
|
54
|
+
if (!attempt.result)
|
|
55
|
+
throw new Error('active attempt has no result to adopt');
|
|
56
|
+
timestamp(adoptedAt, 'adoptedAt');
|
|
57
|
+
return { ...structuredClone(attempt), stage: 'adopted', result: structuredClone(attempt.result), adoptedAt };
|
|
58
|
+
}
|
|
59
|
+
export function confirmActiveAttemptCleanup(attempt, confirmedAt) {
|
|
60
|
+
validateActiveAttempt(attempt);
|
|
61
|
+
timestamp(confirmedAt, 'cleanupConfirmedAt');
|
|
62
|
+
if (attempt.cleanup === 'confirmed') {
|
|
63
|
+
if (attempt.cleanupConfirmedAt !== confirmedAt)
|
|
64
|
+
throw new Error('active attempt cleanup is already confirmed');
|
|
65
|
+
return structuredClone(attempt);
|
|
66
|
+
}
|
|
67
|
+
return { ...structuredClone(attempt), cleanup: 'confirmed', cleanupConfirmedAt: confirmedAt };
|
|
68
|
+
}
|
|
69
|
+
export function clearActiveAttempt(attempt) {
|
|
70
|
+
validateActiveAttempt(attempt);
|
|
71
|
+
if (attempt.cleanup !== 'confirmed')
|
|
72
|
+
throw new Error('active attempt cleanup is not confirmed');
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
export function validateActiveAttempt(value) {
|
|
76
|
+
record(value, 'active attempt');
|
|
77
|
+
const stage = value.stage;
|
|
78
|
+
const keys = [
|
|
79
|
+
'attemptId', 'runId', 'operationId', 'operationSourceId', 'incarnationId', 'resultPath',
|
|
80
|
+
'preparedAt', 'cleanup', 'cleanupConfirmedAt', 'stage',
|
|
81
|
+
...(stage === 'launched' ? ['process'] : []),
|
|
82
|
+
...(stage === 'observed' ? ['process', 'observation', 'result'] : []),
|
|
83
|
+
...(stage === 'adopted' ? ['process', 'observation', 'result', 'adoptedAt'] : []),
|
|
84
|
+
];
|
|
85
|
+
if (!['prepared', 'launched', 'observed', 'adopted'].includes(String(stage))) {
|
|
86
|
+
throw new Error('active attempt stage is invalid');
|
|
87
|
+
}
|
|
88
|
+
exactKeys(value, keys, 'active attempt');
|
|
89
|
+
uuid(value.runId, 'runId');
|
|
90
|
+
uuid(value.incarnationId, 'incarnationId');
|
|
91
|
+
text(value.operationId, 'operationId');
|
|
92
|
+
text(value.operationSourceId, 'operationSourceId');
|
|
93
|
+
absolutePath(value.resultPath);
|
|
94
|
+
timestamp(value.preparedAt, 'preparedAt');
|
|
95
|
+
const expectedAttemptId = sha256(canonicalJson({
|
|
96
|
+
runId: value.runId,
|
|
97
|
+
operationId: value.operationId,
|
|
98
|
+
operationSourceId: value.operationSourceId,
|
|
99
|
+
incarnationId: value.incarnationId,
|
|
100
|
+
}));
|
|
101
|
+
if (value.attemptId !== expectedAttemptId)
|
|
102
|
+
throw new Error('active attempt attemptId is invalid');
|
|
103
|
+
if (value.cleanup === 'pending') {
|
|
104
|
+
if (value.cleanupConfirmedAt !== null)
|
|
105
|
+
throw new Error('pending active attempt has cleanup confirmation');
|
|
106
|
+
}
|
|
107
|
+
else if (value.cleanup === 'confirmed') {
|
|
108
|
+
timestamp(value.cleanupConfirmedAt, 'cleanupConfirmedAt');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new Error('active attempt cleanup status is invalid');
|
|
112
|
+
}
|
|
113
|
+
if (stage !== 'prepared')
|
|
114
|
+
validateProcess(value.process);
|
|
115
|
+
if (stage === 'observed' || stage === 'adopted') {
|
|
116
|
+
validateObservation(value.observation);
|
|
117
|
+
validateResult(value.result, value.resultPath, stage === 'adopted');
|
|
118
|
+
}
|
|
119
|
+
if (stage === 'adopted')
|
|
120
|
+
timestamp(value.adoptedAt, 'adoptedAt');
|
|
121
|
+
return structuredClone(value);
|
|
122
|
+
}
|
|
123
|
+
function validateProcess(value) {
|
|
124
|
+
record(value, 'active attempt process');
|
|
125
|
+
exactKeys(value, ['host', 'bootId', 'pid', 'processGroupId', 'processStartIdentity', 'launchedAt'], 'active attempt process');
|
|
126
|
+
text(value.host, 'process host');
|
|
127
|
+
text(value.bootId, 'process bootId');
|
|
128
|
+
positive(value.pid, 'process pid');
|
|
129
|
+
positive(value.processGroupId, 'process group id');
|
|
130
|
+
timestamp(value.launchedAt, 'launchedAt');
|
|
131
|
+
record(value.processStartIdentity, 'process start identity');
|
|
132
|
+
if (value.processStartIdentity.kind === 'linux-start-ticks') {
|
|
133
|
+
exactKeys(value.processStartIdentity, ['kind', 'value'], 'Linux process start identity');
|
|
134
|
+
text(value.processStartIdentity.value, 'process start ticks');
|
|
135
|
+
if (!/^[0-9]+$/u.test(value.processStartIdentity.value))
|
|
136
|
+
throw new Error('process start ticks is invalid');
|
|
137
|
+
}
|
|
138
|
+
else if (value.processStartIdentity.kind === 'unavailable' && value.processStartIdentity.platform === 'darwin') {
|
|
139
|
+
exactKeys(value.processStartIdentity, ['kind', 'platform'], 'Darwin process start identity');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
throw new Error('process start identity is invalid');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function validateObservation(value) {
|
|
146
|
+
record(value, 'active attempt observation');
|
|
147
|
+
exactKeys(value, ['leader', 'group', 'observedAt'], 'active attempt observation');
|
|
148
|
+
if (!['absent', 'reused'].includes(String(value.leader)) || value.group !== 'absent') {
|
|
149
|
+
throw new Error('active attempt observation is invalid');
|
|
150
|
+
}
|
|
151
|
+
timestamp(value.observedAt, 'observedAt');
|
|
152
|
+
}
|
|
153
|
+
function validateResult(value, resultPath, required) {
|
|
154
|
+
if (value === null && !required)
|
|
155
|
+
return;
|
|
156
|
+
record(value, 'active attempt result');
|
|
157
|
+
exactKeys(value, ['path', 'sha256'], 'active attempt result');
|
|
158
|
+
if (value.path !== resultPath)
|
|
159
|
+
throw new Error('active attempt result path mismatch');
|
|
160
|
+
if (typeof value.sha256 !== 'string' || !SHA256.test(value.sha256))
|
|
161
|
+
throw new Error('active attempt result hash is invalid');
|
|
162
|
+
}
|
|
163
|
+
function requireStage(value, stage) {
|
|
164
|
+
if (value.stage !== stage)
|
|
165
|
+
throw new Error(`active attempt must be ${stage}`);
|
|
166
|
+
}
|
|
167
|
+
function record(value, field) {
|
|
168
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
169
|
+
throw new Error(`${field} is invalid`);
|
|
170
|
+
}
|
|
171
|
+
function exactKeys(value, expected, field) {
|
|
172
|
+
const actual = Object.keys(value).sort();
|
|
173
|
+
const canonical = [...expected].sort();
|
|
174
|
+
if (actual.length !== canonical.length || actual.some((key, index) => key !== canonical[index])) {
|
|
175
|
+
throw new Error(`${field} must contain exact keys`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function uuid(value, field) {
|
|
179
|
+
if (typeof value !== 'string' || !UUID_V4.test(value))
|
|
180
|
+
throw new Error(`${field} is invalid`);
|
|
181
|
+
}
|
|
182
|
+
function text(value, field) {
|
|
183
|
+
if (typeof value !== 'string' || !value || value.length > 16 * 1024)
|
|
184
|
+
throw new Error(`${field} is invalid`);
|
|
185
|
+
}
|
|
186
|
+
function positive(value, field) {
|
|
187
|
+
if (!Number.isSafeInteger(value) || value <= 0)
|
|
188
|
+
throw new Error(`${field} is invalid`);
|
|
189
|
+
}
|
|
190
|
+
function absolutePath(value) {
|
|
191
|
+
if (typeof value !== 'string' || !value.startsWith('/'))
|
|
192
|
+
throw new Error('resultPath is invalid');
|
|
193
|
+
}
|
|
194
|
+
function timestamp(value, field) {
|
|
195
|
+
if (typeof value !== 'string')
|
|
196
|
+
throw new Error(`${field} is invalid`);
|
|
197
|
+
if (Number.isNaN(Date.parse(value)) || new Date(value).toISOString() !== value)
|
|
198
|
+
throw new Error(`${field} is invalid`);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=active-attempt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-attempt.js","sourceRoot":"","sources":["../../../src/v2/active-attempt.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export interface ProcessCommandOptions {
|
|
|
7
7
|
idleTimeoutMs?: number;
|
|
8
8
|
signal?: AbortSignal;
|
|
9
9
|
processGroup?: boolean;
|
|
10
|
+
maxOutputBytes?: number;
|
|
10
11
|
onStdoutChunk?: (chunk: string) => void | Promise<void>;
|
|
11
12
|
onStderrChunk?: (chunk: string) => void | Promise<void>;
|
|
12
13
|
}
|
|
@@ -15,6 +16,11 @@ export interface ProcessCommandResult {
|
|
|
15
16
|
stderr: string;
|
|
16
17
|
exitCode: number;
|
|
17
18
|
}
|
|
19
|
+
export declare class ProcessOutputLimitError extends Error {
|
|
20
|
+
readonly maxOutputBytes: number;
|
|
21
|
+
readonly code = "command-output-limit-exceeded";
|
|
22
|
+
constructor(maxOutputBytes: number);
|
|
23
|
+
}
|
|
18
24
|
export type ProcessExecutor = (file: string, args: string[], options?: ProcessCommandOptions) => Promise<ProcessCommandResult>;
|
|
19
25
|
export type ShellCommandExecutor = (command: string, options?: ProcessCommandOptions) => Promise<ProcessCommandResult>;
|
|
20
26
|
export declare const defaultProcessExecutor: ProcessExecutor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,qBAAqB,KAC5B,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEvH,eAAO,MAAM,sBAAsB,EAAE,eACe,CAAC;AAErD,eAAO,MAAM,2BAA2B,EAAE,oBACU,CAAC"}
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAGpC,QAAQ,CAAC,cAAc,EAAE,MAAM;IAF3C,QAAQ,CAAC,IAAI,mCAAmC;gBAE3B,cAAc,EAAE,MAAM;CAI5C;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,qBAAqB,KAC5B,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEvH,eAAO,MAAM,sBAAsB,EAAE,eACe,CAAC;AAErD,eAAO,MAAM,2BAA2B,EAAE,oBACU,CAAC"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
export class ProcessOutputLimitError extends Error {
|
|
3
|
+
maxOutputBytes;
|
|
4
|
+
code = 'command-output-limit-exceeded';
|
|
5
|
+
constructor(maxOutputBytes) {
|
|
6
|
+
super(`Command output exceeded ${maxOutputBytes} bytes.`);
|
|
7
|
+
this.maxOutputBytes = maxOutputBytes;
|
|
8
|
+
this.name = 'ProcessOutputLimitError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
2
11
|
export const defaultProcessExecutor = (file, args, options) => runSpawn(file, args, { ...options, shell: false });
|
|
3
12
|
export const defaultShellCommandExecutor = (command, options) => runSpawn(command, [], { ...options, shell: true });
|
|
4
13
|
function runSpawn(file, args, options) {
|
|
@@ -7,6 +16,8 @@ function runSpawn(file, args, options) {
|
|
|
7
16
|
let timedOut = false;
|
|
8
17
|
let idleTimedOut = false;
|
|
9
18
|
let aborted = false;
|
|
19
|
+
let outputLimitExceeded = false;
|
|
20
|
+
let outputBytes = 0;
|
|
10
21
|
const callbackTasks = [];
|
|
11
22
|
const ownsProcessGroup = options.processGroup === true && process.platform !== 'win32';
|
|
12
23
|
const child = spawn(file, args, {
|
|
@@ -18,6 +29,12 @@ function runSpawn(file, args, options) {
|
|
|
18
29
|
});
|
|
19
30
|
let stdout = '';
|
|
20
31
|
let stderr = '';
|
|
32
|
+
if (options.maxOutputBytes !== undefined
|
|
33
|
+
&& (!Number.isSafeInteger(options.maxOutputBytes) || options.maxOutputBytes < 1)) {
|
|
34
|
+
child.kill();
|
|
35
|
+
reject(new Error('maxOutputBytes must be a positive safe integer'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
21
38
|
child.stdout.setEncoding('utf8');
|
|
22
39
|
child.stderr.setEncoding('utf8');
|
|
23
40
|
const scheduleCallback = (callback, chunk) => {
|
|
@@ -44,13 +61,33 @@ function runSpawn(file, args, options) {
|
|
|
44
61
|
idleTimeout.unref();
|
|
45
62
|
};
|
|
46
63
|
resetIdleTimeout();
|
|
64
|
+
const capture = (chunk, stream) => {
|
|
65
|
+
const bytes = Buffer.byteLength(chunk, 'utf8');
|
|
66
|
+
if (options.maxOutputBytes !== undefined && outputBytes + bytes > options.maxOutputBytes) {
|
|
67
|
+
outputLimitExceeded = true;
|
|
68
|
+
signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGTERM');
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
if (ownsProcessGroup || !settled)
|
|
71
|
+
signalOwnedProcess(child.pid, ownsProcessGroup, 'SIGKILL');
|
|
72
|
+
}, 2_000).unref();
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
outputBytes += bytes;
|
|
76
|
+
if (stream === 'stdout')
|
|
77
|
+
stdout += chunk;
|
|
78
|
+
else
|
|
79
|
+
stderr += chunk;
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
47
82
|
child.stdout.on('data', (chunk) => {
|
|
48
|
-
|
|
83
|
+
if (!capture(chunk, 'stdout'))
|
|
84
|
+
return;
|
|
49
85
|
scheduleCallback(options.onStdoutChunk, chunk);
|
|
50
86
|
resetIdleTimeout();
|
|
51
87
|
});
|
|
52
88
|
child.stderr.on('data', (chunk) => {
|
|
53
|
-
|
|
89
|
+
if (!capture(chunk, 'stderr'))
|
|
90
|
+
return;
|
|
54
91
|
scheduleCallback(options.onStderrChunk, chunk);
|
|
55
92
|
resetIdleTimeout();
|
|
56
93
|
});
|
|
@@ -108,6 +145,10 @@ function runSpawn(file, args, options) {
|
|
|
108
145
|
if ((aborted || timedOut || idleTimedOut) && ownsProcessGroup && child.pid) {
|
|
109
146
|
await waitForProcessGroupAbsence(child.pid);
|
|
110
147
|
}
|
|
148
|
+
if (outputLimitExceeded) {
|
|
149
|
+
reject(new ProcessOutputLimitError(options.maxOutputBytes));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
111
152
|
if (aborted) {
|
|
112
153
|
resolve({ stdout, stderr: stderr ? `${stderr}\nCommand cancelled.` : 'Command cancelled.', exitCode: 130 });
|
|
113
154
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/v2/adapters/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,28 +9,20 @@ export interface CandidateBindingV2 {
|
|
|
9
9
|
sourceWorktreeIdentity: string;
|
|
10
10
|
}
|
|
11
11
|
export type CandidateBoundaryV2 = {
|
|
12
|
-
kind: 'qualification';
|
|
13
|
-
repairAttempt: 0 | 1 | 2 | 3 | 4 | 5;
|
|
14
|
-
} | {
|
|
15
12
|
kind: 'implementation-cycle';
|
|
16
|
-
cycle:
|
|
13
|
+
cycle: number;
|
|
14
|
+
authoritySha256: string;
|
|
17
15
|
} | {
|
|
18
16
|
kind: 'review-feedback';
|
|
19
17
|
batchId: string;
|
|
20
|
-
repairRound:
|
|
18
|
+
repairRound: number;
|
|
19
|
+
authoritySha256: string;
|
|
21
20
|
};
|
|
22
|
-
export interface
|
|
21
|
+
export interface CandidateMaterializationV2 {
|
|
23
22
|
version: 2;
|
|
24
23
|
bindingId: string;
|
|
25
24
|
candidateCommitSha: string;
|
|
26
25
|
path: string;
|
|
27
|
-
operation: 'qualification-check' | 'direct-review' | 'final-check' | 'acceptance-proof';
|
|
28
|
-
attemptId: string;
|
|
29
|
-
phase: 'prepared' | 'launched';
|
|
30
|
-
pid: number | null;
|
|
31
|
-
processGroupId: number | null;
|
|
32
|
-
preparedAt: string;
|
|
33
|
-
launchedAt: string | null;
|
|
34
26
|
}
|
|
35
27
|
export type CandidateOperationFailureCode = 'candidate-unstable' | 'candidate-io-failed' | 'candidate-materialization-io-failed' | 'candidate-ref-update-unknown';
|
|
36
28
|
export type CandidateResult<T> = {
|
|
@@ -53,7 +45,7 @@ export interface CandidateGitV2 {
|
|
|
53
45
|
boundary: CandidateBoundaryV2;
|
|
54
46
|
artifactDir: string;
|
|
55
47
|
}>;
|
|
56
|
-
|
|
48
|
+
activeMaterializations: Array<{
|
|
57
49
|
path: string;
|
|
58
50
|
candidateCommitSha: string;
|
|
59
51
|
}>;
|
|
@@ -70,36 +62,28 @@ export interface CandidateGitV2 {
|
|
|
70
62
|
worktreePath: string;
|
|
71
63
|
expectedHeadSha: string;
|
|
72
64
|
}): Promise<CandidateResult<void>>;
|
|
73
|
-
|
|
65
|
+
prepareMaterialization(input: {
|
|
74
66
|
binding: CandidateBindingV2;
|
|
75
67
|
runId: string;
|
|
76
68
|
workspaceRoot: string;
|
|
77
|
-
|
|
78
|
-
attemptId: string;
|
|
69
|
+
materializationId: string;
|
|
79
70
|
}): Promise<CandidateResult<{
|
|
80
71
|
kind: 'prepared';
|
|
81
|
-
|
|
72
|
+
materialization: CandidateMaterializationV2;
|
|
82
73
|
} | {
|
|
83
74
|
kind: 'path-diverged';
|
|
84
75
|
path: string;
|
|
85
76
|
}>>;
|
|
86
|
-
|
|
87
|
-
lease: CandidateExecutionLeaseV2;
|
|
88
|
-
pid: number;
|
|
89
|
-
processGroupId: number;
|
|
90
|
-
launchedAt: string;
|
|
91
|
-
}): CandidateExecutionLeaseV2;
|
|
92
|
-
inspectExecution(input: {
|
|
77
|
+
inspectMaterialization(input: {
|
|
93
78
|
binding: CandidateBindingV2;
|
|
94
|
-
|
|
79
|
+
materialization: CandidateMaterializationV2;
|
|
95
80
|
artifactDir: string;
|
|
96
81
|
}): Promise<CandidateResult<'matching' | 'mutated' | 'missing'>>;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
requireProcessAbsent: true;
|
|
82
|
+
removeMaterialization(input: {
|
|
83
|
+
materialization: CandidateMaterializationV2;
|
|
100
84
|
}): Promise<CandidateResult<void>>;
|
|
101
85
|
copyProofArtifacts(input: {
|
|
102
|
-
|
|
86
|
+
materialization: CandidateMaterializationV2;
|
|
103
87
|
issueWorktreePath: string;
|
|
104
88
|
artifactDir: string;
|
|
105
89
|
proofId: string;
|
|
@@ -148,5 +132,5 @@ export declare function candidateBindingId(input: {
|
|
|
148
132
|
}): string;
|
|
149
133
|
export declare function candidateRef(runId: string, bindingId: string): string;
|
|
150
134
|
export declare function validateCandidateBinding(value: unknown, field?: string, expectedRunId?: string): CandidateBindingV2;
|
|
151
|
-
export declare function
|
|
135
|
+
export declare function validateCandidateMaterialization(value: unknown, field?: string): CandidateMaterializationV2;
|
|
152
136
|
//# sourceMappingURL=candidate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate.d.ts","sourceRoot":"","sources":["../../../src/v2/candidate.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"candidate.d.ts","sourceRoot":"","sources":["../../../src/v2/candidate.ts"],"names":[],"mappings":"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"}
|
package/dist/src/v2/candidate.js
CHANGED
|
@@ -43,10 +43,9 @@ export function validateCandidateBinding(value, field = 'candidate binding', exp
|
|
|
43
43
|
assertSha256(value.sourceWorktreeIdentity, `${field}.sourceWorktreeIdentity`);
|
|
44
44
|
return value;
|
|
45
45
|
}
|
|
46
|
-
export function
|
|
46
|
+
export function validateCandidateMaterialization(value, field = 'candidate materialization') {
|
|
47
47
|
assertExactObject(value, [
|
|
48
|
-
'version', 'bindingId', 'candidateCommitSha', 'path',
|
|
49
|
-
'processGroupId', 'preparedAt', 'launchedAt',
|
|
48
|
+
'version', 'bindingId', 'candidateCommitSha', 'path',
|
|
50
49
|
], field);
|
|
51
50
|
if (value.version !== 2)
|
|
52
51
|
throw new Error(`${field}.version is invalid`);
|
|
@@ -54,33 +53,18 @@ export function validateCandidateExecutionLease(value, field = 'candidate execut
|
|
|
54
53
|
assertGitSha(value.candidateCommitSha, `${field}.candidateCommitSha`);
|
|
55
54
|
if (typeof value.path !== 'string' || value.path.length === 0)
|
|
56
55
|
throw new Error(`${field}.path is invalid`);
|
|
57
|
-
if (!['qualification-check', 'direct-review', 'final-check', 'acceptance-proof'].includes(value.operation)) {
|
|
58
|
-
throw new Error(`${field}.operation is invalid`);
|
|
59
|
-
}
|
|
60
|
-
assertSha256(value.attemptId, `${field}.attemptId`);
|
|
61
|
-
if (value.phase !== 'prepared' && value.phase !== 'launched')
|
|
62
|
-
throw new Error(`${field}.phase is invalid`);
|
|
63
|
-
const prepared = value.phase === 'prepared';
|
|
64
|
-
if (prepared ? value.pid !== null || value.processGroupId !== null || value.launchedAt !== null
|
|
65
|
-
: !isPositiveInteger(value.pid) || !isPositiveInteger(value.processGroupId) || !isTimestamp(value.launchedAt)) {
|
|
66
|
-
throw new Error(`${field} launch ownership is invalid`);
|
|
67
|
-
}
|
|
68
|
-
if (!isTimestamp(value.preparedAt))
|
|
69
|
-
throw new Error(`${field}.preparedAt is invalid`);
|
|
70
56
|
return value;
|
|
71
57
|
}
|
|
72
58
|
function validateCandidateBoundary(value) {
|
|
73
|
-
if (value.kind === '
|
|
74
|
-
if (!Number.
|
|
75
|
-
throw new Error('candidate qualification boundary is invalid');
|
|
76
|
-
}
|
|
77
|
-
else if (value.kind === 'implementation-cycle') {
|
|
78
|
-
if (!Number.isInteger(value.cycle) || value.cycle < 1 || value.cycle > 5)
|
|
59
|
+
if (value.kind === 'implementation-cycle') {
|
|
60
|
+
if (!Number.isSafeInteger(value.cycle) || value.cycle < 1)
|
|
79
61
|
throw new Error('candidate implementation boundary is invalid');
|
|
62
|
+
assertSha256(value.authoritySha256, 'candidate delivery authority');
|
|
80
63
|
}
|
|
81
64
|
else if (value.kind === 'review-feedback') {
|
|
82
65
|
assertSha256(value.batchId, 'candidate review feedback batch ID');
|
|
83
|
-
|
|
66
|
+
assertSha256(value.authoritySha256, 'candidate delivery authority');
|
|
67
|
+
if (!Number.isSafeInteger(value.repairRound) || value.repairRound < 1)
|
|
84
68
|
throw new Error('candidate review feedback boundary is invalid');
|
|
85
69
|
}
|
|
86
70
|
else {
|
|
@@ -120,10 +104,4 @@ function assertExactObject(value, keys, field) {
|
|
|
120
104
|
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index]))
|
|
121
105
|
throw new Error(`${field} has unknown or missing keys`);
|
|
122
106
|
}
|
|
123
|
-
function isPositiveInteger(value) {
|
|
124
|
-
return Number.isSafeInteger(value) && value > 0;
|
|
125
|
-
}
|
|
126
|
-
function isTimestamp(value) {
|
|
127
|
-
return typeof value === 'string' && !Number.isNaN(Date.parse(value)) && new Date(value).toISOString() === value;
|
|
128
|
-
}
|
|
129
107
|
//# sourceMappingURL=candidate.js.map
|