@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.
Files changed (66) hide show
  1. package/README.md +50 -528
  2. package/README.zh-TW.md +49 -474
  3. package/dist/channel/adapters/discord.js +1 -1
  4. package/dist/channel/adapters/discord.js.map +1 -1
  5. package/dist/channel/factory.js +2 -2
  6. package/dist/channel/factory.js.map +1 -1
  7. package/dist/channel/mcp-tools.js +3 -3
  8. package/dist/channel/mcp-tools.js.map +1 -1
  9. package/dist/cli.js +1 -1
  10. package/dist/cli.js.map +1 -1
  11. package/dist/daemon.js +37 -36
  12. package/dist/daemon.js.map +1 -1
  13. package/dist/export-import.js +2 -2
  14. package/dist/export-import.js.map +1 -1
  15. package/dist/fleet-manager.js +5 -8
  16. package/dist/fleet-manager.js.map +1 -1
  17. package/dist/setup-wizard.js +2 -2
  18. package/dist/setup-wizard.js.map +1 -1
  19. package/dist/tmux-manager.js +3 -2
  20. package/dist/tmux-manager.js.map +1 -1
  21. package/package.json +3 -5
  22. package/dist/approval/approval-server.d.ts +0 -30
  23. package/dist/approval/approval-server.js +0 -156
  24. package/dist/approval/approval-server.js.map +0 -1
  25. package/dist/approval/tmux-prompt-detector.d.ts +0 -34
  26. package/dist/approval/tmux-prompt-detector.js +0 -264
  27. package/dist/approval/tmux-prompt-detector.js.map +0 -1
  28. package/dist/backend/approval-strategy.d.ts +0 -14
  29. package/dist/backend/approval-strategy.js +0 -2
  30. package/dist/backend/approval-strategy.js.map +0 -1
  31. package/dist/backend/hook-based-approval.d.ts +0 -20
  32. package/dist/backend/hook-based-approval.js +0 -41
  33. package/dist/backend/hook-based-approval.js.map +0 -1
  34. package/dist/container-manager.d.ts +0 -24
  35. package/dist/container-manager.js +0 -148
  36. package/dist/container-manager.js.map +0 -1
  37. package/dist/db.d.ts +0 -10
  38. package/dist/db.js +0 -43
  39. package/dist/db.js.map +0 -1
  40. package/dist/install-recorder.d.ts +0 -30
  41. package/dist/install-recorder.js +0 -159
  42. package/dist/install-recorder.js.map +0 -1
  43. package/dist/meeting/orchestrator.d.ts +0 -30
  44. package/dist/meeting/orchestrator.js +0 -355
  45. package/dist/meeting/orchestrator.js.map +0 -1
  46. package/dist/meeting/prompt-builder.d.ts +0 -12
  47. package/dist/meeting/prompt-builder.js +0 -96
  48. package/dist/meeting/prompt-builder.js.map +0 -1
  49. package/dist/meeting/role-assigner.d.ts +0 -2
  50. package/dist/meeting/role-assigner.js +0 -25
  51. package/dist/meeting/role-assigner.js.map +0 -1
  52. package/dist/meeting/types.d.ts +0 -21
  53. package/dist/meeting/types.js +0 -2
  54. package/dist/meeting/types.js.map +0 -1
  55. package/dist/meeting-manager.d.ts +0 -10
  56. package/dist/meeting-manager.js +0 -38
  57. package/dist/meeting-manager.js.map +0 -1
  58. package/dist/memory-layer.d.ts +0 -13
  59. package/dist/memory-layer.js +0 -44
  60. package/dist/memory-layer.js.map +0 -1
  61. package/dist/plugin/agend/.mcp.json +0 -9
  62. package/dist/plugin/ccd-channel/.claude-plugin/plugin.json +0 -5
  63. package/dist/plugin/ccd-channel/.mcp.json +0 -9
  64. package/dist/process-manager.d.ts +0 -31
  65. package/dist/process-manager.js +0 -264
  66. 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;
@@ -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
- }