ccgateway 0.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.
Files changed (75) hide show
  1. package/README.md +252 -0
  2. package/bin/ccg-dev.sh +3 -0
  3. package/dist/agents.d.ts +17 -0
  4. package/dist/agents.d.ts.map +1 -0
  5. package/dist/agents.js +45 -0
  6. package/dist/agents.js.map +1 -0
  7. package/dist/chat.d.ts +14 -0
  8. package/dist/chat.d.ts.map +1 -0
  9. package/dist/chat.js +104 -0
  10. package/dist/chat.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +501 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +53 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +70 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/context.d.ts +45 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +201 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/daemon.d.ts +27 -0
  24. package/dist/daemon.d.ts.map +1 -0
  25. package/dist/daemon.js +207 -0
  26. package/dist/daemon.js.map +1 -0
  27. package/dist/heartbeat.d.ts +42 -0
  28. package/dist/heartbeat.d.ts.map +1 -0
  29. package/dist/heartbeat.js +153 -0
  30. package/dist/heartbeat.js.map +1 -0
  31. package/dist/logger.d.ts +15 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +70 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/messaging.d.ts +43 -0
  36. package/dist/messaging.d.ts.map +1 -0
  37. package/dist/messaging.js +132 -0
  38. package/dist/messaging.js.map +1 -0
  39. package/dist/migrate.d.ts +24 -0
  40. package/dist/migrate.d.ts.map +1 -0
  41. package/dist/migrate.js +356 -0
  42. package/dist/migrate.js.map +1 -0
  43. package/dist/plugin.d.ts +63 -0
  44. package/dist/plugin.d.ts.map +1 -0
  45. package/dist/plugin.js +93 -0
  46. package/dist/plugin.js.map +1 -0
  47. package/dist/plugins/discord-gateway.d.ts +32 -0
  48. package/dist/plugins/discord-gateway.d.ts.map +1 -0
  49. package/dist/plugins/discord-gateway.js +208 -0
  50. package/dist/plugins/discord-gateway.js.map +1 -0
  51. package/dist/plugins/slack-gateway.d.ts +35 -0
  52. package/dist/plugins/slack-gateway.d.ts.map +1 -0
  53. package/dist/plugins/slack-gateway.js +291 -0
  54. package/dist/plugins/slack-gateway.js.map +1 -0
  55. package/dist/router.d.ts +44 -0
  56. package/dist/router.d.ts.map +1 -0
  57. package/dist/router.js +103 -0
  58. package/dist/router.js.map +1 -0
  59. package/dist/sessions.d.ts +55 -0
  60. package/dist/sessions.d.ts.map +1 -0
  61. package/dist/sessions.js +160 -0
  62. package/dist/sessions.js.map +1 -0
  63. package/dist/skills.d.ts +58 -0
  64. package/dist/skills.d.ts.map +1 -0
  65. package/dist/skills.js +194 -0
  66. package/dist/skills.js.map +1 -0
  67. package/dist/spawner.d.ts +29 -0
  68. package/dist/spawner.d.ts.map +1 -0
  69. package/dist/spawner.js +54 -0
  70. package/dist/spawner.js.map +1 -0
  71. package/dist/types.d.ts +22 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +4 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +48 -0
package/dist/cli.js ADDED
@@ -0,0 +1,501 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { readFileSync } from "node:fs";
4
+ import { existsSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
+ import { dirname, join, resolve } from "node:path";
7
+ import { loadConfig, saveConfig, getCcgHome } from "./config.js";
8
+ import { AgentRegistry } from "./agents.js";
9
+ import { SessionManager } from "./sessions.js";
10
+ import { SkillManager } from "./skills.js";
11
+ import { ContextBuilder } from "./context.js";
12
+ import { CCSpawner } from "./spawner.js";
13
+ import { startChat } from "./chat.js";
14
+ import { HeartbeatManager } from "./heartbeat.js";
15
+ import { CrossAgentMessenger } from "./messaging.js";
16
+ import { PluginLoader } from "./plugin.js";
17
+ import { startDaemon, stopDaemon, getDaemonStatus } from "./daemon.js";
18
+ import { migrateFromOpenClaw, initNew } from "./migrate.js";
19
+ // ── Read version from package.json ──────────────────────────────────────────
20
+ const __filename = fileURLToPath(import.meta.url);
21
+ const __dirname = dirname(__filename);
22
+ // In dev (src/cli.ts) the package.json is one level up; in dist (dist/cli.js) also one level up.
23
+ const pkgPath = join(__dirname, "..", "package.json");
24
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
25
+ // ── Build CLI ───────────────────────────────────────────────────────────────
26
+ const program = new Command();
27
+ program
28
+ .name("ccg")
29
+ .description("ccgateway — multi-agent orchestration layer for Claude Code")
30
+ .version(pkg.version);
31
+ // ── send command ────────────────────────────────────────────────────────────
32
+ program
33
+ .command("send <agent> <message>")
34
+ .description("Send a message to an agent's primary channel")
35
+ .option("--direct", "Force file-based inbox delivery")
36
+ .option("--from <agentId>", "Specify sender agent id")
37
+ .action(async (agent, message, opts) => {
38
+ try {
39
+ const config = await loadConfig();
40
+ const ccgHome = getCcgHome();
41
+ const registry = new AgentRegistry(config);
42
+ const loader = new PluginLoader();
43
+ const messenger = new CrossAgentMessenger(registry, config.bindings, loader, ccgHome);
44
+ if (opts.direct) {
45
+ await messenger.sendToInbox(agent, message, opts.from);
46
+ console.log(`Message delivered to ${agent}'s inbox.`);
47
+ }
48
+ else {
49
+ await messenger.send(agent, message, opts.from);
50
+ console.log(`Message sent to ${agent}.`);
51
+ }
52
+ }
53
+ catch (err) {
54
+ console.error(`Error: ${err.message}`);
55
+ process.exitCode = 1;
56
+ }
57
+ });
58
+ // ── start / stop / status ───────────────────────────────────────────────────
59
+ program
60
+ .command("start")
61
+ .description("Start the ccgateway daemon (foreground)")
62
+ .action(async () => {
63
+ try {
64
+ await startDaemon();
65
+ }
66
+ catch (err) {
67
+ console.error(`Error: ${err.message}`);
68
+ process.exitCode = 1;
69
+ }
70
+ });
71
+ program
72
+ .command("stop")
73
+ .description("Stop the running ccgateway daemon")
74
+ .action(() => {
75
+ stopDaemon();
76
+ });
77
+ program
78
+ .command("status")
79
+ .description("Show daemon status, PID, and connected gateways")
80
+ .action(() => {
81
+ const status = getDaemonStatus();
82
+ if (!status.running) {
83
+ console.log("ccgateway is not running.");
84
+ if (status.pid) {
85
+ console.log(` Stale PID file references pid=${status.pid}`);
86
+ }
87
+ return;
88
+ }
89
+ console.log("ccgateway is running.");
90
+ console.log(` PID: ${status.pid}`);
91
+ if (status.uptime !== undefined) {
92
+ const hours = Math.floor(status.uptime / 3600);
93
+ const mins = Math.floor((status.uptime % 3600) / 60);
94
+ const secs = status.uptime % 60;
95
+ console.log(` Uptime: ${hours}h ${mins}m ${secs}s`);
96
+ }
97
+ });
98
+ // ── migrate subcommand ──────────────────────────────────────────────────────
99
+ const migrateCmd = program
100
+ .command("migrate")
101
+ .description("Migrate configuration from another system");
102
+ migrateCmd
103
+ .command("openclaw")
104
+ .description("Migrate from OpenClaw configuration")
105
+ .option("--config <path>", "Path to openclaw.json")
106
+ .option("--dry-run", "Preview migration without writing files")
107
+ .action(async (opts) => {
108
+ try {
109
+ await migrateFromOpenClaw({
110
+ configPath: opts.config,
111
+ dryRun: opts.dryRun,
112
+ });
113
+ }
114
+ catch (err) {
115
+ console.error(`Error: ${err.message}`);
116
+ process.exitCode = 1;
117
+ }
118
+ });
119
+ // ── init subcommand ─────────────────────────────────────────────────────────
120
+ program
121
+ .command("init")
122
+ .description("Initialize ccgateway configuration interactively")
123
+ .action(async () => {
124
+ try {
125
+ await initNew();
126
+ }
127
+ catch (err) {
128
+ console.error(`Error: ${err.message}`);
129
+ process.exitCode = 1;
130
+ }
131
+ });
132
+ // ── chat subcommand ───────────────────────────────────────────────────────
133
+ program
134
+ .command("chat <agent>")
135
+ .description("Start interactive chat REPL with an agent")
136
+ .action(async (agentId) => {
137
+ const config = await loadConfig();
138
+ const ccgHome = getCcgHome();
139
+ const registry = new AgentRegistry(config);
140
+ const sessions = new SessionManager(ccgHome);
141
+ const skills = new SkillManager(ccgHome);
142
+ const context = new ContextBuilder(sessions, skills, ccgHome, registry);
143
+ const spawner = new CCSpawner();
144
+ try {
145
+ await startChat(agentId, registry, sessions, context, spawner);
146
+ }
147
+ catch (err) {
148
+ console.error(`Error: ${err.message}`);
149
+ process.exitCode = 1;
150
+ }
151
+ });
152
+ // ── heartbeat subcommand ─────────────────────────────────────────────────
153
+ const heartbeatCmd = program
154
+ .command("heartbeat")
155
+ .description("Manage heartbeat schedules");
156
+ heartbeatCmd
157
+ .command("install")
158
+ .description("Install cron jobs for heartbeats")
159
+ .action(async () => {
160
+ const config = await loadConfig();
161
+ const registry = new AgentRegistry(config);
162
+ const spawner = new CCSpawner();
163
+ const manager = new HeartbeatManager(registry, spawner, config.heartbeats);
164
+ try {
165
+ const lines = manager.installCron();
166
+ console.log("Installed heartbeat cron jobs:");
167
+ console.log(lines);
168
+ }
169
+ catch (err) {
170
+ console.error(`Error: ${err.message}`);
171
+ process.exitCode = 1;
172
+ }
173
+ });
174
+ heartbeatCmd
175
+ .command("uninstall")
176
+ .description("Remove heartbeat cron jobs")
177
+ .action(async () => {
178
+ const config = await loadConfig();
179
+ const registry = new AgentRegistry(config);
180
+ const spawner = new CCSpawner();
181
+ const manager = new HeartbeatManager(registry, spawner, config.heartbeats);
182
+ try {
183
+ manager.uninstallCron();
184
+ console.log("Heartbeat cron jobs removed.");
185
+ }
186
+ catch (err) {
187
+ console.error(`Error: ${err.message}`);
188
+ process.exitCode = 1;
189
+ }
190
+ });
191
+ heartbeatCmd
192
+ .command("list")
193
+ .description("List configured heartbeats")
194
+ .action(async () => {
195
+ const config = await loadConfig();
196
+ const registry = new AgentRegistry(config);
197
+ const spawner = new CCSpawner();
198
+ const manager = new HeartbeatManager(registry, spawner, config.heartbeats);
199
+ const heartbeats = manager.listHeartbeats();
200
+ if (heartbeats.length === 0) {
201
+ console.log("No heartbeats configured.");
202
+ return;
203
+ }
204
+ const header = ["Agent", "Cron", "Timezone"];
205
+ const rows = heartbeats.map((hb) => [hb.agent, hb.cron, hb.tz]);
206
+ const widths = header.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
207
+ const formatRow = (cols) => cols.map((c, i) => c.padEnd(widths[i])).join(" ");
208
+ console.log(formatRow(header));
209
+ console.log(widths.map((w) => "-".repeat(w)).join(" "));
210
+ for (const row of rows) {
211
+ console.log(formatRow(row));
212
+ }
213
+ });
214
+ heartbeatCmd
215
+ .command("run <agent>")
216
+ .description("Run heartbeat for an agent manually")
217
+ .action(async (agentId) => {
218
+ const config = await loadConfig();
219
+ const registry = new AgentRegistry(config);
220
+ const spawner = new CCSpawner();
221
+ const manager = new HeartbeatManager(registry, spawner, config.heartbeats);
222
+ try {
223
+ const result = await manager.runHeartbeat(agentId);
224
+ if (result.silent) {
225
+ console.log(`Heartbeat for "${agentId}": all clear.`);
226
+ }
227
+ else {
228
+ console.log(`Heartbeat for "${agentId}":`);
229
+ console.log(result.response);
230
+ }
231
+ }
232
+ catch (err) {
233
+ console.error(`Error: ${err.message}`);
234
+ process.exitCode = 1;
235
+ }
236
+ });
237
+ // ── agents subcommand ──────────────────────────────────────────────────────
238
+ const agentsCmd = program
239
+ .command("agents")
240
+ .description("Manage agents");
241
+ agentsCmd
242
+ .command("list")
243
+ .description("List all agents")
244
+ .action(async () => {
245
+ const config = await loadConfig();
246
+ const registry = new AgentRegistry(config);
247
+ const agents = registry.listAgents();
248
+ if (agents.length === 0) {
249
+ console.log("No agents configured.");
250
+ return;
251
+ }
252
+ // Table header
253
+ const header = ["ID", "Name", "Emoji", "Workspace", "Model"];
254
+ const rows = agents.map((a) => [
255
+ a.id,
256
+ a.name,
257
+ a.emoji || "(none)",
258
+ a.workspace,
259
+ a.model,
260
+ ]);
261
+ // Calculate column widths
262
+ const widths = header.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
263
+ const formatRow = (cols) => cols.map((c, i) => c.padEnd(widths[i])).join(" ");
264
+ console.log(formatRow(header));
265
+ console.log(widths.map((w) => "-".repeat(w)).join(" "));
266
+ for (const row of rows) {
267
+ console.log(formatRow(row));
268
+ }
269
+ });
270
+ agentsCmd
271
+ .command("add")
272
+ .description("Add an agent")
273
+ .requiredOption("--id <id>", "Agent id")
274
+ .requiredOption("--name <name>", "Agent name")
275
+ .requiredOption("--workspace <path>", "Workspace directory path")
276
+ .option("--model <model>", "Model to use", "claude-sonnet-4-6")
277
+ .option("--emoji <emoji>", "Emoji for the agent", "")
278
+ .option("--skills <skills...>", "Skills list", [])
279
+ .option("--allowedTools <tools...>", "Allowed tools list", ["Edit", "Read", "Write", "Bash", "Grep", "Glob"])
280
+ .option("--maxConcurrentSessions <n>", "Max concurrent sessions", "4")
281
+ .action(async (opts) => {
282
+ const workspacePath = resolve(opts.workspace);
283
+ if (!existsSync(workspacePath)) {
284
+ console.error(`Error: Workspace directory does not exist: ${workspacePath}`);
285
+ process.exitCode = 1;
286
+ return;
287
+ }
288
+ const config = await loadConfig();
289
+ const registry = new AgentRegistry(config);
290
+ const agent = {
291
+ id: opts.id,
292
+ name: opts.name,
293
+ emoji: opts.emoji,
294
+ workspace: workspacePath,
295
+ model: opts.model,
296
+ skills: opts.skills,
297
+ allowedTools: opts.allowedTools,
298
+ maxConcurrentSessions: parseInt(opts.maxConcurrentSessions, 10),
299
+ };
300
+ try {
301
+ registry.addAgent(agent);
302
+ }
303
+ catch (err) {
304
+ console.error(`Error: ${err.message}`);
305
+ process.exitCode = 1;
306
+ return;
307
+ }
308
+ config.agents = registry.listAgents();
309
+ await saveConfig(config);
310
+ console.log(`Agent "${agent.id}" added.`);
311
+ });
312
+ agentsCmd
313
+ .command("remove <id>")
314
+ .description("Remove an agent")
315
+ .action(async (id) => {
316
+ const config = await loadConfig();
317
+ const registry = new AgentRegistry(config);
318
+ if (!registry.removeAgent(id)) {
319
+ console.error(`Error: Agent "${id}" not found.`);
320
+ process.exitCode = 1;
321
+ return;
322
+ }
323
+ config.agents = registry.listAgents();
324
+ await saveConfig(config);
325
+ console.log(`Agent "${id}" removed.`);
326
+ });
327
+ agentsCmd
328
+ .command("info <id>")
329
+ .description("Show full agent config and workspace validation")
330
+ .action(async (id) => {
331
+ const config = await loadConfig();
332
+ const registry = new AgentRegistry(config);
333
+ const agent = registry.getAgent(id);
334
+ if (!agent) {
335
+ console.error(`Error: Agent "${id}" not found.`);
336
+ process.exitCode = 1;
337
+ return;
338
+ }
339
+ console.log(`Agent: ${agent.name} (${agent.id})`);
340
+ console.log(` Emoji: ${agent.emoji || "(none)"}`);
341
+ console.log(` Workspace: ${agent.workspace}`);
342
+ console.log(` Model: ${agent.model}`);
343
+ console.log(` Skills: ${agent.skills.length > 0 ? agent.skills.join(", ") : "(none)"}`);
344
+ console.log(` Allowed tools: ${agent.allowedTools.join(", ")}`);
345
+ console.log(` Max concurrent: ${agent.maxConcurrentSessions}`);
346
+ const validation = registry.validateWorkspace(id);
347
+ if (validation.valid) {
348
+ console.log(` Workspace validation: OK`);
349
+ }
350
+ else {
351
+ console.log(` Workspace validation: FAILED`);
352
+ for (const err of validation.errors) {
353
+ console.log(` - ${err}`);
354
+ }
355
+ }
356
+ });
357
+ // ── sessions subcommand ───────────────────────────────────────────────────
358
+ const sessionsCmd = program
359
+ .command("sessions")
360
+ .description("Manage sessions");
361
+ sessionsCmd
362
+ .command("list")
363
+ .description("List sessions with agent, key, message count, last activity")
364
+ .option("--agent <id>", "Filter by agent id")
365
+ .action(async (opts) => {
366
+ const mgr = new SessionManager(getCcgHome());
367
+ const sessions = await mgr.listSessions(opts.agent);
368
+ if (sessions.length === 0) {
369
+ console.log("No sessions found.");
370
+ return;
371
+ }
372
+ const header = ["Agent", "Session Key", "Messages", "Last Activity"];
373
+ const rows = sessions.map((s) => [
374
+ s.agentId,
375
+ s.sessionKey,
376
+ String(s.messageCount),
377
+ new Date(s.lastActivity).toISOString(),
378
+ ]);
379
+ const widths = header.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
380
+ const formatRow = (cols) => cols.map((c, i) => c.padEnd(widths[i])).join(" ");
381
+ console.log(formatRow(header));
382
+ console.log(widths.map((w) => "-".repeat(w)).join(" "));
383
+ for (const row of rows) {
384
+ console.log(formatRow(row));
385
+ }
386
+ });
387
+ sessionsCmd
388
+ .command("inspect <sessionKey>")
389
+ .description("Show messages in a session (most recent 20)")
390
+ .action(async (sessionKey) => {
391
+ const parts = sessionKey.split(":");
392
+ if (parts.length < 3) {
393
+ console.error("Error: Session key must be in format agentId:source:sourceId");
394
+ process.exitCode = 1;
395
+ return;
396
+ }
397
+ const agentId = parts[0];
398
+ const mgr = new SessionManager(getCcgHome());
399
+ const messages = await mgr.readHistory(agentId, sessionKey);
400
+ if (messages.length === 0) {
401
+ console.log("No messages found for this session.");
402
+ return;
403
+ }
404
+ // Show the most recent 20 messages
405
+ const recent = messages.slice(-20);
406
+ const skipped = messages.length - recent.length;
407
+ if (skipped > 0) {
408
+ console.log(`... ${skipped} older message(s) omitted ...\n`);
409
+ }
410
+ for (const msg of recent) {
411
+ const time = new Date(msg.ts).toISOString();
412
+ const src = msg.source ? ` [${msg.source}]` : "";
413
+ const user = msg.sourceUser ? ` (${msg.sourceUser})` : "";
414
+ console.log(`[${time}] ${msg.role}${src}${user}:`);
415
+ console.log(` ${msg.content}`);
416
+ console.log();
417
+ }
418
+ });
419
+ sessionsCmd
420
+ .command("reset <sessionKey>")
421
+ .description("Archive and reset a session")
422
+ .action(async (sessionKey) => {
423
+ const parts = sessionKey.split(":");
424
+ if (parts.length < 3) {
425
+ console.error("Error: Session key must be in format agentId:source:sourceId");
426
+ process.exitCode = 1;
427
+ return;
428
+ }
429
+ const agentId = parts[0];
430
+ const mgr = new SessionManager(getCcgHome());
431
+ await mgr.resetSession(agentId, sessionKey);
432
+ console.log(`Session "${sessionKey}" has been archived and reset.`);
433
+ });
434
+ // ── skills subcommand ────────────────────────────────────────────────────
435
+ const skillsCmd = program
436
+ .command("skills")
437
+ .description("Manage skills");
438
+ skillsCmd
439
+ .command("list")
440
+ .description("List all skills (name, description, type, scope)")
441
+ .option("--agent <id>", "Filter by agent id")
442
+ .action(async (opts) => {
443
+ const mgr = new SkillManager(getCcgHome());
444
+ const skills = await mgr.listSkills(opts.agent);
445
+ if (skills.length === 0) {
446
+ console.log("No skills found.");
447
+ return;
448
+ }
449
+ const header = ["Name", "Description", "Type", "Scope"];
450
+ const rows = skills.map((s) => [
451
+ s.name,
452
+ s.description,
453
+ s.type,
454
+ s.agentId ? `agent:${s.agentId}` : "shared",
455
+ ]);
456
+ const widths = header.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
457
+ const formatRow = (cols) => cols.map((c, i) => c.padEnd(widths[i])).join(" ");
458
+ console.log(formatRow(header));
459
+ console.log(widths.map((w) => "-".repeat(w)).join(" "));
460
+ for (const row of rows) {
461
+ console.log(formatRow(row));
462
+ }
463
+ });
464
+ skillsCmd
465
+ .command("add <file>")
466
+ .description("Add a skill (copy .md file to skills directory)")
467
+ .option("--agent <id>", "Add to agent-specific skills")
468
+ .action(async (file, opts) => {
469
+ const filePath = resolve(file);
470
+ if (!existsSync(filePath)) {
471
+ console.error(`Error: File does not exist: ${filePath}`);
472
+ process.exitCode = 1;
473
+ return;
474
+ }
475
+ if (!filePath.endsWith(".md")) {
476
+ console.error("Error: Skill file must be a .md file");
477
+ process.exitCode = 1;
478
+ return;
479
+ }
480
+ const mgr = new SkillManager(getCcgHome());
481
+ await mgr.addSkill(filePath, opts.agent);
482
+ const scope = opts.agent ? `agent:${opts.agent}` : "shared";
483
+ console.log(`Skill added to ${scope} skills.`);
484
+ });
485
+ skillsCmd
486
+ .command("remove <name>")
487
+ .description("Remove a skill")
488
+ .option("--agent <id>", "Remove from agent-specific skills")
489
+ .action(async (name, opts) => {
490
+ const mgr = new SkillManager(getCcgHome());
491
+ const removed = await mgr.removeSkill(name, opts.agent);
492
+ if (!removed) {
493
+ console.error(`Error: Skill "${name}" not found.`);
494
+ process.exitCode = 1;
495
+ return;
496
+ }
497
+ console.log(`Skill "${name}" removed.`);
498
+ });
499
+ // ── Run ─────────────────────────────────────────────────────────────────────
500
+ program.parse();
501
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export interface AgentConfig {
2
+ id: string;
3
+ name: string;
4
+ emoji: string;
5
+ workspace: string;
6
+ model: string;
7
+ skills: string[];
8
+ allowedTools: string[];
9
+ maxConcurrentSessions: number;
10
+ }
11
+ export interface BindingConfig {
12
+ agent: string;
13
+ gateway: string;
14
+ channel: string;
15
+ bot: string;
16
+ }
17
+ export interface PluginEntry {
18
+ name: string;
19
+ enabled: boolean;
20
+ config: Record<string, unknown>;
21
+ }
22
+ export interface HeartbeatConfig {
23
+ agent: string;
24
+ cron: string;
25
+ tz: string;
26
+ }
27
+ export interface CcgConfig {
28
+ agents: AgentConfig[];
29
+ bindings: BindingConfig[];
30
+ plugins: PluginEntry[];
31
+ heartbeats: HeartbeatConfig[];
32
+ }
33
+ /**
34
+ * Returns the CCG_HOME directory.
35
+ * Uses `CCG_HOME` env var if set, otherwise defaults to `~/.ccgateway`.
36
+ */
37
+ export declare function getCcgHome(): string;
38
+ /**
39
+ * Loads the CcgConfig from `$CCG_HOME/config.json`.
40
+ * If the file does not exist, returns the default (empty) config.
41
+ */
42
+ export declare function loadConfig(): Promise<CcgConfig>;
43
+ /**
44
+ * Saves the CcgConfig to `$CCG_HOME/config.json`.
45
+ * Creates the CCG_HOME directory if it doesn't exist.
46
+ */
47
+ export declare function saveConfig(config: CcgConfig): Promise<void>;
48
+ /**
49
+ * Ensures the standard CCG_HOME subdirectories exist:
50
+ * agents, skills, plugins, logs
51
+ */
52
+ export declare function ensureDirectories(): Promise<void>;
53
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAWD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAWD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAgBrD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUvD"}
package/dist/config.js ADDED
@@ -0,0 +1,70 @@
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ // ── Helpers ─────────────────────────────────────────────────────────────────
6
+ const DEFAULT_CONFIG = {
7
+ agents: [],
8
+ bindings: [],
9
+ plugins: [],
10
+ heartbeats: [],
11
+ };
12
+ /**
13
+ * Returns the CCG_HOME directory.
14
+ * Uses `CCG_HOME` env var if set, otherwise defaults to `~/.ccgateway`.
15
+ */
16
+ export function getCcgHome() {
17
+ return process.env.CCG_HOME || join(homedir(), ".ccgateway");
18
+ }
19
+ /**
20
+ * Returns the path to the config file inside CCG_HOME.
21
+ */
22
+ function configPath() {
23
+ return join(getCcgHome(), "config.json");
24
+ }
25
+ // ── Core functions ──────────────────────────────────────────────────────────
26
+ /**
27
+ * Loads the CcgConfig from `$CCG_HOME/config.json`.
28
+ * If the file does not exist, returns the default (empty) config.
29
+ */
30
+ export async function loadConfig() {
31
+ const path = configPath();
32
+ if (!existsSync(path)) {
33
+ return { ...DEFAULT_CONFIG };
34
+ }
35
+ const raw = await readFile(path, "utf-8");
36
+ const parsed = JSON.parse(raw);
37
+ return {
38
+ agents: parsed.agents ?? [],
39
+ bindings: parsed.bindings ?? [],
40
+ plugins: parsed.plugins ?? [],
41
+ heartbeats: parsed.heartbeats ?? [],
42
+ };
43
+ }
44
+ /**
45
+ * Saves the CcgConfig to `$CCG_HOME/config.json`.
46
+ * Creates the CCG_HOME directory if it doesn't exist.
47
+ */
48
+ export async function saveConfig(config) {
49
+ const home = getCcgHome();
50
+ if (!existsSync(home)) {
51
+ await mkdir(home, { recursive: true });
52
+ }
53
+ const path = configPath();
54
+ await writeFile(path, JSON.stringify(config, null, 2) + "\n", "utf-8");
55
+ }
56
+ /**
57
+ * Ensures the standard CCG_HOME subdirectories exist:
58
+ * agents, skills, plugins, logs
59
+ */
60
+ export async function ensureDirectories() {
61
+ const home = getCcgHome();
62
+ const dirs = ["agents", "skills", "plugins", "logs"];
63
+ for (const dir of dirs) {
64
+ const dirPath = join(home, dir);
65
+ if (!existsSync(dirPath)) {
66
+ await mkdir(dirPath, { recursive: true });
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAyClC,+EAA+E;AAE/E,MAAM,cAAc,GAAc;IAChC,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;IAErD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAErD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC"}