@integrity-labs/agt-cli 0.28.769 → 0.28.771
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 +5 -5
- package/dist/{chunk-6XPTQR7W.js → chunk-BOYUCA64.js} +4 -4
- package/dist/{chunk-THSP5NB6.js → chunk-R6XGVTQS.js} +2 -2
- package/dist/{chunk-MBUWL4UL.js → chunk-UPSDSMNC.js} +14 -3
- package/dist/chunk-UPSDSMNC.js.map +1 -0
- package/dist/{claude-pair-runtime-KPYTUDNJ.js → claude-pair-runtime-Z7JFVKIY.js} +2 -2
- package/dist/lib/manager-worker.js +13 -13
- package/dist/mcp/direct-chat-channel.js +3 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/origami.js +3 -0
- package/dist/mcp/slack-channel.js +3 -0
- package/dist/mcp/telegram-channel.js +3 -0
- package/dist/mcp/xero.js +101 -6
- package/dist/{persistent-session-7JBMP6UV.js → persistent-session-NUVUR3PB.js} +3 -3
- package/dist/{responsiveness-probe-OR4CUA3R.js → responsiveness-probe-J3D7MRIU.js} +3 -3
- package/dist/{session-auth-dead-Q2HJCN4I.js → session-auth-dead-GKZNZKWI.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-MBUWL4UL.js.map +0 -1
- /package/dist/{chunk-6XPTQR7W.js.map → chunk-BOYUCA64.js.map} +0 -0
- /package/dist/{chunk-THSP5NB6.js.map → chunk-R6XGVTQS.js.map} +0 -0
- /package/dist/{claude-pair-runtime-KPYTUDNJ.js.map → claude-pair-runtime-Z7JFVKIY.js.map} +0 -0
- /package/dist/{persistent-session-7JBMP6UV.js.map → persistent-session-NUVUR3PB.js.map} +0 -0
- /package/dist/{responsiveness-probe-OR4CUA3R.js.map → responsiveness-probe-J3D7MRIU.js.map} +0 -0
- /package/dist/{session-auth-dead-Q2HJCN4I.js.map → session-auth-dead-GKZNZKWI.js.map} +0 -0
|
@@ -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-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-NUVUR3PB.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-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-Z7JFVKIY.js.map
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
safeWriteJsonAtomic,
|
|
59
59
|
setConfigHash,
|
|
60
60
|
tripClass
|
|
61
|
-
} from "../chunk-
|
|
61
|
+
} from "../chunk-BOYUCA64.js";
|
|
62
62
|
import {
|
|
63
63
|
getProjectDir as getProjectDir2,
|
|
64
64
|
getReadyTasks,
|
|
@@ -120,7 +120,7 @@ import {
|
|
|
120
120
|
takeZombieDetection,
|
|
121
121
|
toOpencodeModel,
|
|
122
122
|
writeEgressAllowlist
|
|
123
|
-
} from "../chunk-
|
|
123
|
+
} from "../chunk-R6XGVTQS.js";
|
|
124
124
|
import {
|
|
125
125
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
126
126
|
AnchorSessionClient,
|
|
@@ -209,7 +209,7 @@ import {
|
|
|
209
209
|
subagentActivityAgeSeconds,
|
|
210
210
|
sumTranscriptUsageInWindow,
|
|
211
211
|
transcriptActivityAgeSeconds
|
|
212
|
-
} from "../chunk-
|
|
212
|
+
} from "../chunk-UPSDSMNC.js";
|
|
213
213
|
import {
|
|
214
214
|
reapOrphanChannelMcps
|
|
215
215
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -12870,7 +12870,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
12870
12870
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
12871
12871
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
12872
12872
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
12873
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
12873
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-J3D7MRIU.js");
|
|
12874
12874
|
const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
|
|
12875
12875
|
if (newest === null) return null;
|
|
12876
12876
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -13530,7 +13530,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
13530
13530
|
var lastVersionCheckAt = 0;
|
|
13531
13531
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
13532
13532
|
var lastResponsivenessProbeAt = 0;
|
|
13533
|
-
var agtCliVersion = true ? "0.28.
|
|
13533
|
+
var agtCliVersion = true ? "0.28.771" : "dev";
|
|
13534
13534
|
function resolveBrewPath(execFileSync2) {
|
|
13535
13535
|
try {
|
|
13536
13536
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15074,7 +15074,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
15074
15074
|
if (codeNames.length === 0) return;
|
|
15075
15075
|
void (async () => {
|
|
15076
15076
|
try {
|
|
15077
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15077
|
+
const { collectDiagnostics } = await import("../persistent-session-NUVUR3PB.js");
|
|
15078
15078
|
await api.post("/host/heartbeat", {
|
|
15079
15079
|
host_id: hostId,
|
|
15080
15080
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -15215,7 +15215,7 @@ async function pollCycleInner() {
|
|
|
15215
15215
|
}
|
|
15216
15216
|
try {
|
|
15217
15217
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
15218
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15218
|
+
const { collectDiagnostics } = await import("../persistent-session-NUVUR3PB.js");
|
|
15219
15219
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
15220
15220
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
|
|
15221
15221
|
let tailscaleHostname;
|
|
@@ -15384,7 +15384,7 @@ async function pollCycleInner() {
|
|
|
15384
15384
|
collectPanelessActivityProbes,
|
|
15385
15385
|
getResponsivenessIntervalMs,
|
|
15386
15386
|
occupancyQualificationClassifications
|
|
15387
|
-
} = await import("../responsiveness-probe-
|
|
15387
|
+
} = await import("../responsiveness-probe-J3D7MRIU.js");
|
|
15388
15388
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
15389
15389
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
15390
15390
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -15494,7 +15494,7 @@ async function pollCycleInner() {
|
|
|
15494
15494
|
collectResponsivenessProbes,
|
|
15495
15495
|
livePendingInboundOldestAgeSeconds,
|
|
15496
15496
|
parkPendingInbound
|
|
15497
|
-
} = await import("../responsiveness-probe-
|
|
15497
|
+
} = await import("../responsiveness-probe-J3D7MRIU.js");
|
|
15498
15498
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
15499
15499
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
15500
15500
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -15650,7 +15650,7 @@ async function pollCycleInner() {
|
|
|
15650
15650
|
}
|
|
15651
15651
|
try {
|
|
15652
15652
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
|
|
15653
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
15653
|
+
const { probeSessionAuth } = await import("../session-auth-dead-GKZNZKWI.js");
|
|
15654
15654
|
const observations = [];
|
|
15655
15655
|
const pendingCacheCommits = [];
|
|
15656
15656
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -19690,7 +19690,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
19690
19690
|
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}`));
|
|
19691
19691
|
void (async () => {
|
|
19692
19692
|
try {
|
|
19693
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
19693
|
+
const { collectDiagnostics } = await import("../persistent-session-NUVUR3PB.js");
|
|
19694
19694
|
await api.post("/host/heartbeat", {
|
|
19695
19695
|
host_id: hostId,
|
|
19696
19696
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -19736,7 +19736,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
19736
19736
|
}
|
|
19737
19737
|
try {
|
|
19738
19738
|
const hostId = await getHostId();
|
|
19739
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
19739
|
+
const { collectDiagnostics } = await import("../persistent-session-NUVUR3PB.js");
|
|
19740
19740
|
await api.post("/host/heartbeat", {
|
|
19741
19741
|
host_id: hostId,
|
|
19742
19742
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
|
|
@@ -20372,7 +20372,7 @@ async function processClaudePairSessions(agents) {
|
|
|
20372
20372
|
killPairSession,
|
|
20373
20373
|
pairTmuxSession,
|
|
20374
20374
|
finalizeClaudePairOnboarding
|
|
20375
|
-
} = await import("../claude-pair-runtime-
|
|
20375
|
+
} = await import("../claude-pair-runtime-Z7JFVKIY.js");
|
|
20376
20376
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
20377
20377
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
20378
20378
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -30382,6 +30382,9 @@ var FRAMEWORK_MODEL_SLOTS = {
|
|
|
30382
30382
|
};
|
|
30383
30383
|
var KNOWN_MODEL_SLOTS = new Set(Object.values(FRAMEWORK_MODEL_SLOTS).flat());
|
|
30384
30384
|
|
|
30385
|
+
// ../core/dist/types/model-policy.js
|
|
30386
|
+
var KNOWN_MODEL_POLICY_SLOTS = [...KNOWN_MODEL_SLOTS].sort();
|
|
30387
|
+
|
|
30385
30388
|
// ../core/dist/types/integration.js
|
|
30386
30389
|
var HITL_TIER_ORDER = [
|
|
30387
30390
|
"read",
|
package/dist/mcp/index.js
CHANGED
|
@@ -37816,6 +37816,9 @@ var FRAMEWORK_MODEL_SLOTS = {
|
|
|
37816
37816
|
};
|
|
37817
37817
|
var KNOWN_MODEL_SLOTS = new Set(Object.values(FRAMEWORK_MODEL_SLOTS).flat());
|
|
37818
37818
|
|
|
37819
|
+
// ../core/dist/types/model-policy.js
|
|
37820
|
+
var KNOWN_MODEL_POLICY_SLOTS = [...KNOWN_MODEL_SLOTS].sort();
|
|
37821
|
+
|
|
37819
37822
|
// ../core/dist/types/integration.js
|
|
37820
37823
|
var HITL_TIER_ORDER = [
|
|
37821
37824
|
"read",
|
package/dist/mcp/origami.js
CHANGED
|
@@ -36383,6 +36383,9 @@ var FRAMEWORK_MODEL_SLOTS = {
|
|
|
36383
36383
|
};
|
|
36384
36384
|
var KNOWN_MODEL_SLOTS = new Set(Object.values(FRAMEWORK_MODEL_SLOTS).flat());
|
|
36385
36385
|
|
|
36386
|
+
// ../core/dist/types/model-policy.js
|
|
36387
|
+
var KNOWN_MODEL_POLICY_SLOTS = [...KNOWN_MODEL_SLOTS].sort();
|
|
36388
|
+
|
|
36386
36389
|
// ../core/dist/types/integration.js
|
|
36387
36390
|
var HITL_TIER_ORDER = [
|
|
36388
36391
|
"read",
|
|
@@ -30677,6 +30677,9 @@ var FRAMEWORK_MODEL_SLOTS = {
|
|
|
30677
30677
|
};
|
|
30678
30678
|
var KNOWN_MODEL_SLOTS = new Set(Object.values(FRAMEWORK_MODEL_SLOTS).flat());
|
|
30679
30679
|
|
|
30680
|
+
// ../core/dist/types/model-policy.js
|
|
30681
|
+
var KNOWN_MODEL_POLICY_SLOTS = [...KNOWN_MODEL_SLOTS].sort();
|
|
30682
|
+
|
|
30680
30683
|
// ../core/dist/types/integration.js
|
|
30681
30684
|
var HITL_TIER_ORDER = [
|
|
30682
30685
|
"read",
|
|
@@ -30841,6 +30841,9 @@ var FRAMEWORK_MODEL_SLOTS = {
|
|
|
30841
30841
|
};
|
|
30842
30842
|
var KNOWN_MODEL_SLOTS = new Set(Object.values(FRAMEWORK_MODEL_SLOTS).flat());
|
|
30843
30843
|
|
|
30844
|
+
// ../core/dist/types/model-policy.js
|
|
30845
|
+
var KNOWN_MODEL_POLICY_SLOTS = [...KNOWN_MODEL_SLOTS].sort();
|
|
30846
|
+
|
|
30844
30847
|
// ../core/dist/types/integration.js
|
|
30845
30848
|
var HITL_TIER_ORDER = [
|
|
30846
30849
|
"read",
|
package/dist/mcp/xero.js
CHANGED
|
@@ -116594,6 +116594,81 @@ async function getXeroRepeatingInvoice(repeatingInvoiceID) {
|
|
|
116594
116594
|
}
|
|
116595
116595
|
}
|
|
116596
116596
|
|
|
116597
|
+
// src/helpers/repeating-invoice-generation.ts
|
|
116598
|
+
function normaliseStatus(v) {
|
|
116599
|
+
if (v === void 0 || v === null) return null;
|
|
116600
|
+
if (typeof v !== "string" && typeof v !== "number") return null;
|
|
116601
|
+
const s = String(v).trim();
|
|
116602
|
+
return s.length > 0 ? s.toUpperCase() : null;
|
|
116603
|
+
}
|
|
116604
|
+
function generationVerdict(t) {
|
|
116605
|
+
const status = normaliseStatus(t.status);
|
|
116606
|
+
if (!status) {
|
|
116607
|
+
return {
|
|
116608
|
+
willGenerate: false,
|
|
116609
|
+
reason: "GENERATION UNKNOWN: Xero returned no status for this template."
|
|
116610
|
+
};
|
|
116611
|
+
}
|
|
116612
|
+
if (status === "DELETED" || status === "VOIDED") {
|
|
116613
|
+
return {
|
|
116614
|
+
willGenerate: false,
|
|
116615
|
+
reason: `WILL NOT GENERATE: template is ${status}.`
|
|
116616
|
+
};
|
|
116617
|
+
}
|
|
116618
|
+
if (status !== "AUTHORISED") {
|
|
116619
|
+
return {
|
|
116620
|
+
willGenerate: false,
|
|
116621
|
+
reason: `WILL NOT GENERATE: status is ${status}. Only AUTHORISED templates generate invoices. Set it with update-repeating-invoice \u2014 and confirm the amount, cadence and counterparty with a human first, because authorising a template starts billing someone on a schedule.`
|
|
116622
|
+
};
|
|
116623
|
+
}
|
|
116624
|
+
const end = t.schedule?.endDate;
|
|
116625
|
+
const next = t.schedule?.nextScheduledDate;
|
|
116626
|
+
if (end && isBoundaryAmbiguous(end)) {
|
|
116627
|
+
return {
|
|
116628
|
+
willGenerate: false,
|
|
116629
|
+
reason: `GENERATION UNKNOWN: AUTHORISED and the schedule ends ${end}, which is within a day of now. Xero generates in the organisation's time zone and this check compares in UTC, so the two can disagree by a calendar day at the boundary. Confirm in Xero before acting on this one.`
|
|
116630
|
+
};
|
|
116631
|
+
}
|
|
116632
|
+
if (end && isPast(end)) {
|
|
116633
|
+
return {
|
|
116634
|
+
willGenerate: false,
|
|
116635
|
+
reason: `WILL NOT GENERATE: AUTHORISED but the schedule ended ${end}.`
|
|
116636
|
+
};
|
|
116637
|
+
}
|
|
116638
|
+
if (!next) {
|
|
116639
|
+
return {
|
|
116640
|
+
willGenerate: false,
|
|
116641
|
+
reason: "GENERATION UNKNOWN: AUTHORISED but Xero returned no next scheduled date, so the next run cannot be confirmed from here."
|
|
116642
|
+
};
|
|
116643
|
+
}
|
|
116644
|
+
return {
|
|
116645
|
+
willGenerate: true,
|
|
116646
|
+
reason: `Generates: AUTHORISED, next invoice ${next}${end ? `, ends ${end}` : ""}.`
|
|
116647
|
+
};
|
|
116648
|
+
}
|
|
116649
|
+
function isPast(dateStr) {
|
|
116650
|
+
const t = Date.parse(dateStr);
|
|
116651
|
+
if (Number.isNaN(t)) return false;
|
|
116652
|
+
const endOfDay = new Date(t);
|
|
116653
|
+
endOfDay.setUTCHours(23, 59, 59, 999);
|
|
116654
|
+
return endOfDay.getTime() < Date.now();
|
|
116655
|
+
}
|
|
116656
|
+
var MAX_TZ_AHEAD_MS = 14 * 60 * 60 * 1e3;
|
|
116657
|
+
var MAX_TZ_BEHIND_MS = 12 * 60 * 60 * 1e3;
|
|
116658
|
+
function isBoundaryAmbiguous(dateStr) {
|
|
116659
|
+
const t = Date.parse(dateStr);
|
|
116660
|
+
if (Number.isNaN(t)) return false;
|
|
116661
|
+
const endOfDayUtc = new Date(t);
|
|
116662
|
+
endOfDayUtc.setUTCHours(23, 59, 59, 999);
|
|
116663
|
+
const end = endOfDayUtc.getTime();
|
|
116664
|
+
const now = Date.now();
|
|
116665
|
+
return now >= end - MAX_TZ_AHEAD_MS && now <= end + MAX_TZ_BEHIND_MS;
|
|
116666
|
+
}
|
|
116667
|
+
function sendSettingsLine(t) {
|
|
116668
|
+
const flag = (v) => v === void 0 ? "unknown" : v ? "yes" : "no";
|
|
116669
|
+
return `Sending: approvedForSending=${flag(t.approvedForSending)}, sendCopy=${flag(t.sendCopy)}, markAsSent=${flag(t.markAsSent)}, includePDF=${flag(t.includePDF)}` + (t.approvedForSending === false ? " \u2014 NOT approved for sending, so generated invoices are not emailed to the contact." : "");
|
|
116670
|
+
}
|
|
116671
|
+
|
|
116597
116672
|
// src/tools/get/get-repeating-invoice.tool.ts
|
|
116598
116673
|
var GetRepeatingInvoiceTool = CreateXeroTool(
|
|
116599
116674
|
"get-repeating-invoice",
|
|
@@ -116630,6 +116705,8 @@ var GetRepeatingInvoiceTool = CreateXeroTool(
|
|
|
116630
116705
|
type: "text",
|
|
116631
116706
|
text: [
|
|
116632
116707
|
`RepeatingInvoiceID: ${t.repeatingInvoiceID}`,
|
|
116708
|
+
// CS-1635: state the conclusion, not just the evidence.
|
|
116709
|
+
generationVerdict(t).reason,
|
|
116633
116710
|
t.contact ? `Contact: ${t.contact.name} (${t.contact.contactID})` : null,
|
|
116634
116711
|
t.type ? `Type: ${t.type}` : null,
|
|
116635
116712
|
t.status ? `Status: ${t.status}` : null,
|
|
@@ -116638,6 +116715,7 @@ var GetRepeatingInvoiceTool = CreateXeroTool(
|
|
|
116638
116715
|
t.subTotal !== void 0 ? `Sub Total: ${t.subTotal}` : null,
|
|
116639
116716
|
t.totalTax !== void 0 ? `Total Tax: ${t.totalTax}` : null,
|
|
116640
116717
|
t.currencyCode ? `Currency: ${t.currencyCode}` : null,
|
|
116718
|
+
sendSettingsLine(t),
|
|
116641
116719
|
t.lineAmountTypes ? `Line Amount Types: ${t.lineAmountTypes}` : null,
|
|
116642
116720
|
t.schedule ? `Schedule: every ${t.schedule.period ?? "?"} ${t.schedule.unit ?? ""}, start ${t.schedule.startDate ?? "?"}, due ${t.schedule.dueDate ?? "?"} (${t.schedule.dueDateType ?? "?"}), next ${t.schedule.nextScheduledDate ?? "?"}, end ${t.schedule.endDate ?? "open-ended"}` : null,
|
|
116643
116721
|
t.lineItems?.length ? `Line Items:
|
|
@@ -119042,7 +119120,7 @@ async function listXeroRepeatingInvoices() {
|
|
|
119042
119120
|
// src/tools/list/list-repeating-invoices.tool.ts
|
|
119043
119121
|
var ListRepeatingInvoicesTool = CreateXeroTool(
|
|
119044
119122
|
"list-repeating-invoices",
|
|
119045
|
-
"List every repeating (recurring) invoice template configured on the Xero tenant. Each template defines an invoice that Xero auto-generates on a schedule (weekly/monthly/etc.). Use this to look up the RepeatingInvoiceID before calling get-repeating-invoice or update-repeating-invoice. The endpoint does not support pagination \u2014 all templates are returned.",
|
|
119123
|
+
"List every repeating (recurring) invoice template configured on the Xero tenant. Each template defines an invoice that Xero auto-generates on a schedule (weekly/monthly/etc.). Use this to look up the RepeatingInvoiceID before calling get-repeating-invoice or update-repeating-invoice. The endpoint does not support pagination \u2014 all templates are returned. CS-1635: every row states outright whether it WILL GENERATE and why, plus its next scheduled date and its sending settings. A template can be perfectly configured, sit in DRAFT, and generate nothing \u2014 read the verdict line rather than inferring from Status.",
|
|
119046
119124
|
{},
|
|
119047
119125
|
async () => {
|
|
119048
119126
|
const response = await listXeroRepeatingInvoices();
|
|
@@ -119067,6 +119145,10 @@ var ListRepeatingInvoicesTool = CreateXeroTool(
|
|
|
119067
119145
|
type: "text",
|
|
119068
119146
|
text: [
|
|
119069
119147
|
`RepeatingInvoiceID: ${t.repeatingInvoiceID}`,
|
|
119148
|
+
// CS-1635: the conclusion, first, because it is the question being
|
|
119149
|
+
// asked. Printing Status and leaving the reader to know that DRAFT
|
|
119150
|
+
// means "silent" is how 14 of 15 templates sat dead unnoticed.
|
|
119151
|
+
generationVerdict(t).reason,
|
|
119070
119152
|
t.contact ? `Contact: ${t.contact.name} (${t.contact.contactID})` : null,
|
|
119071
119153
|
t.type ? `Type: ${t.type}` : null,
|
|
119072
119154
|
t.status ? `Status: ${t.status}` : null,
|
|
@@ -119074,6 +119156,12 @@ var ListRepeatingInvoicesTool = CreateXeroTool(
|
|
|
119074
119156
|
t.total !== void 0 ? `Total: ${t.total}` : null,
|
|
119075
119157
|
t.currencyCode ? `Currency: ${t.currencyCode}` : null,
|
|
119076
119158
|
t.schedule ? `Schedule: every ${t.schedule.period ?? "?"} ${t.schedule.unit ?? ""} starting ${t.schedule.startDate ?? "?"}` : null,
|
|
119159
|
+
t.schedule?.nextScheduledDate ? `Next scheduled: ${t.schedule.nextScheduledDate}` : null,
|
|
119160
|
+
t.schedule?.endDate ? `Schedule ends: ${t.schedule.endDate}` : null,
|
|
119161
|
+
// CS-1635 asks for this by name: the send setting was not exposed
|
|
119162
|
+
// anywhere, so a template could generate and never reach the
|
|
119163
|
+
// customer with nothing in any tool saying so.
|
|
119164
|
+
sendSettingsLine(t),
|
|
119077
119165
|
t.lineAmountTypes ? `Line Amount Types: ${t.lineAmountTypes}` : null
|
|
119078
119166
|
].filter(Boolean).join("\n")
|
|
119079
119167
|
}))
|
|
@@ -120609,12 +120697,12 @@ async function updateXeroRepeatingInvoice(repeatingInvoiceID, patch) {
|
|
|
120609
120697
|
error: `RepeatingInvoice ${repeatingInvoiceID} not found.`
|
|
120610
120698
|
};
|
|
120611
120699
|
}
|
|
120612
|
-
const noChange = patch.reference === void 0 && patch.lineItems === void 0 && patch.status === void 0 && patch.contactId === void 0;
|
|
120700
|
+
const noChange = patch.reference === void 0 && patch.lineItems === void 0 && patch.status === void 0 && patch.contactId === void 0 && patch.approvedForSending === void 0;
|
|
120613
120701
|
if (noChange) {
|
|
120614
120702
|
return {
|
|
120615
120703
|
result: null,
|
|
120616
120704
|
isError: true,
|
|
120617
|
-
error: "No fields supplied to update. Pass at least one of reference, lineItems, status, or
|
|
120705
|
+
error: "No fields supplied to update. Pass at least one of reference, lineItems, status, contactId, or approvedForSending."
|
|
120618
120706
|
};
|
|
120619
120707
|
}
|
|
120620
120708
|
const xeroPatch = {};
|
|
@@ -120625,6 +120713,9 @@ async function updateXeroRepeatingInvoice(repeatingInvoiceID, patch) {
|
|
|
120625
120713
|
if (patch.contactId !== void 0) {
|
|
120626
120714
|
xeroPatch.contact = { contactID: patch.contactId };
|
|
120627
120715
|
}
|
|
120716
|
+
if (patch.approvedForSending !== void 0) {
|
|
120717
|
+
xeroPatch.approvedForSending = patch.approvedForSending;
|
|
120718
|
+
}
|
|
120628
120719
|
if (patch.lineItems !== void 0) {
|
|
120629
120720
|
xeroPatch.lineItems = patch.lineItems.map((li) => ({
|
|
120630
120721
|
description: li.description,
|
|
@@ -120674,15 +120765,19 @@ var UpdateRepeatingInvoiceTool = CreateXeroTool(
|
|
|
120674
120765
|
status: external_exports.enum(["DRAFT", "AUTHORISED"]).optional().describe(
|
|
120675
120766
|
"Template status. DRAFT templates do NOT generate invoices; AUTHORISED templates do. Flipping a draft to AUTHORISED is high-risk and should be explicitly confirmed with the user."
|
|
120676
120767
|
),
|
|
120677
|
-
contactId: external_exports.string().optional().describe("Replace the counterparty. Look up the ContactID via list-contacts first.")
|
|
120768
|
+
contactId: external_exports.string().optional().describe("Replace the counterparty. Look up the ContactID via list-contacts first."),
|
|
120769
|
+
approvedForSending: external_exports.boolean().optional().describe(
|
|
120770
|
+
'CS-1635: whether Xero emails each generated invoice to the contact. A template can generate invoices perfectly and never send them, which looks identical to "working" from every other field. Setting this true starts emailing a customer on a schedule, so confirm it with a human first.'
|
|
120771
|
+
)
|
|
120678
120772
|
},
|
|
120679
120773
|
async (params) => {
|
|
120680
|
-
const { repeatingInvoiceID, reference, lineItems, status, contactId } = params;
|
|
120774
|
+
const { repeatingInvoiceID, reference, lineItems, status, contactId, approvedForSending } = params;
|
|
120681
120775
|
const result = await updateXeroRepeatingInvoice(repeatingInvoiceID, {
|
|
120682
120776
|
reference,
|
|
120683
120777
|
lineItems,
|
|
120684
120778
|
status,
|
|
120685
|
-
contactId
|
|
120779
|
+
contactId,
|
|
120780
|
+
approvedForSending
|
|
120686
120781
|
});
|
|
120687
120782
|
if (result.isError) {
|
|
120688
120783
|
return {
|
|
@@ -49,8 +49,8 @@ import {
|
|
|
49
49
|
writeDirectChatSessionState,
|
|
50
50
|
writeEgressAllowlist,
|
|
51
51
|
writePersistentClaudeWrapper
|
|
52
|
-
} from "./chunk-
|
|
53
|
-
import "./chunk-
|
|
52
|
+
} from "./chunk-R6XGVTQS.js";
|
|
53
|
+
import "./chunk-UPSDSMNC.js";
|
|
54
54
|
import "./chunk-XWVM4KPK.js";
|
|
55
55
|
export {
|
|
56
56
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -104,4 +104,4 @@ export {
|
|
|
104
104
|
writeEgressAllowlist,
|
|
105
105
|
writePersistentClaudeWrapper
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=persistent-session-
|
|
107
|
+
//# sourceMappingURL=persistent-session-NUVUR3PB.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-R6XGVTQS.js";
|
|
4
|
+
import "./chunk-UPSDSMNC.js";
|
|
5
5
|
import "./chunk-XWVM4KPK.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/responsiveness-probe.ts
|
|
@@ -745,4 +745,4 @@ export {
|
|
|
745
745
|
readAndResetSlackReplyBindingClassifications,
|
|
746
746
|
readAndResetSlackReplyTargetClassifications
|
|
747
747
|
};
|
|
748
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
748
|
+
//# sourceMappingURL=responsiveness-probe-J3D7MRIU.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UPSDSMNC.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-
|
|
206
|
+
//# sourceMappingURL=session-auth-dead-GKZNZKWI.js.map
|