@suzuke/agend 1.0.0 → 1.0.2
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.js +37 -36
- 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.js +5 -8
- 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-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
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { homedir, tmpdir } from "node:os";
|
|
4
|
-
import { dirname, resolve as resolvePath } from "node:path";
|
|
5
|
-
import { readPendingPackages, clearPendingPackages } from "./install-recorder.js";
|
|
6
|
-
function exec(cmd, args) {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
execFile(cmd, args, (err, stdout, stderr) => {
|
|
9
|
-
if (err)
|
|
10
|
-
reject(err);
|
|
11
|
-
else
|
|
12
|
-
resolve({ stdout: stdout, stderr: stderr });
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
const CONTAINER_NAME = "ccd-shared";
|
|
17
|
-
const IMAGE_NAME = "ccd-sandbox:latest";
|
|
18
|
-
const BAKE_THRESHOLD_COUNT = 3;
|
|
19
|
-
const BAKE_THRESHOLD_HOURS = 24;
|
|
20
|
-
/**
|
|
21
|
-
* Generate Dockerfile RUN lines from pending packages.
|
|
22
|
-
*/
|
|
23
|
-
export function generateDockerfilePatch(pending) {
|
|
24
|
-
const lines = [];
|
|
25
|
-
const date = new Date().toISOString().slice(0, 10);
|
|
26
|
-
lines.push(`# Auto-baked from Claude's install history (${date})`);
|
|
27
|
-
if (pending.apt.length > 0) {
|
|
28
|
-
lines.push(`RUN sudo apt-get update && sudo apt-get install -y --no-install-recommends ${pending.apt.join(" ")} && sudo rm -rf /var/lib/apt/lists/*`);
|
|
29
|
-
}
|
|
30
|
-
if (pending.pip.length > 0) {
|
|
31
|
-
lines.push(`RUN pip3 install --break-system-packages ${pending.pip.join(" ")}`);
|
|
32
|
-
}
|
|
33
|
-
if (pending.cargo.length > 0) {
|
|
34
|
-
lines.push(`RUN cargo install ${pending.cargo.join(" ")}`);
|
|
35
|
-
}
|
|
36
|
-
if (pending.npm.length > 0) {
|
|
37
|
-
lines.push(`RUN npm install -g ${pending.npm.join(" ")}`);
|
|
38
|
-
}
|
|
39
|
-
return lines.join("\n") + "\n";
|
|
40
|
-
}
|
|
41
|
-
export class ContainerManager {
|
|
42
|
-
async isRunning() {
|
|
43
|
-
const { stdout } = await exec("docker", ["ps", "-q", "-f", `name=${CONTAINER_NAME}`]);
|
|
44
|
-
return stdout.trim().length > 0;
|
|
45
|
-
}
|
|
46
|
-
async ensureRunning(opts) {
|
|
47
|
-
if (await this.isRunning())
|
|
48
|
-
return;
|
|
49
|
-
const home = homedir();
|
|
50
|
-
const network = opts.network ?? "none";
|
|
51
|
-
const args = [
|
|
52
|
-
"run", "-d",
|
|
53
|
-
"--name", CONTAINER_NAME,
|
|
54
|
-
"--restart", "unless-stopped",
|
|
55
|
-
"--label", "ccd=shared",
|
|
56
|
-
];
|
|
57
|
-
// M3: Network isolation (--add-host is incompatible with --network none)
|
|
58
|
-
args.push("--network", network);
|
|
59
|
-
if (network !== "none") {
|
|
60
|
-
args.push("--add-host", "host.docker.internal:host-gateway");
|
|
61
|
-
}
|
|
62
|
-
// M2: Resource limits
|
|
63
|
-
args.push("--memory", opts.memory ?? "4g", "--cpus", opts.cpus ?? "2");
|
|
64
|
-
for (const raw of opts.projectRoots) {
|
|
65
|
-
const root = raw.startsWith("~") ? raw.replace("~", home) : raw;
|
|
66
|
-
args.push("-v", `${root}:${root}`);
|
|
67
|
-
}
|
|
68
|
-
args.push("-v", `${home}/.claude:${home}/.claude:ro`);
|
|
69
|
-
args.push("-v", `${opts.dataDir}:${opts.dataDir}`);
|
|
70
|
-
args.push("-v", `${opts.ccdInstallDir}:${opts.ccdInstallDir}:ro`);
|
|
71
|
-
// Mount host tmpdir so Claude Code's cwd-tracking temp files work inside the container
|
|
72
|
-
const tmp = tmpdir();
|
|
73
|
-
args.push("-v", `${tmp}:${tmp}`);
|
|
74
|
-
// C6: Validate extra_mounts against allowed directories
|
|
75
|
-
for (const mount of opts.extraMounts) {
|
|
76
|
-
const hostPath = mount.split(":")[0];
|
|
77
|
-
const resolved = resolvePath(hostPath);
|
|
78
|
-
if (resolved.includes("..")) {
|
|
79
|
-
throw new Error(`Extra mount "${mount}" contains path traversal`);
|
|
80
|
-
}
|
|
81
|
-
const allowed = opts.projectRoots.some(r => resolved.startsWith(r)) || resolved.startsWith(home);
|
|
82
|
-
if (!allowed) {
|
|
83
|
-
throw new Error(`Extra mount "${mount}" is outside allowed directories (project roots and $HOME)`);
|
|
84
|
-
}
|
|
85
|
-
args.push("-v", mount);
|
|
86
|
-
}
|
|
87
|
-
args.push(IMAGE_NAME, "tail", "-f", "/dev/null");
|
|
88
|
-
// M4: Fix TOCTOU race – another process may have started the container
|
|
89
|
-
try {
|
|
90
|
-
await exec("docker", args);
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
if (await this.isRunning())
|
|
94
|
-
return;
|
|
95
|
-
throw err;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
async destroy() {
|
|
99
|
-
try {
|
|
100
|
-
await exec("docker", ["rm", "-f", CONTAINER_NAME]);
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// Container might not exist
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
shouldAutoBake(recordPath) {
|
|
107
|
-
const pending = readPendingPackages(recordPath);
|
|
108
|
-
if (pending.count === 0)
|
|
109
|
-
return false;
|
|
110
|
-
if (pending.count >= BAKE_THRESHOLD_COUNT)
|
|
111
|
-
return true;
|
|
112
|
-
if (pending.oldestTs) {
|
|
113
|
-
const hoursAgo = (Date.now() - pending.oldestTs.getTime()) / (1000 * 60 * 60);
|
|
114
|
-
if (hoursAgo >= BAKE_THRESHOLD_HOURS)
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
async autoBake(recordPath, dockerfilePath) {
|
|
120
|
-
const pending = readPendingPackages(recordPath);
|
|
121
|
-
if (pending.count === 0)
|
|
122
|
-
return { success: true, packages: pending };
|
|
123
|
-
const patch = generateDockerfilePatch(pending);
|
|
124
|
-
// Save original Dockerfile for rollback on build failure
|
|
125
|
-
const original = readFileSync(dockerfilePath, "utf-8");
|
|
126
|
-
writeFileSync(dockerfilePath, original + "\n" + patch);
|
|
127
|
-
// Rebuild image
|
|
128
|
-
try {
|
|
129
|
-
await exec("docker", [
|
|
130
|
-
"build",
|
|
131
|
-
"-f", dockerfilePath,
|
|
132
|
-
"-t", IMAGE_NAME,
|
|
133
|
-
dirname(dockerfilePath),
|
|
134
|
-
]);
|
|
135
|
-
}
|
|
136
|
-
catch (err) {
|
|
137
|
-
// Rollback Dockerfile on build failure
|
|
138
|
-
writeFileSync(dockerfilePath, original);
|
|
139
|
-
return { success: false, packages: pending };
|
|
140
|
-
}
|
|
141
|
-
// Destroy old container so it restarts with new image
|
|
142
|
-
await this.destroy();
|
|
143
|
-
// Clear pending packages
|
|
144
|
-
clearPendingPackages(recordPath);
|
|
145
|
-
return { success: true, packages: pending };
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=container-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"container-manager.js","sourceRoot":"","sources":["../src/container-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { MemoryBackupRow } from "./types.js";
|
|
2
|
-
export declare class MemoryDb {
|
|
3
|
-
private db;
|
|
4
|
-
constructor(dbPath: string);
|
|
5
|
-
insertBackup(filePath: string, content: string, chatId: string | null): void;
|
|
6
|
-
getAll(): MemoryBackupRow[];
|
|
7
|
-
getByFilePath(filePath: string): MemoryBackupRow[];
|
|
8
|
-
pruneOldBackups(keepPerFile?: number): void;
|
|
9
|
-
close(): void;
|
|
10
|
-
}
|
package/dist/db.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import Database from "better-sqlite3";
|
|
2
|
-
export class MemoryDb {
|
|
3
|
-
db;
|
|
4
|
-
constructor(dbPath) {
|
|
5
|
-
this.db = new Database(dbPath);
|
|
6
|
-
this.db.pragma("journal_mode = WAL");
|
|
7
|
-
this.db.exec(`
|
|
8
|
-
CREATE TABLE IF NOT EXISTS memory_backups (
|
|
9
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
10
|
-
file_path TEXT NOT NULL,
|
|
11
|
-
content TEXT NOT NULL,
|
|
12
|
-
chat_id TEXT,
|
|
13
|
-
backed_up_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
14
|
-
)
|
|
15
|
-
`);
|
|
16
|
-
}
|
|
17
|
-
insertBackup(filePath, content, chatId) {
|
|
18
|
-
this.db
|
|
19
|
-
.prepare("INSERT INTO memory_backups (file_path, content, chat_id) VALUES (?, ?, ?)")
|
|
20
|
-
.run(filePath, content, chatId);
|
|
21
|
-
}
|
|
22
|
-
getAll() {
|
|
23
|
-
return this.db
|
|
24
|
-
.prepare("SELECT * FROM memory_backups ORDER BY backed_up_at DESC")
|
|
25
|
-
.all();
|
|
26
|
-
}
|
|
27
|
-
getByFilePath(filePath) {
|
|
28
|
-
return this.db
|
|
29
|
-
.prepare("SELECT * FROM memory_backups WHERE file_path = ? ORDER BY backed_up_at DESC")
|
|
30
|
-
.all(filePath);
|
|
31
|
-
}
|
|
32
|
-
pruneOldBackups(keepPerFile = 10) {
|
|
33
|
-
const files = this.db.prepare("SELECT DISTINCT file_path FROM memory_backups").all();
|
|
34
|
-
const deleteStmt = this.db.prepare("DELETE FROM memory_backups WHERE file_path = ? AND id NOT IN (SELECT id FROM memory_backups WHERE file_path = ? ORDER BY backed_up_at DESC LIMIT ?)");
|
|
35
|
-
for (const { file_path } of files) {
|
|
36
|
-
deleteStmt.run(file_path, file_path, keepPerFile);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
close() {
|
|
40
|
-
this.db.close();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,OAAO,QAAQ;IACX,EAAE,CAAoB;IAE9B,YAAY,MAAc;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;KAQZ,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAqB;QACnE,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,2EAA2E,CAAC;aACpF,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,yDAAyD,CAAC;aAClE,GAAG,EAAuB,CAAC;IAChC,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,6EAA6E,CAAC;aACtF,GAAG,CAAC,QAAQ,CAAsB,CAAC;IACxC,CAAC;IAED,eAAe,CAAC,WAAW,GAAG,EAAE;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAA6B,CAAC;QAChH,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAChC,qJAAqJ,CACtJ,CAAC;QACF,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC;YAClC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface InstallCommand {
|
|
2
|
-
type: "pip" | "apt" | "cargo" | "npm";
|
|
3
|
-
packages: string[];
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Parse a shell command and detect if it's a package install command.
|
|
7
|
-
* For multiline / chained commands (&&), each segment is checked.
|
|
8
|
-
* Returns the first matching install command, or null.
|
|
9
|
-
*/
|
|
10
|
-
export declare function parseInstallCommand(command: string): InstallCommand | null;
|
|
11
|
-
/**
|
|
12
|
-
* Record an install command to a file, deduplicating against existing entries.
|
|
13
|
-
*/
|
|
14
|
-
export declare function recordInstall(filePath: string, install: InstallCommand): void;
|
|
15
|
-
export interface PendingPackages {
|
|
16
|
-
apt: string[];
|
|
17
|
-
pip: string[];
|
|
18
|
-
cargo: string[];
|
|
19
|
-
npm: string[];
|
|
20
|
-
count: number;
|
|
21
|
-
oldestTs: Date | null;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Read pending packages from the record file.
|
|
25
|
-
*/
|
|
26
|
-
export declare function readPendingPackages(filePath: string): PendingPackages;
|
|
27
|
-
/**
|
|
28
|
-
* Clear all pending packages by truncating the file.
|
|
29
|
-
*/
|
|
30
|
-
export declare function clearPendingPackages(filePath: string): void;
|
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":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAOlF,MAAM,gBAAgB,GAIjB;IACH;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,IAAI,EAAE,CAAC;oBAAC,IAAI,GAAG,KAAK,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS,CAAE,cAAc;gBACnF,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,SAAS,CAAE,OAAO;gBACjE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS,CAAE,QAAQ;gBACxF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACzF;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/G,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,IAAI,EAAE,CAAC;oBAAC,IAAI,GAAG,KAAK,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACtD,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,SAAS,CAAE,iBAAiB;gBACtE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACzF;CACF,CAAC;AAEF,4EAA4E;AAC5E,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,4FAA4F;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,kEAAkE;QAClE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAuB;IACrE,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,uDAAuD;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,GAAG;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;SAC9B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;SACtD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAWD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,MAAM,GAAoB,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAEzC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAE5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,SAAS;QAC5B,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACzC,IAAI,IAAI,KAAK,OAAO;YAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC7C,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzE,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -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
|
-
}
|