@integrity-labs/agt-cli 0.28.158 → 0.28.160

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.
@@ -3,7 +3,7 @@ import {
3
3
  formatMissingVar,
4
4
  isClaudeFastMode,
5
5
  probeMcpEnvSubstitution
6
- } from "./chunk-TLX6ORJ5.js";
6
+ } from "./chunk-65FVM2UA.js";
7
7
  import {
8
8
  reapOrphanChannelMcps
9
9
  } from "./chunk-XWVM4KPK.js";
@@ -1588,4 +1588,4 @@ export {
1588
1588
  stopAllSessionsAndWait,
1589
1589
  getProjectDir
1590
1590
  };
1591
- //# sourceMappingURL=chunk-E6ABR63O.js.map
1591
+ //# sourceMappingURL=chunk-GZG5JRRX.js.map
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-N7WFONZC.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-TSVRKR7F.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-SXO5Q5R6.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-HN3PEIZ2.js.map
@@ -28,7 +28,7 @@ import {
28
28
  requireHost,
29
29
  safeWriteJsonAtomic,
30
30
  setConfigHash
31
- } from "../chunk-3OLFOA4F.js";
31
+ } from "../chunk-23U3HSVH.js";
32
32
  import {
33
33
  getProjectDir as getProjectDir2,
34
34
  getReadyTasks,
@@ -70,8 +70,10 @@ import {
70
70
  takeZombieDetection,
71
71
  transcriptActivityAgeSeconds,
72
72
  writeEgressAllowlist
73
- } from "../chunk-E6ABR63O.js";
73
+ } from "../chunk-GZG5JRRX.js";
74
74
  import {
75
+ CONVERSATION_FAILURE_CATEGORIES,
76
+ DEFAULT_FRAMEWORK,
75
77
  FLAGS_SCHEMA_VERSION,
76
78
  FLAG_REGISTRY,
77
79
  KANBAN_CHECK_COMMAND,
@@ -80,6 +82,7 @@ import {
80
82
  StreamEncoder,
81
83
  appendDmFooter,
82
84
  attributeTranscriptUsageByRun,
85
+ buildFailureCategoryPromptLines,
83
86
  buildScheduledTaskContextBlocks,
84
87
  classifyActor,
85
88
  classifyOutput,
@@ -89,6 +92,7 @@ import {
89
92
  formatActorId,
90
93
  formatRunMarker,
91
94
  getFramework,
95
+ isConversationFailureCategory,
92
96
  isEmptyTotals,
93
97
  isOnboardingArea,
94
98
  isParseError,
@@ -107,7 +111,7 @@ import {
107
111
  resolveChannels,
108
112
  resolveDmTarget,
109
113
  sumTranscriptUsageInWindow
110
- } from "../chunk-TLX6ORJ5.js";
114
+ } from "../chunk-65FVM2UA.js";
111
115
  import {
112
116
  parsePsRows,
113
117
  reapOrphanChannelMcps
@@ -2498,9 +2502,10 @@ Score the agent's success:
2498
2502
  - score: integer 0-100 (0 = ignored/unhelpful/wrong, 100 = fully resolved the user's need)
2499
2503
  - verdict: "success" (need clearly met), "partial" (some help but incomplete/ambiguous), or "failure" (did not help / made it worse)
2500
2504
  - summary: ONE short sentence (max 140 chars) explaining the score. Do NOT quote sensitive user content.
2505
+ - failure_category: ONLY when verdict is "failure", the single best-fitting reason from this exact set: ${buildFailureCategoryPromptLines()}. Use null when verdict is "success" or "partial".
2501
2506
 
2502
2507
  Respond with ONLY a JSON object, no other text:
2503
- {"score": 0-100, "verdict": "success|partial|failure", "summary": "..."}`;
2508
+ {"score": 0-100, "verdict": "success|partial|failure", "summary": "...", "failure_category": "${CONVERSATION_FAILURE_CATEGORIES.join("|")} or null"}`;
2504
2509
  }
2505
2510
  function parseVerdict(raw) {
2506
2511
  const match = raw.match(/\{[\s\S]*\}/);
@@ -2515,7 +2520,8 @@ function parseVerdict(raw) {
2515
2520
  if (!Number.isFinite(score) || score < 0 || score > 100) return null;
2516
2521
  if (obj.verdict !== "success" && obj.verdict !== "partial" && obj.verdict !== "failure") return null;
2517
2522
  const summary = typeof obj.summary === "string" ? obj.summary.slice(0, 140) : "";
2518
- return { score: Math.round(score), verdict: obj.verdict, summary };
2523
+ const failureCategory = obj.verdict === "failure" && isConversationFailureCategory(obj.failure_category) ? obj.failure_category : null;
2524
+ return { score: Math.round(score), verdict: obj.verdict, summary, failureCategory };
2519
2525
  }
2520
2526
  async function maybeEvaluateConversations(args) {
2521
2527
  const { api: api2, backend, codeName, agentId, log: log2 } = args;
@@ -2585,6 +2591,7 @@ async function maybeEvaluateConversations(args) {
2585
2591
  score: verdict.score,
2586
2592
  verdict: verdict.verdict,
2587
2593
  summary: verdict.summary,
2594
+ failure_category: verdict.failureCategory,
2588
2595
  model: backend.model
2589
2596
  });
2590
2597
  log2(
@@ -4529,7 +4536,7 @@ function cacheAgentDeliveryMetadata(codeName, refreshData) {
4529
4536
  const agentRow = refreshData["agent"] ?? {};
4530
4537
  const displayName = agentRow["display_name"] ?? codeName;
4531
4538
  const ownerTeamName = agentRow["owner_team_name"] ?? null;
4532
- const framework = agentRow["framework"] ?? "openclaw";
4539
+ const framework = agentRow["framework"] ?? DEFAULT_FRAMEWORK;
4533
4540
  const reportsToPersonId = agentRow["reports_to"] ?? null;
4534
4541
  const reportsToType = agentRow["reports_to_type"] ?? null;
4535
4542
  const channelConfigs = refreshData["channel_configs"] ?? {};
@@ -6842,7 +6849,7 @@ var frameworkBinaryChecked = /* @__PURE__ */ new Set();
6842
6849
  var agentRuntimeAuthenticated = false;
6843
6850
  var lastManagedSettingsStatus = null;
6844
6851
  function resolveAgentFramework(codeName) {
6845
- const frameworkId = agentFrameworkCache.get(codeName) ?? "openclaw";
6852
+ const frameworkId = agentFrameworkCache.get(codeName) ?? DEFAULT_FRAMEWORK;
6846
6853
  return getFramework(frameworkId);
6847
6854
  }
6848
6855
  var gatewayPool = null;
@@ -6871,7 +6878,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6871
6878
  var lastVersionCheckAt = 0;
6872
6879
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6873
6880
  var lastResponsivenessProbeAt = 0;
6874
- var agtCliVersion = true ? "0.28.158" : "dev";
6881
+ var agtCliVersion = true ? "0.28.160" : "dev";
6875
6882
  function resolveBrewPath(execFileSync4) {
6876
6883
  try {
6877
6884
  const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -7718,7 +7725,7 @@ async function migrateToProfiles() {
7718
7725
  const agents = sharedConfig["agents"];
7719
7726
  const agentList = agents?.["list"] ?? [];
7720
7727
  if (agentList.length === 0) return;
7721
- const adapter = getFramework("openclaw");
7728
+ const adapter = getFramework(DEFAULT_FRAMEWORK);
7722
7729
  let migrated = 0;
7723
7730
  for (const agentEntry of agentList) {
7724
7731
  const codeName = agentEntry["id"];
@@ -7994,7 +8001,7 @@ async function pollCycle() {
7994
8001
  if (now - lastVersionCheckAt > VERSION_CHECK_INTERVAL_MS) {
7995
8002
  try {
7996
8003
  const firstAgent = state6.agents[0];
7997
- const versionAdapter = firstAgent ? resolveAgentFramework(firstAgent.codeName) : getFramework("openclaw");
8004
+ const versionAdapter = firstAgent ? resolveAgentFramework(firstAgent.codeName) : getFramework(DEFAULT_FRAMEWORK);
7998
8005
  if (versionAdapter.getVersion) {
7999
8006
  cachedFrameworkVersion = await versionAdapter.getVersion();
8000
8007
  }
@@ -8004,7 +8011,7 @@ async function pollCycle() {
8004
8011
  }
8005
8012
  try {
8006
8013
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
8007
- const { collectDiagnostics } = await import("../persistent-session-N7WFONZC.js");
8014
+ const { collectDiagnostics } = await import("../persistent-session-TSVRKR7F.js");
8008
8015
  const diagCodeNames = [...agentState.persistentSessionAgents];
8009
8016
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
8010
8017
  let tailscaleHostname;
@@ -8152,7 +8159,7 @@ async function pollCycle() {
8152
8159
  const {
8153
8160
  collectResponsivenessProbes,
8154
8161
  getResponsivenessIntervalMs
8155
- } = await import("../responsiveness-probe-UXJY4YRL.js");
8162
+ } = await import("../responsiveness-probe-DXPMUSVR.js");
8156
8163
  const probeIntervalMs = getResponsivenessIntervalMs();
8157
8164
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
8158
8165
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -8184,7 +8191,7 @@ async function pollCycle() {
8184
8191
  collectResponsivenessProbes,
8185
8192
  livePendingInboundOldestAgeSeconds,
8186
8193
  parkPendingInbound
8187
- } = await import("../responsiveness-probe-UXJY4YRL.js");
8194
+ } = await import("../responsiveness-probe-DXPMUSVR.js");
8188
8195
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8189
8196
  const wedgeNow = /* @__PURE__ */ new Date();
8190
8197
  const liveAgents = agentState.persistentSessionAgents;
@@ -8469,7 +8476,7 @@ async function pollCycle() {
8469
8476
  });
8470
8477
  }
8471
8478
  {
8472
- const claudeCodeAgents = agentStates.filter((a) => a.status === "active").filter((a) => (agentFrameworkCache.get(a.codeName) ?? "openclaw") === "claude-code").map((a) => a.codeName);
8479
+ const claudeCodeAgents = agentStates.filter((a) => a.status === "active").filter((a) => (agentFrameworkCache.get(a.codeName) ?? DEFAULT_FRAMEWORK) === "claude-code").map((a) => a.codeName);
8473
8480
  checkChannelInputs(claudeCodeAgents, {
8474
8481
  capturePane: (codeName) => {
8475
8482
  try {
@@ -8860,7 +8867,7 @@ async function processAgent(agent, agentStates) {
8860
8867
  });
8861
8868
  return;
8862
8869
  }
8863
- const frameworkId = refreshData.agent.framework ?? "openclaw";
8870
+ const frameworkId = refreshData.agent.framework ?? DEFAULT_FRAMEWORK;
8864
8871
  agentFrameworkCache.set(agent.code_name, frameworkId);
8865
8872
  const frameworkAdapter = getFramework(frameworkId);
8866
8873
  agentDir = join16(frameworkAdapter.getAgentDir(agent.code_name), "provision");
@@ -9256,7 +9263,7 @@ async function processAgent(agent, agentStates) {
9256
9263
  previousChannelIds,
9257
9264
  currentChannelIds,
9258
9265
  sessionMode: refreshData.agent.session_mode,
9259
- framework: agentFrameworkCache.get(agent.code_name) ?? "openclaw",
9266
+ framework: agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK,
9260
9267
  sessionHealthy: isSessionHealthy(agent.code_name)
9261
9268
  }) : { restart: false, added: [], removed: [] };
9262
9269
  const quarantineOnlyRemoval = restartDecision.restart && restartDecision.added.length === 0 && restartDecision.removed.length > 0 && restartDecision.removed.every((c) => quarantinedChannels.has(c));
@@ -9313,7 +9320,7 @@ async function processAgent(agent, agentStates) {
9313
9320
  previousHash: prevSenderPolicyHash,
9314
9321
  currentHash: senderPolicyHash,
9315
9322
  sessionMode: refreshData.agent.session_mode,
9316
- framework: agentFrameworkCache.get(agent.code_name) ?? "openclaw",
9323
+ framework: agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK,
9317
9324
  sessionHealthy: isSessionHealthy(agent.code_name),
9318
9325
  channelSetRestartAlreadyScheduled: channelSetRestartScheduled
9319
9326
  }) : { restart: false, firstPoll: prevSenderPolicyHash === void 0, changed: false };
@@ -9355,7 +9362,7 @@ async function processAgent(agent, agentStates) {
9355
9362
  previousHash: prevBehaviourHash,
9356
9363
  currentHash: behaviourHash,
9357
9364
  sessionMode: refreshData.agent.session_mode,
9358
- framework: agentFrameworkCache.get(agent.code_name) ?? "openclaw",
9365
+ framework: agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK,
9359
9366
  sessionHealthy: isSessionHealthy(agent.code_name),
9360
9367
  // A channel-set or sender-policy restart scheduled this tick will
9361
9368
  // respawn the MCP children with the freshly-written env for free.
@@ -9402,7 +9409,7 @@ async function processAgent(agent, agentStates) {
9402
9409
  previousHash: prevSlackBehaviourHash,
9403
9410
  currentHash: slackBehaviourHash,
9404
9411
  sessionMode: refreshData.agent.session_mode,
9405
- framework: agentFrameworkCache.get(agent.code_name) ?? "openclaw",
9412
+ framework: agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK,
9406
9413
  sessionHealthy: isSessionHealthy(agent.code_name),
9407
9414
  // A channel-set, sender-policy, or msteams-behaviour restart
9408
9415
  // scheduled this tick respawns the MCP children with the
@@ -9440,7 +9447,7 @@ async function processAgent(agent, agentStates) {
9440
9447
  }
9441
9448
  }
9442
9449
  const agentSessionMode = refreshData.agent.session_mode;
9443
- if (agentSessionMode === "persistent" && (agentFrameworkCache.get(agent.code_name) ?? "openclaw") === "claude-code") {
9450
+ if (agentSessionMode === "persistent" && (agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK) === "claude-code") {
9444
9451
  try {
9445
9452
  const agentProvisionDir = agentDir;
9446
9453
  const projectDir = join16(homedir9(), ".augmented", agent.code_name, "project");
@@ -9482,7 +9489,7 @@ async function processAgent(agent, agentStates) {
9482
9489
  if (directChatTz) directChatEnv["TZ"] = directChatTz;
9483
9490
  if (!frameworkAdapter.writeMcpServer) {
9484
9491
  throw new Error(
9485
- `[direct-chat] Framework '${frameworkAdapter.id}' must implement writeMcpServer for direct-chat provisioning (agent=${agent.code_name}, cachedFramework=${agentFrameworkCache.get(agent.code_name) ?? "openclaw"})`
9492
+ `[direct-chat] Framework '${frameworkAdapter.id}' must implement writeMcpServer for direct-chat provisioning (agent=${agent.code_name}, cachedFramework=${agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK})`
9486
9493
  );
9487
9494
  }
9488
9495
  frameworkAdapter.writeMcpServer(agent.code_name, "direct-chat", {
@@ -9589,7 +9596,7 @@ async function processAgent(agent, agentStates) {
9589
9596
  frameworkAdapter.writeIntegrations(agent.code_name, integrations, agent.agent_id);
9590
9597
  }
9591
9598
  log(`Integrations provisioned for '${agent.code_name}' (${integrations.length} integration(s))`);
9592
- const fw = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
9599
+ const fw = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
9593
9600
  let rotationHandled = true;
9594
9601
  if (fw === "claude-code" && isSessionHealthy(agent.code_name)) {
9595
9602
  try {
@@ -9633,7 +9640,7 @@ async function processAgent(agent, agentStates) {
9633
9640
  needsGatewayRestart = true;
9634
9641
  }
9635
9642
  }
9636
- const fwForMcp = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
9643
+ const fwForMcp = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
9637
9644
  if (frameworkAdapter.writeMcpServer) {
9638
9645
  try {
9639
9646
  const toolkitData = await api.post("/host/managed-toolkits", { agent_ids: [agent.agent_id] });
@@ -9750,7 +9757,7 @@ async function processAgent(agent, agentStates) {
9750
9757
  }
9751
9758
  let tasks = refreshData.scheduled_tasks ?? [];
9752
9759
  const existingTemplateIds = new Set(tasks.map((t) => t.template_id));
9753
- const kanbanWorkRetired = (agentFrameworkCache.get(agent.code_name) ?? "openclaw") === "claude-code" && agentSessionMode === "persistent";
9760
+ const kanbanWorkRetired = (agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK) === "claude-code" && agentSessionMode === "persistent";
9754
9761
  try {
9755
9762
  const defaultsData = await api.post("/host/resolve-default-schedules", { agent_id: agent.agent_id });
9756
9763
  const allSchedules = (defaultsData.schedules ?? []).filter(
@@ -9925,7 +9932,7 @@ async function processAgent(agent, agentStates) {
9925
9932
  log(`Global skill install failed for '${agent.code_name}': ${err.message}`);
9926
9933
  }
9927
9934
  try {
9928
- const agentFwForIndex = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
9935
+ const agentFwForIndex = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
9929
9936
  if (agentFwForIndex === "claude-code") {
9930
9937
  await refreshSkillsIndexInClaudeMd(config.configDir, agent.code_name, log);
9931
9938
  }
@@ -9965,7 +9972,7 @@ async function processAgent(agent, agentStates) {
9965
9972
  }
9966
9973
  }
9967
9974
  }
9968
- const agentFwForToolkits = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
9975
+ const agentFwForToolkits = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
9969
9976
  const toolkitsList = refreshAny.integration_toolkits ?? refreshAny.plugin_toolkits ?? [];
9970
9977
  if (agentFwForToolkits === "claude-code" && toolkitsList.length) {
9971
9978
  const toolkitUnion = /* @__PURE__ */ new Set();
@@ -9976,7 +9983,7 @@ async function processAgent(agent, agentStates) {
9976
9983
  await ensureToolkitCli(toolkitSlug);
9977
9984
  }
9978
9985
  }
9979
- const agentFw2 = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
9986
+ const agentFw2 = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
9980
9987
  if (agentFw2 === "claude-code" && installedIntegrationSkills.length > 0 && isSessionHealthy(agent.code_name)) {
9981
9988
  const names = installedIntegrationSkills.join(", ");
9982
9989
  injectMessage(
@@ -10002,7 +10009,7 @@ async function processAgent(agent, agentStates) {
10002
10009
  boardItems = kanbanBoardCache.get(agent.code_name) ?? [];
10003
10010
  }
10004
10011
  }
10005
- const agentFw = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
10012
+ const agentFw = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
10006
10013
  const sessionMode = refreshData.agent.session_mode ?? "oneshot";
10007
10014
  const wantsHybridInject = isKanbanHybridEnabled();
10008
10015
  if (agentFw === "claude-code" && sessionMode === "persistent") {
@@ -10316,7 +10323,7 @@ async function processAgent(agent, agentStates) {
10316
10323
  (j) => typeof j.name === "string" && j.name.includes("kanban-work")
10317
10324
  );
10318
10325
  if (kanbanJob?.id) {
10319
- const cliBin = resolveAgentFramework(agent.code_name).cliBinary ?? "openclaw";
10326
+ const cliBin = resolveAgentFramework(agent.code_name).cliBinary ?? "claude";
10320
10327
  log(`Work trigger: firing kanban-work for '${agent.code_name}'`);
10321
10328
  execFilePromise(cliBin, ["--profile", agent.code_name, "cron", "run", kanbanJob.id]).then(() => log(`Work trigger succeeded for '${agent.code_name}'`)).catch((err) => log(`Work trigger failed for '${agent.code_name}': ${err.message}`));
10322
10329
  }
@@ -10456,7 +10463,7 @@ In progress for ${age} minutes \u2014 auto-failed`).catch(() => {
10456
10463
  agentState.writtenHashes.delete(agent.agent_id);
10457
10464
  }
10458
10465
  try {
10459
- const obFramework = agentFrameworkCache.get(agent.code_name) ?? "openclaw";
10466
+ const obFramework = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
10460
10467
  const obSessionMode = refreshData.agent.session_mode;
10461
10468
  if (obFramework === "claude-code" && obSessionMode === "persistent") {
10462
10469
  const obState = coerceOnboardingState(
@@ -11146,7 +11153,7 @@ function ensureRealtimeKanbanStarted(agentStates) {
11146
11153
  if (item.source_type === "scheduled_task") return;
11147
11154
  const agent = agentStates.find((a) => a.agentId === item.agent_id);
11148
11155
  if (!agent) return;
11149
- const agentFw = agentFrameworkCache.get(agent.codeName) ?? "openclaw";
11156
+ const agentFw = agentFrameworkCache.get(agent.codeName) ?? DEFAULT_FRAMEWORK;
11150
11157
  if (agentFw === "claude-code") {
11151
11158
  if (isSessionHealthy(agent.codeName)) {
11152
11159
  injectMessage(agent.codeName, "task", `New task added to your board: id=${item.id} title=${JSON.stringify(item.title)} priority=${item.priority}. Call kanban_move("${item.id}", "in_progress") and start working.`, {
@@ -11256,7 +11263,7 @@ var directChatInFlight = /* @__PURE__ */ new Set();
11256
11263
  async function pollDirectChatMessages(agentStates) {
11257
11264
  for (const agent of agentStates) {
11258
11265
  if (agent.status !== "active") continue;
11259
- const fw = agentFrameworkCache.get(agent.codeName) ?? "openclaw";
11266
+ const fw = agentFrameworkCache.get(agent.codeName) ?? DEFAULT_FRAMEWORK;
11260
11267
  if (fw === "openclaw" && (!agent.gatewayRunning || !agent.gatewayPort)) continue;
11261
11268
  try {
11262
11269
  const data = await api.post("/host/direct-chat/poll", { agent_id: agent.agentId });
@@ -11274,7 +11281,7 @@ async function pollDirectChatMessages(agentStates) {
11274
11281
  }
11275
11282
  async function processDirectChatMessage(agent, msg) {
11276
11283
  noteInbound(agent.codeName);
11277
- const fw = agentFrameworkCache.get(agent.codeName) ?? "openclaw";
11284
+ const fw = agentFrameworkCache.get(agent.codeName) ?? DEFAULT_FRAMEWORK;
11278
11285
  log(`[direct-chat] Processing message for '${agent.codeName}' (fw=${fw}): id=${msg.id} len=${msg.content.length}`);
11279
11286
  if (isDirectChatMessageExpired(msg.created_at, Date.now(), directChatMaxAgeMs())) {
11280
11287
  log(`[direct-chat] Expired backlog message for '${agent.codeName}' (msg=${msg.id}, created_at=${msg.created_at}) \u2014 draining without delivery`);
@@ -11475,7 +11482,7 @@ async function harvestCronResults(codeName, tasks, gatewayPort) {
11475
11482
  const gwArgs = ["--url", `ws://127.0.0.1:${gatewayPort}`, ...token ? ["--token", token] : []];
11476
11483
  let gatewayJobs = [];
11477
11484
  try {
11478
- const cliBin = resolveAgentFramework(codeName).cliBinary ?? "openclaw";
11485
+ const cliBin = resolveAgentFramework(codeName).cliBinary ?? "claude";
11479
11486
  const { stdout } = await execFilePromise(cliBin, ["--profile", codeName, "cron", "list", "--json", ...gwArgs]);
11480
11487
  const parsed = JSON.parse(stdout);
11481
11488
  gatewayJobs = parsed.jobs ?? [];
@@ -11494,7 +11501,7 @@ async function harvestCronResults(codeName, tasks, gatewayPort) {
11494
11501
  if (!STANDUP_TEMPLATES.has(templateId) && !TASK_UPDATE_TEMPLATES.has(templateId) && !PLAN_TEMPLATES.has(templateId) && !KANBAN_WORK_TEMPLATES.has(templateId)) continue;
11495
11502
  let runs = [];
11496
11503
  try {
11497
- const cliBin2 = resolveAgentFramework(codeName).cliBinary ?? "openclaw";
11504
+ const cliBin2 = resolveAgentFramework(codeName).cliBinary ?? "claude";
11498
11505
  const { stdout } = await execFilePromise(cliBin2, ["--profile", codeName, "cron", "runs", "--id", jobId, ...gwArgs]);
11499
11506
  const parsed = JSON.parse(stdout);
11500
11507
  runs = parsed.entries ?? [];
@@ -11594,7 +11601,7 @@ async function monitorCronHealth(agentStates) {
11594
11601
  const gwArgs = ["--url", `ws://127.0.0.1:${agent.gatewayPort}`, ...token ? ["--token", token] : []];
11595
11602
  let jobs = [];
11596
11603
  try {
11597
- const cliBin = resolveAgentFramework(agent.codeName).cliBinary ?? "openclaw";
11604
+ const cliBin = resolveAgentFramework(agent.codeName).cliBinary ?? "claude";
11598
11605
  const { stdout } = await execFilePromise(cliBin, ["--profile", agent.codeName, "cron", "list", "--json", ...gwArgs]);
11599
11606
  const parsed = JSON.parse(stdout);
11600
11607
  jobs = parsed.jobs ?? [];
@@ -11685,7 +11692,7 @@ async function processClaudePairSessions(agents) {
11685
11692
  killPairSession,
11686
11693
  pairTmuxSession,
11687
11694
  finalizeClaudePairOnboarding
11688
- } = await import("../claude-pair-runtime-SXO5Q5R6.js");
11695
+ } = await import("../claude-pair-runtime-HN3PEIZ2.js");
11689
11696
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11690
11697
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11691
11698
  const killed = await killPairSession(pairTmuxSession(pairId));