@csdwd/ai-teams-agent 0.3.4 → 0.3.5

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 (2) hide show
  1. package/dist/index.js +47 -16
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -247,6 +247,28 @@ var CLAUDE_HOOKS_ENABLED = process.env.CLAUDE_HOOKS_ENABLED !== "false";
247
247
  var WORKSPACE_CLAUDE_MD = path3.join(DEFAULT_WORKSPACE, "CLAUDE.md");
248
248
  var CLAUDE_MD_SECTION_START = "<!-- AI_TEAMS_AGENT_RULES_START -->";
249
249
  var CLAUDE_MD_SECTION_END = "<!-- AI_TEAMS_AGENT_RULES_END -->";
250
+ function reinitializeConfig() {
251
+ fileConfig = loadConfigFile();
252
+ SERVER_PORT = process.env.AI_TEAMS_SERVER_PORT || "3789";
253
+ SERVER_URL = process.env.SERVER_URL || fileConfig?.serverUrl || `ws://localhost:${SERVER_PORT}`;
254
+ AUTH_TOKEN = process.env.AI_TEAMS_AUTH_TOKEN || fileConfig?.authToken || "";
255
+ EMPLOYEE_ID = process.env.EMPLOYEE_ID || fileConfig?.employeeId || "emp_local";
256
+ EMPLOYEE_NAME = process.env.EMPLOYEE_NAME || fileConfig?.employeeName || "Local Agent";
257
+ EMPLOYEE_LABELS = process.env.EMPLOYEE_LABELS?.split(",").map((item) => item.trim()).filter(Boolean) ?? [];
258
+ RECONNECT_MS = Number(process.env.RECONNECT_MS) || 5e3;
259
+ RUNNER_MODE = process.env.RUNNER_MODE || fileConfig?.runnerMode || "claude";
260
+ DEFAULT_WORKSPACE = process.env.DEFAULT_WORKSPACE || fileConfig?.workspace || process.cwd();
261
+ MAX_BUFFERED_MESSAGES = Number(process.env.AGENT_BUFFER_LIMIT) || 400;
262
+ AGENT_RECORDS_DIR = process.env.AGENT_RECORDS_DIR || path3.join(DEFAULT_WORKSPACE, ".ai-teams", "agents", EMPLOYEE_ID);
263
+ STATE_FILE = process.env.AGENT_STATE_FILE || path3.join(AGENT_RECORDS_DIR, "session-state.json");
264
+ LEGACY_STATE_FILE = path3.join(process.cwd(), `.agent-state.${EMPLOYEE_ID}.json`);
265
+ DAILY_RECORDS_DIR = path3.join(AGENT_RECORDS_DIR, "daily");
266
+ HOOKS_DIR = path3.join(AGENT_RECORDS_DIR, "hooks");
267
+ CLAUDE_HOOK_SCRIPT = path3.join(HOOKS_DIR, "claude-session-recorder.cjs");
268
+ CLAUDE_HOOK_SETTINGS = path3.join(HOOKS_DIR, "claude-hooks.settings.json");
269
+ CLAUDE_HOOKS_ENABLED = process.env.CLAUDE_HOOKS_ENABLED !== "false";
270
+ WORKSPACE_CLAUDE_MD = path3.join(DEFAULT_WORKSPACE, "CLAUDE.md");
271
+ }
250
272
 
251
273
  // src/state.ts
252
274
  import fs3 from "node:fs";
@@ -1201,15 +1223,19 @@ function gracefulShutdown(signal) {
1201
1223
  if (shuttingDown) return;
1202
1224
  shuttingDown = true;
1203
1225
  console.log(`[agent:${EMPLOYEE_ID}] received ${signal}, shutting down...`);
1226
+ const children = [];
1204
1227
  for (const task of [mainTask, queueTask]) {
1205
1228
  if (!task) continue;
1206
1229
  task.cancelRequested = true;
1230
+ if (task.child) children.push(task.child);
1207
1231
  task.child?.kill("SIGTERM");
1208
1232
  send2({ type: "task.cancelled", taskId: task.taskId });
1209
1233
  }
1234
+ mainTask = null;
1235
+ queueTask = null;
1210
1236
  setTimeout(() => {
1211
- for (const task of [mainTask, queueTask]) {
1212
- task?.child?.kill("SIGKILL");
1237
+ for (const child of children) {
1238
+ child.kill("SIGKILL");
1213
1239
  }
1214
1240
  }, 2e3);
1215
1241
  if (connState.reconnectTimer) clearTimeout(connState.reconnectTimer);
@@ -1217,7 +1243,7 @@ function gracefulShutdown(signal) {
1217
1243
  if (connState.socket && connState.socket.readyState === WebSocket2.OPEN) {
1218
1244
  connState.socket.close(1e3, "agent shutting down");
1219
1245
  }
1220
- setTimeout(() => process.exit(0), 500);
1246
+ setTimeout(() => process.exit(0), 3e3);
1221
1247
  }
1222
1248
  process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
1223
1249
  process.on("SIGINT", () => gracefulShutdown("SIGINT"));
@@ -1254,7 +1280,7 @@ if (isCli) {
1254
1280
  getArgValue2 = getArgValue, resolveWorkspace3 = resolveWorkspace2, resolveAgentDir2 = resolveAgentDir, resolvePidFile2 = resolvePidFile, resolveLogDir2 = resolveLogDir, applyCliArgsToEnv2 = applyCliArgsToEnv;
1255
1281
  const args = process.argv.slice(2);
1256
1282
  if (args.includes("--version") || args.includes("-v")) {
1257
- console.log("0.3.4");
1283
+ console.log("0.3.5");
1258
1284
  process.exit(0);
1259
1285
  }
1260
1286
  if (args.includes("--help") || args.includes("-h")) {
@@ -1291,20 +1317,22 @@ if (isCli) {
1291
1317
  } else {
1292
1318
  const subcommand = args[0];
1293
1319
  if (subcommand === "start" || subcommand === "restart") {
1294
- if (subcommand === "restart") {
1295
- const pidFile = resolvePidFile();
1296
- const status = getDaemonStatus(pidFile);
1297
- if (status.running) {
1298
- void stopDaemon(pidFile);
1299
- }
1300
- } else if (!process.env.__AI_TEAMS_DAEMON_WATCHDOG && !process.env.__AI_TEAMS_DAEMON_WORKER) {
1301
- const status = getDaemonStatus(resolvePidFile());
1302
- if (status.running) {
1303
- console.log(`Already running (PID ${status.pid}).`);
1304
- process.exit(0);
1320
+ applyCliArgsToEnv();
1321
+ if (!process.env.__AI_TEAMS_DAEMON_WATCHDOG && !process.env.__AI_TEAMS_DAEMON_WORKER) {
1322
+ if (subcommand === "restart") {
1323
+ const pidFile = resolvePidFile();
1324
+ const status = getDaemonStatus(pidFile);
1325
+ if (status.running) {
1326
+ void stopDaemon(pidFile);
1327
+ }
1328
+ } else {
1329
+ const status = getDaemonStatus(resolvePidFile());
1330
+ if (status.running) {
1331
+ console.log(`Already running (PID ${status.pid}).`);
1332
+ process.exit(0);
1333
+ }
1305
1334
  }
1306
1335
  }
1307
- applyCliArgsToEnv();
1308
1336
  const fileConfig2 = loadConfigFile();
1309
1337
  const hasEnvConfig = process.env.AI_TEAMS_AUTH_TOKEN || process.env.SERVER_URL;
1310
1338
  if (!fileConfig2 && !hasEnvConfig) {
@@ -1319,6 +1347,8 @@ if (isCli) {
1319
1347
  run: async () => {
1320
1348
  console.log(" \u2713 \u6B63\u5728\u8FDE\u63A5\u670D\u52A1\u5668...");
1321
1349
  connect2();
1350
+ return new Promise(() => {
1351
+ });
1322
1352
  }
1323
1353
  });
1324
1354
  })();
@@ -1355,6 +1385,7 @@ if (isCli) {
1355
1385
  await runSetup(null);
1356
1386
  }
1357
1387
  applyCliArgsToEnv();
1388
+ reinitializeConfig();
1358
1389
  console.log(" \u2713 \u6B63\u5728\u8FDE\u63A5\u670D\u52A1\u5668...");
1359
1390
  connect2();
1360
1391
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csdwd/ai-teams-agent",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "AI Teams agent — connects to server via WebSocket, spawns Claude CLI to execute tasks",
5
5
  "type": "module",
6
6
  "bin": {