@integrity-labs/agt-cli 0.10.7 → 0.10.8
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.
package/dist/bin/agt.js
CHANGED
|
@@ -3411,7 +3411,7 @@ async function acpxCloseCommand(agent2, _opts, cmd) {
|
|
|
3411
3411
|
import { execSync } from "child_process";
|
|
3412
3412
|
import chalk19 from "chalk";
|
|
3413
3413
|
import ora15 from "ora";
|
|
3414
|
-
var cliVersion = true ? "0.10.
|
|
3414
|
+
var cliVersion = true ? "0.10.8" : "dev";
|
|
3415
3415
|
async function fetchLatestVersion() {
|
|
3416
3416
|
const host2 = getHost();
|
|
3417
3417
|
if (!host2) return null;
|
|
@@ -3810,7 +3810,7 @@ function handleError(err) {
|
|
|
3810
3810
|
}
|
|
3811
3811
|
|
|
3812
3812
|
// src/bin/agt.ts
|
|
3813
|
-
var cliVersion2 = true ? "0.10.
|
|
3813
|
+
var cliVersion2 = true ? "0.10.8" : "dev";
|
|
3814
3814
|
var program = new Command();
|
|
3815
3815
|
program.name("agt").description("Augmented CLI \u2014 agent provisioning and management").version(cliVersion2).option("--json", "Emit machine-readable JSON output (suppress spinners and colors)").option("--skip-update-check", "Skip the automatic update check on startup");
|
|
3816
3816
|
program.hook("preAction", (thisCommand) => {
|
|
@@ -2489,6 +2489,12 @@ async function syncAndCheckClaudeScheduler(agent, tasks, boardItems, refreshData
|
|
|
2489
2489
|
for (const task of ready) {
|
|
2490
2490
|
if (inFlightClaudeTasks.has(task.taskId)) continue;
|
|
2491
2491
|
if ((claudeTaskConcurrency.get(codeName) ?? 0) >= MAX_CLAUDE_CONCURRENCY) break;
|
|
2492
|
+
if (KANBAN_WORK_TEMPLATES.has(task.templateId) && !hasActionableItems(boardItems)) {
|
|
2493
|
+
log(`[claude-scheduler] Skipping '${task.name}' for '${codeName}' \u2014 board is empty`);
|
|
2494
|
+
const updated = markTaskFired(codeName, task.taskId, "ok");
|
|
2495
|
+
claudeSchedulerStates.set(codeName, updated);
|
|
2496
|
+
continue;
|
|
2497
|
+
}
|
|
2492
2498
|
let prompt = task.prompt;
|
|
2493
2499
|
if (BOARD_INJECT_TEMPLATES.has(task.templateId) && boardItems.length > 0) {
|
|
2494
2500
|
const template = PLAN_TEMPLATES.has(task.templateId) ? "morning-plan" : "follow-up";
|
|
@@ -2763,6 +2769,12 @@ async function ensurePersistentSession(agent, tasks, boardItems, refreshData) {
|
|
|
2763
2769
|
log(`[persistent-session] ${ready.length} ready task(s) for '${codeName}': ${ready.map((t) => `${t.name}(next=${t.nextFireAt ? new Date(t.nextFireAt).toISOString() : "null"})`).join(", ")}`);
|
|
2764
2770
|
}
|
|
2765
2771
|
for (const task of ready) {
|
|
2772
|
+
if (KANBAN_WORK_TEMPLATES.has(task.templateId) && !hasActionableItems(boardItems)) {
|
|
2773
|
+
log(`[persistent-session] Skipping '${task.name}' for '${codeName}' \u2014 board is empty`);
|
|
2774
|
+
const updated = markTaskFired(codeName, task.taskId, "ok");
|
|
2775
|
+
claudeSchedulerStates.set(codeName, updated);
|
|
2776
|
+
continue;
|
|
2777
|
+
}
|
|
2766
2778
|
let prompt = task.prompt;
|
|
2767
2779
|
if (BOARD_INJECT_TEMPLATES.has(task.templateId) && boardItems.length > 0) {
|
|
2768
2780
|
const template = PLAN_TEMPLATES.has(task.templateId) ? "morning-plan" : "follow-up";
|
|
@@ -3154,6 +3166,10 @@ var TASK_UPDATE_TEMPLATES = /* @__PURE__ */ new Set(["hourly-status", "task-upda
|
|
|
3154
3166
|
var PLAN_TEMPLATES = /* @__PURE__ */ new Set(["morning-plan"]);
|
|
3155
3167
|
var KANBAN_WORK_TEMPLATES = /* @__PURE__ */ new Set(["kanban-work"]);
|
|
3156
3168
|
var BOARD_INJECT_TEMPLATES = /* @__PURE__ */ new Set(["morning-plan", "task-update", "hourly-status", "end-of-day-summary", "kanban-work"]);
|
|
3169
|
+
var ACTIONABLE_STATUSES = /* @__PURE__ */ new Set(["backlog", "today", "in_progress"]);
|
|
3170
|
+
function hasActionableItems(items) {
|
|
3171
|
+
return items.some((item) => ACTIONABLE_STATUSES.has(item.status));
|
|
3172
|
+
}
|
|
3157
3173
|
var lastHarvestAt = /* @__PURE__ */ new Map();
|
|
3158
3174
|
var HARVEST_INTERVAL_MS = 3 * 60 * 1e3;
|
|
3159
3175
|
var kanbanBoardCache = /* @__PURE__ */ new Map();
|
|
@@ -3897,8 +3913,8 @@ async function syncMemories(agent, configDir, log2) {
|
|
|
3897
3913
|
log2(`Synced ${changedMemories.length} changed memories to DB for '${agent.code_name}'`);
|
|
3898
3914
|
} catch (err) {
|
|
3899
3915
|
for (const mem of changedMemories) {
|
|
3900
|
-
for (const [file
|
|
3901
|
-
const parsed = parseMemoryFile(readFileSync(join(memoryDir, file), "utf-8"), "");
|
|
3916
|
+
for (const [file] of currentHashes) {
|
|
3917
|
+
const parsed = parseMemoryFile(readFileSync(join(memoryDir, file), "utf-8"), file.replace(/\.md$/, ""));
|
|
3902
3918
|
if (parsed?.name === mem.name) currentHashes.delete(file);
|
|
3903
3919
|
}
|
|
3904
3920
|
}
|
|
@@ -3910,12 +3926,14 @@ async function syncMemories(agent, configDir, log2) {
|
|
|
3910
3926
|
const localListHash = createHash("sha256").update(localFiles.join(",")).digest("hex").slice(0, 16);
|
|
3911
3927
|
const prevLocalHash = lastLocalFileHash.get(agent.agent_id);
|
|
3912
3928
|
const prevDownload = lastDownloadHash.get(agent.agent_id);
|
|
3913
|
-
if (prevDownload && prevLocalHash === localListHash) return;
|
|
3914
3929
|
try {
|
|
3915
3930
|
const dbMemories = await api.post("/host/memories", {
|
|
3916
3931
|
agent_id: agent.agent_id
|
|
3917
3932
|
});
|
|
3918
3933
|
const responseHash = createHash("sha256").update(JSON.stringify(dbMemories.memories ?? [])).digest("hex").slice(0, 16);
|
|
3934
|
+
if (prevDownload && prevLocalHash === localListHash && lastDownloadHash.get(agent.agent_id) === responseHash) {
|
|
3935
|
+
return;
|
|
3936
|
+
}
|
|
3919
3937
|
lastDownloadHash.set(agent.agent_id, responseHash);
|
|
3920
3938
|
lastLocalFileHash.set(agent.agent_id, localListHash);
|
|
3921
3939
|
if (dbMemories.memories?.length) {
|