@songsid/agend 2.0.4 → 2.0.5-beta.10

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.
@@ -194,10 +194,12 @@ export class ClassicChannelManager {
194
194
  static logMessage(instanceName, username, text, timestamp, replyToText) {
195
195
  const logDir = ClassicChannelManager.chatLogDir(instanceName);
196
196
  mkdirSync(logDir, { recursive: true });
197
- const dateStr = timestamp.toISOString().slice(0, 10);
197
+ const tz = process.env.TZ || Intl.DateTimeFormat().resolvedOptions().timeZone;
198
+ const localStr = timestamp.toLocaleString("sv-SE", { timeZone: tz, hour12: false }).replace(" ", "T");
199
+ const dateStr = localStr.slice(0, 10);
198
200
  const logFile = join(logDir, `${dateStr}.log`);
199
201
  const replyPrefix = replyToText ? `[reply: ${replyToText.slice(0, 100)}] ` : "";
200
- appendFileSync(logFile, `[${timestamp.toISOString()}] <${username}> ${replyPrefix}${text}\n`);
202
+ appendFileSync(logFile, `[${localStr}] <${username}> ${replyPrefix}${text}\n`);
201
203
  }
202
204
  /** Delete chat log files older than retentionDays. Dates parsed as local to avoid UTC off-by-one. */
203
205
  rotateLogs(retentionDays = 7) {
@@ -1 +1 @@
1
- {"version":3,"file":"classic-channel-manager.js","sourceRoot":"","sources":["../src/classic-channel-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classic-channel-manager.js","sourceRoot":"","sources":["../src/classic-channel-manager.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -711,6 +711,148 @@ backend
711
711
  }
712
712
  console.log();
713
713
  });
714
+ // ── doctor mcp ──
715
+ program
716
+ .command("doctor")
717
+ .description("Run fleet health diagnostics")
718
+ .argument("[check]", "Specific check to run (mcp)")
719
+ .action(async (check) => {
720
+ if (check === "mcp") {
721
+ await doctorMcp();
722
+ }
723
+ else {
724
+ console.log("Usage: agend doctor mcp");
725
+ console.log(" mcp — Check fleet MCP health (IPC sockets, MCP configs, backends)");
726
+ }
727
+ });
728
+ async function doctorMcp() {
729
+ const { execSync } = await import("node:child_process");
730
+ const net = await import("node:net");
731
+ const yaml = await import("js-yaml");
732
+ const fleetYamlPath = join(DATA_DIR, "fleet.yaml");
733
+ if (!existsSync(fleetYamlPath)) {
734
+ console.error(" fleet.yaml not found at " + fleetYamlPath);
735
+ process.exit(1);
736
+ }
737
+ const fleet = yaml.default.load(readFileSync(fleetYamlPath, "utf-8"));
738
+ const instances = fleet?.instances ?? {};
739
+ const names = Object.keys(instances);
740
+ let errors = 0, warnings = 0, healthy = 0;
741
+ const ok = (msg) => { healthy++; console.log(` \x1b[32m✓\x1b[0m ${msg}`); };
742
+ const fail = (msg) => { errors++; console.log(` \x1b[31m✗\x1b[0m ${msg}`); };
743
+ const warn = (msg) => { warnings++; console.log(` \x1b[33m⚠\x1b[0m ${msg}`); };
744
+ console.log(`\n \x1b[1mMCP Health Check (${names.length} instances)\x1b[0m\n`);
745
+ // Detect duplicate working_directories
746
+ const dirMap = new Map();
747
+ for (const [name, cfg] of Object.entries(instances)) {
748
+ const dir = cfg.working_directory ?? cfg.directory;
749
+ if (dir) {
750
+ if (!dirMap.has(dir))
751
+ dirMap.set(dir, []);
752
+ dirMap.get(dir).push(name);
753
+ }
754
+ }
755
+ for (const name of names) {
756
+ const cfg = instances[name];
757
+ const dir = cfg.working_directory ?? cfg.directory;
758
+ const backend = cfg.backend ?? fleet?.defaults?.backend ?? "claude-code";
759
+ const issues = [];
760
+ const suggestions = [];
761
+ // 1. IPC socket check
762
+ const sockPath = join(DATA_DIR, "instances", name, "channel.sock");
763
+ let ipcOk = false;
764
+ if (existsSync(sockPath)) {
765
+ ipcOk = await new Promise((resolve) => {
766
+ const client = net.connect(sockPath);
767
+ const timeout = setTimeout(() => { client.destroy(); resolve(false); }, 1000);
768
+ client.on("connect", () => { clearTimeout(timeout); client.destroy(); resolve(true); });
769
+ client.on("error", () => { clearTimeout(timeout); resolve(false); });
770
+ });
771
+ }
772
+ if (!ipcOk) {
773
+ issues.push("IPC ✗ (socket not responding)");
774
+ suggestions.push("agend fleet restart");
775
+ }
776
+ // 2. MCP config check
777
+ let mcpOk = false;
778
+ if (dir) {
779
+ let mcpPaths = [];
780
+ if (backend === "claude-code")
781
+ mcpPaths = [join(dir, ".claude", "mcp.json"), join(dir, ".mcp.json")];
782
+ else if (backend === "kiro-cli")
783
+ mcpPaths = [join(dir, ".kiro", "settings", "mcp.json")];
784
+ else
785
+ mcpPaths = [join(dir, ".mcp.json")];
786
+ for (const mp of mcpPaths) {
787
+ if (existsSync(mp)) {
788
+ try {
789
+ const mcpCfg = JSON.parse(readFileSync(mp, "utf-8"));
790
+ const servers = mcpCfg.mcpServers ?? mcpCfg;
791
+ for (const [, srv] of Object.entries(servers)) {
792
+ const args = srv.args ?? [];
793
+ const serverJs = args.find((a) => a.includes("mcp-server"));
794
+ if (serverJs && existsSync(serverJs)) {
795
+ mcpOk = true;
796
+ break;
797
+ }
798
+ if (serverJs && !existsSync(serverJs)) {
799
+ issues.push(`MCP config ✗ (server.js not found: ${serverJs})`);
800
+ suggestions.push("npm update -g @songsid/agend");
801
+ }
802
+ }
803
+ }
804
+ catch { /* parse error */ }
805
+ if (mcpOk)
806
+ break;
807
+ }
808
+ }
809
+ }
810
+ // 3. Duplicate working_directory
811
+ let dupWarn = false;
812
+ if (dir && dirMap.get(dir).length > 1) {
813
+ const others = dirMap.get(dir).filter(n => n !== name);
814
+ if (others.length > 0) {
815
+ dupWarn = true;
816
+ warn(`${name.padEnd(24)} Duplicate working_directory with ${others.join(", ")}`);
817
+ console.log(` → Use --branch to create separate worktrees`);
818
+ }
819
+ }
820
+ // Output
821
+ if (issues.length === 0 && !dupWarn) {
822
+ const parts = [`IPC ${ipcOk ? "✓" : "—"}`];
823
+ if (mcpOk)
824
+ parts.push("MCP config ✓");
825
+ ok(`${name.padEnd(24)} ${parts.join(" ")}`);
826
+ }
827
+ else if (!dupWarn) {
828
+ fail(`${name.padEnd(24)} ${issues.join(" ")}`);
829
+ for (const s of suggestions)
830
+ console.log(` → ${s}`);
831
+ }
832
+ }
833
+ // Backend PATH check
834
+ console.log(`\n \x1b[1mBackend PATH\x1b[0m\n`);
835
+ const backendsUsed = new Set();
836
+ for (const cfg of Object.values(instances)) {
837
+ backendsUsed.add(cfg.backend ?? fleet?.defaults?.backend ?? "claude-code");
838
+ }
839
+ const binaryMap = {
840
+ "claude-code": "claude", "codex": "codex", "gemini-cli": "gemini",
841
+ "opencode": "opencode", "kiro-cli": "kiro-cli", "antigravity": "agy",
842
+ };
843
+ for (const b of backendsUsed) {
844
+ const bin = binaryMap[b] ?? b;
845
+ try {
846
+ const which = execSync(`which ${bin}`, { stdio: "pipe" }).toString().trim();
847
+ ok(`${bin.padEnd(24)} ${which}`);
848
+ }
849
+ catch {
850
+ fail(`${bin.padEnd(24)} not found in PATH`);
851
+ }
852
+ }
853
+ const total = healthy + errors + warnings;
854
+ console.log(`\n Summary: ${healthy}/${total} healthy, ${errors} error(s), ${warnings} warning(s)\n`);
855
+ }
714
856
  backend
715
857
  .command("trust")
716
858
  .description("Pre-trust working directories for a backend (prevents trust dialogs)")