@triflux/remote 10.50.2 → 10.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cto/brief.mjs +0 -12
- package/cto/collect.mjs +0 -73
- package/cto/current.schema.json +0 -4
- package/cto/status.mjs +2 -50
- package/hub/index.mjs +0 -8
- package/hub/team/agent-map.json +0 -1
- package/hub/team/ansi.mjs +1 -35
- package/hub/team/backend.mjs +9 -145
- package/hub/team/cli/commands/attach.mjs +1 -17
- package/hub/team/cli/commands/control.mjs +12 -38
- package/hub/team/cli/commands/debug.mjs +1 -37
- package/hub/team/cli/commands/focus.mjs +5 -31
- package/hub/team/cli/commands/interrupt.mjs +6 -25
- package/hub/team/cli/commands/kill.mjs +1 -30
- package/hub/team/cli/commands/list.mjs +0 -16
- package/hub/team/cli/commands/send.mjs +6 -26
- package/hub/team/cli/commands/start/index.mjs +41 -133
- package/hub/team/cli/commands/start/parse-args.mjs +15 -40
- package/hub/team/cli/commands/start/start-headless.mjs +138 -105
- package/hub/team/cli/commands/start/start-mux.mjs +0 -3
- package/hub/team/cli/commands/status.mjs +2 -57
- package/hub/team/cli/commands/stop.mjs +14 -19
- package/hub/team/cli/help.mjs +4 -5
- package/hub/team/cli/manifest.mjs +5 -1
- package/hub/team/cli/render.mjs +0 -12
- package/hub/team/cli/services/hub-client.mjs +2 -88
- package/hub/team/cli/services/runtime-mode.mjs +27 -98
- package/hub/team/handoff.mjs +3 -34
- package/hub/team/headless.mjs +13 -754
- package/hub/team/orchestrator.mjs +4 -30
- package/hub/team/pane.mjs +6 -28
- package/hub/team/psmux.mjs +0 -1
- package/hub/team/remote-session.mjs +1 -2
- package/hub/team/session.mjs +7 -91
- package/hub/team/swarm-intent.mjs +0 -198
- package/hub/team/tui-core.mjs +1 -1
- package/hub/team/tui-viewer.mjs +2 -2
- package/hub/team/tui.mjs +8 -269
- package/hub/team/wt-manager.mjs +2 -2
- package/hub/workers/factory.mjs +4 -37
- package/hub/workers/lib/jsonrpc-ws-uds.mjs +0 -2
- package/package.json +1 -1
- package/scripts/lib/agent-route-policy.mjs +162 -14
- package/scripts/lib/claudemd-scanner.mjs +2 -199
- package/scripts/lib/cli-claude.mjs +0 -2
- package/scripts/lib/context.mjs +3 -19
- package/scripts/lib/env-probe.mjs +5 -64
- package/scripts/lib/gemini-profiles.mjs +2 -69
- package/scripts/lib/machine-profile.mjs +3 -17
- package/scripts/lib/mcp-filter.mjs +109 -53
- package/scripts/lib/mcp-health.mjs +2 -2
- package/scripts/lib/mcp-server-catalog.mjs +2 -2
- package/scripts/lib/psmux-info.mjs +11 -59
- package/scripts/lib/skill-template.mjs +0 -245
- package/hub/team/build-worker-prompt.mjs +0 -92
- package/hub/team/check-mcp-hub.mjs +0 -49
- package/hub/team/claude-native-bridge.mjs +0 -987
- package/hub/team/cli/commands/start/start-in-process.mjs +0 -50
- package/hub/team/cli/commands/start/start-wt.mjs +0 -86
- package/hub/team/cli/services/native-control.mjs +0 -145
- package/hub/team/codex-review.mjs +0 -520
- package/hub/team/conductor-mesh-bridge.mjs +0 -122
- package/hub/team/conductor.mjs +0 -1529
- package/hub/team/consensus-meta.mjs +0 -176
- package/hub/team/cto-pull.mjs +0 -31
- package/hub/team/daemon-pty-tmux-bridge.mjs +0 -146
- package/hub/team/dashboard.mjs +0 -322
- package/hub/team/event-log.mjs +0 -84
- package/hub/team/execution-mode.mjs +0 -324
- package/hub/team/extract-completion-payload.mjs +0 -110
- package/hub/team/headless-bridge-session.mjs +0 -17
- package/hub/team/health-probe.mjs +0 -435
- package/hub/team/interactive-native-launcher.mjs +0 -119
- package/hub/team/interactive-native-worker.mjs +0 -80
- package/hub/team/interactive-tui-transport.mjs +0 -479
- package/hub/team/launcher-template.mjs +0 -144
- package/hub/team/mcp-selector.mjs +0 -145
- package/hub/team/native-supervisor.mjs +0 -460
- package/hub/team/native.mjs +0 -727
- package/hub/team/recovery-store.mjs +0 -149
- package/hub/team/remote-probe.mjs +0 -292
- package/hub/team/remote-watcher.mjs +0 -506
- package/hub/team/runtime-strategy.mjs +0 -200
- package/hub/team/schemas/worker-completion.json +0 -39
- package/hub/team/sentinel-capture.mjs +0 -127
- package/hub/team/swarm-cli.mjs +0 -390
- package/hub/team/swarm-hypervisor.mjs +0 -2206
- package/hub/team/swarm-locks.mjs +0 -335
- package/hub/team/swarm-planner.mjs +0 -371
- package/hub/team/swarm-preflight.mjs +0 -366
- package/hub/team/swarm-reconciler.mjs +0 -242
- package/hub/team/tui-remote-adapter.mjs +0 -377
- package/hub/team/worker-completion-validator.mjs +0 -79
- package/hub/team/worktree-lifecycle.mjs +0 -639
- package/hub/team/wt-templates.json +0 -43
- package/hub/workers/antigravity-route-worker.mjs +0 -179
- package/scripts/lib/dynamic-route-cli.mjs +0 -107
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { startNativeSupervisor } from "../../services/native-control.mjs";
|
|
2
|
-
import { buildTasks } from "../../services/task-model.mjs";
|
|
3
|
-
|
|
4
|
-
export async function startInProcessTeam({
|
|
5
|
-
sessionId,
|
|
6
|
-
task,
|
|
7
|
-
lead,
|
|
8
|
-
agents,
|
|
9
|
-
subtasks,
|
|
10
|
-
hubUrl,
|
|
11
|
-
}) {
|
|
12
|
-
const { runtime, members } = await startNativeSupervisor({
|
|
13
|
-
sessionId,
|
|
14
|
-
task,
|
|
15
|
-
lead,
|
|
16
|
-
agents,
|
|
17
|
-
subtasks,
|
|
18
|
-
hubUrl,
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
if (!runtime?.controlUrl) return null;
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
sessionName: sessionId,
|
|
25
|
-
task,
|
|
26
|
-
lead,
|
|
27
|
-
agents,
|
|
28
|
-
layout: "native",
|
|
29
|
-
teammateMode: "in-process",
|
|
30
|
-
startedAt: Date.now(),
|
|
31
|
-
hubUrl,
|
|
32
|
-
members: members.map((member, index) => ({
|
|
33
|
-
role: member.role,
|
|
34
|
-
name: member.name,
|
|
35
|
-
cli: member.cli,
|
|
36
|
-
agentId: member.agentId,
|
|
37
|
-
pane: `native:${index}`,
|
|
38
|
-
subtask: member.subtask || null,
|
|
39
|
-
})),
|
|
40
|
-
panes: {},
|
|
41
|
-
tasks: buildTasks(
|
|
42
|
-
subtasks,
|
|
43
|
-
members.filter((member) => member.role === "worker"),
|
|
44
|
-
),
|
|
45
|
-
native: {
|
|
46
|
-
controlUrl: runtime.controlUrl,
|
|
47
|
-
supervisorPid: runtime.supervisorPid,
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { buildCliCommand } from "../../../pane.mjs";
|
|
2
|
-
import { createWtSession } from "../../../session.mjs";
|
|
3
|
-
import { warn } from "../../render.mjs";
|
|
4
|
-
import { toAgentId } from "../../services/member-selector.mjs";
|
|
5
|
-
import { buildTasks } from "../../services/task-model.mjs";
|
|
6
|
-
|
|
7
|
-
export async function startWtTeam({
|
|
8
|
-
sessionId,
|
|
9
|
-
task,
|
|
10
|
-
lead,
|
|
11
|
-
agents,
|
|
12
|
-
subtasks,
|
|
13
|
-
layout,
|
|
14
|
-
hubUrl,
|
|
15
|
-
}) {
|
|
16
|
-
const paneCount = agents.length + 1;
|
|
17
|
-
const effectiveLayout = layout === "Nx1" ? "Nx1" : "1xN";
|
|
18
|
-
if (layout !== effectiveLayout)
|
|
19
|
-
warn(`wt 모드에서 ${layout} 레이아웃은 미지원 — ${effectiveLayout}로 대체`);
|
|
20
|
-
console.log(` 레이아웃: ${effectiveLayout} (${paneCount} panes)`);
|
|
21
|
-
|
|
22
|
-
const session = await createWtSession(sessionId, {
|
|
23
|
-
layout: effectiveLayout,
|
|
24
|
-
paneCommands: [
|
|
25
|
-
{ title: `${sessionId}-lead`, command: buildCliCommand(lead) },
|
|
26
|
-
...agents.map((cli, index) => ({
|
|
27
|
-
title: `${sessionId}-${cli}-${index + 1}`,
|
|
28
|
-
command: buildCliCommand(cli),
|
|
29
|
-
})),
|
|
30
|
-
],
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const members = [
|
|
34
|
-
{
|
|
35
|
-
role: "lead",
|
|
36
|
-
name: "lead",
|
|
37
|
-
cli: lead,
|
|
38
|
-
pane: session.panes[0] || "wt:0",
|
|
39
|
-
agentId: toAgentId(lead, session.panes[0] || "wt:0"),
|
|
40
|
-
},
|
|
41
|
-
...agents.map((cli, index) => {
|
|
42
|
-
const pane = session.panes[index + 1] || `wt:${index + 1}`;
|
|
43
|
-
return {
|
|
44
|
-
role: "worker",
|
|
45
|
-
name: `${cli}-${index + 1}`,
|
|
46
|
-
cli,
|
|
47
|
-
pane,
|
|
48
|
-
subtask: subtasks[index],
|
|
49
|
-
agentId: toAgentId(cli, pane),
|
|
50
|
-
};
|
|
51
|
-
}),
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
return {
|
|
55
|
-
sessionName: sessionId,
|
|
56
|
-
task,
|
|
57
|
-
lead,
|
|
58
|
-
agents,
|
|
59
|
-
layout: effectiveLayout,
|
|
60
|
-
teammateMode: "wt",
|
|
61
|
-
startedAt: Date.now(),
|
|
62
|
-
hubUrl,
|
|
63
|
-
members,
|
|
64
|
-
panes: Object.fromEntries(
|
|
65
|
-
members.map((member) => [
|
|
66
|
-
member.pane,
|
|
67
|
-
{
|
|
68
|
-
role: member.role,
|
|
69
|
-
name: member.name,
|
|
70
|
-
cli: member.cli,
|
|
71
|
-
agentId: member.agentId,
|
|
72
|
-
subtask: member.subtask || null,
|
|
73
|
-
},
|
|
74
|
-
]),
|
|
75
|
-
),
|
|
76
|
-
tasks: buildTasks(
|
|
77
|
-
subtasks,
|
|
78
|
-
members.filter((member) => member.role === "worker"),
|
|
79
|
-
),
|
|
80
|
-
wt: {
|
|
81
|
-
windowId: 0,
|
|
82
|
-
layout: effectiveLayout,
|
|
83
|
-
paneCount: session.paneCount,
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { buildExecArgs } from "@triflux/core/hub/codex-adapter.mjs";
|
|
5
|
-
import { buildLeadPrompt, buildPrompt } from "../../orchestrator.mjs";
|
|
6
|
-
import { HUB_PID_DIR, PKG_ROOT } from "./state-store.mjs";
|
|
7
|
-
|
|
8
|
-
export function buildNativeCliCommand(cli) {
|
|
9
|
-
switch (cli) {
|
|
10
|
-
case "codex":
|
|
11
|
-
return buildExecArgs({});
|
|
12
|
-
case "gemini":
|
|
13
|
-
return "gemini";
|
|
14
|
-
case "claude":
|
|
15
|
-
return "claude";
|
|
16
|
-
default:
|
|
17
|
-
return cli;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function startNativeSupervisor({
|
|
22
|
-
sessionId,
|
|
23
|
-
task,
|
|
24
|
-
lead,
|
|
25
|
-
agents,
|
|
26
|
-
subtasks,
|
|
27
|
-
hubUrl,
|
|
28
|
-
}) {
|
|
29
|
-
const configPath = join(HUB_PID_DIR, `team-native-${sessionId}.config.json`);
|
|
30
|
-
const runtimePath = join(
|
|
31
|
-
HUB_PID_DIR,
|
|
32
|
-
`team-native-${sessionId}.runtime.json`,
|
|
33
|
-
);
|
|
34
|
-
const logsDir = join(HUB_PID_DIR, "team-logs", sessionId);
|
|
35
|
-
mkdirSync(logsDir, { recursive: true });
|
|
36
|
-
|
|
37
|
-
const leadMember = {
|
|
38
|
-
role: "lead",
|
|
39
|
-
name: "lead",
|
|
40
|
-
cli: lead,
|
|
41
|
-
agentId: `${lead}-lead`,
|
|
42
|
-
command: buildNativeCliCommand(lead),
|
|
43
|
-
};
|
|
44
|
-
const workers = agents.map((cli, index) => ({
|
|
45
|
-
role: "worker",
|
|
46
|
-
name: `${cli}-${index + 1}`,
|
|
47
|
-
cli,
|
|
48
|
-
agentId: `${cli}-w${index + 1}`,
|
|
49
|
-
command: buildNativeCliCommand(cli),
|
|
50
|
-
subtask: subtasks[index],
|
|
51
|
-
}));
|
|
52
|
-
const members = [
|
|
53
|
-
{
|
|
54
|
-
...leadMember,
|
|
55
|
-
prompt: buildLeadPrompt(task, {
|
|
56
|
-
agentId: leadMember.agentId,
|
|
57
|
-
hubUrl,
|
|
58
|
-
teammateMode: "in-process",
|
|
59
|
-
workers: workers.map((worker) => ({
|
|
60
|
-
agentId: worker.agentId,
|
|
61
|
-
cli: worker.cli,
|
|
62
|
-
subtask: worker.subtask,
|
|
63
|
-
})),
|
|
64
|
-
}),
|
|
65
|
-
},
|
|
66
|
-
...workers.map((worker) => ({
|
|
67
|
-
...worker,
|
|
68
|
-
prompt: buildPrompt(worker.subtask, {
|
|
69
|
-
cli: worker.cli,
|
|
70
|
-
agentId: worker.agentId,
|
|
71
|
-
hubUrl,
|
|
72
|
-
}),
|
|
73
|
-
})),
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
writeFileSync(
|
|
77
|
-
configPath,
|
|
78
|
-
JSON.stringify(
|
|
79
|
-
{
|
|
80
|
-
sessionName: sessionId,
|
|
81
|
-
hubUrl,
|
|
82
|
-
workdir: process.cwd(),
|
|
83
|
-
startupDelayMs: 3000,
|
|
84
|
-
logsDir,
|
|
85
|
-
runtimeFile: runtimePath,
|
|
86
|
-
members,
|
|
87
|
-
},
|
|
88
|
-
null,
|
|
89
|
-
2,
|
|
90
|
-
) + "\n",
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
const child = spawn(
|
|
94
|
-
process.execPath,
|
|
95
|
-
[
|
|
96
|
-
join(PKG_ROOT, "hub", "team", "native-supervisor.mjs"),
|
|
97
|
-
"--config",
|
|
98
|
-
configPath,
|
|
99
|
-
],
|
|
100
|
-
{
|
|
101
|
-
detached: true,
|
|
102
|
-
stdio: "ignore",
|
|
103
|
-
env: { ...process.env },
|
|
104
|
-
windowsHide: true,
|
|
105
|
-
},
|
|
106
|
-
);
|
|
107
|
-
child.unref();
|
|
108
|
-
|
|
109
|
-
const deadline = Date.now() + 5000;
|
|
110
|
-
while (Date.now() < deadline) {
|
|
111
|
-
if (existsSync(runtimePath)) {
|
|
112
|
-
try {
|
|
113
|
-
const runtime = JSON.parse(readFileSync(runtimePath, "utf8"));
|
|
114
|
-
return { runtime, members };
|
|
115
|
-
} catch {}
|
|
116
|
-
}
|
|
117
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return { runtime: null, members };
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export async function nativeRequest(state, path, body = {}) {
|
|
124
|
-
if (!state?.native?.controlUrl) return null;
|
|
125
|
-
try {
|
|
126
|
-
const res = await fetch(`${state.native.controlUrl}${path}`, {
|
|
127
|
-
method: "POST",
|
|
128
|
-
headers: { "Content-Type": "application/json" },
|
|
129
|
-
body: JSON.stringify(body),
|
|
130
|
-
});
|
|
131
|
-
return await res.json();
|
|
132
|
-
} catch {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export async function nativeGetStatus(state) {
|
|
138
|
-
if (!state?.native?.controlUrl) return null;
|
|
139
|
-
try {
|
|
140
|
-
const res = await fetch(`${state.native.controlUrl}/status`);
|
|
141
|
-
return await res.json();
|
|
142
|
-
} catch {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
}
|