@suzuke/agend 1.0.0 → 1.1.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/README.md +50 -528
- package/README.zh-TW.md +49 -474
- package/dist/channel/adapters/discord.js +1 -1
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/factory.js +2 -2
- package/dist/channel/factory.js.map +1 -1
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +14 -2
- package/dist/daemon.js +119 -46
- package/dist/daemon.js.map +1 -1
- package/dist/export-import.js +2 -2
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-manager.d.ts +1 -0
- package/dist/fleet-manager.js +15 -9
- package/dist/fleet-manager.js.map +1 -1
- package/dist/setup-wizard.js +2 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tmux-control.d.ts +49 -0
- package/dist/tmux-control.js +184 -0
- package/dist/tmux-control.js.map +1 -0
- package/dist/tmux-manager.js +3 -2
- package/dist/tmux-manager.js.map +1 -1
- package/package.json +3 -5
- package/dist/approval/approval-server.d.ts +0 -30
- package/dist/approval/approval-server.js +0 -156
- package/dist/approval/approval-server.js.map +0 -1
- package/dist/approval/tmux-prompt-detector.d.ts +0 -34
- package/dist/approval/tmux-prompt-detector.js +0 -264
- package/dist/approval/tmux-prompt-detector.js.map +0 -1
- package/dist/backend/approval-strategy.d.ts +0 -14
- package/dist/backend/approval-strategy.js +0 -2
- package/dist/backend/approval-strategy.js.map +0 -1
- package/dist/backend/hook-based-approval.d.ts +0 -20
- package/dist/backend/hook-based-approval.js +0 -41
- package/dist/backend/hook-based-approval.js.map +0 -1
- package/dist/container-manager.d.ts +0 -24
- package/dist/container-manager.js +0 -148
- package/dist/container-manager.js.map +0 -1
- package/dist/db.d.ts +0 -10
- package/dist/db.js +0 -43
- package/dist/db.js.map +0 -1
- package/dist/install-recorder.d.ts +0 -30
- package/dist/install-recorder.js +0 -159
- package/dist/install-recorder.js.map +0 -1
- package/dist/meeting/orchestrator.d.ts +0 -30
- package/dist/meeting/orchestrator.js +0 -355
- package/dist/meeting/orchestrator.js.map +0 -1
- package/dist/meeting/prompt-builder.d.ts +0 -12
- package/dist/meeting/prompt-builder.js +0 -96
- package/dist/meeting/prompt-builder.js.map +0 -1
- package/dist/meeting/role-assigner.d.ts +0 -2
- package/dist/meeting/role-assigner.js +0 -25
- package/dist/meeting/role-assigner.js.map +0 -1
- package/dist/meeting/types.d.ts +0 -21
- package/dist/meeting/types.js +0 -2
- package/dist/meeting/types.js.map +0 -1
- package/dist/meeting-manager.d.ts +0 -10
- package/dist/meeting-manager.js +0 -38
- package/dist/meeting-manager.js.map +0 -1
- package/dist/memory-layer.d.ts +0 -13
- package/dist/memory-layer.js +0 -44
- package/dist/memory-layer.js.map +0 -1
- package/dist/plugin/agend/.mcp.json +0 -9
- package/dist/plugin/ccd-channel/.claude-plugin/plugin.json +0 -5
- package/dist/plugin/ccd-channel/.mcp.json +0 -9
- package/dist/process-manager.d.ts +0 -31
- package/dist/process-manager.js +0 -264
- package/dist/process-manager.js.map +0 -1
package/dist/install-recorder.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
2
|
-
const INSTALL_PATTERNS = [
|
|
3
|
-
{
|
|
4
|
-
type: "pip",
|
|
5
|
-
pattern: /pip3?\s+install\s+(.+)/,
|
|
6
|
-
extract: (m) => {
|
|
7
|
-
const tokens = m[1].split(/\s+/);
|
|
8
|
-
const skipNext = new Set(["-r", "-c", "-e", "--requirement", "--constraint", "--editable"]);
|
|
9
|
-
const packages = [];
|
|
10
|
-
let skip = false;
|
|
11
|
-
for (const t of tokens) {
|
|
12
|
-
if (skip) {
|
|
13
|
-
skip = false;
|
|
14
|
-
continue;
|
|
15
|
-
}
|
|
16
|
-
if (skipNext.has(t)) {
|
|
17
|
-
skip = true;
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
if (t.startsWith("-") || t.startsWith("--"))
|
|
21
|
-
continue;
|
|
22
|
-
if (t === "." || t.startsWith("./") || t.startsWith("/"))
|
|
23
|
-
continue; // local paths
|
|
24
|
-
if (t.includes("://") || t.includes("+https"))
|
|
25
|
-
continue; // URLs
|
|
26
|
-
if (t.endsWith(".txt") || t.endsWith(".cfg") || t.endsWith(".toml"))
|
|
27
|
-
continue; // files
|
|
28
|
-
packages.push(t);
|
|
29
|
-
}
|
|
30
|
-
return packages;
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
type: "apt",
|
|
35
|
-
pattern: /apt(?:-get)?\s+install\s+(.+)/,
|
|
36
|
-
extract: (m) => m[1].split(/\s+/).filter(p => !p.startsWith("-") && !p.startsWith("--")),
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
type: "cargo",
|
|
40
|
-
pattern: /cargo\s+install\s+(.+)/,
|
|
41
|
-
extract: (m) => {
|
|
42
|
-
const tokens = m[1].split(/\s+/);
|
|
43
|
-
const skipNext = new Set(["--path", "--git", "--branch", "--tag", "--rev", "--root", "--index", "--registry"]);
|
|
44
|
-
const packages = [];
|
|
45
|
-
let skip = false;
|
|
46
|
-
for (const t of tokens) {
|
|
47
|
-
if (skip) {
|
|
48
|
-
skip = false;
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (skipNext.has(t)) {
|
|
52
|
-
skip = true;
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (t.startsWith("-") || t.startsWith("--"))
|
|
56
|
-
continue;
|
|
57
|
-
if (t.includes("://") || t.includes("/"))
|
|
58
|
-
continue; // URLs and paths
|
|
59
|
-
packages.push(t);
|
|
60
|
-
}
|
|
61
|
-
return packages;
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
type: "npm",
|
|
66
|
-
pattern: /npm\s+install\s+-g\s+(.+)/,
|
|
67
|
-
extract: (m) => m[1].split(/\s+/).filter(p => !p.startsWith("-") && !p.startsWith("--")),
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
/** Strip shell syntax (pipes, redirects, semicolons) from end of command */
|
|
71
|
-
function stripShellSuffix(cmd) {
|
|
72
|
-
return cmd.replace(/\s*(?:\||\d*>[>&]?\s*\S+|;).*$/, "");
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Parse a shell command and detect if it's a package install command.
|
|
76
|
-
* For multiline / chained commands (&&), each segment is checked.
|
|
77
|
-
* Returns the first matching install command, or null.
|
|
78
|
-
*/
|
|
79
|
-
export function parseInstallCommand(command) {
|
|
80
|
-
// Split on && to handle chained commands like "apt-get update && apt-get install -y ffmpeg"
|
|
81
|
-
const segments = command.split(/\s*&&\s*/);
|
|
82
|
-
for (const segment of segments) {
|
|
83
|
-
// Strip leading sudo and trailing shell syntax (pipes, redirects)
|
|
84
|
-
const stripped = stripShellSuffix(segment.replace(/^\s*sudo\s+/, ""));
|
|
85
|
-
for (const { type, pattern, extract } of INSTALL_PATTERNS) {
|
|
86
|
-
const match = stripped.match(pattern);
|
|
87
|
-
if (match) {
|
|
88
|
-
const packages = extract(match);
|
|
89
|
-
if (packages.length > 0)
|
|
90
|
-
return { type, packages };
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Record an install command to a file, deduplicating against existing entries.
|
|
98
|
-
*/
|
|
99
|
-
export function recordInstall(filePath, install) {
|
|
100
|
-
const ts = new Date().toISOString();
|
|
101
|
-
// Deduplicate: check existing records before appending
|
|
102
|
-
const existing = new Set();
|
|
103
|
-
if (existsSync(filePath)) {
|
|
104
|
-
for (const line of readFileSync(filePath, "utf-8").split("\n")) {
|
|
105
|
-
const [type, pkg] = line.split("|");
|
|
106
|
-
if (type && pkg)
|
|
107
|
-
existing.add(`${type}|${pkg}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const newLines = install.packages
|
|
111
|
-
.filter(pkg => !existing.has(`${install.type}|${pkg}`))
|
|
112
|
-
.map(pkg => `${install.type}|${pkg}|${ts}`);
|
|
113
|
-
if (newLines.length > 0) {
|
|
114
|
-
appendFileSync(filePath, newLines.join("\n") + "\n");
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Read pending packages from the record file.
|
|
119
|
-
*/
|
|
120
|
-
export function readPendingPackages(filePath) {
|
|
121
|
-
const result = { apt: [], pip: [], cargo: [], npm: [], count: 0, oldestTs: null };
|
|
122
|
-
if (!existsSync(filePath))
|
|
123
|
-
return result;
|
|
124
|
-
const content = readFileSync(filePath, "utf-8").trim();
|
|
125
|
-
if (!content)
|
|
126
|
-
return result;
|
|
127
|
-
const seen = new Set();
|
|
128
|
-
for (const line of content.split("\n")) {
|
|
129
|
-
const [type, pkg, ts] = line.split("|");
|
|
130
|
-
if (!type || !pkg)
|
|
131
|
-
continue;
|
|
132
|
-
const key = `${type}|${pkg}`;
|
|
133
|
-
if (seen.has(key))
|
|
134
|
-
continue;
|
|
135
|
-
seen.add(key);
|
|
136
|
-
if (type === "apt")
|
|
137
|
-
result.apt.push(pkg);
|
|
138
|
-
else if (type === "pip")
|
|
139
|
-
result.pip.push(pkg);
|
|
140
|
-
else if (type === "cargo")
|
|
141
|
-
result.cargo.push(pkg);
|
|
142
|
-
else if (type === "npm")
|
|
143
|
-
result.npm.push(pkg);
|
|
144
|
-
if (ts) {
|
|
145
|
-
const date = new Date(ts);
|
|
146
|
-
if (!result.oldestTs || date < result.oldestTs)
|
|
147
|
-
result.oldestTs = date;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
result.count = result.apt.length + result.pip.length + result.cargo.length + result.npm.length;
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Clear all pending packages by truncating the file.
|
|
155
|
-
*/
|
|
156
|
-
export function clearPendingPackages(filePath) {
|
|
157
|
-
writeFileSync(filePath, "");
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=install-recorder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-recorder.js","sourceRoot":"","sources":["../src/install-recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { MeetingConfig, ParticipantConfig, FleetManagerMeetingAPI, MeetingChannelOutput, MeetingState } from "./types.js";
|
|
2
|
-
import type { InboundMessage } from "../channel/types.js";
|
|
3
|
-
export declare class MeetingOrchestrator {
|
|
4
|
-
private config;
|
|
5
|
-
private fm;
|
|
6
|
-
private output;
|
|
7
|
-
private participants;
|
|
8
|
-
private roundHistory;
|
|
9
|
-
private currentRound;
|
|
10
|
-
private state;
|
|
11
|
-
private userContext;
|
|
12
|
-
private abortController;
|
|
13
|
-
private resolveUserInput;
|
|
14
|
-
private directAddress;
|
|
15
|
-
/** Cancellation signal — the single source of truth for "should we stop?" */
|
|
16
|
-
private get cancelled();
|
|
17
|
-
constructor(config: MeetingConfig, fm: FleetManagerMeetingAPI, output: MeetingChannelOutput);
|
|
18
|
-
start(participantConfigs: ParticipantConfig[]): Promise<void>;
|
|
19
|
-
private runCollabFlow;
|
|
20
|
-
private runDiscussionFlow;
|
|
21
|
-
private runDebateLoop;
|
|
22
|
-
private getSpeakingOrder;
|
|
23
|
-
private generateSummary;
|
|
24
|
-
handleUserMessage(msg: InboundMessage): void;
|
|
25
|
-
addParticipant(config: ParticipantConfig): Promise<void>;
|
|
26
|
-
removeParticipant(label: string): Promise<void>;
|
|
27
|
-
end(): Promise<void>;
|
|
28
|
-
private cleanup;
|
|
29
|
-
getState(): MeetingState;
|
|
30
|
-
}
|
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
import { buildSystemPrompt, buildRoundPrompt, buildSummaryPrompt, buildCollabSystemPrompt, buildCollabSummaryPrompt, buildDiscussionSystemPrompt, buildIndependentAnalysisPrompt, buildCrossDiscussionPrompt, buildConsensusPrompt, roleLabel } from "./prompt-builder.js";
|
|
2
|
-
const ROLE_EMOJI = { pro: "🟢", con: "🔴", arbiter: "⚖️" };
|
|
3
|
-
const REPLY_TIMEOUT_MS = 120_000;
|
|
4
|
-
const REPLY_BUFFER_CAP = 32 * 1024;
|
|
5
|
-
export class MeetingOrchestrator {
|
|
6
|
-
config;
|
|
7
|
-
fm;
|
|
8
|
-
output;
|
|
9
|
-
participants = [];
|
|
10
|
-
roundHistory = [];
|
|
11
|
-
currentRound = 0;
|
|
12
|
-
state = "booting";
|
|
13
|
-
userContext;
|
|
14
|
-
abortController = new AbortController();
|
|
15
|
-
resolveUserInput = null;
|
|
16
|
-
directAddress = null;
|
|
17
|
-
/** Cancellation signal — the single source of truth for "should we stop?" */
|
|
18
|
-
get cancelled() { return this.abortController.signal.aborted; }
|
|
19
|
-
constructor(config, fm, output) {
|
|
20
|
-
this.config = config;
|
|
21
|
-
this.fm = fm;
|
|
22
|
-
this.output = output;
|
|
23
|
-
}
|
|
24
|
-
async start(participantConfigs) {
|
|
25
|
-
this.state = "booting";
|
|
26
|
-
// Spawn instances sequentially to avoid port/IPC race conditions
|
|
27
|
-
for (let i = 0; i < participantConfigs.length; i++) {
|
|
28
|
-
const p = participantConfigs[i];
|
|
29
|
-
try {
|
|
30
|
-
const systemPrompt = this.config.mode === "collab"
|
|
31
|
-
? buildCollabSystemPrompt(p.label, this.config.topic)
|
|
32
|
-
: this.config.mode === "discussion"
|
|
33
|
-
? buildDiscussionSystemPrompt(p.label, this.config.angles?.[i] ?? "general", this.config.topic)
|
|
34
|
-
: buildSystemPrompt(p.role, this.config.topic);
|
|
35
|
-
const instanceName = await this.fm.spawnEphemeralInstance({
|
|
36
|
-
systemPrompt,
|
|
37
|
-
workingDirectory: this.config.mode === "collab" ? this.config.repo ?? "/tmp" : "/tmp",
|
|
38
|
-
lightweight: this.config.mode === "debate" || this.config.mode === "discussion",
|
|
39
|
-
skipPermissions: this.config.mode === "debate" || this.config.mode === "discussion",
|
|
40
|
-
}, this.abortController.signal);
|
|
41
|
-
this.participants.push({ ...p, instanceName });
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
await this.output.postMessage(`⚠️ Instance 啟動失敗: ${err}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (this.participants.length === 0) {
|
|
48
|
-
await this.output.postMessage("❌ 所有 instance 啟動失敗,會議結束");
|
|
49
|
-
await this.end();
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
this.state = "running";
|
|
53
|
-
const participantList = this.config.mode === "discussion"
|
|
54
|
-
? this.participants.map((p, i) => `${p.label}(${this.config.angles?.[i] ?? "general"})`).join("、")
|
|
55
|
-
: this.participants.map(p => `${p.label}(${roleLabel(p.role)})`).join("、");
|
|
56
|
-
const modeLabel = this.config.mode === "discussion" ? "討論" : this.config.mode === "collab" ? "協作" : "辯論";
|
|
57
|
-
await this.output.postMessage(`📋 ${modeLabel}:${this.config.topic}\n參與者:${participantList}\n輪次:${this.config.maxRounds} | 指令:/end /more /pause`);
|
|
58
|
-
try {
|
|
59
|
-
if (this.config.mode === "collab") {
|
|
60
|
-
await this.runCollabFlow();
|
|
61
|
-
}
|
|
62
|
-
else if (this.config.mode === "discussion") {
|
|
63
|
-
await this.runDiscussionFlow();
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
await this.runDebateLoop();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
if (err.name === "AbortError")
|
|
71
|
-
return;
|
|
72
|
-
throw err;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
async runCollabFlow() {
|
|
76
|
-
// Phase 1: Discussion — each participant proposes their work plan
|
|
77
|
-
await this.output.postMessage("\n━━ 討論分工 ━━");
|
|
78
|
-
for (const participant of this.participants) {
|
|
79
|
-
if (this.cancelled)
|
|
80
|
-
return;
|
|
81
|
-
while (this.state === "paused") {
|
|
82
|
-
await new Promise(resolve => { this.resolveUserInput = resolve; });
|
|
83
|
-
}
|
|
84
|
-
if (this.cancelled)
|
|
85
|
-
return;
|
|
86
|
-
try {
|
|
87
|
-
const prompt = `任務:${this.config.topic}\n\n團隊成員:${this.participants.map(p => p.label).join("、")}\n你是 ${participant.label}。請提出你的分工建議,說明你打算負責哪個部分。用 reply 工具回覆。`;
|
|
88
|
-
const reply = await this.fm.sendAndWaitReply(participant.instanceName, prompt, REPLY_TIMEOUT_MS);
|
|
89
|
-
const cappedReply = reply.length > REPLY_BUFFER_CAP
|
|
90
|
-
? reply.slice(0, REPLY_BUFFER_CAP) + "\n[...truncated]"
|
|
91
|
-
: reply;
|
|
92
|
-
this.roundHistory.push({
|
|
93
|
-
round: 0, speaker: participant.label, role: participant.role, content: cappedReply,
|
|
94
|
-
});
|
|
95
|
-
await this.output.postMessage(`💬 ${participant.label}:\n${cappedReply}`);
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
if (err.name === "AbortError")
|
|
99
|
-
throw err;
|
|
100
|
-
await this.output.postMessage(`⚠️ ${participant.label} 回覆逾時`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Phase 2: Development — tell each participant to start working
|
|
104
|
-
await this.output.postMessage("\n━━ 開始開發 ━━");
|
|
105
|
-
// Collect all plans for context
|
|
106
|
-
const allPlans = this.roundHistory
|
|
107
|
-
.filter(e => e.round === 0)
|
|
108
|
-
.map(e => `[${e.speaker}] ${e.content}`)
|
|
109
|
-
.join("\n\n");
|
|
110
|
-
// Send development instruction to all participants in parallel
|
|
111
|
-
const devPromises = this.participants.map(async (participant) => {
|
|
112
|
-
if (this.cancelled)
|
|
113
|
-
return;
|
|
114
|
-
try {
|
|
115
|
-
const prompt = `以下是所有人的分工計劃:\n\n${allPlans}\n\n請開始你負責的部分。完成後用 reply 工具回報你做了什麼(包含修改了哪些檔案、實作了什麼功能)。`;
|
|
116
|
-
const reply = await this.fm.sendAndWaitReply(participant.instanceName, prompt, 300_000); // 5 min timeout for dev work
|
|
117
|
-
const cappedReply = reply.length > REPLY_BUFFER_CAP
|
|
118
|
-
? reply.slice(0, REPLY_BUFFER_CAP) + "\n[...truncated]"
|
|
119
|
-
: reply;
|
|
120
|
-
this.roundHistory.push({
|
|
121
|
-
round: 1, speaker: participant.label, role: participant.role, content: cappedReply,
|
|
122
|
-
});
|
|
123
|
-
await this.output.postMessage(`✅ ${participant.label} 完成:\n${cappedReply}`);
|
|
124
|
-
}
|
|
125
|
-
catch (err) {
|
|
126
|
-
if (err.name === "AbortError")
|
|
127
|
-
return;
|
|
128
|
-
await this.output.postMessage(`⚠️ ${participant.label} 開發逾時或失敗`);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
await Promise.allSettled(devPromises);
|
|
132
|
-
if (this.cancelled)
|
|
133
|
-
return;
|
|
134
|
-
await this.generateSummary();
|
|
135
|
-
await this.cleanup();
|
|
136
|
-
}
|
|
137
|
-
async runDiscussionFlow() {
|
|
138
|
-
const angles = this.config.angles ?? this.participants.map((_, i) => `角度 ${i + 1}`);
|
|
139
|
-
// Phase 1: Independent analysis (parallel)
|
|
140
|
-
await this.output.postMessage("\n━━ 獨立分析 ━━");
|
|
141
|
-
const analysisPromises = this.participants.map(async (participant, i) => {
|
|
142
|
-
if (this.cancelled)
|
|
143
|
-
return;
|
|
144
|
-
try {
|
|
145
|
-
const prompt = buildIndependentAnalysisPrompt(this.config.topic, angles[i]);
|
|
146
|
-
const reply = await this.fm.sendAndWaitReply(participant.instanceName, prompt, REPLY_TIMEOUT_MS);
|
|
147
|
-
const cappedReply = reply.length > REPLY_BUFFER_CAP ? reply.slice(0, REPLY_BUFFER_CAP) + "\n[...truncated]" : reply;
|
|
148
|
-
this.roundHistory.push({ round: 0, speaker: participant.label, role: angles[i], content: cappedReply });
|
|
149
|
-
await this.output.postMessage(`💬 ${participant.label}(${angles[i]}):\n${cappedReply}`);
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
if (err.name === "AbortError")
|
|
153
|
-
return;
|
|
154
|
-
await this.output.postMessage(`⚠️ ${participant.label} 分析逾時`);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
await Promise.allSettled(analysisPromises);
|
|
158
|
-
if (this.cancelled)
|
|
159
|
-
return;
|
|
160
|
-
// Phase 2: Cross discussion (sequential rounds)
|
|
161
|
-
const independentAnalyses = this.roundHistory.filter(e => e.round === 0);
|
|
162
|
-
for (let round = 1; round <= this.config.maxRounds; round++) {
|
|
163
|
-
if (this.cancelled)
|
|
164
|
-
return;
|
|
165
|
-
this.currentRound = round;
|
|
166
|
-
await this.output.postMessage(`\n━━ 交叉討論 Round ${round} ━━`);
|
|
167
|
-
for (let i = 0; i < this.participants.length; i++) {
|
|
168
|
-
const participant = this.participants[i];
|
|
169
|
-
if (this.cancelled)
|
|
170
|
-
return;
|
|
171
|
-
while (this.state === "paused") {
|
|
172
|
-
await new Promise(resolve => { this.resolveUserInput = resolve; });
|
|
173
|
-
}
|
|
174
|
-
if (this.cancelled)
|
|
175
|
-
return;
|
|
176
|
-
try {
|
|
177
|
-
const prevRoundEntries = round === 1 ? independentAnalyses : this.roundHistory.filter(e => e.round === round - 1);
|
|
178
|
-
const prompt = buildCrossDiscussionPrompt(this.config.topic, angles[i], prevRoundEntries);
|
|
179
|
-
const reply = await this.fm.sendAndWaitReply(participant.instanceName, prompt, REPLY_TIMEOUT_MS);
|
|
180
|
-
const cappedReply = reply.length > REPLY_BUFFER_CAP ? reply.slice(0, REPLY_BUFFER_CAP) + "\n[...truncated]" : reply;
|
|
181
|
-
this.roundHistory.push({ round, speaker: participant.label, role: angles[i], content: cappedReply });
|
|
182
|
-
await this.output.postMessage(`💬 ${participant.label}(${angles[i]}):\n${cappedReply}`);
|
|
183
|
-
}
|
|
184
|
-
catch (err) {
|
|
185
|
-
if (err.name === "AbortError")
|
|
186
|
-
throw err;
|
|
187
|
-
await this.output.postMessage(`⚠️ ${participant.label} 回覆逾時`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// Phase 3: Consensus
|
|
192
|
-
await this.output.postMessage("\n━━ 收斂結論 ━━");
|
|
193
|
-
const lastParticipant = this.participants[this.participants.length - 1];
|
|
194
|
-
if (lastParticipant) {
|
|
195
|
-
try {
|
|
196
|
-
const prompt = buildConsensusPrompt(this.config.topic, this.roundHistory);
|
|
197
|
-
const reply = await this.fm.sendAndWaitReply(lastParticipant.instanceName, prompt, REPLY_TIMEOUT_MS);
|
|
198
|
-
await this.output.postMessage(reply);
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
201
|
-
await this.output.postMessage("⚠️ 結論產生失敗");
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
await this.cleanup();
|
|
205
|
-
}
|
|
206
|
-
async runDebateLoop() {
|
|
207
|
-
for (let round = 1; round <= this.config.maxRounds; round++) {
|
|
208
|
-
if (this.cancelled)
|
|
209
|
-
return;
|
|
210
|
-
this.currentRound = round;
|
|
211
|
-
await this.output.postMessage(`\n━━ Round ${round} ━━`);
|
|
212
|
-
const prevRound = this.roundHistory.filter(e => e.round === round - 1);
|
|
213
|
-
const speakers = this.getSpeakingOrder();
|
|
214
|
-
for (const participant of speakers) {
|
|
215
|
-
if (this.cancelled)
|
|
216
|
-
return;
|
|
217
|
-
while (this.state === "paused") {
|
|
218
|
-
await new Promise(resolve => { this.resolveUserInput = resolve; });
|
|
219
|
-
}
|
|
220
|
-
if (this.cancelled)
|
|
221
|
-
return;
|
|
222
|
-
let prompt;
|
|
223
|
-
if (this.directAddress && this.directAddress.label === participant.label) {
|
|
224
|
-
prompt = this.directAddress.prompt;
|
|
225
|
-
this.directAddress = null;
|
|
226
|
-
}
|
|
227
|
-
else if (this.directAddress) {
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
prompt = buildRoundPrompt(this.config.topic, round, prevRound, this.userContext);
|
|
232
|
-
this.userContext = undefined;
|
|
233
|
-
}
|
|
234
|
-
try {
|
|
235
|
-
const reply = await this.fm.sendAndWaitReply(participant.instanceName, prompt, REPLY_TIMEOUT_MS);
|
|
236
|
-
const cappedReply = reply.length > REPLY_BUFFER_CAP
|
|
237
|
-
? reply.slice(0, REPLY_BUFFER_CAP) + "\n[...truncated]"
|
|
238
|
-
: reply;
|
|
239
|
-
this.roundHistory.push({
|
|
240
|
-
round, speaker: participant.label, role: participant.role, content: cappedReply,
|
|
241
|
-
});
|
|
242
|
-
const emoji = ROLE_EMOJI[participant.role] ?? "💬";
|
|
243
|
-
await this.output.postMessage(`${emoji} ${participant.label}(${roleLabel(participant.role)}):\n${cappedReply}`);
|
|
244
|
-
}
|
|
245
|
-
catch (err) {
|
|
246
|
-
if (err.name === "AbortError")
|
|
247
|
-
throw err;
|
|
248
|
-
await this.output.postMessage(`⚠️ ${participant.label} 回覆逾時,跳過本輪`);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
await this.generateSummary();
|
|
253
|
-
await this.cleanup();
|
|
254
|
-
}
|
|
255
|
-
getSpeakingOrder() {
|
|
256
|
-
const order = [];
|
|
257
|
-
order.push(...this.participants.filter(p => p.role === "pro"));
|
|
258
|
-
order.push(...this.participants.filter(p => p.role === "con"));
|
|
259
|
-
order.push(...this.participants.filter(p => p.role === "arbiter"));
|
|
260
|
-
order.push(...this.participants.filter(p => !["pro", "con", "arbiter"].includes(p.role)));
|
|
261
|
-
return order;
|
|
262
|
-
}
|
|
263
|
-
async generateSummary() {
|
|
264
|
-
if (this.cancelled)
|
|
265
|
-
return;
|
|
266
|
-
this.state = "summarizing";
|
|
267
|
-
await this.output.postMessage("\n━━ 會議摘要 ━━");
|
|
268
|
-
const summaryGenerator = this.participants.find(p => p.role === "arbiter") ??
|
|
269
|
-
this.participants[this.participants.length - 1];
|
|
270
|
-
if (!summaryGenerator)
|
|
271
|
-
return;
|
|
272
|
-
try {
|
|
273
|
-
const summaryPrompt = this.config.mode === "collab"
|
|
274
|
-
? buildCollabSummaryPrompt(this.config.topic, this.roundHistory)
|
|
275
|
-
: buildSummaryPrompt(this.config.topic, this.roundHistory);
|
|
276
|
-
const summary = await this.fm.sendAndWaitReply(summaryGenerator.instanceName, summaryPrompt, REPLY_TIMEOUT_MS);
|
|
277
|
-
await this.output.postMessage(summary);
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
await this.output.postMessage("⚠️ 摘要產生失敗");
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
handleUserMessage(msg) {
|
|
284
|
-
const text = msg.text.trim();
|
|
285
|
-
if (text === "/end") {
|
|
286
|
-
this.state = "ended";
|
|
287
|
-
this.abortController.abort();
|
|
288
|
-
this.generateSummary().then(() => this.cleanup()).catch(() => this.cleanup());
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
if (text === "/pause") {
|
|
292
|
-
this.state = "paused";
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
if (text === "/resume") {
|
|
296
|
-
this.state = "running";
|
|
297
|
-
this.resolveUserInput?.();
|
|
298
|
-
this.resolveUserInput = null;
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
const moreMatch = text.match(/^\/more(?:\s+(\d+))?$/);
|
|
302
|
-
if (moreMatch) {
|
|
303
|
-
this.config.maxRounds += parseInt(moreMatch[1] ?? "1", 10);
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
const kickMatch = text.match(/^\/kick\s+(\S+)$/);
|
|
307
|
-
if (kickMatch) {
|
|
308
|
-
this.removeParticipant(kickMatch[1]);
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
const redirectMatch = text.match(/^\/redirect\s+(\S+)\s+"(.+)"$/);
|
|
312
|
-
if (redirectMatch) {
|
|
313
|
-
this.directAddress = { label: redirectMatch[1], prompt: redirectMatch[2] };
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
const atMatch = text.match(/^@(\S+)\s+(.+)$/);
|
|
317
|
-
if (atMatch) {
|
|
318
|
-
this.directAddress = { label: atMatch[1], prompt: atMatch[2] };
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
this.userContext = text;
|
|
322
|
-
}
|
|
323
|
-
async addParticipant(config) {
|
|
324
|
-
const instanceName = await this.fm.spawnEphemeralInstance({
|
|
325
|
-
systemPrompt: buildSystemPrompt(config.role, this.config.topic),
|
|
326
|
-
workingDirectory: "/tmp",
|
|
327
|
-
lightweight: this.config.mode === "debate",
|
|
328
|
-
skipPermissions: this.config.mode === "debate",
|
|
329
|
-
});
|
|
330
|
-
this.participants.push({ ...config, instanceName });
|
|
331
|
-
await this.output.postMessage(`➕ ${config.label}(${roleLabel(config.role)})加入會議`);
|
|
332
|
-
}
|
|
333
|
-
async removeParticipant(label) {
|
|
334
|
-
const idx = this.participants.findIndex(p => p.label === label);
|
|
335
|
-
if (idx === -1)
|
|
336
|
-
return;
|
|
337
|
-
const [removed] = this.participants.splice(idx, 1);
|
|
338
|
-
await this.fm.destroyEphemeralInstance(removed.instanceName);
|
|
339
|
-
await this.output.postMessage(`➖ ${removed.label}(${roleLabel(removed.role)})已離開會議`);
|
|
340
|
-
}
|
|
341
|
-
async end() {
|
|
342
|
-
if (this.state !== "ended") {
|
|
343
|
-
await this.generateSummary();
|
|
344
|
-
}
|
|
345
|
-
await this.cleanup();
|
|
346
|
-
}
|
|
347
|
-
async cleanup() {
|
|
348
|
-
this.state = "ended";
|
|
349
|
-
this.abortController.abort();
|
|
350
|
-
await Promise.allSettled(this.participants.map(p => this.fm.destroyEphemeralInstance(p.instanceName)));
|
|
351
|
-
await this.output.postMessage("📋 會議結束");
|
|
352
|
-
}
|
|
353
|
-
getState() { return this.state; }
|
|
354
|
-
}
|
|
355
|
-
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/meeting/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { MeetingRole, RoundEntry } from "./types.js";
|
|
2
|
-
export declare function roleLabel(role: MeetingRole): string;
|
|
3
|
-
export declare function buildSystemPrompt(role: MeetingRole, topic: string): string;
|
|
4
|
-
export declare function buildRoundPrompt(topic: string, round: number, previousRounds: RoundEntry[], userContext?: string): string;
|
|
5
|
-
export declare function buildCollabSystemPrompt(label: string, topic: string): string;
|
|
6
|
-
export declare function buildCollabSummaryPrompt(topic: string, allRounds: RoundEntry[]): string;
|
|
7
|
-
export declare function buildAngleGenerationPrompt(topic: string, count: number): string;
|
|
8
|
-
export declare function buildDiscussionSystemPrompt(label: string, angle: string, topic: string): string;
|
|
9
|
-
export declare function buildIndependentAnalysisPrompt(topic: string, angle: string): string;
|
|
10
|
-
export declare function buildCrossDiscussionPrompt(topic: string, myAngle: string, allAnalyses: RoundEntry[]): string;
|
|
11
|
-
export declare function buildConsensusPrompt(topic: string, allRounds: RoundEntry[]): string;
|
|
12
|
-
export declare function buildSummaryPrompt(topic: string, allRounds: RoundEntry[]): string;
|