cueloop 0.1.0-alpha.110 → 0.1.0-alpha.112
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/package.json +6 -6
- package/src/agent-harness.ts +24 -1
- package/src/daemon-command.ts +7 -0
- package/src/main.ts +7 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueloop",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.112",
|
|
4
4
|
"description": "Terminal review surface for coding agents: annotate plans and diffs, return a message, send structured feedback back",
|
|
5
5
|
"homepage": "https://github.com/mmurakaru/cueloop#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"build:binary": "bun build --compile --bytecode --format=esm --minify --external cpu-features ./src/main.ts --outfile dist/cueloop"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@cueloop/adapters": "0.1.0-alpha.
|
|
34
|
-
"@cueloop/client": "0.1.0-alpha.
|
|
35
|
-
"@cueloop/daemon": "0.1.0-alpha.
|
|
36
|
-
"@cueloop/extension-api": "0.1.0-alpha.
|
|
37
|
-
"@cueloop/schema": "0.1.0-alpha.
|
|
33
|
+
"@cueloop/adapters": "0.1.0-alpha.112",
|
|
34
|
+
"@cueloop/client": "0.1.0-alpha.112",
|
|
35
|
+
"@cueloop/daemon": "0.1.0-alpha.112",
|
|
36
|
+
"@cueloop/extension-api": "0.1.0-alpha.112",
|
|
37
|
+
"@cueloop/schema": "0.1.0-alpha.112",
|
|
38
38
|
"@modelcontextprotocol/server": "2.4.0",
|
|
39
39
|
"@valibot/to-json-schema": "1.8.0",
|
|
40
40
|
"valibot": "^1.5.0"
|
package/src/agent-harness.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { createPiHarness } from "@cueloop/adapters/pi/durable-harness";
|
|
|
2
2
|
import { cueloopHome } from "@cueloop/daemon";
|
|
3
3
|
import { createThreadHarness } from "@cueloop/adapters/thread-harness";
|
|
4
4
|
import { createFxHarness } from "@cueloop/adapters/fx/harness";
|
|
5
|
+
import { resolveHerdrAcp } from "@cueloop/adapters/herdr-acp";
|
|
5
6
|
import { loadConfig } from "@cueloop/client/config";
|
|
6
7
|
import type { AgentHarnessAdapter } from "@cueloop/schema";
|
|
7
8
|
|
|
@@ -19,6 +20,15 @@ export function threadAgentEnabled(repoRoot: string): boolean {
|
|
|
19
20
|
return loadConfig({ repoRoot }).experimental.threadAgent;
|
|
20
21
|
}
|
|
21
22
|
|
|
23
|
+
/** The herdr-core ACP backend is opt-in. `CUELOOP_HERDR_ACP=0` forces it off. */
|
|
24
|
+
export function herdrAcpEnabled(repoRoot?: string): boolean {
|
|
25
|
+
if (process.env.CUELOOP_HERDR_ACP === "0") return false;
|
|
26
|
+
|
|
27
|
+
if (process.env.CUELOOP_HERDR_ACP === "1") return true;
|
|
28
|
+
|
|
29
|
+
return loadConfig({ repoRoot }).experimental.herdrAcp;
|
|
30
|
+
}
|
|
31
|
+
|
|
22
32
|
export function installedAgentHarnesses() {
|
|
23
33
|
return {
|
|
24
34
|
pi: createPiHarness({
|
|
@@ -30,11 +40,24 @@ export function installedAgentHarnesses() {
|
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
function fxHarness(): AgentHarnessAdapter {
|
|
43
|
+
const command = [process.env.CUELOOP_FX_EXECUTABLE ?? "fx", "acp"];
|
|
44
|
+
const herdr = resolveHerdrAcp({
|
|
45
|
+
enabled: herdrAcpEnabled(),
|
|
46
|
+
home: cueloopHome(),
|
|
47
|
+
command,
|
|
48
|
+
});
|
|
49
|
+
|
|
33
50
|
return createThreadHarness({
|
|
34
51
|
home: cueloopHome(),
|
|
52
|
+
prepareAcp: herdr?.prepare,
|
|
53
|
+
createAcp: herdr?.createAcp,
|
|
54
|
+
onRemove: herdr?.remove,
|
|
35
55
|
backend: createFxHarness({
|
|
36
|
-
command
|
|
56
|
+
command,
|
|
37
57
|
defaults: (cwd) => loadConfig({ repoRoot: cwd }).thread.fx,
|
|
58
|
+
openAcp: herdr?.openAcp,
|
|
59
|
+
existingSession: herdr?.existingSession,
|
|
60
|
+
recoverPrompt: herdr?.recoverPrompt,
|
|
38
61
|
}),
|
|
39
62
|
});
|
|
40
63
|
}
|
package/src/daemon-command.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { OwnerAgentRelay } from "@cueloop/adapters/owner-agent-relay";
|
|
2
|
+
|
|
3
|
+
/** Long-lived ACP relay. hc keeps this process up while the daemon is down. */
|
|
4
|
+
export async function herdrAcpRelayCommand(argv: string[]): Promise<void> {
|
|
5
|
+
const { runHerdrAcpRelay } = await import("@cueloop/adapters/herdr-acp");
|
|
6
|
+
|
|
7
|
+
await runHerdrAcpRelay(argv);
|
|
8
|
+
}
|
|
2
9
|
/** Compose the local daemon with its installed harness adapters at the CLI boundary. */
|
|
3
10
|
export async function daemonCommand(argv: string[]): Promise<number> {
|
|
4
11
|
const { DaemonServer } = await import("@cueloop/daemon");
|
package/src/main.ts
CHANGED
|
@@ -30,6 +30,13 @@ import { openReview } from "@cueloop/daemon/thread-review";
|
|
|
30
30
|
// The CLI owns adapter composition; the daemon package still starts independently.
|
|
31
31
|
process.env.CUELOOP_DAEMON_ENTRY = import.meta.path;
|
|
32
32
|
|
|
33
|
+
if (process.argv[2] === "herdr-acp-relay") {
|
|
34
|
+
const { herdrAcpRelayCommand } = await import("./daemon-command");
|
|
35
|
+
|
|
36
|
+
await herdrAcpRelayCommand(process.argv.slice(3));
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
|
|
33
40
|
const harnessSelection = parseHarnessSelection(process.argv.slice(2));
|
|
34
41
|
const argv = harnessSelection.args;
|
|
35
42
|
|