@integrity-labs/agt-cli 0.28.1031 → 0.28.1033

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.
@@ -266,7 +266,7 @@ async function spawnPairSession(session) {
266
266
  return { ok: true };
267
267
  } catch {
268
268
  }
269
- const { resolveClaudeBinary } = await import("./persistent-session-AMUXFQKY.js");
269
+ const { resolveClaudeBinary } = await import("./persistent-session-AZQGN35Q.js");
270
270
  const claudeBin = resolveClaudeBinary();
271
271
  const pairEnv = {
272
272
  ...process.env,
@@ -734,4 +734,4 @@ export {
734
734
  startClaudePair,
735
735
  submitClaudePairCode
736
736
  };
737
- //# sourceMappingURL=claude-pair-runtime-NBF54YQD.js.map
737
+ //# sourceMappingURL=claude-pair-runtime-Y35IP7YV.js.map
@@ -66,7 +66,7 @@ import {
66
66
  safeWriteJsonAtomic,
67
67
  setConfigHash,
68
68
  tripClass
69
- } from "../chunk-HQSQLPHD.js";
69
+ } from "../chunk-OOTJBM4Z.js";
70
70
  import {
71
71
  getProjectDir as getProjectDir2,
72
72
  getReadyTasks,
@@ -149,7 +149,7 @@ import {
149
149
  takeZombieDetection,
150
150
  toOpencodeModel,
151
151
  writeEgressAllowlist
152
- } from "../chunk-XD5GMJGJ.js";
152
+ } from "../chunk-X2YAGXVQ.js";
153
153
  import {
154
154
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
155
155
  AnchorSessionClient,
@@ -254,7 +254,7 @@ import {
254
254
  subagentActivityAgeSeconds,
255
255
  sumTranscriptUsageInWindow,
256
256
  transcriptActivityAgeSeconds
257
- } from "../chunk-TFFXAGBJ.js";
257
+ } from "../chunk-XP4TNPGF.js";
258
258
  import {
259
259
  classifyUnanswerablePane,
260
260
  paneRemedy
@@ -13927,7 +13927,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13927
13927
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13928
13928
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13929
13929
  async function channelInboundActivityAgeSecondsFor(codeName) {
13930
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-73AXZT6D.js");
13930
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-GPKEUHXN.js");
13931
13931
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13932
13932
  if (newest === null) return null;
13933
13933
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -14673,7 +14673,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14673
14673
  var lastVersionCheckAt = 0;
14674
14674
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14675
14675
  var lastResponsivenessProbeAt = 0;
14676
- var agtCliVersion = true ? "0.28.1031" : "dev";
14676
+ var agtCliVersion = true ? "0.28.1033" : "dev";
14677
14677
  function resolveBrewPath(execFileSync3) {
14678
14678
  try {
14679
14679
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -16308,7 +16308,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
16308
16308
  if (codeNames.length === 0) return;
16309
16309
  void (async () => {
16310
16310
  try {
16311
- const { collectDiagnostics } = await import("../persistent-session-AMUXFQKY.js");
16311
+ const { collectDiagnostics } = await import("../persistent-session-AZQGN35Q.js");
16312
16312
  await api.post("/host/heartbeat", {
16313
16313
  host_id: hostId,
16314
16314
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -16450,7 +16450,7 @@ async function pollCycleInner() {
16450
16450
  }
16451
16451
  try {
16452
16452
  const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
16453
- const { collectDiagnostics } = await import("../persistent-session-AMUXFQKY.js");
16453
+ const { collectDiagnostics } = await import("../persistent-session-AZQGN35Q.js");
16454
16454
  const diagCodeNames = [...agentState.persistentSessionAgents];
16455
16455
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
16456
16456
  let tailscaleHostname;
@@ -16626,7 +16626,7 @@ async function pollCycleInner() {
16626
16626
  collectPanelessActivityProbes,
16627
16627
  getResponsivenessIntervalMs,
16628
16628
  occupancyQualificationClassifications
16629
- } = await import("../responsiveness-probe-73AXZT6D.js");
16629
+ } = await import("../responsiveness-probe-GPKEUHXN.js");
16630
16630
  const probeIntervalMs = getResponsivenessIntervalMs();
16631
16631
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
16632
16632
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -16743,7 +16743,7 @@ async function pollCycleInner() {
16743
16743
  collectResponsivenessProbes,
16744
16744
  livePendingInboundOldestAgeSeconds,
16745
16745
  parkPendingInbound
16746
- } = await import("../responsiveness-probe-73AXZT6D.js");
16746
+ } = await import("../responsiveness-probe-GPKEUHXN.js");
16747
16747
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
16748
16748
  const wedgeNow = /* @__PURE__ */ new Date();
16749
16749
  const liveAgents = agentState.persistentSessionAgents;
@@ -16899,7 +16899,7 @@ async function pollCycleInner() {
16899
16899
  }
16900
16900
  try {
16901
16901
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
16902
- const { probeSessionAuth } = await import("../session-auth-dead-VINCM3ZI.js");
16902
+ const { probeSessionAuth } = await import("../session-auth-dead-NLOUEO37.js");
16903
16903
  const observations = [];
16904
16904
  const pendingCacheCommits = [];
16905
16905
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -21442,7 +21442,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21442
21442
  try {
21443
21443
  const freshId = rotateSessionForWedge(codeName);
21444
21444
  consecutiveWedgeCycles.delete(codeName);
21445
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-73AXZT6D.js");
21445
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-GPKEUHXN.js");
21446
21446
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
21447
21447
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
21448
21448
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -21485,7 +21485,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21485
21485
  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}`));
21486
21486
  void (async () => {
21487
21487
  try {
21488
- const { collectDiagnostics } = await import("../persistent-session-AMUXFQKY.js");
21488
+ const { collectDiagnostics } = await import("../persistent-session-AZQGN35Q.js");
21489
21489
  await api.post("/host/heartbeat", {
21490
21490
  host_id: hostId,
21491
21491
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21536,7 +21536,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
21536
21536
  }
21537
21537
  try {
21538
21538
  const hostId = await getHostId();
21539
- const { collectDiagnostics } = await import("../persistent-session-AMUXFQKY.js");
21539
+ const { collectDiagnostics } = await import("../persistent-session-AZQGN35Q.js");
21540
21540
  await api.post("/host/heartbeat", {
21541
21541
  host_id: hostId,
21542
21542
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -22208,7 +22208,7 @@ async function processClaudePairSessions(agents) {
22208
22208
  // cannot take it for itself — by the time it runs, the write it is looking
22209
22209
  // for may already have happened.
22210
22210
  snapshotPairConfig
22211
- } = await import("../claude-pair-runtime-NBF54YQD.js");
22211
+ } = await import("../claude-pair-runtime-Y35IP7YV.js");
22212
22212
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
22213
22213
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
22214
22214
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -32945,7 +32945,17 @@ var OAUTH_PROVIDERS = {
32945
32945
  // do NOT revert to the broad `accounting.transactions` /
32946
32946
  // `accounting.contacts` scopes, Xero rejects the manifest).
32947
32947
  // The variant *without* `.read` is the read+write granular scope.
32948
- "accounting.settings.read",
32948
+ // settings: write (CS-1829) enables the xero-broker to create and edit
32949
+ // inventory ITEMS on approval. Xero files the Items endpoint under
32950
+ // accounting.settings (per Xero's own OpenAPI spec, XeroAPI/Xero-OpenAPI
32951
+ // xero_accounting.yaml: PUT/POST /Items require `accounting.settings`,
32952
+ // GET accepts `.read`), and there is no narrower items scope. The same
32953
+ // scope also covers accounts, tax rates and tracking categories; the
32954
+ // vendor server's write tools for those stay stripped in broker mode
32955
+ // (XERO_WRITES_VIA_BROKER), so the broker remains the only write path.
32956
+ // An existing install must RECONNECT for its token to carry this, same as
32957
+ // CS-1439's manualjournals.
32958
+ "accounting.settings",
32949
32959
  // contacts: write enables agent-driven supplier/customer creation
32950
32960
  // (required for bill creation since a bill must reference a contact).
32951
32961
  "accounting.contacts",
@@ -37978,6 +37988,22 @@ var FLAG_REGISTRY = [
37978
37988
  public: true,
37979
37989
  defaultValue: false
37980
37990
  },
37991
+ {
37992
+ key: "ninja-lists",
37993
+ description: 'Ninja Lists (ADR-0120): small tables agents and people fill and review together. Gates the "Lists" nav item, the /lists pages AND the /ninja-sheets API, per org. Unlike its siblings `projects-menu` / `ninjafy-notes-menu`, this is the whole feature\'s gate, not only its menu entry: the surface is unlaunched, so an org with the flag off gets 404 from the API rather than a hidden link to a working one.',
37994
+ flagType: "boolean",
37995
+ // PUBLIC (ADR-0022 §2): the nav shells read it via usePublicBooleanFlag and
37996
+ // the pages via getPublicBooleanFlagServer, so it is serialized to the
37997
+ // client via GET /flags. The API evaluates it through getFlagClient() and
37998
+ // fails CLOSED on a read error. No env override (UI rollout, not an
37999
+ // operator gate). Ships dark (default false).
38000
+ public: true,
38001
+ defaultValue: false,
38002
+ // Until ADR-0120's access control exists, any member of an enabled org
38003
+ // reads every list in it, so an org admin must not be able to switch this
38004
+ // on for their own org. Only a platform admin can (PR #6522 review).
38005
+ platformAdminOnly: true
38006
+ },
37981
38007
  {
37982
38008
  key: "platform-maintenance-mode",
37983
38009
  description: 'Platform-wide maintenance mode (ENG-6506): when on, every agent across every team/org auto-replies to admitted human inbound with a "we are offline for maintenance" notice instead of dispatching to the agent \u2014 for whole-platform downtime such as DB upgrades. Read host-side per inbound from the flags cache (no MCP restart). Boolean gate; ships dark \u2014 when off, channels behave exactly as today. (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
package/dist/mcp/index.js CHANGED
@@ -25527,7 +25527,17 @@ var OAUTH_PROVIDERS = {
25527
25527
  // do NOT revert to the broad `accounting.transactions` /
25528
25528
  // `accounting.contacts` scopes, Xero rejects the manifest).
25529
25529
  // The variant *without* `.read` is the read+write granular scope.
25530
- "accounting.settings.read",
25530
+ // settings: write (CS-1829) enables the xero-broker to create and edit
25531
+ // inventory ITEMS on approval. Xero files the Items endpoint under
25532
+ // accounting.settings (per Xero's own OpenAPI spec, XeroAPI/Xero-OpenAPI
25533
+ // xero_accounting.yaml: PUT/POST /Items require `accounting.settings`,
25534
+ // GET accepts `.read`), and there is no narrower items scope. The same
25535
+ // scope also covers accounts, tax rates and tracking categories; the
25536
+ // vendor server's write tools for those stay stripped in broker mode
25537
+ // (XERO_WRITES_VIA_BROKER), so the broker remains the only write path.
25538
+ // An existing install must RECONNECT for its token to carry this, same as
25539
+ // CS-1439's manualjournals.
25540
+ "accounting.settings",
25531
25541
  // contacts: write enables agent-driven supplier/customer creation
25532
25542
  // (required for bill creation since a bill must reference a contact).
25533
25543
  "accounting.contacts",
@@ -30275,6 +30285,22 @@ var FLAG_REGISTRY = [
30275
30285
  public: true,
30276
30286
  defaultValue: false
30277
30287
  },
30288
+ {
30289
+ key: "ninja-lists",
30290
+ description: 'Ninja Lists (ADR-0120): small tables agents and people fill and review together. Gates the "Lists" nav item, the /lists pages AND the /ninja-sheets API, per org. Unlike its siblings `projects-menu` / `ninjafy-notes-menu`, this is the whole feature\'s gate, not only its menu entry: the surface is unlaunched, so an org with the flag off gets 404 from the API rather than a hidden link to a working one.',
30291
+ flagType: "boolean",
30292
+ // PUBLIC (ADR-0022 §2): the nav shells read it via usePublicBooleanFlag and
30293
+ // the pages via getPublicBooleanFlagServer, so it is serialized to the
30294
+ // client via GET /flags. The API evaluates it through getFlagClient() and
30295
+ // fails CLOSED on a read error. No env override (UI rollout, not an
30296
+ // operator gate). Ships dark (default false).
30297
+ public: true,
30298
+ defaultValue: false,
30299
+ // Until ADR-0120's access control exists, any member of an enabled org
30300
+ // reads every list in it, so an org admin must not be able to switch this
30301
+ // on for their own org. Only a platform admin can (PR #6522 review).
30302
+ platformAdminOnly: true
30303
+ },
30278
30304
  {
30279
30305
  key: "platform-maintenance-mode",
30280
30306
  description: 'Platform-wide maintenance mode (ENG-6506): when on, every agent across every team/org auto-replies to admitted human inbound with a "we are offline for maintenance" notice instead of dispatching to the agent \u2014 for whole-platform downtime such as DB upgrades. Read host-side per inbound from the flags cache (no MCP restart). Boolean gate; ships dark \u2014 when off, channels behave exactly as today. (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
@@ -39678,7 +39678,17 @@ var OAUTH_PROVIDERS = {
39678
39678
  // do NOT revert to the broad `accounting.transactions` /
39679
39679
  // `accounting.contacts` scopes, Xero rejects the manifest).
39680
39680
  // The variant *without* `.read` is the read+write granular scope.
39681
- "accounting.settings.read",
39681
+ // settings: write (CS-1829) enables the xero-broker to create and edit
39682
+ // inventory ITEMS on approval. Xero files the Items endpoint under
39683
+ // accounting.settings (per Xero's own OpenAPI spec, XeroAPI/Xero-OpenAPI
39684
+ // xero_accounting.yaml: PUT/POST /Items require `accounting.settings`,
39685
+ // GET accepts `.read`), and there is no narrower items scope. The same
39686
+ // scope also covers accounts, tax rates and tracking categories; the
39687
+ // vendor server's write tools for those stay stripped in broker mode
39688
+ // (XERO_WRITES_VIA_BROKER), so the broker remains the only write path.
39689
+ // An existing install must RECONNECT for its token to carry this, same as
39690
+ // CS-1439's manualjournals.
39691
+ "accounting.settings",
39682
39692
  // contacts: write enables agent-driven supplier/customer creation
39683
39693
  // (required for bill creation since a bill must reference a contact).
39684
39694
  "accounting.contacts",
@@ -44223,6 +44233,22 @@ var FLAG_REGISTRY = [
44223
44233
  public: true,
44224
44234
  defaultValue: false
44225
44235
  },
44236
+ {
44237
+ key: "ninja-lists",
44238
+ description: 'Ninja Lists (ADR-0120): small tables agents and people fill and review together. Gates the "Lists" nav item, the /lists pages AND the /ninja-sheets API, per org. Unlike its siblings `projects-menu` / `ninjafy-notes-menu`, this is the whole feature\'s gate, not only its menu entry: the surface is unlaunched, so an org with the flag off gets 404 from the API rather than a hidden link to a working one.',
44239
+ flagType: "boolean",
44240
+ // PUBLIC (ADR-0022 §2): the nav shells read it via usePublicBooleanFlag and
44241
+ // the pages via getPublicBooleanFlagServer, so it is serialized to the
44242
+ // client via GET /flags. The API evaluates it through getFlagClient() and
44243
+ // fails CLOSED on a read error. No env override (UI rollout, not an
44244
+ // operator gate). Ships dark (default false).
44245
+ public: true,
44246
+ defaultValue: false,
44247
+ // Until ADR-0120's access control exists, any member of an enabled org
44248
+ // reads every list in it, so an org admin must not be able to switch this
44249
+ // on for their own org. Only a platform admin can (PR #6522 review).
44250
+ platformAdminOnly: true
44251
+ },
44226
44252
  {
44227
44253
  key: "platform-maintenance-mode",
44228
44254
  description: 'Platform-wide maintenance mode (ENG-6506): when on, every agent across every team/org auto-replies to admitted human inbound with a "we are offline for maintenance" notice instead of dispatching to the agent \u2014 for whole-platform downtime such as DB upgrades. Read host-side per inbound from the flags cache (no MCP restart). Boolean gate; ships dark \u2014 when off, channels behave exactly as today. (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
@@ -33895,7 +33895,17 @@ var OAUTH_PROVIDERS = {
33895
33895
  // do NOT revert to the broad `accounting.transactions` /
33896
33896
  // `accounting.contacts` scopes, Xero rejects the manifest).
33897
33897
  // The variant *without* `.read` is the read+write granular scope.
33898
- "accounting.settings.read",
33898
+ // settings: write (CS-1829) enables the xero-broker to create and edit
33899
+ // inventory ITEMS on approval. Xero files the Items endpoint under
33900
+ // accounting.settings (per Xero's own OpenAPI spec, XeroAPI/Xero-OpenAPI
33901
+ // xero_accounting.yaml: PUT/POST /Items require `accounting.settings`,
33902
+ // GET accepts `.read`), and there is no narrower items scope. The same
33903
+ // scope also covers accounts, tax rates and tracking categories; the
33904
+ // vendor server's write tools for those stay stripped in broker mode
33905
+ // (XERO_WRITES_VIA_BROKER), so the broker remains the only write path.
33906
+ // An existing install must RECONNECT for its token to carry this, same as
33907
+ // CS-1439's manualjournals.
33908
+ "accounting.settings",
33899
33909
  // contacts: write enables agent-driven supplier/customer creation
33900
33910
  // (required for bill creation since a bill must reference a contact).
33901
33911
  "accounting.contacts",
@@ -38862,6 +38872,22 @@ var FLAG_REGISTRY = [
38862
38872
  public: true,
38863
38873
  defaultValue: false
38864
38874
  },
38875
+ {
38876
+ key: "ninja-lists",
38877
+ description: 'Ninja Lists (ADR-0120): small tables agents and people fill and review together. Gates the "Lists" nav item, the /lists pages AND the /ninja-sheets API, per org. Unlike its siblings `projects-menu` / `ninjafy-notes-menu`, this is the whole feature\'s gate, not only its menu entry: the surface is unlaunched, so an org with the flag off gets 404 from the API rather than a hidden link to a working one.',
38878
+ flagType: "boolean",
38879
+ // PUBLIC (ADR-0022 §2): the nav shells read it via usePublicBooleanFlag and
38880
+ // the pages via getPublicBooleanFlagServer, so it is serialized to the
38881
+ // client via GET /flags. The API evaluates it through getFlagClient() and
38882
+ // fails CLOSED on a read error. No env override (UI rollout, not an
38883
+ // operator gate). Ships dark (default false).
38884
+ public: true,
38885
+ defaultValue: false,
38886
+ // Until ADR-0120's access control exists, any member of an enabled org
38887
+ // reads every list in it, so an org admin must not be able to switch this
38888
+ // on for their own org. Only a platform admin can (PR #6522 review).
38889
+ platformAdminOnly: true
38890
+ },
38865
38891
  {
38866
38892
  key: "platform-maintenance-mode",
38867
38893
  description: 'Platform-wide maintenance mode (ENG-6506): when on, every agent across every team/org auto-replies to admitted human inbound with a "we are offline for maintenance" notice instead of dispatching to the agent \u2014 for whole-platform downtime such as DB upgrades. Read host-side per inbound from the flags cache (no MCP restart). Boolean gate; ships dark \u2014 when off, channels behave exactly as today. (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
@@ -34007,7 +34007,17 @@ var OAUTH_PROVIDERS = {
34007
34007
  // do NOT revert to the broad `accounting.transactions` /
34008
34008
  // `accounting.contacts` scopes, Xero rejects the manifest).
34009
34009
  // The variant *without* `.read` is the read+write granular scope.
34010
- "accounting.settings.read",
34010
+ // settings: write (CS-1829) enables the xero-broker to create and edit
34011
+ // inventory ITEMS on approval. Xero files the Items endpoint under
34012
+ // accounting.settings (per Xero's own OpenAPI spec, XeroAPI/Xero-OpenAPI
34013
+ // xero_accounting.yaml: PUT/POST /Items require `accounting.settings`,
34014
+ // GET accepts `.read`), and there is no narrower items scope. The same
34015
+ // scope also covers accounts, tax rates and tracking categories; the
34016
+ // vendor server's write tools for those stay stripped in broker mode
34017
+ // (XERO_WRITES_VIA_BROKER), so the broker remains the only write path.
34018
+ // An existing install must RECONNECT for its token to carry this, same as
34019
+ // CS-1439's manualjournals.
34020
+ "accounting.settings",
34011
34021
  // contacts: write enables agent-driven supplier/customer creation
34012
34022
  // (required for bill creation since a bill must reference a contact).
34013
34023
  "accounting.contacts",
@@ -38968,6 +38978,22 @@ var FLAG_REGISTRY = [
38968
38978
  public: true,
38969
38979
  defaultValue: false
38970
38980
  },
38981
+ {
38982
+ key: "ninja-lists",
38983
+ description: 'Ninja Lists (ADR-0120): small tables agents and people fill and review together. Gates the "Lists" nav item, the /lists pages AND the /ninja-sheets API, per org. Unlike its siblings `projects-menu` / `ninjafy-notes-menu`, this is the whole feature\'s gate, not only its menu entry: the surface is unlaunched, so an org with the flag off gets 404 from the API rather than a hidden link to a working one.',
38984
+ flagType: "boolean",
38985
+ // PUBLIC (ADR-0022 §2): the nav shells read it via usePublicBooleanFlag and
38986
+ // the pages via getPublicBooleanFlagServer, so it is serialized to the
38987
+ // client via GET /flags. The API evaluates it through getFlagClient() and
38988
+ // fails CLOSED on a read error. No env override (UI rollout, not an
38989
+ // operator gate). Ships dark (default false).
38990
+ public: true,
38991
+ defaultValue: false,
38992
+ // Until ADR-0120's access control exists, any member of an enabled org
38993
+ // reads every list in it, so an org admin must not be able to switch this
38994
+ // on for their own org. Only a platform admin can (PR #6522 review).
38995
+ platformAdminOnly: true
38996
+ },
38971
38997
  {
38972
38998
  key: "platform-maintenance-mode",
38973
38999
  description: 'Platform-wide maintenance mode (ENG-6506): when on, every agent across every team/org auto-replies to admitted human inbound with a "we are offline for maintenance" notice instead of dispatching to the agent \u2014 for whole-platform downtime such as DB upgrades. Read host-side per inbound from the flags cache (no MCP restart). Boolean gate; ships dark \u2014 when off, channels behave exactly as today. (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
package/dist/mcp/xero.js CHANGED
@@ -117492,7 +117492,8 @@ var ListInvoicesTool = CreateXeroTool(
117492
117492
  var list_invoices_tool_default = ListInvoicesTool;
117493
117493
 
117494
117494
  // src/handlers/list-xero-items.handler.ts
117495
- async function getItems(page) {
117495
+ var UNIT_DECIMAL_PLACES = 4;
117496
+ async function getItems() {
117496
117497
  await xeroClient.authenticate();
117497
117498
  const items = await xeroClient.accountingApi.getItems(
117498
117499
  xeroClient.tenantId,
@@ -117502,15 +117503,15 @@ async function getItems(page) {
117502
117503
  // where
117503
117504
  void 0,
117504
117505
  // order
117505
- page,
117506
- // page
117506
+ UNIT_DECIMAL_PLACES,
117507
+ // unitdp - NOT a page number; this endpoint does not paginate
117507
117508
  getClientHeaders()
117508
117509
  );
117509
117510
  return items.body.items ?? [];
117510
117511
  }
117511
- async function listXeroItems(page = 1) {
117512
+ async function listXeroItems() {
117512
117513
  try {
117513
- const items = await getItems(page);
117514
+ const items = await getItems();
117514
117515
  return {
117515
117516
  result: items,
117516
117517
  isError: false,
@@ -117528,12 +117529,14 @@ async function listXeroItems(page = 1) {
117528
117529
  // src/tools/list/list-items.tool.ts
117529
117530
  var ListItemsTool = CreateXeroTool(
117530
117531
  "list-items",
117531
- "Lists all items in Xero. Use this tool to get the item codes and descriptions to be used when creating invoices in Xero",
117532
+ "Lists every item in the Xero catalogue in ONE call (Xero does not paginate items, so there is no page to request). Use it to get the item codes, descriptions and prices to use on invoice and bill lines. For items tracked as inventory it also returns Quantity On Hand and Total Cost Pool, so check Quantity On Hand before invoicing a tracked item. Note: Xero's API does not expose whether an item is archived, so an archived item can still appear here.",
117532
117533
  {
117533
- page: external_exports.number()
117534
+ // Kept, and optional, so an agent that still sends `page` is not refused by
117535
+ // the schema. It is IGNORED: Xero returns the whole catalogue regardless.
117536
+ page: external_exports.number().optional().describe("Ignored. Xero returns the whole item catalogue in one response; there are no pages.")
117534
117537
  },
117535
- async ({ page }) => {
117536
- const response = await listXeroItems(page);
117538
+ async () => {
117539
+ const response = await listXeroItems();
117537
117540
  if (response.isError) {
117538
117541
  return {
117539
117542
  content: [
@@ -117564,6 +117567,14 @@ var ListItemsTool = CreateXeroTool(
117564
117567
  item.salesDetails?.accountCode ? `Sales Account: ${item.salesDetails.accountCode}` : null,
117565
117568
  item.purchaseDetails?.accountCode ? `Purchase Account: ${item.purchaseDetails.accountCode}` : null,
117566
117569
  item.isTrackedAsInventory !== void 0 ? `Tracked as Inventory: ${item.isTrackedAsInventory ? "Yes" : "No"}` : null,
117570
+ // CS-1829: stock is only meaningful on a tracked item. Xero reports
117571
+ // 0 rather than omitting the field on an untracked one, and
117572
+ // "Quantity On Hand: 0" beside a service item reads as "out of
117573
+ // stock", which is a different and wrong claim.
117574
+ item.isTrackedAsInventory && item.quantityOnHand !== void 0 ? `Quantity On Hand: ${item.quantityOnHand}` : null,
117575
+ item.isTrackedAsInventory && item.totalCostPool !== void 0 ? `Total Cost Pool: ${item.totalCostPool}` : null,
117576
+ item.isTrackedAsInventory && item.inventoryAssetAccountCode ? `Inventory Asset Account: ${item.inventoryAssetAccountCode}` : null,
117577
+ item.purchaseDetails?.cOGSAccountCode ? `COGS Account: ${item.purchaseDetails.cOGSAccountCode}` : null,
117567
117578
  item.isSold !== void 0 ? `Is Sold: ${item.isSold ? "Yes" : "No"}` : null,
117568
117579
  item.isPurchased !== void 0 ? `Is Purchased: ${item.isPurchased ? "Yes" : "No"}` : null,
117569
117580
  item.updatedDateUTC ? `Last Updated: ${item.updatedDateUTC}` : null,
@@ -65,8 +65,8 @@ import {
65
65
  writeDirectChatSessionState,
66
66
  writeEgressAllowlist,
67
67
  writePersistentClaudeWrapper
68
- } from "./chunk-XD5GMJGJ.js";
69
- import "./chunk-TFFXAGBJ.js";
68
+ } from "./chunk-X2YAGXVQ.js";
69
+ import "./chunk-XP4TNPGF.js";
70
70
  import "./chunk-TQDIIS3X.js";
71
71
  import "./chunk-XWVM4KPK.js";
72
72
  import "./chunk-EL5MWGGH.js";
@@ -139,4 +139,4 @@ export {
139
139
  writeEgressAllowlist,
140
140
  writePersistentClaudeWrapper
141
141
  };
142
- //# sourceMappingURL=persistent-session-AMUXFQKY.js.map
142
+ //# sourceMappingURL=persistent-session-AZQGN35Q.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-XD5GMJGJ.js";
4
- import "./chunk-TFFXAGBJ.js";
3
+ } from "./chunk-X2YAGXVQ.js";
4
+ import "./chunk-XP4TNPGF.js";
5
5
  import "./chunk-TQDIIS3X.js";
6
6
  import "./chunk-XWVM4KPK.js";
7
7
  import "./chunk-EL5MWGGH.js";
@@ -802,4 +802,4 @@ export {
802
802
  readAndResetSlackReplyBindingClassifications,
803
803
  readAndResetSlackReplyTargetClassifications
804
804
  };
805
- //# sourceMappingURL=responsiveness-probe-73AXZT6D.js.map
805
+ //# sourceMappingURL=responsiveness-probe-GPKEUHXN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-TFFXAGBJ.js";
3
+ } from "./chunk-XP4TNPGF.js";
4
4
  import "./chunk-DGUM43GV.js";
5
5
 
6
6
  // src/lib/session-auth-dead.ts
@@ -204,4 +204,4 @@ export {
204
204
  decideSessionAuthState,
205
205
  probeSessionAuth
206
206
  };
207
- //# sourceMappingURL=session-auth-dead-VINCM3ZI.js.map
207
+ //# sourceMappingURL=session-auth-dead-NLOUEO37.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1031",
3
+ "version": "0.28.1033",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {