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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/cli/commands/inspect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/cli/commands/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CommandIO } from "./run.js";
|
|
3
|
+
import { ResearchSessionLaunchService } from "../../app/services/research-session-launch-service.js";
|
|
4
|
+
import { runResumeCommand } from "./resume.js";
|
|
5
|
+
import { type ResearchSessionShell } from "../tui/research-session-shell.js";
|
|
6
|
+
export interface LaunchCommandOptions {
|
|
7
|
+
repoRoot?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface LaunchCommandDependencies {
|
|
11
|
+
launchService?: Pick<ResearchSessionLaunchService, "launch">;
|
|
12
|
+
openShell?: ResearchSessionShell;
|
|
13
|
+
resumeCommand?: typeof runResumeCommand;
|
|
14
|
+
}
|
|
15
|
+
export declare function runLaunchCommand(goal: string | undefined, options?: LaunchCommandOptions, io?: CommandIO, dependencies?: LaunchCommandDependencies): Promise<number>;
|
|
16
|
+
export declare function registerLaunchCommand(program: Command, executeLaunchCommand?: typeof runLaunchCommand): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ResearchSessionLaunchService } from "../../app/services/research-session-launch-service.js";
|
|
2
|
+
import { runResumeCommand } from "./resume.js";
|
|
3
|
+
import { openResearchSessionShell, } from "../tui/research-session-shell.js";
|
|
4
|
+
const defaultCommandIO = {
|
|
5
|
+
stdout: (message) => {
|
|
6
|
+
process.stdout.write(`${message}\n`);
|
|
7
|
+
},
|
|
8
|
+
stderr: (message) => {
|
|
9
|
+
process.stderr.write(`${message}\n`);
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
export async function runLaunchCommand(goal, options = {}, io = defaultCommandIO, dependencies = {}) {
|
|
13
|
+
try {
|
|
14
|
+
const service = dependencies.launchService ?? new ResearchSessionLaunchService();
|
|
15
|
+
const result = await service.launch({
|
|
16
|
+
goal: goal ?? "",
|
|
17
|
+
repoRoot: options.repoRoot ?? process.cwd(),
|
|
18
|
+
});
|
|
19
|
+
if (options.json) {
|
|
20
|
+
io.stdout(JSON.stringify(result, null, 2));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const openShell = dependencies.openShell ?? openResearchSessionShell;
|
|
24
|
+
const shellResult = await openShell(result, io);
|
|
25
|
+
const resumeSelection = resolveResumeSelection(shellResult);
|
|
26
|
+
if (resumeSelection) {
|
|
27
|
+
const resumeCommand = dependencies.resumeCommand ?? runResumeCommand;
|
|
28
|
+
return resumeCommand(resumeSelection.sessionId, {
|
|
29
|
+
repoRoot: result.repoRoot,
|
|
30
|
+
}, io);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const message = error instanceof Error ? error.message : "Failed to launch research session";
|
|
37
|
+
if (options.json) {
|
|
38
|
+
io.stderr(JSON.stringify({ ok: false, error: message }, null, 2));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
io.stderr(message);
|
|
42
|
+
}
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function resolveResumeSelection(shellResult) {
|
|
47
|
+
if (!shellResult) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return shellResult.entrySelection === "resume" ? shellResult : undefined;
|
|
51
|
+
}
|
|
52
|
+
export function registerLaunchCommand(program, executeLaunchCommand = runLaunchCommand) {
|
|
53
|
+
program
|
|
54
|
+
.command("launch")
|
|
55
|
+
.description("Create or refresh the v1 orchestrated research session and open the TUI shell.")
|
|
56
|
+
.argument("<goal>", "Goal to pursue through the v1 TUI research orchestrator")
|
|
57
|
+
.option("--json", "Emit machine-readable output instead of opening the TUI shell", false)
|
|
58
|
+
.action(async (goal, options) => {
|
|
59
|
+
const exitCode = await executeLaunchCommand(goal, {
|
|
60
|
+
...options,
|
|
61
|
+
repoRoot: process.cwd(),
|
|
62
|
+
});
|
|
63
|
+
if (exitCode !== 0) {
|
|
64
|
+
process.exitCode = exitCode;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uDAAuD,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,wBAAwB,GAGzB,MAAM,kCAAkC,CAAC;AAa1C,MAAM,gBAAgB,GAAc;IAClC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACvC,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAwB,EACxB,UAAgC,EAAE,EAClC,KAAgB,gBAAgB,EAChC,eAA0C,EAAE;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,IAAI,IAAI,4BAA4B,EAAE,CAAC;QACjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE;SAC5C,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,wBAAwB,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;YAC5D,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,IAAI,gBAAgB,CAAC;gBACrE,OAAO,aAAa,CAClB,eAAe,CAAC,SAAS,EACzB;oBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,EACD,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAAC;QAC7F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,WAAsD;IAEtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,uBAAgD,gBAAgB;IAEhE,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,QAAQ,CAAC,QAAQ,EAAE,yDAAyD,CAAC;SAC7E,MAAM,CAAC,QAAQ,EAAE,+DAA+D,EAAE,KAAK,CAAC;SACxF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA6B,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE;YAChD,GAAG,OAAO;YACV,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function formatProposalDisplayLines(proposal, label) {
|
|
2
|
+
const lines = [`${label}: ${proposal.proposerType}`];
|
|
3
|
+
const metadata = proposal.adapterMetadata;
|
|
4
|
+
if (metadata?.adapter === "codex_cli") {
|
|
5
|
+
lines.push(`${label} invocation: session ${metadata.invocation.sessionId} via ${formatCommand(metadata.invocation.command, metadata.invocation.args)}`);
|
|
6
|
+
lines.push(`${label} outcome: ${formatCodexCliOutcome(metadata.outcome)}`);
|
|
7
|
+
}
|
|
8
|
+
return lines;
|
|
9
|
+
}
|
|
10
|
+
function formatCommand(command, args) {
|
|
11
|
+
return [command, ...args].join(" ");
|
|
12
|
+
}
|
|
13
|
+
function formatCodexCliOutcome(outcome) {
|
|
14
|
+
const exitCode = outcome.code ?? "null";
|
|
15
|
+
const signal = outcome.signal ?? "none";
|
|
16
|
+
return `${outcome.kind} code=${exitCode} signal=${signal} duration=${outcome.durationMs}ms`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=proposer-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposer-display.js","sourceRoot":"","sources":["../../../src/cli/commands/proposer-display.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CACxC,QAA+B,EAC/B,KAAa;IAEb,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC;IAE1C,IAAI,QAAQ,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,wBAAwB,QAAQ,CAAC,UAAU,CAAC,SAAS,QAAQ,aAAa,CAChF,QAAQ,CAAC,UAAU,CAAC,OAAO,EAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CACzB,EAAE,CACJ,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAc;IACpD,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA4G;IAE5G,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,IAAI,SAAS,QAAQ,WAAW,MAAM,aAAa,OAAO,CAAC,UAAU,IAAI,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { ResearchSessionRepository } from "../../core/ports/research-session-repository.js";
|
|
3
|
+
import { ResearchSessionInteractiveService } from "../../app/services/research-session-interactive-service.js";
|
|
4
|
+
import type { CommandIO } from "./run.js";
|
|
5
|
+
export interface ResumeCommandOptions {
|
|
6
|
+
repoRoot?: string;
|
|
7
|
+
json?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ResumeCommandDependencies {
|
|
10
|
+
interactiveSessionService?: Pick<ResearchSessionInteractiveService, "continueSession">;
|
|
11
|
+
createRepository?: (sessionsRoot: string) => Pick<ResearchSessionRepository, "loadSession" | "loadSessionMetadata" | "querySessions" | "querySessionMetadata">;
|
|
12
|
+
}
|
|
13
|
+
export declare function runResumeCommand(sessionIdentity: string, options?: ResumeCommandOptions, io?: CommandIO, dependencies?: ResumeCommandDependencies): Promise<number>;
|
|
14
|
+
export declare function registerResumeCommand(program: Command, executeResumeCommand?: typeof runResumeCommand): void;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { JsonFileResearchSessionRepository } from "../../adapters/fs/json-file-research-session-repository.js";
|
|
4
|
+
import { DEFAULT_STORAGE_ROOT } from "../../core/manifest/defaults.js";
|
|
5
|
+
import { RESUMABLE_RESEARCH_SESSION_STATUSES, } from "../../core/model/research-session.js";
|
|
6
|
+
import { ResearchSessionInteractiveService } from "../../app/services/research-session-interactive-service.js";
|
|
7
|
+
const defaultCommandIO = {
|
|
8
|
+
stdout: (message) => {
|
|
9
|
+
process.stdout.write(`${message}\n`);
|
|
10
|
+
},
|
|
11
|
+
stderr: (message) => {
|
|
12
|
+
process.stderr.write(`${message}\n`);
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export async function runResumeCommand(sessionIdentity, options = {}, io = defaultCommandIO, dependencies = {}) {
|
|
16
|
+
try {
|
|
17
|
+
const repoRoot = await resolveCanonicalRepoRoot(options.repoRoot ?? process.cwd());
|
|
18
|
+
const createRepository = dependencies.createRepository ??
|
|
19
|
+
((sessionsRoot) => new JsonFileResearchSessionRepository(sessionsRoot));
|
|
20
|
+
const resolvedSessionId = await resolveSessionIdentity(sessionIdentity, repoRoot, createRepository);
|
|
21
|
+
const interactiveSessionService = dependencies.interactiveSessionService ?? new ResearchSessionInteractiveService();
|
|
22
|
+
const result = await interactiveSessionService.continueSession({
|
|
23
|
+
repoRoot,
|
|
24
|
+
sessionId: resolvedSessionId,
|
|
25
|
+
});
|
|
26
|
+
if (options.json) {
|
|
27
|
+
io.stdout(JSON.stringify(result, null, 2));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
io.stdout(`Session: ${result.sessionId}`);
|
|
31
|
+
io.stdout(`Lifecycle evidence: ${result.lifecyclePath}`);
|
|
32
|
+
if (result.finalized.step === "session_interrupted") {
|
|
33
|
+
io.stdout("Session ended before a completed cycle checkpoint and is awaiting resume.");
|
|
34
|
+
}
|
|
35
|
+
else if (result.finalized.step === "session_completed") {
|
|
36
|
+
io.stdout("Session reached goal_achieved and closed cleanly.");
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
io.stdout("Session ended without a resumable checkpoint.");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : "Failed to resume research session";
|
|
46
|
+
if (options.json) {
|
|
47
|
+
io.stderr(JSON.stringify({ ok: false, error: message }, null, 2));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
io.stderr(message);
|
|
51
|
+
}
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function resolveCanonicalRepoRoot(repoRoot) {
|
|
56
|
+
const resolvedRoot = resolve(repoRoot);
|
|
57
|
+
const repoStats = await stat(resolvedRoot).catch(() => null);
|
|
58
|
+
if (!repoStats?.isDirectory()) {
|
|
59
|
+
throw new Error(`Working directory is not a directory: ${resolvedRoot}`);
|
|
60
|
+
}
|
|
61
|
+
return realpath(resolvedRoot);
|
|
62
|
+
}
|
|
63
|
+
async function resolveSessionIdentity(sessionIdentity, repoRoot, createRepository) {
|
|
64
|
+
const normalizedIdentity = sessionIdentity.trim();
|
|
65
|
+
if (!normalizedIdentity) {
|
|
66
|
+
throw new Error("Session identity is required");
|
|
67
|
+
}
|
|
68
|
+
const repository = createRepository(join(repoRoot, DEFAULT_STORAGE_ROOT, "sessions"));
|
|
69
|
+
if (normalizedIdentity === "latest") {
|
|
70
|
+
return resolveLatestSessionId(repository, repoRoot);
|
|
71
|
+
}
|
|
72
|
+
const exact = (await repository.loadSessionMetadata?.(normalizedIdentity)) ?? (await repository.loadSession(normalizedIdentity));
|
|
73
|
+
if (exact) {
|
|
74
|
+
return exact.sessionId;
|
|
75
|
+
}
|
|
76
|
+
const sessions = await queryResumableSessionMetadata(repository, repoRoot);
|
|
77
|
+
const prefixMatches = sessions.filter((session) => session.sessionId.startsWith(normalizedIdentity));
|
|
78
|
+
if (prefixMatches.length === 1) {
|
|
79
|
+
return prefixMatches[0]?.sessionId ?? normalizedIdentity;
|
|
80
|
+
}
|
|
81
|
+
if (prefixMatches.length > 1) {
|
|
82
|
+
const matchingIds = prefixMatches.map((session) => session.sessionId).join(", ");
|
|
83
|
+
throw new Error(`Session identity "${normalizedIdentity}" is ambiguous: ${matchingIds}`);
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`Session not found: ${normalizedIdentity}`);
|
|
86
|
+
}
|
|
87
|
+
async function resolveLatestSessionId(repository, repoRoot) {
|
|
88
|
+
const sessions = await queryResumableSessionMetadata(repository, repoRoot);
|
|
89
|
+
const latest = [...sessions].sort(compareSessionsByUpdatedAtDesc)[0];
|
|
90
|
+
if (!latest) {
|
|
91
|
+
throw new Error(`No resumable research sessions found in ${repoRoot}`);
|
|
92
|
+
}
|
|
93
|
+
return latest.sessionId;
|
|
94
|
+
}
|
|
95
|
+
async function queryResumableSessionMetadata(repository, repoRoot) {
|
|
96
|
+
if (repository.querySessionMetadata) {
|
|
97
|
+
return repository.querySessionMetadata({
|
|
98
|
+
workingDirectory: repoRoot,
|
|
99
|
+
statuses: [...RESUMABLE_RESEARCH_SESSION_STATUSES],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
const sessions = await repository.querySessions({
|
|
103
|
+
workingDirectory: repoRoot,
|
|
104
|
+
statuses: [...RESUMABLE_RESEARCH_SESSION_STATUSES],
|
|
105
|
+
});
|
|
106
|
+
return sessions.map((session) => ({
|
|
107
|
+
sessionId: session.sessionId,
|
|
108
|
+
updatedAt: session.updatedAt,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
function compareSessionsByUpdatedAtDesc(left, right) {
|
|
112
|
+
const updatedAtDelta = Date.parse(right.updatedAt) - Date.parse(left.updatedAt);
|
|
113
|
+
if (updatedAtDelta !== 0) {
|
|
114
|
+
return updatedAtDelta;
|
|
115
|
+
}
|
|
116
|
+
return right.sessionId.localeCompare(left.sessionId);
|
|
117
|
+
}
|
|
118
|
+
export function registerResumeCommand(program, executeResumeCommand = runResumeCommand) {
|
|
119
|
+
program
|
|
120
|
+
.command("resume")
|
|
121
|
+
.description("Resume a persisted TUI research session from its last completed cycle checkpoint.")
|
|
122
|
+
.argument("<sessionId>", "Persisted research session identifier")
|
|
123
|
+
.option("--json", "Emit machine-readable output instead of terminal-oriented status lines", false)
|
|
124
|
+
.action(async (sessionId, options) => {
|
|
125
|
+
const exitCode = await executeResumeCommand(sessionId, {
|
|
126
|
+
...options,
|
|
127
|
+
repoRoot: process.cwd(),
|
|
128
|
+
});
|
|
129
|
+
if (exitCode !== 0) {
|
|
130
|
+
process.exitCode = exitCode;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/cli/commands/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Command } from "commander";
|
|
2
2
|
export interface RunCommandOptions {
|
|
3
3
|
path?: string;
|
|
4
4
|
cycles?: number;
|
|
@@ -12,4 +12,4 @@ export interface CommandIO {
|
|
|
12
12
|
stderr(message: string): void;
|
|
13
13
|
}
|
|
14
14
|
export declare function runRunCommand(options: RunCommandOptions, io?: CommandIO): Promise<number>;
|
|
15
|
-
export declare function registerRunCommand(program: Command): void;
|
|
15
|
+
export declare function registerRunCommand(program: Command, executeRunCommand?: typeof runRunCommand): void;
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InvalidArgumentError } from "commander";
|
|
1
2
|
import { RunLoopService } from "../../app/services/run-loop-service.js";
|
|
2
3
|
const defaultCommandIO = {
|
|
3
4
|
stdout: (message) => {
|
|
@@ -54,18 +55,28 @@ export async function runRunCommand(options, io = defaultCommandIO) {
|
|
|
54
55
|
return 1;
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
+
function parsePositiveIntegerOption(value) {
|
|
59
|
+
if (!/^[1-9]\d*$/.test(value)) {
|
|
60
|
+
throw new InvalidArgumentError("requires a positive integer");
|
|
61
|
+
}
|
|
62
|
+
const parsed = Number(value);
|
|
63
|
+
if (!Number.isSafeInteger(parsed)) {
|
|
64
|
+
throw new InvalidArgumentError("requires a positive integer");
|
|
65
|
+
}
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
export function registerRunCommand(program, executeRunCommand = runRunCommand) {
|
|
58
69
|
program
|
|
59
70
|
.command("run")
|
|
60
71
|
.description("Run one or more research cycles or keep iterating until a stop condition is met.")
|
|
61
72
|
.option("-p, --path <path>", "Path to the manifest file")
|
|
62
|
-
.option("-c, --cycles <count>", "Exact cycle count, or a max-cycle cap when used with progressive stop flags",
|
|
73
|
+
.option("-c, --cycles <count>", "Exact cycle count, or a max-cycle cap when used with progressive stop flags", parsePositiveIntegerOption)
|
|
63
74
|
.option("--until-target", "Keep running until manifest.stopping.target is met", false)
|
|
64
|
-
.option("--until-no-improve <count>", "Stop after N consecutive cycles without frontier improvement",
|
|
75
|
+
.option("--until-no-improve <count>", "Stop after N consecutive cycles without frontier improvement", parsePositiveIntegerOption)
|
|
65
76
|
.option("--fresh", "Start a fresh run instead of auto-resuming the latest recoverable run", false)
|
|
66
77
|
.option("--json", "Emit machine-readable output", false)
|
|
67
78
|
.action(async (options) => {
|
|
68
|
-
const exitCode = await
|
|
79
|
+
const exitCode = await executeRunCommand(options);
|
|
69
80
|
if (exitCode !== 0) {
|
|
70
81
|
process.exitCode = exitCode;
|
|
71
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getProjectStatus } from "../../app/services/project-state-service.js";
|
|
2
|
+
import { formatProposalDisplayLines } from "./proposer-display.js";
|
|
2
3
|
const defaultCommandIO = {
|
|
3
4
|
stdout: (message) => {
|
|
4
5
|
process.stdout.write(`${message}\n`);
|
|
@@ -23,6 +24,9 @@ export async function runStatusCommand(options, io = defaultCommandIO) {
|
|
|
23
24
|
`runtime: ${formatRuntimeSummary(status)}`,
|
|
24
25
|
`recovery: ${status.recovery.classification} (${status.recovery.nextAction})`,
|
|
25
26
|
];
|
|
27
|
+
if (status.latestRun) {
|
|
28
|
+
lines.push(...formatProposalDisplayLines(status.latestRun.proposal, "latest proposer"));
|
|
29
|
+
}
|
|
26
30
|
if (status.runtime.pid !== undefined) {
|
|
27
31
|
lines.push(`pid: ${status.runtime.pid}`);
|
|
28
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.js
CHANGED
|
@@ -1,31 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { registerDemoCommand } from "./commands/demo.js";
|
|
5
|
-
import { registerDoctorCommand } from "./commands/doctor.js";
|
|
6
|
-
import { registerFrontierCommand } from "./commands/frontier.js";
|
|
7
|
-
import { registerInitCommand } from "./commands/init.js";
|
|
8
|
-
import { registerInspectCommand } from "./commands/inspect.js";
|
|
9
|
-
import { registerRejectCommand } from "./commands/reject.js";
|
|
10
|
-
import { registerRunCommand } from "./commands/run.js";
|
|
11
|
-
import { registerServeMcpCommand } from "./commands/serve-mcp.js";
|
|
12
|
-
import { registerStatusCommand } from "./commands/status.js";
|
|
13
|
-
import { registerValidateCommand } from "./commands/validate.js";
|
|
14
|
-
const program = new Command();
|
|
15
|
-
program
|
|
16
|
-
.name("rrx")
|
|
17
|
-
.description("Local-first runtime for recursive research improvement.")
|
|
18
|
-
.version("0.1.2");
|
|
19
|
-
registerDoctorCommand(program);
|
|
20
|
-
registerValidateCommand(program);
|
|
21
|
-
registerInitCommand(program);
|
|
22
|
-
registerDemoCommand(program);
|
|
23
|
-
registerRunCommand(program);
|
|
24
|
-
registerStatusCommand(program);
|
|
25
|
-
registerFrontierCommand(program);
|
|
26
|
-
registerInspectCommand(program);
|
|
27
|
-
registerAcceptCommand(program);
|
|
28
|
-
registerRejectCommand(program);
|
|
29
|
-
registerServeMcpCommand(program);
|
|
30
|
-
await program.parseAsync(process.argv);
|
|
2
|
+
import { runCli } from "./program.js";
|
|
3
|
+
await runCli(process.argv);
|
|
31
4
|
//# sourceMappingURL=main.js.map
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { runLaunchCommand as defaultLaunchCommand } from "./commands/launch.js";
|
|
3
|
+
import { runResumeCommand as defaultResumeCommand } from "./commands/resume.js";
|
|
4
|
+
import { runRunCommand as defaultRunCommand } from "./commands/run.js";
|
|
5
|
+
type LaunchCommandHandler = typeof defaultLaunchCommand;
|
|
6
|
+
type ResumeCommandHandler = typeof defaultResumeCommand;
|
|
7
|
+
type RunCommandHandler = typeof defaultRunCommand;
|
|
8
|
+
export interface CliDependencies {
|
|
9
|
+
launchCommand?: LaunchCommandHandler;
|
|
10
|
+
resumeCommand?: ResumeCommandHandler;
|
|
11
|
+
runCommand?: RunCommandHandler;
|
|
12
|
+
}
|
|
13
|
+
export declare function createProgram(dependencies?: CliDependencies): Command;
|
|
14
|
+
export declare function runCli(argv: string[], dependencies?: CliDependencies): Promise<void>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { registerAcceptCommand } from "./commands/accept.js";
|
|
3
|
+
import { registerDemoCommand } from "./commands/demo.js";
|
|
4
|
+
import { registerDoctorCommand } from "./commands/doctor.js";
|
|
5
|
+
import { registerFrontierCommand } from "./commands/frontier.js";
|
|
6
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
7
|
+
import { registerInspectCommand } from "./commands/inspect.js";
|
|
8
|
+
import { registerLaunchCommand, runLaunchCommand as defaultLaunchCommand, } from "./commands/launch.js";
|
|
9
|
+
import { registerRejectCommand } from "./commands/reject.js";
|
|
10
|
+
import { registerResumeCommand, } from "./commands/resume.js";
|
|
11
|
+
import { registerRunCommand } from "./commands/run.js";
|
|
12
|
+
import { registerServeMcpCommand } from "./commands/serve-mcp.js";
|
|
13
|
+
import { registerStatusCommand } from "./commands/status.js";
|
|
14
|
+
import { registerValidateCommand } from "./commands/validate.js";
|
|
15
|
+
export function createProgram(dependencies = {}) {
|
|
16
|
+
const program = new Command();
|
|
17
|
+
const launchCommand = dependencies.launchCommand ?? defaultLaunchCommand;
|
|
18
|
+
program
|
|
19
|
+
.name("rrx")
|
|
20
|
+
.description("Local-first runtime for recursive research improvement.")
|
|
21
|
+
.version("0.1.4")
|
|
22
|
+
.argument("[goal]", "Goal to pursue through the v1 TUI research orchestrator")
|
|
23
|
+
.action(async (goal) => {
|
|
24
|
+
if (goal === undefined) {
|
|
25
|
+
program.outputHelp();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const exitCode = await launchCommand(goal, {
|
|
29
|
+
repoRoot: process.cwd(),
|
|
30
|
+
});
|
|
31
|
+
if (exitCode !== 0) {
|
|
32
|
+
process.exitCode = exitCode;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
registerDoctorCommand(program);
|
|
36
|
+
registerValidateCommand(program);
|
|
37
|
+
registerInitCommand(program);
|
|
38
|
+
registerDemoCommand(program);
|
|
39
|
+
registerLaunchCommand(program, launchCommand);
|
|
40
|
+
registerResumeCommand(program, dependencies.resumeCommand);
|
|
41
|
+
registerRunCommand(program, dependencies.runCommand);
|
|
42
|
+
registerStatusCommand(program);
|
|
43
|
+
registerFrontierCommand(program);
|
|
44
|
+
registerInspectCommand(program);
|
|
45
|
+
registerAcceptCommand(program);
|
|
46
|
+
registerRejectCommand(program);
|
|
47
|
+
registerServeMcpCommand(program);
|
|
48
|
+
return program;
|
|
49
|
+
}
|
|
50
|
+
export async function runCli(argv, dependencies = {}) {
|
|
51
|
+
const program = createProgram(dependencies);
|
|
52
|
+
await program.parseAsync(argv);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,IAAI,oBAAoB,GACzC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAsC,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAYjE,MAAM,UAAU,aAAa,CAAC,eAAgC,EAAE;IAC9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,IAAI,oBAAoB,CAAC;IAEzE,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,QAAQ,EAAE,yDAAyD,CAAC;SAC7E,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,EAAE;QAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE;YACzC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC9C,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3D,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACrD,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,eAAgC,EAAE;IAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ResearchSessionDraftService } from "../../app/services/research-session-draft-service.js";
|
|
2
|
+
import { ResearchSessionInteractiveService } from "../../app/services/research-session-interactive-service.js";
|
|
3
|
+
import type { ResearchSessionLaunchResult } from "../../app/services/research-session-launch-service.js";
|
|
4
|
+
import type { CommandIO } from "../commands/run.js";
|
|
5
|
+
export interface ResearchSessionShellDependencies {
|
|
6
|
+
input?: NodeJS.ReadableStream;
|
|
7
|
+
output?: NodeJS.WritableStream;
|
|
8
|
+
draftService?: Pick<ResearchSessionDraftService, "loadDraft" | "updateDraft">;
|
|
9
|
+
interactiveSessionService?: Pick<ResearchSessionInteractiveService, "launchFromDraft">;
|
|
10
|
+
createReadline?: (input: NodeJS.ReadableStream, output: NodeJS.WritableStream) => QuestioningInterface;
|
|
11
|
+
}
|
|
12
|
+
export interface ResearchSessionShellEntrySelection {
|
|
13
|
+
entrySelection: "resume";
|
|
14
|
+
sessionId: string;
|
|
15
|
+
}
|
|
16
|
+
export type ResearchSessionShell = (session: ResearchSessionLaunchResult, io: CommandIO, dependencies?: ResearchSessionShellDependencies) => Promise<ResearchSessionShellEntrySelection | void>;
|
|
17
|
+
interface QuestioningInterface {
|
|
18
|
+
question(prompt: string): Promise<string>;
|
|
19
|
+
close(): void;
|
|
20
|
+
}
|
|
21
|
+
export declare const openResearchSessionShell: ResearchSessionShell;
|
|
22
|
+
export {};
|