@integrity-labs/agt-cli 0.28.633 → 0.28.635

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
@@ -40,7 +40,7 @@ import {
40
40
  success,
41
41
  table,
42
42
  warn
43
- } from "../chunk-IDERROFJ.js";
43
+ } from "../chunk-J6KQDGWM.js";
44
44
  import {
45
45
  readDirectChatSessionState
46
46
  } from "../chunk-GNTCOXZG.js";
@@ -4909,7 +4909,7 @@ import { execFileSync, execSync } from "child_process";
4909
4909
  import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
4910
4910
  import chalk18 from "chalk";
4911
4911
  import ora16 from "ora";
4912
- var cliVersion = true ? "0.28.633" : "dev";
4912
+ var cliVersion = true ? "0.28.635" : "dev";
4913
4913
  async function fetchLatestVersion() {
4914
4914
  const host2 = getHost();
4915
4915
  if (!host2) return null;
@@ -6089,7 +6089,7 @@ function handleError(err) {
6089
6089
  }
6090
6090
 
6091
6091
  // src/bin/agt.ts
6092
- var cliVersion2 = true ? "0.28.633" : "dev";
6092
+ var cliVersion2 = true ? "0.28.635" : "dev";
6093
6093
  var program = new Command();
6094
6094
  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");
6095
6095
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -6069,7 +6069,7 @@ function exchangeFailureKind(err) {
6069
6069
  }
6070
6070
 
6071
6071
  // src/lib/api-client.ts
6072
- var agtCliVersion = true ? "0.28.633" : "dev";
6072
+ var agtCliVersion = true ? "0.28.635" : "dev";
6073
6073
  var lastConfigHash = null;
6074
6074
  function setConfigHash(hash) {
6075
6075
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -9630,4 +9630,4 @@ export {
9630
9630
  managerInstallSystemUnitCommand,
9631
9631
  managerUninstallSystemUnitCommand
9632
9632
  };
9633
- //# sourceMappingURL=chunk-IDERROFJ.js.map
9633
+ //# sourceMappingURL=chunk-J6KQDGWM.js.map
@@ -54,7 +54,7 @@ import {
54
54
  safeWriteJsonAtomic,
55
55
  setConfigHash,
56
56
  tripClass
57
- } from "../chunk-IDERROFJ.js";
57
+ } from "../chunk-J6KQDGWM.js";
58
58
  import {
59
59
  getProjectDir as getProjectDir2,
60
60
  getReadyTasks,
@@ -12131,7 +12131,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
12131
12131
  var lastVersionCheckAt = 0;
12132
12132
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
12133
12133
  var lastResponsivenessProbeAt = 0;
12134
- var agtCliVersion = true ? "0.28.633" : "dev";
12134
+ var agtCliVersion = true ? "0.28.635" : "dev";
12135
12135
  function resolveBrewPath(execFileSync3) {
12136
12136
  try {
12137
12137
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
package/dist/mcp/index.js CHANGED
@@ -21359,13 +21359,32 @@ function renderWaitingClause(item, nowMs) {
21359
21359
  const ask = item.waiting_on ? `: ${item.waiting_on.length > 80 ? `${item.waiting_on.slice(0, 77)}...` : item.waiting_on}` : "";
21360
21360
  return head ? `${head}${ask}` : "";
21361
21361
  }
21362
- function renderKanbanItemLine(item, nowMs) {
21362
+ var KANBAN_DESCRIPTION_MAX_CHARS = 1200;
21363
+ var TERMINAL_STATUSES_FOR_DESCRIPTION = /* @__PURE__ */ new Set(["done", "failed"]);
21364
+ function truncateByCodePoints(text, max) {
21365
+ const points = Array.from(text);
21366
+ if (points.length <= max) return { shown: text, total: points.length, truncated: false };
21367
+ return { shown: points.slice(0, max).join(""), total: points.length, truncated: true };
21368
+ }
21369
+ function renderDescriptionClause(item) {
21370
+ const text = item.description?.trim();
21371
+ if (!text) return null;
21372
+ if (TERMINAL_STATUSES_FOR_DESCRIPTION.has(item.status)) return null;
21373
+ const { shown, total, truncated } = truncateByCodePoints(text, KANBAN_DESCRIPTION_MAX_CHARS);
21374
+ if (!truncated) return ` ${text}`;
21375
+ return ` ${shown}
21376
+ [description truncated \u2014 showing ${KANBAN_DESCRIPTION_MAX_CHARS} of ${total} characters; open the card in the console for the rest]`;
21377
+ }
21378
+ function renderKanbanItemLine(item, nowMs, suffix = "") {
21363
21379
  const pri = kanbanPriorityLabel(item.priority);
21364
21380
  const est = item.estimated_minutes ? ` ~${item.estimated_minutes}min` : "";
21365
21381
  const del = item.deliverable ? ` \u2192 ${item.deliverable}` : "";
21366
21382
  const res = item.result ? ` \u2713 ${item.result}` : "";
21367
21383
  const wait = renderWaitingClause(item, nowMs);
21368
- return `- [${pri}] ${item.title}${wait}${est}${del}${res} (id: ${item.id})`;
21384
+ const head = `- [${pri}] ${item.title}${wait}${est}${del}${res} (id: ${item.id})${suffix}`;
21385
+ const desc = renderDescriptionClause(item);
21386
+ return desc ? `${head}
21387
+ ${desc}` : head;
21369
21388
  }
21370
21389
  function renderKanbanList(items, nowMs = Date.now()) {
21371
21390
  if (!items.length) return "Board is empty.";
@@ -21390,7 +21409,7 @@ function renderKanbanList(items, nowMs = Date.now()) {
21390
21409
  ## ${BLOCKED_ON_ME_SECTION_HEADING} (${blockedOnMe.length})`);
21391
21410
  lines.push(BLOCKED_ON_ME_SECTION_NOTE);
21392
21411
  for (const item of blockedOnMe) {
21393
- lines.push(`${renderKanbanItemLine(item, nowMs)} [blocking ${item.blocked_agent_label}]`);
21412
+ lines.push(renderKanbanItemLine(item, nowMs, ` [blocking ${item.blocked_agent_label}]`));
21394
21413
  }
21395
21414
  }
21396
21415
  if (humanAssigned.length) {
@@ -21399,7 +21418,7 @@ function renderKanbanList(items, nowMs = Date.now()) {
21399
21418
  lines.push(HUMAN_ASSIGNED_SECTION_NOTE);
21400
21419
  for (const item of humanAssigned) {
21401
21420
  const who = item.assignee_name ? ` [with ${item.assignee_name}]` : "";
21402
- lines.push(`${renderKanbanItemLine(item, nowMs)}${who}`);
21421
+ lines.push(renderKanbanItemLine(item, nowMs, who));
21403
21422
  }
21404
21423
  }
21405
21424
  return lines.join("\n");
@@ -22401,6 +22420,7 @@ server.tool(
22401
22420
  return { content: [{ type: "text", text: renderKanbanList(data.items) }] };
22402
22421
  }
22403
22422
  );
22423
+ var KANBAN_SEARCH_DESCRIPTION_MAX_CHARS = 300;
22404
22424
  server.tool(
22405
22425
  "kanban_search",
22406
22426
  `Search your FULL kanban history by keyword \u2014 including done cards older than 24h that kanban_list omits. Use this BEFORE telling anyone you have "no record" of work they say you did: the board only shows the last 24h of completed cards, so "it's not on my board" does NOT mean you never did it. Each hit includes the card's result (the actual deliverable), so you can recite what you produced. An empty query returns your most recent cards across all statuses.`,
@@ -22440,6 +22460,15 @@ server.tool(
22440
22460
  const via = item.source_integration ? ` via ${item.source_integration}` : "";
22441
22461
  lines.push(`
22442
22462
  - [${item.status}${via}, ${day}] ${item.title} (id: ${item.id})`);
22463
+ const desc = item.description?.trim();
22464
+ if (desc) {
22465
+ const { shown, total, truncated } = truncateByCodePoints(
22466
+ desc,
22467
+ KANBAN_SEARCH_DESCRIPTION_MAX_CHARS
22468
+ );
22469
+ const line = truncated ? `${shown} \u2026(description trimmed at ${KANBAN_SEARCH_DESCRIPTION_MAX_CHARS} of ${total} characters; open the card in the console for the full text)` : desc;
22470
+ lines.push(` ${line}`);
22471
+ }
22443
22472
  if (item.deliverable) lines.push(` \u2192 ${item.deliverable}`);
22444
22473
  if (item.result) {
22445
22474
  const more = item.result_truncated ? " \u2026(result trimmed; open the card in the console for the full text)" : "";
@@ -22878,7 +22907,14 @@ server.tool(
22878
22907
  "Optional: the slug (or UUID) of ANOTHER team in your organization to assign across teams. Omit for a same-team handoff. Requires the org to have cross-team assignment enabled and a peer grant; otherwise the target reads as not-found."
22879
22908
  ),
22880
22909
  title: external_exports.string().describe("Task title (max 200 chars)"),
22881
- description: external_exports.string().optional().describe("Detailed description of what needs doing"),
22910
+ // CS-1589: this is the ONLY field that carries the substance of a handoff
22911
+ // title is a headline, deliverable is an outcome — so say plainly that it
22912
+ // reaches the target and that everything they need has to be in it. The
22913
+ // reported failure was an agent that put a complete brief here, got a clean
22914
+ // success message, and delegated a card the recipient read as two lines.
22915
+ description: external_exports.string().optional().describe(
22916
+ "The BRIEF \u2014 this is what the target actually reads on their board, so put everything they need to do the work here: source data and URLs, constraints, specifications, rules they must follow, and anything they should NOT redo. Title and deliverable are a headline and an outcome; they cannot carry instructions. Long briefs are shown in full up to 1200 characters on their board and visibly marked as trimmed beyond that (the whole text is always kept on the card)."
22917
+ ),
22882
22918
  priority: external_exports.number().int().min(1).max(3).optional().describe("Priority: 1=high, 2=medium (default), 3=low"),
22883
22919
  status: external_exports.enum(["backlog", "todo", "in_progress"]).optional().describe(
22884
22920
  "Which column the card lands in on the recipient's board (default: todo). Use 'backlog' to stage it as not-yet-actionable work the teammate will pull later, 'todo' for ready-to-work, 'in_progress' if they should start immediately."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.633",
3
+ "version": "0.28.635",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {