@csdwd/ai-teams-agent 0.3.3 → 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 -17
  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";
@@ -1045,7 +1067,6 @@ function connect(state, getMainTask, getQueueTask, onMessage) {
1045
1067
  }
1046
1068
 
1047
1069
  // src/index.ts
1048
- var PKG_VERSION = "0.2.0";
1049
1070
  var mainTask = null;
1050
1071
  var queueTask = null;
1051
1072
  var agentState = loadState();
@@ -1202,15 +1223,19 @@ function gracefulShutdown(signal) {
1202
1223
  if (shuttingDown) return;
1203
1224
  shuttingDown = true;
1204
1225
  console.log(`[agent:${EMPLOYEE_ID}] received ${signal}, shutting down...`);
1226
+ const children = [];
1205
1227
  for (const task of [mainTask, queueTask]) {
1206
1228
  if (!task) continue;
1207
1229
  task.cancelRequested = true;
1230
+ if (task.child) children.push(task.child);
1208
1231
  task.child?.kill("SIGTERM");
1209
1232
  send2({ type: "task.cancelled", taskId: task.taskId });
1210
1233
  }
1234
+ mainTask = null;
1235
+ queueTask = null;
1211
1236
  setTimeout(() => {
1212
- for (const task of [mainTask, queueTask]) {
1213
- task?.child?.kill("SIGKILL");
1237
+ for (const child of children) {
1238
+ child.kill("SIGKILL");
1214
1239
  }
1215
1240
  }, 2e3);
1216
1241
  if (connState.reconnectTimer) clearTimeout(connState.reconnectTimer);
@@ -1218,7 +1243,7 @@ function gracefulShutdown(signal) {
1218
1243
  if (connState.socket && connState.socket.readyState === WebSocket2.OPEN) {
1219
1244
  connState.socket.close(1e3, "agent shutting down");
1220
1245
  }
1221
- setTimeout(() => process.exit(0), 500);
1246
+ setTimeout(() => process.exit(0), 3e3);
1222
1247
  }
1223
1248
  process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
1224
1249
  process.on("SIGINT", () => gracefulShutdown("SIGINT"));
@@ -1255,7 +1280,7 @@ if (isCli) {
1255
1280
  getArgValue2 = getArgValue, resolveWorkspace3 = resolveWorkspace2, resolveAgentDir2 = resolveAgentDir, resolvePidFile2 = resolvePidFile, resolveLogDir2 = resolveLogDir, applyCliArgsToEnv2 = applyCliArgsToEnv;
1256
1281
  const args = process.argv.slice(2);
1257
1282
  if (args.includes("--version") || args.includes("-v")) {
1258
- console.log(PKG_VERSION);
1283
+ console.log("0.3.5");
1259
1284
  process.exit(0);
1260
1285
  }
1261
1286
  if (args.includes("--help") || args.includes("-h")) {
@@ -1292,20 +1317,22 @@ if (isCli) {
1292
1317
  } else {
1293
1318
  const subcommand = args[0];
1294
1319
  if (subcommand === "start" || subcommand === "restart") {
1295
- if (subcommand === "restart") {
1296
- const pidFile = resolvePidFile();
1297
- const status = getDaemonStatus(pidFile);
1298
- if (status.running) {
1299
- void stopDaemon(pidFile);
1300
- }
1301
- } else if (!process.env.__AI_TEAMS_DAEMON_WATCHDOG && !process.env.__AI_TEAMS_DAEMON_WORKER) {
1302
- const status = getDaemonStatus(resolvePidFile());
1303
- if (status.running) {
1304
- console.log(`Already running (PID ${status.pid}).`);
1305
- 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
+ }
1306
1334
  }
1307
1335
  }
1308
- applyCliArgsToEnv();
1309
1336
  const fileConfig2 = loadConfigFile();
1310
1337
  const hasEnvConfig = process.env.AI_TEAMS_AUTH_TOKEN || process.env.SERVER_URL;
1311
1338
  if (!fileConfig2 && !hasEnvConfig) {
@@ -1320,6 +1347,8 @@ if (isCli) {
1320
1347
  run: async () => {
1321
1348
  console.log(" \u2713 \u6B63\u5728\u8FDE\u63A5\u670D\u52A1\u5668...");
1322
1349
  connect2();
1350
+ return new Promise(() => {
1351
+ });
1323
1352
  }
1324
1353
  });
1325
1354
  })();
@@ -1356,6 +1385,7 @@ if (isCli) {
1356
1385
  await runSetup(null);
1357
1386
  }
1358
1387
  applyCliArgsToEnv();
1388
+ reinitializeConfig();
1359
1389
  console.log(" \u2713 \u6B63\u5728\u8FDE\u63A5\u670D\u52A1\u5668...");
1360
1390
  connect2();
1361
1391
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csdwd/ai-teams-agent",
3
- "version": "0.3.3",
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": {