ralph-research 0.1.2 → 0.1.4
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/README.md +132 -101
- package/dist/adapters/fs/json-file-research-project-defaults-store.d.ts +8 -0
- package/dist/adapters/fs/json-file-research-project-defaults-store.js +30 -0
- package/dist/adapters/fs/json-file-research-project-defaults-store.js.map +1 -0
- package/dist/adapters/fs/json-file-research-session-repository.d.ts +24 -0
- package/dist/adapters/fs/json-file-research-session-repository.js +199 -0
- package/dist/adapters/fs/json-file-research-session-repository.js.map +1 -0
- package/dist/adapters/fs/lockfile.js +142 -57
- package/dist/adapters/fs/lockfile.js.map +1 -1
- package/dist/adapters/fs/manifest-loader.js +8 -1
- package/dist/adapters/fs/manifest-loader.js.map +1 -1
- package/dist/adapters/proposer/codex-cli-proposer.d.ts +16 -0
- package/dist/adapters/proposer/codex-cli-proposer.js +106 -0
- package/dist/adapters/proposer/codex-cli-proposer.js.map +1 -0
- package/dist/adapters/proposer/codex-cli-session-driver.d.ts +64 -0
- package/dist/adapters/proposer/codex-cli-session-driver.js +182 -0
- package/dist/adapters/proposer/codex-cli-session-driver.js.map +1 -0
- package/dist/adapters/proposer/codex-cli-session-manager.d.ts +79 -0
- package/dist/adapters/proposer/codex-cli-session-manager.js +248 -0
- package/dist/adapters/proposer/codex-cli-session-manager.js.map +1 -0
- package/dist/adapters/proposer/codex-cli-session-outcome-extractor.d.ts +3 -0
- package/dist/adapters/proposer/codex-cli-session-outcome-extractor.js +94 -0
- package/dist/adapters/proposer/codex-cli-session-outcome-extractor.js.map +1 -0
- package/dist/adapters/proposer/proposer-factory.d.ts +22 -0
- package/dist/adapters/proposer/proposer-factory.js +19 -0
- package/dist/adapters/proposer/proposer-factory.js.map +1 -0
- package/dist/app/services/codex-cli-session-lifecycle-service.d.ts +116 -0
- package/dist/app/services/codex-cli-session-lifecycle-service.js +186 -0
- package/dist/app/services/codex-cli-session-lifecycle-service.js.map +1 -0
- package/dist/app/services/manual-decision-service.js +20 -9
- package/dist/app/services/manual-decision-service.js.map +1 -1
- package/dist/app/services/project-state-service.js +5 -3
- package/dist/app/services/project-state-service.js.map +1 -1
- package/dist/app/services/research-project-defaults-service.d.ts +18 -0
- package/dist/app/services/research-project-defaults-service.js +175 -0
- package/dist/app/services/research-project-defaults-service.js.map +1 -0
- package/dist/app/services/research-session-draft-service.d.ts +121 -0
- package/dist/app/services/research-session-draft-service.js +846 -0
- package/dist/app/services/research-session-draft-service.js.map +1 -0
- package/dist/app/services/research-session-entry-flow-summary-mapper.d.ts +12 -0
- package/dist/app/services/research-session-entry-flow-summary-mapper.js +33 -0
- package/dist/app/services/research-session-entry-flow-summary-mapper.js.map +1 -0
- package/dist/app/services/research-session-interactive-service.d.ts +35 -0
- package/dist/app/services/research-session-interactive-service.js +295 -0
- package/dist/app/services/research-session-interactive-service.js.map +1 -0
- package/dist/app/services/research-session-launch-service.d.ts +46 -0
- package/dist/app/services/research-session-launch-service.js +389 -0
- package/dist/app/services/research-session-launch-service.js.map +1 -0
- package/dist/app/services/research-session-orchestrator-service.d.ts +140 -0
- package/dist/app/services/research-session-orchestrator-service.js +614 -0
- package/dist/app/services/research-session-orchestrator-service.js.map +1 -0
- package/dist/app/services/research-session-recovery-service.d.ts +30 -0
- package/dist/app/services/research-session-recovery-service.js +110 -0
- package/dist/app/services/research-session-recovery-service.js.map +1 -0
- package/dist/app/services/research-session-wizard-controller.d.ts +51 -0
- package/dist/app/services/research-session-wizard-controller.js +220 -0
- package/dist/app/services/research-session-wizard-controller.js.map +1 -0
- package/dist/app/services/run-cycle-service.d.ts +2 -0
- package/dist/app/services/run-cycle-service.js +8 -6
- package/dist/app/services/run-cycle-service.js.map +1 -1
- package/dist/app/services/run-loop-service.js +11 -3
- package/dist/app/services/run-loop-service.js.map +1 -1
- package/dist/cli/commands/inspect.js +2 -0
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/commands/launch.d.ts +16 -0
- package/dist/cli/commands/launch.js +68 -0
- package/dist/cli/commands/launch.js.map +1 -0
- package/dist/cli/commands/proposer-display.d.ts +2 -0
- package/dist/cli/commands/proposer-display.js +18 -0
- package/dist/cli/commands/proposer-display.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +14 -0
- package/dist/cli/commands/resume.js +134 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +2 -2
- package/dist/cli/commands/run.js +15 -4
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/status.js +4 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +2 -29
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/program.d.ts +15 -0
- package/dist/cli/program.js +54 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/tui/research-session-shell.d.ts +22 -0
- package/dist/cli/tui/research-session-shell.js +719 -0
- package/dist/cli/tui/research-session-shell.js.map +1 -0
- package/dist/core/engine/cycle-runner.d.ts +4 -0
- package/dist/core/engine/cycle-runner.js +15 -9
- package/dist/core/engine/cycle-runner.js.map +1 -1
- package/dist/core/manifest/admission.d.ts +1 -0
- package/dist/core/manifest/admission.js +50 -0
- package/dist/core/manifest/admission.js.map +1 -1
- package/dist/core/manifest/defaults.d.ts +21 -0
- package/dist/core/manifest/defaults.js +21 -0
- package/dist/core/manifest/defaults.js.map +1 -1
- package/dist/core/manifest/schema.d.ts +170 -0
- package/dist/core/manifest/schema.js +21 -1
- package/dist/core/manifest/schema.js.map +1 -1
- package/dist/core/model/codex-cli-cycle-session.d.ts +4 -0
- package/dist/core/model/codex-cli-cycle-session.js +2 -0
- package/dist/core/model/codex-cli-cycle-session.js.map +1 -0
- package/dist/core/model/codex-cli-session-lifecycle.d.ts +131 -0
- package/dist/core/model/codex-cli-session-lifecycle.js +237 -0
- package/dist/core/model/codex-cli-session-lifecycle.js.map +1 -0
- package/dist/core/model/codex-cli-session-outcome.d.ts +121 -0
- package/dist/core/model/codex-cli-session-outcome.js +70 -0
- package/dist/core/model/codex-cli-session-outcome.js.map +1 -0
- package/dist/core/model/research-project-defaults.d.ts +48 -0
- package/dist/core/model/research-project-defaults.js +46 -0
- package/dist/core/model/research-project-defaults.js.map +1 -0
- package/dist/core/model/research-session.d.ts +1143 -0
- package/dist/core/model/research-session.js +689 -0
- package/dist/core/model/research-session.js.map +1 -0
- package/dist/core/model/run-record.d.ts +56 -6
- package/dist/core/model/run-record.js +28 -0
- package/dist/core/model/run-record.js.map +1 -1
- package/dist/core/ports/research-project-defaults-store.d.ts +5 -0
- package/dist/core/ports/research-project-defaults-store.js +2 -0
- package/dist/core/ports/research-project-defaults-store.js.map +1 -0
- package/dist/core/ports/research-session-repository.d.ts +25 -0
- package/dist/core/ports/research-session-repository.js +2 -0
- package/dist/core/ports/research-session-repository.js.map +1 -0
- package/dist/core/state/frontier-materializer.d.ts +2 -0
- package/dist/core/state/frontier-materializer.js +11 -2
- package/dist/core/state/frontier-materializer.js.map +1 -1
- package/dist/core/state/research-session-recovery-classifier.d.ts +24 -0
- package/dist/core/state/research-session-recovery-classifier.js +236 -0
- package/dist/core/state/research-session-recovery-classifier.js.map +1 -0
- package/dist/core/state/research-session-resume-candidate.d.ts +8 -0
- package/dist/core/state/research-session-resume-candidate.js +62 -0
- package/dist/core/state/research-session-resume-candidate.js.map +1 -0
- package/dist/core/state/research-session-state-machine.d.ts +62 -0
- package/dist/core/state/research-session-state-machine.js +443 -0
- package/dist/core/state/research-session-state-machine.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.js +192 -1
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CodexCliSessionProposer } from "./codex-cli-proposer.js";
|
|
2
|
+
import { runCommandProposer, } from "./command-proposer.js";
|
|
3
|
+
export function createProposerRunner(proposer, dependencies = {}) {
|
|
4
|
+
switch (proposer.type) {
|
|
5
|
+
case "command":
|
|
6
|
+
return {
|
|
7
|
+
run: (input) => (dependencies.runCommand ?? runCommandProposer)(proposer, input),
|
|
8
|
+
};
|
|
9
|
+
case "codex_cli":
|
|
10
|
+
return new CodexCliSessionProposer(proposer, {
|
|
11
|
+
...(dependencies.createSessionManager ? { createSessionManager: dependencies.createSessionManager } : {}),
|
|
12
|
+
...(dependencies.createSessionId ? { createSessionId: dependencies.createSessionId } : {}),
|
|
13
|
+
...(dependencies.now ? { now: dependencies.now } : {}),
|
|
14
|
+
});
|
|
15
|
+
default:
|
|
16
|
+
throw new Error(`unsupported proposer type ${proposer.type} in cycle runner`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=proposer-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposer-factory.js","sourceRoot":"","sources":["../../../src/adapters/proposer/proposer-factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAA4C,MAAM,yBAAyB,CAAC;AAC5G,OAAO,EACL,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC;AAqB/B,MAAM,UAAU,oBAAoB,CAClC,QAA4B,EAC5B,eAA4C,EAAE;IAE9C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,SAAS;YACZ,OAAO;gBACL,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,UAAU,IAAI,kBAAkB,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC;aACjF,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,IAAI,uBAAuB,CAAC,QAAQ,EAAE;gBAC3C,GAAG,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1F,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { CodexCliSessionLifecyclePhase, CodexCliSessionLifecycleRecord } from "../../core/model/codex-cli-session-lifecycle.js";
|
|
2
|
+
import type { ResearchSessionRecord } from "../../core/model/research-session.js";
|
|
3
|
+
import type { PersistedCodexSessionReference } from "../../core/ports/research-session-repository.js";
|
|
4
|
+
import type { ResearchSessionRecoveryStatus } from "../../core/state/research-session-recovery-classifier.js";
|
|
5
|
+
import { ResearchSessionRecoveryService, type ResearchSessionRecoveryInspection, type ResearchSessionRecoveryInput } from "./research-session-recovery-service.js";
|
|
6
|
+
type ReusableAttachmentPhase = Extract<CodexCliSessionLifecyclePhase, "starting" | "running">;
|
|
7
|
+
export type CodexCliSessionAttachability = {
|
|
8
|
+
mode: "attach";
|
|
9
|
+
attachable: true;
|
|
10
|
+
resumable: false;
|
|
11
|
+
reason: string;
|
|
12
|
+
} | {
|
|
13
|
+
mode: "resume";
|
|
14
|
+
attachable: false;
|
|
15
|
+
resumable: true;
|
|
16
|
+
reason: string;
|
|
17
|
+
} | {
|
|
18
|
+
mode: "inspect";
|
|
19
|
+
attachable: false;
|
|
20
|
+
resumable: false;
|
|
21
|
+
reason: string;
|
|
22
|
+
};
|
|
23
|
+
export interface CodexCliReusableAttachmentTarget {
|
|
24
|
+
kind: "reusable_attachment_target";
|
|
25
|
+
session: ResearchSessionRecord;
|
|
26
|
+
lifecycle: CodexCliSessionLifecycleRecord & {
|
|
27
|
+
phase: ReusableAttachmentPhase;
|
|
28
|
+
pid: number;
|
|
29
|
+
attachmentState: CodexCliSessionLifecycleRecord["attachmentState"] & {
|
|
30
|
+
status: "bound";
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
recovery: ResearchSessionRecoveryStatus;
|
|
34
|
+
attachability: Extract<CodexCliSessionAttachability, {
|
|
35
|
+
mode: "attach";
|
|
36
|
+
}>;
|
|
37
|
+
target: {
|
|
38
|
+
researchSessionId: string;
|
|
39
|
+
codexSessionId: string;
|
|
40
|
+
pid: number;
|
|
41
|
+
phase: ReusableAttachmentPhase;
|
|
42
|
+
command: string;
|
|
43
|
+
args: string[];
|
|
44
|
+
workingDirectory: string;
|
|
45
|
+
attachmentStatus: "bound";
|
|
46
|
+
trackedGlobs: string[];
|
|
47
|
+
extraWritableDirectories: string[];
|
|
48
|
+
tty: CodexCliSessionLifecycleRecord["tty"];
|
|
49
|
+
workspaceRef?: string;
|
|
50
|
+
workspacePath?: string;
|
|
51
|
+
checkpointRunId?: string;
|
|
52
|
+
checkpointDecisionId?: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface CodexCliStaleSessionOutcome {
|
|
56
|
+
kind: "stale_session_outcome";
|
|
57
|
+
session: ResearchSessionRecord;
|
|
58
|
+
lifecycle: CodexCliSessionLifecycleRecord | null;
|
|
59
|
+
recovery: ResearchSessionRecoveryStatus;
|
|
60
|
+
attachability: Exclude<CodexCliSessionAttachability, {
|
|
61
|
+
mode: "attach";
|
|
62
|
+
}>;
|
|
63
|
+
outcome: {
|
|
64
|
+
runtimeState: ResearchSessionRecoveryStatus["runtime"]["state"];
|
|
65
|
+
completedCycles: number;
|
|
66
|
+
resumeFromCycle: number;
|
|
67
|
+
resumable: boolean;
|
|
68
|
+
reason: string;
|
|
69
|
+
phase?: CodexCliSessionLifecyclePhase;
|
|
70
|
+
attachmentStatus?: CodexCliSessionLifecycleRecord["attachmentState"]["status"];
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export interface CodexCliReuseExistingSessionDecision {
|
|
74
|
+
decision: "reuse";
|
|
75
|
+
session: ResearchSessionRecord;
|
|
76
|
+
lifecycle: CodexCliSessionLifecycleRecord & {
|
|
77
|
+
phase: ReusableAttachmentPhase;
|
|
78
|
+
pid: number;
|
|
79
|
+
attachmentState: CodexCliSessionLifecycleRecord["attachmentState"] & {
|
|
80
|
+
status: "bound";
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
recovery: ResearchSessionRecoveryStatus;
|
|
84
|
+
codexSessionReference: PersistedCodexSessionReference;
|
|
85
|
+
reason: string;
|
|
86
|
+
reuse: CodexCliReusableAttachmentTarget["target"];
|
|
87
|
+
}
|
|
88
|
+
export interface CodexCliReplaceExistingSessionDecision {
|
|
89
|
+
decision: "replace";
|
|
90
|
+
session: ResearchSessionRecord;
|
|
91
|
+
lifecycle: CodexCliSessionLifecycleRecord | null;
|
|
92
|
+
recovery: ResearchSessionRecoveryStatus;
|
|
93
|
+
codexSessionReference: PersistedCodexSessionReference | null;
|
|
94
|
+
reason: string;
|
|
95
|
+
replace: CodexCliStaleSessionOutcome["outcome"] & {
|
|
96
|
+
attachabilityMode: Exclude<CodexCliSessionAttachability["mode"], "attach">;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export type CodexCliSessionLifecycleServiceResult = CodexCliReusableAttachmentTarget | CodexCliStaleSessionOutcome;
|
|
100
|
+
export type CodexCliSessionReuseOrReplaceDecision = CodexCliReuseExistingSessionDecision | CodexCliReplaceExistingSessionDecision;
|
|
101
|
+
export interface CodexCliSessionLifecycleServiceDependencies {
|
|
102
|
+
recoveryService?: Pick<ResearchSessionRecoveryService, "inspectSession">;
|
|
103
|
+
createRecoveryService?: () => Pick<ResearchSessionRecoveryService, "inspectSession">;
|
|
104
|
+
attachabilityValidator?: (inspection: ResearchSessionRecoveryInspection) => CodexCliSessionAttachability;
|
|
105
|
+
}
|
|
106
|
+
export declare class CodexCliSessionLifecycleService {
|
|
107
|
+
private readonly recoveryService;
|
|
108
|
+
private readonly attachabilityValidator;
|
|
109
|
+
constructor(dependencies?: CodexCliSessionLifecycleServiceDependencies);
|
|
110
|
+
inspectSession(input: ResearchSessionRecoveryInput): Promise<CodexCliSessionLifecycleServiceResult>;
|
|
111
|
+
resolveCycleSession(input: ResearchSessionRecoveryInput): Promise<CodexCliSessionReuseOrReplaceDecision>;
|
|
112
|
+
}
|
|
113
|
+
export declare function classifyCodexCliSessionLifecycleInspection(inspection: ResearchSessionRecoveryInspection): CodexCliSessionLifecycleServiceResult;
|
|
114
|
+
export declare function resolveCodexCliSessionReuseOrReplaceDecision(inspection: ResearchSessionRecoveryInspection, attachability?: CodexCliSessionAttachability): CodexCliSessionReuseOrReplaceDecision;
|
|
115
|
+
export declare function validateCodexCliSessionAttachability(inspection: ResearchSessionRecoveryInspection): CodexCliSessionAttachability;
|
|
116
|
+
export {};
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { ResearchSessionRecoveryService, } from "./research-session-recovery-service.js";
|
|
2
|
+
export class CodexCliSessionLifecycleService {
|
|
3
|
+
recoveryService;
|
|
4
|
+
attachabilityValidator;
|
|
5
|
+
constructor(dependencies = {}) {
|
|
6
|
+
this.recoveryService =
|
|
7
|
+
dependencies.recoveryService ??
|
|
8
|
+
dependencies.createRecoveryService?.() ??
|
|
9
|
+
new ResearchSessionRecoveryService();
|
|
10
|
+
this.attachabilityValidator =
|
|
11
|
+
dependencies.attachabilityValidator ?? validateCodexCliSessionAttachability;
|
|
12
|
+
}
|
|
13
|
+
async inspectSession(input) {
|
|
14
|
+
const inspection = await this.recoveryService.inspectSession(input);
|
|
15
|
+
return materializeCodexCliSessionLifecycleInspection(inspection, this.attachabilityValidator(inspection));
|
|
16
|
+
}
|
|
17
|
+
async resolveCycleSession(input) {
|
|
18
|
+
const inspection = await this.recoveryService.inspectSession(input);
|
|
19
|
+
return resolveCodexCliSessionReuseOrReplaceDecision(inspection, this.attachabilityValidator(inspection));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function classifyCodexCliSessionLifecycleInspection(inspection) {
|
|
23
|
+
return materializeCodexCliSessionLifecycleInspection(inspection, validateCodexCliSessionAttachability(inspection));
|
|
24
|
+
}
|
|
25
|
+
export function resolveCodexCliSessionReuseOrReplaceDecision(inspection, attachability = validateCodexCliSessionAttachability(inspection)) {
|
|
26
|
+
const result = materializeCodexCliSessionLifecycleInspection(inspection, attachability);
|
|
27
|
+
if (result.kind === "reusable_attachment_target") {
|
|
28
|
+
if (!inspection.codexSessionReference) {
|
|
29
|
+
throw new Error("Reusable Codex CLI attachments require a persisted Codex session reference");
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
decision: "reuse",
|
|
33
|
+
session: result.session,
|
|
34
|
+
lifecycle: result.lifecycle,
|
|
35
|
+
recovery: result.recovery,
|
|
36
|
+
codexSessionReference: inspection.codexSessionReference,
|
|
37
|
+
reason: result.attachability.reason,
|
|
38
|
+
reuse: result.target,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
decision: "replace",
|
|
43
|
+
session: result.session,
|
|
44
|
+
lifecycle: result.lifecycle,
|
|
45
|
+
recovery: result.recovery,
|
|
46
|
+
codexSessionReference: inspection.codexSessionReference,
|
|
47
|
+
reason: result.attachability.reason,
|
|
48
|
+
replace: {
|
|
49
|
+
...result.outcome,
|
|
50
|
+
attachabilityMode: result.attachability.mode,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function materializeCodexCliSessionLifecycleInspection(inspection, attachability) {
|
|
55
|
+
const reusableAttachmentFailure = getReusableAttachmentFailure(inspection);
|
|
56
|
+
if (attachability.mode === "attach" && isReusableAttachmentLifecycle(inspection)) {
|
|
57
|
+
return buildReusableAttachmentTarget(inspection, attachability);
|
|
58
|
+
}
|
|
59
|
+
const safeAttachability = attachability.mode === "attach"
|
|
60
|
+
? deriveSafeStaleAttachability(inspection, reusableAttachmentFailure)
|
|
61
|
+
: attachability;
|
|
62
|
+
return buildStaleSessionOutcome(inspection, safeAttachability);
|
|
63
|
+
}
|
|
64
|
+
function buildReusableAttachmentTarget(inspection, attachability) {
|
|
65
|
+
return {
|
|
66
|
+
kind: "reusable_attachment_target",
|
|
67
|
+
session: inspection.session,
|
|
68
|
+
lifecycle: inspection.lifecycle,
|
|
69
|
+
recovery: inspection.recovery,
|
|
70
|
+
attachability,
|
|
71
|
+
target: {
|
|
72
|
+
researchSessionId: inspection.session.sessionId,
|
|
73
|
+
codexSessionId: inspection.lifecycle.identity.codexSessionId,
|
|
74
|
+
pid: inspection.lifecycle.pid,
|
|
75
|
+
phase: inspection.lifecycle.phase,
|
|
76
|
+
command: inspection.lifecycle.command,
|
|
77
|
+
args: [...inspection.lifecycle.args],
|
|
78
|
+
workingDirectory: inspection.lifecycle.workingDirectory,
|
|
79
|
+
attachmentStatus: "bound",
|
|
80
|
+
trackedGlobs: [...inspection.lifecycle.attachmentState.trackedGlobs],
|
|
81
|
+
extraWritableDirectories: [...inspection.lifecycle.attachmentState.extraWritableDirectories],
|
|
82
|
+
tty: { ...inspection.lifecycle.tty },
|
|
83
|
+
...(inspection.lifecycle.references.workspaceRef
|
|
84
|
+
? { workspaceRef: inspection.lifecycle.references.workspaceRef }
|
|
85
|
+
: {}),
|
|
86
|
+
...(inspection.lifecycle.references.workspacePath
|
|
87
|
+
? { workspacePath: inspection.lifecycle.references.workspacePath }
|
|
88
|
+
: {}),
|
|
89
|
+
...(inspection.lifecycle.references.checkpointRunId
|
|
90
|
+
? { checkpointRunId: inspection.lifecycle.references.checkpointRunId }
|
|
91
|
+
: {}),
|
|
92
|
+
...(inspection.lifecycle.references.checkpointDecisionId
|
|
93
|
+
? { checkpointDecisionId: inspection.lifecycle.references.checkpointDecisionId }
|
|
94
|
+
: {}),
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function buildStaleSessionOutcome(inspection, attachability) {
|
|
99
|
+
return {
|
|
100
|
+
kind: "stale_session_outcome",
|
|
101
|
+
session: inspection.session,
|
|
102
|
+
lifecycle: inspection.lifecycle,
|
|
103
|
+
recovery: inspection.recovery,
|
|
104
|
+
attachability,
|
|
105
|
+
outcome: {
|
|
106
|
+
runtimeState: inspection.recovery.runtime.state,
|
|
107
|
+
completedCycles: inspection.session.progress.completedCycles,
|
|
108
|
+
resumeFromCycle: inspection.session.resume.resumeFromCycle,
|
|
109
|
+
resumable: inspection.recovery.resumeAllowed,
|
|
110
|
+
reason: inspection.recovery.reason,
|
|
111
|
+
...(inspection.lifecycle ? { phase: inspection.lifecycle.phase } : {}),
|
|
112
|
+
...(inspection.lifecycle ? { attachmentStatus: inspection.lifecycle.attachmentState.status } : {}),
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function deriveSafeStaleAttachability(inspection, reusableAttachmentFailure) {
|
|
117
|
+
if (inspection.recovery.resumeAllowed) {
|
|
118
|
+
return {
|
|
119
|
+
mode: "resume",
|
|
120
|
+
attachable: false,
|
|
121
|
+
resumable: true,
|
|
122
|
+
reason: inspection.recovery.reason,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
mode: "inspect",
|
|
127
|
+
attachable: false,
|
|
128
|
+
resumable: false,
|
|
129
|
+
reason: reusableAttachmentFailure ??
|
|
130
|
+
"Codex CLI session looked attachable, but the persisted lifecycle evidence was incomplete",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export function validateCodexCliSessionAttachability(inspection) {
|
|
134
|
+
const reusableAttachmentFailure = getReusableAttachmentFailure(inspection);
|
|
135
|
+
if (!reusableAttachmentFailure) {
|
|
136
|
+
return {
|
|
137
|
+
mode: "attach",
|
|
138
|
+
attachable: true,
|
|
139
|
+
resumable: false,
|
|
140
|
+
reason: "Codex CLI session is still live and bound to the persisted working-directory attachment",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (inspection.recovery.resumeAllowed) {
|
|
144
|
+
return {
|
|
145
|
+
mode: "resume",
|
|
146
|
+
attachable: false,
|
|
147
|
+
resumable: true,
|
|
148
|
+
reason: inspection.recovery.reason,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
mode: "inspect",
|
|
153
|
+
attachable: false,
|
|
154
|
+
resumable: false,
|
|
155
|
+
reason: reusableAttachmentFailure ?? inspection.recovery.reason,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function getReusableAttachmentFailure(inspection) {
|
|
159
|
+
const lifecycle = inspection.lifecycle;
|
|
160
|
+
if (!lifecycle) {
|
|
161
|
+
return inspection.recovery.reason;
|
|
162
|
+
}
|
|
163
|
+
if (!inspection.codexSessionReference) {
|
|
164
|
+
return "Persisted Codex session reference is missing";
|
|
165
|
+
}
|
|
166
|
+
if (inspection.codexSessionReference.codexSessionId !== lifecycle.identity.codexSessionId) {
|
|
167
|
+
return "Persisted Codex session reference does not match the lifecycle codex session id";
|
|
168
|
+
}
|
|
169
|
+
if (!inspection.recovery.runtime.processAlive || inspection.recovery.runtime.state !== "active") {
|
|
170
|
+
return inspection.recovery.reason;
|
|
171
|
+
}
|
|
172
|
+
if (lifecycle.phase !== "starting" && lifecycle.phase !== "running") {
|
|
173
|
+
return `Codex CLI process is live, but lifecycle phase ${lifecycle.phase} cannot accept attachment`;
|
|
174
|
+
}
|
|
175
|
+
if (lifecycle.pid === undefined) {
|
|
176
|
+
return "Codex CLI process is live, but the persisted lifecycle is missing the process id required for attachment";
|
|
177
|
+
}
|
|
178
|
+
if (lifecycle.attachmentState.status !== "bound") {
|
|
179
|
+
return `Codex CLI process is live, but attachmentState.status is ${lifecycle.attachmentState.status} instead of bound`;
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
function isReusableAttachmentLifecycle(inspection) {
|
|
184
|
+
return getReusableAttachmentFailure(inspection) === null;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=codex-cli-session-lifecycle-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli-session-lifecycle-service.js","sourceRoot":"","sources":["../../../src/app/services/codex-cli-session-lifecycle-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import { JsonFileRunStore } from "../../adapters/fs/json-file-run-store.js";
|
|
|
5
5
|
import { acquireLock, releaseLock } from "../../adapters/fs/lockfile.js";
|
|
6
6
|
import { loadManifestFromFile } from "../../adapters/fs/manifest-loader.js";
|
|
7
7
|
import { GitClient } from "../../adapters/git/git-client.js";
|
|
8
|
-
import { DEFAULT_STORAGE_ROOT } from "../../core/manifest/defaults.js";
|
|
9
8
|
import { DEFAULT_MANIFEST_FILENAME } from "../../core/manifest/schema.js";
|
|
10
9
|
import { ensurePromotionArtifact, requirePromotionPatch, requirePromotionPaths } from "../../core/engine/promotion-artifact.js";
|
|
11
10
|
import { advanceRunPhase } from "../../core/state/run-state-machine.js";
|
|
@@ -16,11 +15,16 @@ export class ManualDecisionService {
|
|
|
16
15
|
async accept(input) {
|
|
17
16
|
const repoRoot = resolve(input.repoRoot);
|
|
18
17
|
const manifestPath = resolve(repoRoot, input.manifestPath ?? DEFAULT_MANIFEST_FILENAME);
|
|
19
|
-
const
|
|
20
|
-
const
|
|
18
|
+
const { manifest } = await loadManifestFromFile(manifestPath, { repoRoot });
|
|
19
|
+
const storageRoot = join(repoRoot, manifest.storage.root);
|
|
20
|
+
const lockPath = join(storageRoot, "lock");
|
|
21
|
+
const lock = await acquireLock(lockPath, {
|
|
22
|
+
owner: {
|
|
23
|
+
operation: "manual-decision",
|
|
24
|
+
runId: input.runId,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
21
27
|
try {
|
|
22
|
-
const { manifest } = await loadManifestFromFile(manifestPath);
|
|
23
|
-
const storageRoot = join(repoRoot, manifest.storage.root);
|
|
24
28
|
const runStore = new JsonFileRunStore(join(storageRoot, "runs"));
|
|
25
29
|
const decisionStore = new JsonFileDecisionStore(join(storageRoot, "decisions"));
|
|
26
30
|
const frontierStore = new JsonFileFrontierStore(join(storageRoot, "frontier.json"));
|
|
@@ -35,6 +39,7 @@ export class ManualDecisionService {
|
|
|
35
39
|
frontierStore,
|
|
36
40
|
runs,
|
|
37
41
|
decisions,
|
|
42
|
+
mode: "repair",
|
|
38
43
|
});
|
|
39
44
|
const decisionCreatedAt = new Date().toISOString();
|
|
40
45
|
const runDir = join(storageRoot, "runs", run.runId);
|
|
@@ -111,11 +116,16 @@ export class ManualDecisionService {
|
|
|
111
116
|
async reject(input) {
|
|
112
117
|
const repoRoot = resolve(input.repoRoot);
|
|
113
118
|
const manifestPath = resolve(repoRoot, input.manifestPath ?? DEFAULT_MANIFEST_FILENAME);
|
|
114
|
-
const
|
|
115
|
-
const
|
|
119
|
+
const { manifest } = await loadManifestFromFile(manifestPath, { repoRoot });
|
|
120
|
+
const storageRoot = join(repoRoot, manifest.storage.root);
|
|
121
|
+
const lockPath = join(storageRoot, "lock");
|
|
122
|
+
const lock = await acquireLock(lockPath, {
|
|
123
|
+
owner: {
|
|
124
|
+
operation: "manual-decision",
|
|
125
|
+
runId: input.runId,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
116
128
|
try {
|
|
117
|
-
const { manifest } = await loadManifestFromFile(manifestPath);
|
|
118
|
-
const storageRoot = join(repoRoot, manifest.storage.root);
|
|
119
129
|
const runStore = new JsonFileRunStore(join(storageRoot, "runs"));
|
|
120
130
|
const decisionStore = new JsonFileDecisionStore(join(storageRoot, "decisions"));
|
|
121
131
|
const frontierStore = new JsonFileFrontierStore(join(storageRoot, "frontier.json"));
|
|
@@ -129,6 +139,7 @@ export class ManualDecisionService {
|
|
|
129
139
|
frontierStore,
|
|
130
140
|
runs,
|
|
131
141
|
decisions,
|
|
142
|
+
mode: "repair",
|
|
132
143
|
});
|
|
133
144
|
const decisionCreatedAt = new Date().toISOString();
|
|
134
145
|
const rejectedDecision = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manual-decision-service.js","sourceRoot":"","sources":["../../../src/app/services/manual-decision-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"manual-decision-service.js","sourceRoot":"","sources":["../../../src/app/services/manual-decision-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { JsonFileFrontierStore } from "../../adapters/fs/json-file-frontier-stor
|
|
|
4
4
|
import { JsonFileRunStore } from "../../adapters/fs/json-file-run-store.js";
|
|
5
5
|
import { inspectLock } from "../../adapters/fs/lockfile.js";
|
|
6
6
|
import { loadManifestFromFile } from "../../adapters/fs/manifest-loader.js";
|
|
7
|
-
import { DEFAULT_STORAGE_ROOT } from "../../core/manifest/defaults.js";
|
|
8
7
|
import { DEFAULT_MANIFEST_FILENAME } from "../../core/manifest/schema.js";
|
|
9
8
|
import { summarizeMetricDiagnostics } from "../../core/model/metric-diagnostics.js";
|
|
10
9
|
import { materializeFrontier } from "../../core/state/frontier-materializer.js";
|
|
@@ -24,6 +23,7 @@ export async function getProjectStatus(input) {
|
|
|
24
23
|
frontierStore,
|
|
25
24
|
runs,
|
|
26
25
|
decisions,
|
|
26
|
+
mode: "read_only",
|
|
27
27
|
});
|
|
28
28
|
const latestRun = runs.at(-1) ?? null;
|
|
29
29
|
const latestDecision = latestRun?.decisionId
|
|
@@ -61,6 +61,7 @@ export async function getProjectFrontier(input) {
|
|
|
61
61
|
frontierStore,
|
|
62
62
|
runs,
|
|
63
63
|
decisions,
|
|
64
|
+
mode: "read_only",
|
|
64
65
|
}),
|
|
65
66
|
};
|
|
66
67
|
}
|
|
@@ -78,6 +79,7 @@ export async function inspectRun(input) {
|
|
|
78
79
|
frontierStore,
|
|
79
80
|
runs,
|
|
80
81
|
decisions,
|
|
82
|
+
mode: "read_only",
|
|
81
83
|
});
|
|
82
84
|
const judgeRationales = Object.values(run.metrics)
|
|
83
85
|
.flatMap((metric) => {
|
|
@@ -144,12 +146,12 @@ export async function inspectRun(input) {
|
|
|
144
146
|
async function loadProjectStores(input) {
|
|
145
147
|
const repoRoot = resolve(input.repoRoot);
|
|
146
148
|
const manifestPath = resolve(repoRoot, input.manifestPath ?? DEFAULT_MANIFEST_FILENAME);
|
|
147
|
-
const loadedManifest = await loadManifestFromFile(manifestPath);
|
|
149
|
+
const loadedManifest = await loadManifestFromFile(manifestPath, { repoRoot });
|
|
148
150
|
const storageRoot = join(repoRoot, loadedManifest.manifest.storage.root);
|
|
149
151
|
return {
|
|
150
152
|
manifestPath: loadedManifest.path,
|
|
151
153
|
manifest: loadedManifest.manifest,
|
|
152
|
-
lockPath: join(
|
|
154
|
+
lockPath: join(storageRoot, "lock"),
|
|
153
155
|
runStore: new JsonFileRunStore(join(storageRoot, "runs")),
|
|
154
156
|
decisionStore: new JsonFileDecisionStore(join(storageRoot, "decisions")),
|
|
155
157
|
frontierStore: new JsonFileFrontierStore(join(storageRoot, "frontier.json")),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-state-service.js","sourceRoot":"","sources":["../../../src/app/services/project-state-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAyB,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"project-state-service.js","sourceRoot":"","sources":["../../../src/app/services/project-state-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ResearchProjectDefaultsRecord } from "../../core/model/research-project-defaults.js";
|
|
2
|
+
import type { ResearchSessionRecord } from "../../core/model/research-session.js";
|
|
3
|
+
import type { ResearchProjectDefaultsStore } from "../../core/ports/research-project-defaults-store.js";
|
|
4
|
+
export interface ResearchProjectDefaultsServiceDependencies {
|
|
5
|
+
now?: () => Date;
|
|
6
|
+
createStore?: (filePath: string) => ResearchProjectDefaultsStore;
|
|
7
|
+
}
|
|
8
|
+
export declare class ResearchProjectDefaultsService {
|
|
9
|
+
private readonly now;
|
|
10
|
+
private readonly createStore;
|
|
11
|
+
constructor(dependencies?: ResearchProjectDefaultsServiceDependencies);
|
|
12
|
+
loadForRepo(repoRoot: string): Promise<ResearchProjectDefaultsRecord | null>;
|
|
13
|
+
saveForSession(input: {
|
|
14
|
+
repoRoot: string;
|
|
15
|
+
session: ResearchSessionRecord;
|
|
16
|
+
}): Promise<ResearchProjectDefaultsRecord>;
|
|
17
|
+
private resolveStore;
|
|
18
|
+
}
|