@integrity-labs/agt-cli 0.28.652 → 0.28.654

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.
@@ -8,7 +8,7 @@ import {
8
8
  isolationMode,
9
9
  log,
10
10
  parseEnvIntegrations
11
- } from "./chunk-E26EKDFP.js";
11
+ } from "./chunk-XGTAGSBI.js";
12
12
  import {
13
13
  BIND_FAILURE_QUARANTINE_THRESHOLD,
14
14
  INTEGRATIONS_SECTION_END,
@@ -55,7 +55,7 @@ import {
55
55
  resolveConnectivityProbe,
56
56
  worseConnectivityOutcome,
57
57
  wrapScheduledTaskPrompt
58
- } from "./chunk-HRMF6VUK.js";
58
+ } from "./chunk-6KCM6UPT.js";
59
59
  import {
60
60
  parsePsRows
61
61
  } from "./chunk-XWVM4KPK.js";
@@ -6073,7 +6073,7 @@ function exchangeFailureKind(err) {
6073
6073
  }
6074
6074
 
6075
6075
  // src/lib/api-client.ts
6076
- var agtCliVersion = true ? "0.28.652" : "dev";
6076
+ var agtCliVersion = true ? "0.28.654" : "dev";
6077
6077
  var lastConfigHash = null;
6078
6078
  function setConfigHash(hash) {
6079
6079
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -9815,4 +9815,4 @@ export {
9815
9815
  managerInstallSystemUnitCommand,
9816
9816
  managerUninstallSystemUnitCommand
9817
9817
  };
9818
- //# sourceMappingURL=chunk-6PR2K3XB.js.map
9818
+ //# sourceMappingURL=chunk-TUG3MPJW.js.map
@@ -16,7 +16,7 @@ import {
16
16
  rotateDailySession,
17
17
  sessionFileExists,
18
18
  todayLocalIso
19
- } from "./chunk-HRMF6VUK.js";
19
+ } from "./chunk-6KCM6UPT.js";
20
20
  import {
21
21
  reapOrphanChannelMcps
22
22
  } from "./chunk-XWVM4KPK.js";
@@ -4322,4 +4322,4 @@ export {
4322
4322
  stopAllSessionsAndWait,
4323
4323
  getProjectDir
4324
4324
  };
4325
- //# sourceMappingURL=chunk-E26EKDFP.js.map
4325
+ //# sourceMappingURL=chunk-XGTAGSBI.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-XXP4NGEP.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-3O72XXK5.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-E6BFNZUV.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-IK66PNDU.js.map
@@ -55,7 +55,7 @@ import {
55
55
  safeWriteJsonAtomic,
56
56
  setConfigHash,
57
57
  tripClass
58
- } from "../chunk-6PR2K3XB.js";
58
+ } from "../chunk-TUG3MPJW.js";
59
59
  import {
60
60
  getProjectDir as getProjectDir2,
61
61
  getReadyTasks,
@@ -111,7 +111,7 @@ import {
111
111
  takeZombieDetection,
112
112
  toOpencodeModel,
113
113
  writeEgressAllowlist
114
- } from "../chunk-E26EKDFP.js";
114
+ } from "../chunk-XGTAGSBI.js";
115
115
  import {
116
116
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
117
117
  AnchorSessionClient,
@@ -192,7 +192,7 @@ import {
192
192
  subagentActivityAgeSeconds,
193
193
  sumTranscriptUsageInWindow,
194
194
  transcriptActivityAgeSeconds
195
- } from "../chunk-HRMF6VUK.js";
195
+ } from "../chunk-6KCM6UPT.js";
196
196
  import {
197
197
  reapOrphanChannelMcps
198
198
  } from "../chunk-XWVM4KPK.js";
@@ -11609,7 +11609,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
11609
11609
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
11610
11610
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
11611
11611
  async function channelInboundActivityAgeSecondsFor(codeName) {
11612
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-QSJ263ZW.js");
11612
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-D4OHFUWH.js");
11613
11613
  const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
11614
11614
  if (newest === null) return null;
11615
11615
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -12252,7 +12252,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
12252
12252
  var lastVersionCheckAt = 0;
12253
12253
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
12254
12254
  var lastResponsivenessProbeAt = 0;
12255
- var agtCliVersion = true ? "0.28.652" : "dev";
12255
+ var agtCliVersion = true ? "0.28.654" : "dev";
12256
12256
  function resolveBrewPath(execFileSync3) {
12257
12257
  try {
12258
12258
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -13560,7 +13560,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
13560
13560
  if (codeNames.length === 0) return;
13561
13561
  void (async () => {
13562
13562
  try {
13563
- const { collectDiagnostics } = await import("../persistent-session-XXP4NGEP.js");
13563
+ const { collectDiagnostics } = await import("../persistent-session-3O72XXK5.js");
13564
13564
  await api.post("/host/heartbeat", {
13565
13565
  host_id: hostId,
13566
13566
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -13676,7 +13676,7 @@ async function pollCycleInner() {
13676
13676
  }
13677
13677
  try {
13678
13678
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
13679
- const { collectDiagnostics } = await import("../persistent-session-XXP4NGEP.js");
13679
+ const { collectDiagnostics } = await import("../persistent-session-3O72XXK5.js");
13680
13680
  const diagCodeNames = [...agentState.persistentSessionAgents];
13681
13681
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
13682
13682
  let tailscaleHostname;
@@ -13799,7 +13799,7 @@ async function pollCycleInner() {
13799
13799
  collectPanelessActivityProbes,
13800
13800
  getResponsivenessIntervalMs,
13801
13801
  occupancyQualificationClassifications
13802
- } = await import("../responsiveness-probe-QSJ263ZW.js");
13802
+ } = await import("../responsiveness-probe-D4OHFUWH.js");
13803
13803
  const probeIntervalMs = getResponsivenessIntervalMs();
13804
13804
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
13805
13805
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -13909,7 +13909,7 @@ async function pollCycleInner() {
13909
13909
  collectResponsivenessProbes,
13910
13910
  livePendingInboundOldestAgeSeconds,
13911
13911
  parkPendingInbound
13912
- } = await import("../responsiveness-probe-QSJ263ZW.js");
13912
+ } = await import("../responsiveness-probe-D4OHFUWH.js");
13913
13913
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
13914
13914
  const wedgeNow = /* @__PURE__ */ new Date();
13915
13915
  const liveAgents = agentState.persistentSessionAgents;
@@ -14065,7 +14065,7 @@ async function pollCycleInner() {
14065
14065
  }
14066
14066
  try {
14067
14067
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
14068
- const { probeSessionAuth } = await import("../session-auth-dead-HHZT5KIM.js");
14068
+ const { probeSessionAuth } = await import("../session-auth-dead-T3EAAOKZ.js");
14069
14069
  const observations = [];
14070
14070
  const pendingCacheCommits = [];
14071
14071
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -17698,7 +17698,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
17698
17698
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
17699
17699
  void (async () => {
17700
17700
  try {
17701
- const { collectDiagnostics } = await import("../persistent-session-XXP4NGEP.js");
17701
+ const { collectDiagnostics } = await import("../persistent-session-3O72XXK5.js");
17702
17702
  await api.post("/host/heartbeat", {
17703
17703
  host_id: hostId,
17704
17704
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -17749,7 +17749,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
17749
17749
  }
17750
17750
  try {
17751
17751
  const hostId = await getHostId();
17752
- const { collectDiagnostics } = await import("../persistent-session-XXP4NGEP.js");
17752
+ const { collectDiagnostics } = await import("../persistent-session-3O72XXK5.js");
17753
17753
  await api.post("/host/heartbeat", {
17754
17754
  host_id: hostId,
17755
17755
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -18346,7 +18346,7 @@ async function processClaudePairSessions(agents) {
18346
18346
  killPairSession,
18347
18347
  pairTmuxSession,
18348
18348
  finalizeClaudePairOnboarding
18349
- } = await import("../claude-pair-runtime-E6BFNZUV.js");
18349
+ } = await import("../claude-pair-runtime-IK66PNDU.js");
18350
18350
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
18351
18351
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
18352
18352
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -33926,7 +33926,7 @@ var INTEGRATION_REGISTRY = [
33926
33926
  }
33927
33927
  },
33928
33928
  {
33929
- // Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
33929
+ // Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
33930
33930
  // delivered to an agent as a tag-granted note the agent reads and summarises.
33931
33931
  //
33932
33932
  // No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
@@ -33960,9 +33960,9 @@ var INTEGRATION_REGISTRY = [
33960
33960
  // first integration to need `pricing: 'included'`, which is why that value
33961
33961
  // now exists.
33962
33962
  id: "ninjafy-notes",
33963
- name: "Ninjafy Notes",
33963
+ name: "Ninja Notes",
33964
33964
  category: "workspace-productivity",
33965
- description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
33965
+ description: "Meeting notes captured on your Mac and sent to an agent. Ninja Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
33966
33966
  supported_auth_types: ["none"],
33967
33967
  capabilities: [
33968
33968
  {
package/dist/mcp/index.js CHANGED
@@ -22397,10 +22397,32 @@ ${first.duplicate_hint}` : added;
22397
22397
  import { homedir as homedir3, tmpdir } from "os";
22398
22398
  import { basename, isAbsolute, join as join3, resolve as pathResolve, sep } from "path";
22399
22399
 
22400
- // src/skill-body-path.ts
22401
- var SKILL_BODY_PATH_TOOLS = /* @__PURE__ */ new Set(["skill_create", "skill_update"]);
22400
+ // src/host-file-path.ts
22402
22401
  var SKILL_BODY_PATH_MAX_BYTES = 512 * 1024;
22403
- function allowedSkillBodyRoots(agentDir, path) {
22402
+ var AGT_LIVE_CONTENT_PATH_MAX_BYTES = 2 * 1024 * 1024;
22403
+ var HOST_FILE_PATH_TOOLS = /* @__PURE__ */ new Map([
22404
+ [
22405
+ "skill_create",
22406
+ { pathArg: "body_path", targetArg: "body", maxBytes: SKILL_BODY_PATH_MAX_BYTES, label: "a skill body" }
22407
+ ],
22408
+ [
22409
+ "skill_update",
22410
+ { pathArg: "body_path", targetArg: "body", maxBytes: SKILL_BODY_PATH_MAX_BYTES, label: "a skill body" }
22411
+ ],
22412
+ [
22413
+ "agt_live_publish",
22414
+ {
22415
+ pathArg: "content_path",
22416
+ targetArg: "content",
22417
+ maxBytes: AGT_LIVE_CONTENT_PATH_MAX_BYTES,
22418
+ label: "a published page"
22419
+ }
22420
+ ]
22421
+ ]);
22422
+ function hostFilePathArg(toolName) {
22423
+ return HOST_FILE_PATH_TOOLS.get(toolName)?.pathArg;
22424
+ }
22425
+ function allowedHostFileRoots(agentDir, path) {
22404
22426
  return [path.join(agentDir, "project"), path.join(agentDir, "scratch")];
22405
22427
  }
22406
22428
  function assertNoSymlinkComponents(target, roots, path, fs) {
@@ -22425,48 +22447,49 @@ function isContained(candidate, root, sep2) {
22425
22447
  const rootWithSep = root.endsWith(sep2) ? root : root + sep2;
22426
22448
  return candidate.startsWith(rootWithSep);
22427
22449
  }
22428
- function resolveSkillBodyPath(toolName, args, opts) {
22429
- if (!SKILL_BODY_PATH_TOOLS.has(toolName)) return { ok: true, args };
22430
- const raw = args["body_path"];
22450
+ function resolveHostFilePath(toolName, args, opts) {
22451
+ const spec = HOST_FILE_PATH_TOOLS.get(toolName);
22452
+ if (!spec) return { ok: true, args };
22453
+ const raw = args[spec.pathArg];
22431
22454
  if (raw === void 0 || raw === null) return { ok: true, args };
22432
22455
  if (typeof raw !== "string" || raw.trim() === "") {
22433
- return { ok: false, error: "body_path must be a non-empty string." };
22456
+ return { ok: false, error: `${spec.pathArg} must be a non-empty string.` };
22434
22457
  }
22435
- if (typeof args["body"] === "string") {
22458
+ if (typeof args[spec.targetArg] === "string") {
22436
22459
  return {
22437
22460
  ok: false,
22438
- error: "Pass either body or body_path, not both \u2014 they are two ways to say the same thing and I will not guess which one you meant."
22461
+ error: `Pass either ${spec.targetArg} or ${spec.pathArg}, not both \u2014 they are two ways to say the same thing and I will not guess which one you meant.`
22439
22462
  };
22440
22463
  }
22441
22464
  const { agentDir, path, fs } = opts;
22442
- const maxBytes = opts.maxBytes ?? SKILL_BODY_PATH_MAX_BYTES;
22443
- const roots = allowedSkillBodyRoots(agentDir, path);
22465
+ const maxBytes = opts.maxBytes ?? spec.maxBytes;
22466
+ const roots = allowedHostFileRoots(agentDir, path);
22444
22467
  const absolute = path.isAbsolute(raw) ? path.resolve(raw) : path.resolve(path.join(agentDir, "project"), raw);
22445
22468
  if (!roots.some((r) => isContained(absolute, r, path.sep))) {
22446
22469
  return {
22447
22470
  ok: false,
22448
- error: `body_path must be inside your own project or scratch directory. Got '${raw}'. Allowed: ${roots.join(", ")}`
22471
+ error: `${spec.pathArg} must be inside your own project or scratch directory. Got '${raw}'. Allowed: ${roots.join(", ")}`
22449
22472
  };
22450
22473
  }
22451
22474
  let real;
22452
22475
  try {
22453
22476
  real = fs.realpathSync(absolute);
22454
22477
  } catch {
22455
- return { ok: false, error: `body_path does not exist or is unreadable: '${raw}'` };
22478
+ return { ok: false, error: `${spec.pathArg} does not exist or is unreadable: '${raw}'` };
22456
22479
  }
22457
22480
  if (!roots.some((r) => isContained(real, r, path.sep))) {
22458
22481
  return {
22459
22482
  ok: false,
22460
- error: `body_path resolves outside your own directories (symlink?). '${raw}' \u2192 '${real}'. Allowed: ${roots.join(", ")}`
22483
+ error: `${spec.pathArg} resolves outside your own directories (symlink?). '${raw}' \u2192 '${real}'. Allowed: ${roots.join(", ")}`
22461
22484
  };
22462
22485
  }
22463
22486
  const walkError = assertNoSymlinkComponents(real, roots, path, fs);
22464
- if (walkError) return { ok: false, error: `body_path: ${walkError}` };
22487
+ if (walkError) return { ok: false, error: `${spec.pathArg}: ${walkError}` };
22465
22488
  let vetted = null;
22466
22489
  try {
22467
22490
  vetted = fs.lstatSync(real);
22468
22491
  } catch {
22469
- return { ok: false, error: `body_path vanished before it could be read: '${raw}'` };
22492
+ return { ok: false, error: `${spec.pathArg} vanished before it could be read: '${raw}'` };
22470
22493
  }
22471
22494
  let fd;
22472
22495
  try {
@@ -22475,7 +22498,7 @@ function resolveSkillBodyPath(toolName, args, opts) {
22475
22498
  const msg = err.message;
22476
22499
  return {
22477
22500
  ok: false,
22478
- error: `body_path could not be opened (it may have been replaced mid-check): '${raw}' \u2014 ${msg}`
22501
+ error: `${spec.pathArg} could not be opened (it may have been replaced mid-check): '${raw}' \u2014 ${msg}`
22479
22502
  };
22480
22503
  }
22481
22504
  try {
@@ -22483,37 +22506,37 @@ function resolveSkillBodyPath(toolName, args, opts) {
22483
22506
  try {
22484
22507
  stat = fs.fstatSync(fd);
22485
22508
  } catch {
22486
- return { ok: false, error: `body_path could not be inspected: '${raw}'` };
22509
+ return { ok: false, error: `${spec.pathArg} could not be inspected: '${raw}'` };
22487
22510
  }
22488
22511
  if (!stat.isFile()) {
22489
- return { ok: false, error: `body_path is not a regular file: '${raw}'` };
22512
+ return { ok: false, error: `${spec.pathArg} is not a regular file: '${raw}'` };
22490
22513
  }
22491
22514
  if (stat.ino !== void 0 && vetted.ino !== void 0) {
22492
22515
  if (stat.ino !== vetted.ino || stat.dev !== vetted.dev) {
22493
22516
  return {
22494
22517
  ok: false,
22495
- error: `body_path changed identity between the check and the open (it was replaced): '${raw}'`
22518
+ error: `${spec.pathArg} changed identity between the check and the open (it was replaced): '${raw}'`
22496
22519
  };
22497
22520
  }
22498
22521
  }
22499
22522
  if (stat.size > maxBytes) {
22500
22523
  return {
22501
22524
  ok: false,
22502
- error: `body_path is ${stat.size} bytes, over the ${maxBytes}-byte limit for a skill body.`
22525
+ error: `${spec.pathArg} is ${stat.size} bytes, over the ${maxBytes}-byte limit for ${spec.label}.`
22503
22526
  };
22504
22527
  }
22505
22528
  let bytes;
22506
22529
  try {
22507
22530
  bytes = fs.readFdSync(fd, maxBytes);
22508
22531
  } catch (err) {
22509
- return { ok: false, error: `body_path could not be read: ${err.message}` };
22532
+ return { ok: false, error: `${spec.pathArg} could not be read: ${err.message}` };
22510
22533
  }
22511
22534
  if (bytes.byteLength > maxBytes) {
22512
- return { ok: false, error: `body_path grew past the ${maxBytes}-byte limit while being read.` };
22535
+ return { ok: false, error: `${spec.pathArg} grew past the ${maxBytes}-byte limit while being read.` };
22513
22536
  }
22514
- const body = fs.decodeUtf8(bytes);
22515
- const next = { ...args, body };
22516
- delete next["body_path"];
22537
+ const value = fs.decodeUtf8(bytes);
22538
+ const next = { ...args, [spec.targetArg]: value };
22539
+ delete next[spec.pathArg];
22517
22540
  return { ok: true, args: next };
22518
22541
  } finally {
22519
22542
  try {
@@ -41265,7 +41288,7 @@ var INTEGRATION_REGISTRY = [
41265
41288
  }
41266
41289
  },
41267
41290
  {
41268
- // Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
41291
+ // Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
41269
41292
  // delivered to an agent as a tag-granted note the agent reads and summarises.
41270
41293
  //
41271
41294
  // No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
@@ -41299,9 +41322,9 @@ var INTEGRATION_REGISTRY = [
41299
41322
  // first integration to need `pricing: 'included'`, which is why that value
41300
41323
  // now exists.
41301
41324
  id: "ninjafy-notes",
41302
- name: "Ninjafy Notes",
41325
+ name: "Ninja Notes",
41303
41326
  category: "workspace-productivity",
41304
- description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
41327
+ description: "Meeting notes captured on your Mac and sent to an agent. Ninja Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
41305
41328
  supported_auth_types: ["none"],
41306
41329
  capabilities: [
41307
41330
  {
@@ -45938,11 +45961,12 @@ async function forwardToolCall(toolName, args) {
45938
45961
  throw new Error("Cannot forward tool call: AGT_AGENT_ID is not set");
45939
45962
  }
45940
45963
  let outgoing = args;
45941
- if (SKILL_BODY_PATH_TOOLS.has(toolName) && args["body_path"] !== void 0) {
45964
+ const pathArg = hostFilePathArg(toolName);
45965
+ if (pathArg && args[pathArg] !== void 0) {
45942
45966
  if (!AGT_AGENT_CODE_NAME) {
45943
- throw new Error("Cannot resolve body_path: AGT_AGENT_CODE_NAME is not set");
45967
+ throw new Error(`Cannot resolve ${pathArg}: AGT_AGENT_CODE_NAME is not set`);
45944
45968
  }
45945
- const resolved = resolveSkillBodyPath(toolName, args, {
45969
+ const resolved = resolveHostFilePath(toolName, args, {
45946
45970
  // ADR-0049 / ENG-7891: the per-agent host dir is agent_id-keyed and the
45947
45971
  // codename path is only a compatibility SYMLINK. That is not a style
45948
45972
  // point here, it is a correctness one: the containment check below
@@ -45968,7 +45992,7 @@ async function forwardToolCall(toolName, args) {
45968
45992
  // so an oversize file is detected rather than buffered whole.
45969
45993
  lstatSync,
45970
45994
  // Raw bytes, decoded only after the byte-length check — see
45971
- // readFdSync's docblock in skill-body-path.ts.
45995
+ // readFdSync's docblock in host-file-path.ts.
45972
45996
  readFdSync: (fd, maxBytes) => {
45973
45997
  const buf = Buffer.alloc(maxBytes + 1);
45974
45998
  let read = 0;
@@ -40146,7 +40146,7 @@ var INTEGRATION_REGISTRY = [
40146
40146
  }
40147
40147
  },
40148
40148
  {
40149
- // Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
40149
+ // Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
40150
40150
  // delivered to an agent as a tag-granted note the agent reads and summarises.
40151
40151
  //
40152
40152
  // No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
@@ -40180,9 +40180,9 @@ var INTEGRATION_REGISTRY = [
40180
40180
  // first integration to need `pricing: 'included'`, which is why that value
40181
40181
  // now exists.
40182
40182
  id: "ninjafy-notes",
40183
- name: "Ninjafy Notes",
40183
+ name: "Ninja Notes",
40184
40184
  category: "workspace-productivity",
40185
- description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
40185
+ description: "Meeting notes captured on your Mac and sent to an agent. Ninja Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
40186
40186
  supported_auth_types: ["none"],
40187
40187
  capabilities: [
40188
40188
  {
@@ -34212,7 +34212,7 @@ var INTEGRATION_REGISTRY = [
34212
34212
  }
34213
34213
  },
34214
34214
  {
34215
- // Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
34215
+ // Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
34216
34216
  // delivered to an agent as a tag-granted note the agent reads and summarises.
34217
34217
  //
34218
34218
  // No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
@@ -34246,9 +34246,9 @@ var INTEGRATION_REGISTRY = [
34246
34246
  // first integration to need `pricing: 'included'`, which is why that value
34247
34247
  // now exists.
34248
34248
  id: "ninjafy-notes",
34249
- name: "Ninjafy Notes",
34249
+ name: "Ninja Notes",
34250
34250
  category: "workspace-productivity",
34251
- description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
34251
+ description: "Meeting notes captured on your Mac and sent to an agent. Ninja Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
34252
34252
  supported_auth_types: ["none"],
34253
34253
  capabilities: [
34254
34254
  {
@@ -34356,7 +34356,7 @@ var INTEGRATION_REGISTRY = [
34356
34356
  }
34357
34357
  },
34358
34358
  {
34359
- // Ninjafy Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
34359
+ // Ninja Notes (ADR-0063, ENG-8842). Meeting capture on the user's own Mac,
34360
34360
  // delivered to an agent as a tag-granted note the agent reads and summarises.
34361
34361
  //
34362
34362
  // No `installable` here, on purpose: ninjafy-notes is a Direct-HTTP SEED
@@ -34390,9 +34390,9 @@ var INTEGRATION_REGISTRY = [
34390
34390
  // first integration to need `pricing: 'included'`, which is why that value
34391
34391
  // now exists.
34392
34392
  id: "ninjafy-notes",
34393
- name: "Ninjafy Notes",
34393
+ name: "Ninja Notes",
34394
34394
  category: "workspace-productivity",
34395
- description: "Meeting notes captured on your Mac and sent to an agent. Ninjafy Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
34395
+ description: "Meeting notes captured on your Mac and sent to an agent. Ninja Notes records and transcribes a meeting on-device \u2014 the audio never leaves your machine \u2014 then hands the transcript to the agents you choose, which read it with your organization's context and write their own summary. Notes are private by default; sending one to an agent is the only thing that grants access.",
34396
34396
  supported_auth_types: ["none"],
34397
34397
  capabilities: [
34398
34398
  {
@@ -43,8 +43,8 @@ import {
43
43
  writeDirectChatSessionState,
44
44
  writeEgressAllowlist,
45
45
  writePersistentClaudeWrapper
46
- } from "./chunk-E26EKDFP.js";
47
- import "./chunk-HRMF6VUK.js";
46
+ } from "./chunk-XGTAGSBI.js";
47
+ import "./chunk-6KCM6UPT.js";
48
48
  import "./chunk-XWVM4KPK.js";
49
49
  export {
50
50
  EGRESS_BASELINE_DOMAINS,
@@ -92,4 +92,4 @@ export {
92
92
  writeEgressAllowlist,
93
93
  writePersistentClaudeWrapper
94
94
  };
95
- //# sourceMappingURL=persistent-session-XXP4NGEP.js.map
95
+ //# sourceMappingURL=persistent-session-3O72XXK5.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-E26EKDFP.js";
4
- import "./chunk-HRMF6VUK.js";
3
+ } from "./chunk-XGTAGSBI.js";
4
+ import "./chunk-6KCM6UPT.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -727,4 +727,4 @@ export {
727
727
  readAndResetSlackReplyBindingClassifications,
728
728
  readAndResetSlackReplyTargetClassifications
729
729
  };
730
- //# sourceMappingURL=responsiveness-probe-QSJ263ZW.js.map
730
+ //# sourceMappingURL=responsiveness-probe-D4OHFUWH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-HRMF6VUK.js";
3
+ } from "./chunk-6KCM6UPT.js";
4
4
 
5
5
  // src/lib/session-auth-dead.ts
6
6
  import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
@@ -203,4 +203,4 @@ export {
203
203
  decideSessionAuthState,
204
204
  probeSessionAuth
205
205
  };
206
- //# sourceMappingURL=session-auth-dead-HHZT5KIM.js.map
206
+ //# sourceMappingURL=session-auth-dead-T3EAAOKZ.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.652",
3
+ "version": "0.28.654",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {