@integrity-labs/agt-cli 0.28.1040 → 0.28.1041

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-QZAKDZIX.js");
269
+ const { resolveClaudeBinary } = await import("./persistent-session-3IGNGFEX.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-NKWXDI6H.js.map
737
+ //# sourceMappingURL=claude-pair-runtime-JZU32YLZ.js.map
@@ -66,7 +66,7 @@ import {
66
66
  safeWriteJsonAtomic,
67
67
  setConfigHash,
68
68
  tripClass
69
- } from "../chunk-24IBVMEV.js";
69
+ } from "../chunk-7ORA3ZVJ.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-TAWCN7OK.js";
152
+ } from "../chunk-OHT4PWAK.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-UB2HLH5P.js";
257
+ } from "../chunk-TXRZFABA.js";
258
258
  import {
259
259
  classifyUnanswerablePane,
260
260
  paneRemedy
@@ -13931,7 +13931,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13931
13931
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13932
13932
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13933
13933
  async function channelInboundActivityAgeSecondsFor(codeName) {
13934
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-6OG3SYLZ.js");
13934
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-OVMYX6PK.js");
13935
13935
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13936
13936
  if (newest === null) return null;
13937
13937
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -14677,7 +14677,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14677
14677
  var lastVersionCheckAt = 0;
14678
14678
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14679
14679
  var lastResponsivenessProbeAt = 0;
14680
- var agtCliVersion = true ? "0.28.1040" : "dev";
14680
+ var agtCliVersion = true ? "0.28.1041" : "dev";
14681
14681
  function resolveBrewPath(execFileSync3) {
14682
14682
  try {
14683
14683
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -16312,7 +16312,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
16312
16312
  if (codeNames.length === 0) return;
16313
16313
  void (async () => {
16314
16314
  try {
16315
- const { collectDiagnostics } = await import("../persistent-session-QZAKDZIX.js");
16315
+ const { collectDiagnostics } = await import("../persistent-session-3IGNGFEX.js");
16316
16316
  await api.post("/host/heartbeat", {
16317
16317
  host_id: hostId,
16318
16318
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -16454,7 +16454,7 @@ async function pollCycleInner() {
16454
16454
  }
16455
16455
  try {
16456
16456
  const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
16457
- const { collectDiagnostics } = await import("../persistent-session-QZAKDZIX.js");
16457
+ const { collectDiagnostics } = await import("../persistent-session-3IGNGFEX.js");
16458
16458
  const diagCodeNames = [...agentState.persistentSessionAgents];
16459
16459
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
16460
16460
  let tailscaleHostname;
@@ -16630,7 +16630,7 @@ async function pollCycleInner() {
16630
16630
  collectPanelessActivityProbes,
16631
16631
  getResponsivenessIntervalMs,
16632
16632
  occupancyQualificationClassifications
16633
- } = await import("../responsiveness-probe-6OG3SYLZ.js");
16633
+ } = await import("../responsiveness-probe-OVMYX6PK.js");
16634
16634
  const probeIntervalMs = getResponsivenessIntervalMs();
16635
16635
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
16636
16636
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -16747,7 +16747,7 @@ async function pollCycleInner() {
16747
16747
  collectResponsivenessProbes,
16748
16748
  livePendingInboundOldestAgeSeconds,
16749
16749
  parkPendingInbound
16750
- } = await import("../responsiveness-probe-6OG3SYLZ.js");
16750
+ } = await import("../responsiveness-probe-OVMYX6PK.js");
16751
16751
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
16752
16752
  const wedgeNow = /* @__PURE__ */ new Date();
16753
16753
  const liveAgents = agentState.persistentSessionAgents;
@@ -16903,7 +16903,7 @@ async function pollCycleInner() {
16903
16903
  }
16904
16904
  try {
16905
16905
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
16906
- const { probeSessionAuth } = await import("../session-auth-dead-EH4N7PWU.js");
16906
+ const { probeSessionAuth } = await import("../session-auth-dead-EL5HEEEV.js");
16907
16907
  const observations = [];
16908
16908
  const pendingCacheCommits = [];
16909
16909
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -21446,7 +21446,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21446
21446
  try {
21447
21447
  const freshId = rotateSessionForWedge(codeName);
21448
21448
  consecutiveWedgeCycles.delete(codeName);
21449
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-6OG3SYLZ.js");
21449
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-OVMYX6PK.js");
21450
21450
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
21451
21451
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
21452
21452
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -21489,7 +21489,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21489
21489
  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}`));
21490
21490
  void (async () => {
21491
21491
  try {
21492
- const { collectDiagnostics } = await import("../persistent-session-QZAKDZIX.js");
21492
+ const { collectDiagnostics } = await import("../persistent-session-3IGNGFEX.js");
21493
21493
  await api.post("/host/heartbeat", {
21494
21494
  host_id: hostId,
21495
21495
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21540,7 +21540,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
21540
21540
  }
21541
21541
  try {
21542
21542
  const hostId = await getHostId();
21543
- const { collectDiagnostics } = await import("../persistent-session-QZAKDZIX.js");
21543
+ const { collectDiagnostics } = await import("../persistent-session-3IGNGFEX.js");
21544
21544
  await api.post("/host/heartbeat", {
21545
21545
  host_id: hostId,
21546
21546
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -22212,7 +22212,7 @@ async function processClaudePairSessions(agents) {
22212
22212
  // cannot take it for itself — by the time it runs, the write it is looking
22213
22213
  // for may already have happened.
22214
22214
  snapshotPairConfig
22215
- } = await import("../claude-pair-runtime-NKWXDI6H.js");
22215
+ } = await import("../claude-pair-runtime-JZU32YLZ.js");
22216
22216
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
22217
22217
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
22218
22218
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -32966,10 +32966,45 @@ var OAUTH_PROVIDERS = {
32966
32966
  // bill at creation time. Read-only would force a follow-up manual
32967
32967
  // upload in Xero; write closes the loop.
32968
32968
  "accounting.attachments",
32969
- // accounting.transactions.read → granular read-only replacements
32970
- // for the surfaces we don't yet need write access on.
32971
- "accounting.payments.read",
32972
- "accounting.banktransactions.read",
32969
+ // payments: write (CS-1845) enables `xero.payment.create`, which does
32970
+ // PUT /Payments. These two were `.read` only, described as "surfaces we
32971
+ // don't yet need write access on" — but the xero-broker had ALREADY
32972
+ // registered write verbs against both, so the claim was false when it was
32973
+ // written and the verbs could never succeed. A live approval of AUD
32974
+ // 57,748.35 against INV-0407 was approved by a human and then failed with
32975
+ // Xero `401 {Title: Unauthorized, Detail: AuthorizationUnsuccessful}`,
32976
+ // AFTER the handler's single 401 refresh-retry — which is what rules out
32977
+ // an expired token: a freshly refreshed token still 401s when the GRANT
32978
+ // never carried the scope.
32979
+ //
32980
+ // banktransactions: write for the same reason — `xero.bank_transaction.delete`
32981
+ // is registered and would have failed identically the first time anyone
32982
+ // approved one. It is a DESTRUCTIVE verb, so it was one approval away from
32983
+ // being the more alarming report.
32984
+ //
32985
+ // The variant without `.read` is the read+write granular scope, so the
32986
+ // `.read` entries are gone from THIS list.
32987
+ //
32988
+ // That is not the same as "consent asks for them once" (Obi Wan
32989
+ // `167f3932fcdf` on #6564 corrected an earlier version of this comment,
32990
+ // which claimed it was). The authorize route unions `defaultScopes` with
32991
+ // `listAgentRequiredOAuthScopes` (lib/agent-oauth-scope-deficit.ts, called
32992
+ // from routes/integrations-oauth.ts), and the catalog's `xero:read` defined
32993
+ // scope still lists `accounting.payments.read` and
32994
+ // `accounting.banktransactions.read` in its `oauth_scopes` — so an agent
32995
+ // with xero:read installed requests the `.read` variants alongside these.
32996
+ // Harmless, because write implies read, but do not write comments here that
32997
+ // describe the consent string as though this array were all of it.
32998
+ //
32999
+ // DO NOT substitute the broad `accounting.transactions`: Xero rejects the
33000
+ // manifest for apps created after 2026-03-02 (see the note above).
33001
+ //
33002
+ // RECONNECT REQUIRED, same as `accounting.manualjournals` below: the broker
33003
+ // posts with the agent's own OAuth access_token, so every existing install
33004
+ // keeps failing until it reconnects and re-consents. Shipping this scope is
33005
+ // necessary and NOT sufficient.
33006
+ "accounting.payments",
33007
+ "accounting.banktransactions",
32973
33008
  // manualjournals: write (CS-1439) enables the xero-broker to post
32974
33009
  // manual journals (reclasses, accruals, corrections) on approval. The
32975
33010
  // variant without `.read` is the read+write granular scope. Note: an
package/dist/mcp/index.js CHANGED
@@ -25582,10 +25582,45 @@ var OAUTH_PROVIDERS = {
25582
25582
  // bill at creation time. Read-only would force a follow-up manual
25583
25583
  // upload in Xero; write closes the loop.
25584
25584
  "accounting.attachments",
25585
- // accounting.transactions.read → granular read-only replacements
25586
- // for the surfaces we don't yet need write access on.
25587
- "accounting.payments.read",
25588
- "accounting.banktransactions.read",
25585
+ // payments: write (CS-1845) enables `xero.payment.create`, which does
25586
+ // PUT /Payments. These two were `.read` only, described as "surfaces we
25587
+ // don't yet need write access on" — but the xero-broker had ALREADY
25588
+ // registered write verbs against both, so the claim was false when it was
25589
+ // written and the verbs could never succeed. A live approval of AUD
25590
+ // 57,748.35 against INV-0407 was approved by a human and then failed with
25591
+ // Xero `401 {Title: Unauthorized, Detail: AuthorizationUnsuccessful}`,
25592
+ // AFTER the handler's single 401 refresh-retry — which is what rules out
25593
+ // an expired token: a freshly refreshed token still 401s when the GRANT
25594
+ // never carried the scope.
25595
+ //
25596
+ // banktransactions: write for the same reason — `xero.bank_transaction.delete`
25597
+ // is registered and would have failed identically the first time anyone
25598
+ // approved one. It is a DESTRUCTIVE verb, so it was one approval away from
25599
+ // being the more alarming report.
25600
+ //
25601
+ // The variant without `.read` is the read+write granular scope, so the
25602
+ // `.read` entries are gone from THIS list.
25603
+ //
25604
+ // That is not the same as "consent asks for them once" (Obi Wan
25605
+ // `167f3932fcdf` on #6564 corrected an earlier version of this comment,
25606
+ // which claimed it was). The authorize route unions `defaultScopes` with
25607
+ // `listAgentRequiredOAuthScopes` (lib/agent-oauth-scope-deficit.ts, called
25608
+ // from routes/integrations-oauth.ts), and the catalog's `xero:read` defined
25609
+ // scope still lists `accounting.payments.read` and
25610
+ // `accounting.banktransactions.read` in its `oauth_scopes` — so an agent
25611
+ // with xero:read installed requests the `.read` variants alongside these.
25612
+ // Harmless, because write implies read, but do not write comments here that
25613
+ // describe the consent string as though this array were all of it.
25614
+ //
25615
+ // DO NOT substitute the broad `accounting.transactions`: Xero rejects the
25616
+ // manifest for apps created after 2026-03-02 (see the note above).
25617
+ //
25618
+ // RECONNECT REQUIRED, same as `accounting.manualjournals` below: the broker
25619
+ // posts with the agent's own OAuth access_token, so every existing install
25620
+ // keeps failing until it reconnects and re-consents. Shipping this scope is
25621
+ // necessary and NOT sufficient.
25622
+ "accounting.payments",
25623
+ "accounting.banktransactions",
25589
25624
  // manualjournals: write (CS-1439) enables the xero-broker to post
25590
25625
  // manual journals (reclasses, accruals, corrections) on approval. The
25591
25626
  // variant without `.read` is the read+write granular scope. Note: an
@@ -39699,10 +39699,45 @@ var OAUTH_PROVIDERS = {
39699
39699
  // bill at creation time. Read-only would force a follow-up manual
39700
39700
  // upload in Xero; write closes the loop.
39701
39701
  "accounting.attachments",
39702
- // accounting.transactions.read → granular read-only replacements
39703
- // for the surfaces we don't yet need write access on.
39704
- "accounting.payments.read",
39705
- "accounting.banktransactions.read",
39702
+ // payments: write (CS-1845) enables `xero.payment.create`, which does
39703
+ // PUT /Payments. These two were `.read` only, described as "surfaces we
39704
+ // don't yet need write access on" — but the xero-broker had ALREADY
39705
+ // registered write verbs against both, so the claim was false when it was
39706
+ // written and the verbs could never succeed. A live approval of AUD
39707
+ // 57,748.35 against INV-0407 was approved by a human and then failed with
39708
+ // Xero `401 {Title: Unauthorized, Detail: AuthorizationUnsuccessful}`,
39709
+ // AFTER the handler's single 401 refresh-retry — which is what rules out
39710
+ // an expired token: a freshly refreshed token still 401s when the GRANT
39711
+ // never carried the scope.
39712
+ //
39713
+ // banktransactions: write for the same reason — `xero.bank_transaction.delete`
39714
+ // is registered and would have failed identically the first time anyone
39715
+ // approved one. It is a DESTRUCTIVE verb, so it was one approval away from
39716
+ // being the more alarming report.
39717
+ //
39718
+ // The variant without `.read` is the read+write granular scope, so the
39719
+ // `.read` entries are gone from THIS list.
39720
+ //
39721
+ // That is not the same as "consent asks for them once" (Obi Wan
39722
+ // `167f3932fcdf` on #6564 corrected an earlier version of this comment,
39723
+ // which claimed it was). The authorize route unions `defaultScopes` with
39724
+ // `listAgentRequiredOAuthScopes` (lib/agent-oauth-scope-deficit.ts, called
39725
+ // from routes/integrations-oauth.ts), and the catalog's `xero:read` defined
39726
+ // scope still lists `accounting.payments.read` and
39727
+ // `accounting.banktransactions.read` in its `oauth_scopes` — so an agent
39728
+ // with xero:read installed requests the `.read` variants alongside these.
39729
+ // Harmless, because write implies read, but do not write comments here that
39730
+ // describe the consent string as though this array were all of it.
39731
+ //
39732
+ // DO NOT substitute the broad `accounting.transactions`: Xero rejects the
39733
+ // manifest for apps created after 2026-03-02 (see the note above).
39734
+ //
39735
+ // RECONNECT REQUIRED, same as `accounting.manualjournals` below: the broker
39736
+ // posts with the agent's own OAuth access_token, so every existing install
39737
+ // keeps failing until it reconnects and re-consents. Shipping this scope is
39738
+ // necessary and NOT sufficient.
39739
+ "accounting.payments",
39740
+ "accounting.banktransactions",
39706
39741
  // manualjournals: write (CS-1439) enables the xero-broker to post
39707
39742
  // manual journals (reclasses, accruals, corrections) on approval. The
39708
39743
  // variant without `.read` is the read+write granular scope. Note: an
@@ -33916,10 +33916,45 @@ var OAUTH_PROVIDERS = {
33916
33916
  // bill at creation time. Read-only would force a follow-up manual
33917
33917
  // upload in Xero; write closes the loop.
33918
33918
  "accounting.attachments",
33919
- // accounting.transactions.read → granular read-only replacements
33920
- // for the surfaces we don't yet need write access on.
33921
- "accounting.payments.read",
33922
- "accounting.banktransactions.read",
33919
+ // payments: write (CS-1845) enables `xero.payment.create`, which does
33920
+ // PUT /Payments. These two were `.read` only, described as "surfaces we
33921
+ // don't yet need write access on" — but the xero-broker had ALREADY
33922
+ // registered write verbs against both, so the claim was false when it was
33923
+ // written and the verbs could never succeed. A live approval of AUD
33924
+ // 57,748.35 against INV-0407 was approved by a human and then failed with
33925
+ // Xero `401 {Title: Unauthorized, Detail: AuthorizationUnsuccessful}`,
33926
+ // AFTER the handler's single 401 refresh-retry — which is what rules out
33927
+ // an expired token: a freshly refreshed token still 401s when the GRANT
33928
+ // never carried the scope.
33929
+ //
33930
+ // banktransactions: write for the same reason — `xero.bank_transaction.delete`
33931
+ // is registered and would have failed identically the first time anyone
33932
+ // approved one. It is a DESTRUCTIVE verb, so it was one approval away from
33933
+ // being the more alarming report.
33934
+ //
33935
+ // The variant without `.read` is the read+write granular scope, so the
33936
+ // `.read` entries are gone from THIS list.
33937
+ //
33938
+ // That is not the same as "consent asks for them once" (Obi Wan
33939
+ // `167f3932fcdf` on #6564 corrected an earlier version of this comment,
33940
+ // which claimed it was). The authorize route unions `defaultScopes` with
33941
+ // `listAgentRequiredOAuthScopes` (lib/agent-oauth-scope-deficit.ts, called
33942
+ // from routes/integrations-oauth.ts), and the catalog's `xero:read` defined
33943
+ // scope still lists `accounting.payments.read` and
33944
+ // `accounting.banktransactions.read` in its `oauth_scopes` — so an agent
33945
+ // with xero:read installed requests the `.read` variants alongside these.
33946
+ // Harmless, because write implies read, but do not write comments here that
33947
+ // describe the consent string as though this array were all of it.
33948
+ //
33949
+ // DO NOT substitute the broad `accounting.transactions`: Xero rejects the
33950
+ // manifest for apps created after 2026-03-02 (see the note above).
33951
+ //
33952
+ // RECONNECT REQUIRED, same as `accounting.manualjournals` below: the broker
33953
+ // posts with the agent's own OAuth access_token, so every existing install
33954
+ // keeps failing until it reconnects and re-consents. Shipping this scope is
33955
+ // necessary and NOT sufficient.
33956
+ "accounting.payments",
33957
+ "accounting.banktransactions",
33923
33958
  // manualjournals: write (CS-1439) enables the xero-broker to post
33924
33959
  // manual journals (reclasses, accruals, corrections) on approval. The
33925
33960
  // variant without `.read` is the read+write granular scope. Note: an
@@ -34028,10 +34028,45 @@ var OAUTH_PROVIDERS = {
34028
34028
  // bill at creation time. Read-only would force a follow-up manual
34029
34029
  // upload in Xero; write closes the loop.
34030
34030
  "accounting.attachments",
34031
- // accounting.transactions.read → granular read-only replacements
34032
- // for the surfaces we don't yet need write access on.
34033
- "accounting.payments.read",
34034
- "accounting.banktransactions.read",
34031
+ // payments: write (CS-1845) enables `xero.payment.create`, which does
34032
+ // PUT /Payments. These two were `.read` only, described as "surfaces we
34033
+ // don't yet need write access on" — but the xero-broker had ALREADY
34034
+ // registered write verbs against both, so the claim was false when it was
34035
+ // written and the verbs could never succeed. A live approval of AUD
34036
+ // 57,748.35 against INV-0407 was approved by a human and then failed with
34037
+ // Xero `401 {Title: Unauthorized, Detail: AuthorizationUnsuccessful}`,
34038
+ // AFTER the handler's single 401 refresh-retry — which is what rules out
34039
+ // an expired token: a freshly refreshed token still 401s when the GRANT
34040
+ // never carried the scope.
34041
+ //
34042
+ // banktransactions: write for the same reason — `xero.bank_transaction.delete`
34043
+ // is registered and would have failed identically the first time anyone
34044
+ // approved one. It is a DESTRUCTIVE verb, so it was one approval away from
34045
+ // being the more alarming report.
34046
+ //
34047
+ // The variant without `.read` is the read+write granular scope, so the
34048
+ // `.read` entries are gone from THIS list.
34049
+ //
34050
+ // That is not the same as "consent asks for them once" (Obi Wan
34051
+ // `167f3932fcdf` on #6564 corrected an earlier version of this comment,
34052
+ // which claimed it was). The authorize route unions `defaultScopes` with
34053
+ // `listAgentRequiredOAuthScopes` (lib/agent-oauth-scope-deficit.ts, called
34054
+ // from routes/integrations-oauth.ts), and the catalog's `xero:read` defined
34055
+ // scope still lists `accounting.payments.read` and
34056
+ // `accounting.banktransactions.read` in its `oauth_scopes` — so an agent
34057
+ // with xero:read installed requests the `.read` variants alongside these.
34058
+ // Harmless, because write implies read, but do not write comments here that
34059
+ // describe the consent string as though this array were all of it.
34060
+ //
34061
+ // DO NOT substitute the broad `accounting.transactions`: Xero rejects the
34062
+ // manifest for apps created after 2026-03-02 (see the note above).
34063
+ //
34064
+ // RECONNECT REQUIRED, same as `accounting.manualjournals` below: the broker
34065
+ // posts with the agent's own OAuth access_token, so every existing install
34066
+ // keeps failing until it reconnects and re-consents. Shipping this scope is
34067
+ // necessary and NOT sufficient.
34068
+ "accounting.payments",
34069
+ "accounting.banktransactions",
34035
34070
  // manualjournals: write (CS-1439) enables the xero-broker to post
34036
34071
  // manual journals (reclasses, accruals, corrections) on approval. The
34037
34072
  // variant without `.read` is the read+write granular scope. Note: an
@@ -65,8 +65,8 @@ import {
65
65
  writeDirectChatSessionState,
66
66
  writeEgressAllowlist,
67
67
  writePersistentClaudeWrapper
68
- } from "./chunk-TAWCN7OK.js";
69
- import "./chunk-UB2HLH5P.js";
68
+ } from "./chunk-OHT4PWAK.js";
69
+ import "./chunk-TXRZFABA.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-QZAKDZIX.js.map
142
+ //# sourceMappingURL=persistent-session-3IGNGFEX.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-TAWCN7OK.js";
4
- import "./chunk-UB2HLH5P.js";
3
+ } from "./chunk-OHT4PWAK.js";
4
+ import "./chunk-TXRZFABA.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-6OG3SYLZ.js.map
805
+ //# sourceMappingURL=responsiveness-probe-OVMYX6PK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-UB2HLH5P.js";
3
+ } from "./chunk-TXRZFABA.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-EH4N7PWU.js.map
207
+ //# sourceMappingURL=session-auth-dead-EL5HEEEV.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1040",
3
+ "version": "0.28.1041",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {