@integrity-labs/agt-cli 0.28.771 → 0.28.773
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 +6 -6
- package/dist/{chunk-UPSDSMNC.js → chunk-75UAJFJJ.js} +68 -1
- package/dist/chunk-75UAJFJJ.js.map +1 -0
- package/dist/{chunk-R6XGVTQS.js → chunk-UL2W5NY6.js} +2 -2
- package/dist/{chunk-BOYUCA64.js → chunk-UVA7VXG4.js} +6 -71
- package/dist/chunk-UVA7VXG4.js.map +1 -0
- package/dist/{claude-pair-runtime-Z7JFVKIY.js → claude-pair-runtime-5ULX4UVC.js} +2 -2
- package/dist/lib/manager-worker.js +13 -13
- package/dist/mcp/index.js +53 -0
- package/dist/mcp/xero.js +26 -10
- package/dist/{persistent-session-NUVUR3PB.js → persistent-session-E4AHQHRA.js} +3 -3
- package/dist/{responsiveness-probe-J3D7MRIU.js → responsiveness-probe-EN6IOLBG.js} +3 -3
- package/dist/{session-auth-dead-GKZNZKWI.js → session-auth-dead-LNYMXEHY.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-BOYUCA64.js.map +0 -1
- package/dist/chunk-UPSDSMNC.js.map +0 -1
- /package/dist/{chunk-R6XGVTQS.js.map → chunk-UL2W5NY6.js.map} +0 -0
- /package/dist/{claude-pair-runtime-Z7JFVKIY.js.map → claude-pair-runtime-5ULX4UVC.js.map} +0 -0
- /package/dist/{persistent-session-NUVUR3PB.js.map → persistent-session-E4AHQHRA.js.map} +0 -0
- /package/dist/{responsiveness-probe-J3D7MRIU.js.map → responsiveness-probe-EN6IOLBG.js.map} +0 -0
- /package/dist/{session-auth-dead-GKZNZKWI.js.map → session-auth-dead-LNYMXEHY.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-E4AHQHRA.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-5ULX4UVC.js.map
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
safeWriteJsonAtomic,
|
|
59
59
|
setConfigHash,
|
|
60
60
|
tripClass
|
|
61
|
-
} from "../chunk-
|
|
61
|
+
} from "../chunk-UVA7VXG4.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-UL2W5NY6.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-75UAJFJJ.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-EN6IOLBG.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.773" : "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-E4AHQHRA.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-E4AHQHRA.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-EN6IOLBG.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-EN6IOLBG.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-LNYMXEHY.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-E4AHQHRA.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-E4AHQHRA.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-5ULX4UVC.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));
|
package/dist/mcp/index.js
CHANGED
|
@@ -46523,6 +46523,54 @@ server.tool(
|
|
|
46523
46523
|
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
46524
46524
|
}
|
|
46525
46525
|
);
|
|
46526
|
+
server.tool(
|
|
46527
|
+
"rule_list",
|
|
46528
|
+
"List the standing rules currently in force for you \u2014 the short instructions your people have asked you to follow on EVERY turn, rendered into your instructions verbatim. Use this before adding a rule (so you know whether you are at the limit and what you would be replacing), and whenever someone asks what rules you are operating under. Rules are not task-specific and are not skills: a skill loads only when its description matches the task, a rule applies always.",
|
|
46529
|
+
{},
|
|
46530
|
+
async () => {
|
|
46531
|
+
const data = await apiGet(`/host/agent-rules?agent_id=${encodeURIComponent(AGT_AGENT_ID ?? "")}`);
|
|
46532
|
+
if (!data.ok) {
|
|
46533
|
+
return { content: [{ type: "text", text: "Could not read your standing rules." }], isError: true };
|
|
46534
|
+
}
|
|
46535
|
+
if (!data.rules.length) {
|
|
46536
|
+
return {
|
|
46537
|
+
content: [
|
|
46538
|
+
{ type: "text", text: `No standing rules yet. You can hold up to ${data.max}, each up to ${data.max_chars} characters.` }
|
|
46539
|
+
]
|
|
46540
|
+
};
|
|
46541
|
+
}
|
|
46542
|
+
const lines = data.rules.map((r) => `- ${r.text} (id: ${r.id})`).join("\n");
|
|
46543
|
+
return {
|
|
46544
|
+
content: [
|
|
46545
|
+
{ type: "text", text: `${data.rules.length} of ${data.max} standing rules in force:
|
|
46546
|
+
${lines}` }
|
|
46547
|
+
]
|
|
46548
|
+
};
|
|
46549
|
+
}
|
|
46550
|
+
);
|
|
46551
|
+
server.tool(
|
|
46552
|
+
"rule_add",
|
|
46553
|
+
'Turn a repeated instruction into a STANDING RULE that applies on every turn. Use when someone asks for the same thing more than once, or phrases it as a standing instruction ("always...", "every time...", "from now on..."). Propose it in plain language first and get a yes \u2014 never create one silently, and never make the person learn the word "skill" or "rule" to get it. Keep it SHORT: a rule is resident in your instructions on every single request, so if it needs more than a sentence it is really a skill (skill_create), which costs nothing until the task comes up. If you are already at the limit, pass replace_id with the id of the rule this one supersedes (rule_list shows the ids) \u2014 and tell the person what you dropped, in the same message. There is deliberately no way to remove a rule without adding one in its place: a rule that quietly stops applying is worse than one that was never made, because nobody notices.',
|
|
46554
|
+
{
|
|
46555
|
+
text: external_exports.string().describe("The rule, in the person's own words where possible. One sentence. It applies on every turn, so write it as a standing instruction rather than a task."),
|
|
46556
|
+
replace_id: external_exports.string().optional().describe("The id of an existing rule this one replaces (from rule_list). Required once you are at the limit. The person MUST be told which rule was dropped, in the same reply.")
|
|
46557
|
+
},
|
|
46558
|
+
async (params) => {
|
|
46559
|
+
const data = await apiPost("/host/agent-rules", {
|
|
46560
|
+
agent_id: AGT_AGENT_ID,
|
|
46561
|
+
text: params.text,
|
|
46562
|
+
...params.replace_id ? { replace_id: params.replace_id } : {}
|
|
46563
|
+
});
|
|
46564
|
+
if (!data.ok) {
|
|
46565
|
+
return {
|
|
46566
|
+
content: [{ type: "text", text: data.message ?? "Could not save that rule." }],
|
|
46567
|
+
isError: true
|
|
46568
|
+
};
|
|
46569
|
+
}
|
|
46570
|
+
const said = data.evicted ? `Added the rule. To make room I dropped: "${data.evicted.text}". Tell the person BOTH of these, not just the addition.` : `Added the rule: "${data.rule?.text}".`;
|
|
46571
|
+
return { content: [{ type: "text", text: said }] };
|
|
46572
|
+
}
|
|
46573
|
+
);
|
|
46526
46574
|
server.tool(
|
|
46527
46575
|
"knowledge_add",
|
|
46528
46576
|
'Save a new durable fact or learning to the knowledge base. Use when the user explicitly asks you to save/remember something, or when you discover information that will be useful on future runs (e.g. a tenant id, an API key name, a company policy). Do NOT use for tasks (use kanban_add) or trivial one-off answers. Defaults to TEAM scope; pass scope:"org" only when the user asks for organization/company-wide knowledge (visible to every team in the org). Returns the new entry id so you can target it with knowledge_update / knowledge_delete.',
|
|
@@ -47037,6 +47085,11 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
|
47037
47085
|
"kanban_reopen",
|
|
47038
47086
|
// ENG-9375: the READ path over a teammate's board (counts only).
|
|
47039
47087
|
"kanban_peek",
|
|
47088
|
+
// ENG-9789: per-agent standing rules. No rule_remove by design — see the
|
|
47089
|
+
// registration below; an agent may only displace a rule by naming it while
|
|
47090
|
+
// adding another.
|
|
47091
|
+
"rule_list",
|
|
47092
|
+
"rule_add",
|
|
47040
47093
|
// ENG-6953: agent + people directory lookup (always registered locally).
|
|
47041
47094
|
"directory_lookup",
|
|
47042
47095
|
"status_standup",
|
package/dist/mcp/xero.js
CHANGED
|
@@ -116864,6 +116864,15 @@ async function listXeroAgedPayablesByContact(contactId, reportDate, invoicesFrom
|
|
|
116864
116864
|
}
|
|
116865
116865
|
}
|
|
116866
116866
|
|
|
116867
|
+
// src/helpers/unreconciled-blind-spot.ts
|
|
116868
|
+
var UNRECONCILED_BLIND_SPOT_NOTE = "INCOMPLETE BY DESIGN \u2014 read before quoting any figure from this result.\nXero's Accounting API exposes LEDGER records. Bank STATEMENT LINES that have never been matched into the ledger are not exposed at all, and neither are any notes left on them. Money can therefore be in the bank account and absent from this data.\nSo any receivables, payables, cashflow or aged-debtors figure derived from this may be INCOMPLETE OR INACCURATE, and THE SIZE AND DIRECTION OF THE ERROR CANNOT BE DETERMINED FROM THIS RESPONSE \u2014 an unmatched line might be a customer receipt, a supplier payment or a bank fee, and nothing here says which, or how many there are. An invoice can read AUTHORISED and fully unpaid while the customer's payment is already sitting in the bank account.\nWhen reporting a figure from this data, say that unmatched bank activity is not included and that you cannot see it. Do not describe a customer as overdue, and do not request or draft a payment chase, on this evidence alone: check the Xero bank reconciliation screen, or ask a human to. (CS-1638)";
|
|
116869
|
+
function unreconciledBlindSpotBlock() {
|
|
116870
|
+
return { type: "text", text: UNRECONCILED_BLIND_SPOT_NOTE };
|
|
116871
|
+
}
|
|
116872
|
+
function withUnreconciledBlindSpotNote(result) {
|
|
116873
|
+
return { ...result, content: [...result.content, unreconciledBlindSpotBlock()] };
|
|
116874
|
+
}
|
|
116875
|
+
|
|
116867
116876
|
// src/tools/list/list-aged-payables-by-contact.tool.ts
|
|
116868
116877
|
var ListAgedPayablesByContact = CreateXeroTool(
|
|
116869
116878
|
"list-aged-payables-by-contact",
|
|
@@ -116889,7 +116898,7 @@ var ListAgedPayablesByContact = CreateXeroTool(
|
|
|
116889
116898
|
}
|
|
116890
116899
|
const agedPayablesReport = response.result;
|
|
116891
116900
|
const filter2 = formatAgedReportFilter(invoicesFromDate, invoicesToDate);
|
|
116892
|
-
return {
|
|
116901
|
+
return withUnreconciledBlindSpotNote({
|
|
116893
116902
|
content: [
|
|
116894
116903
|
{
|
|
116895
116904
|
type: "text",
|
|
@@ -116908,7 +116917,7 @@ var ListAgedPayablesByContact = CreateXeroTool(
|
|
|
116908
116917
|
text: JSON.stringify(agedPayablesReport.rows, null, 2)
|
|
116909
116918
|
}
|
|
116910
116919
|
]
|
|
116911
|
-
};
|
|
116920
|
+
});
|
|
116912
116921
|
}
|
|
116913
116922
|
);
|
|
116914
116923
|
var list_aged_payables_by_contact_tool_default = ListAgedPayablesByContact;
|
|
@@ -116980,7 +116989,7 @@ var ListAgedReceivablesByContact = CreateXeroTool(
|
|
|
116980
116989
|
}
|
|
116981
116990
|
const agedReceivablesReport = response.result;
|
|
116982
116991
|
const filter2 = formatAgedReportFilter(invoicesFromDate, invoicesToDate);
|
|
116983
|
-
return {
|
|
116992
|
+
return withUnreconciledBlindSpotNote({
|
|
116984
116993
|
content: [
|
|
116985
116994
|
{
|
|
116986
116995
|
type: "text",
|
|
@@ -116999,7 +117008,7 @@ var ListAgedReceivablesByContact = CreateXeroTool(
|
|
|
116999
117008
|
text: JSON.stringify(agedReceivablesReport.rows, null, 2)
|
|
117000
117009
|
}
|
|
117001
117010
|
]
|
|
117002
|
-
};
|
|
117011
|
+
});
|
|
117003
117012
|
}
|
|
117004
117013
|
);
|
|
117005
117014
|
var list_aged_receivables_by_contact_tool_default = ListAgedReceivablesByContact;
|
|
@@ -117060,7 +117069,14 @@ var formatLineItem = (lineItem) => {
|
|
|
117060
117069
|
// src/tools/list/list-bank-transactions.tool.ts
|
|
117061
117070
|
var ListBankTransactionsTool = CreateXeroTool(
|
|
117062
117071
|
"list-bank-transactions",
|
|
117063
|
-
`List
|
|
117072
|
+
`List Xero BankTransaction LEDGER records (spend-money / receive-money), each
|
|
117073
|
+
flagged Reconciled or Unreconciled.
|
|
117074
|
+
This is NOT the bank account, and the distinction is the point. Xero's
|
|
117075
|
+
Accounting API exposes BankTransaction records only. Bank STATEMENT LINES that
|
|
117076
|
+
have never been matched into the ledger are not exposed at all, so money can be
|
|
117077
|
+
in the bank account and absent from this list entirely. A balance, receivables
|
|
117078
|
+
or cashflow figure derived from this may be incomplete, and nothing here reveals
|
|
117079
|
+
by how much. (CS-1638)
|
|
117064
117080
|
Ask the user if they want to see bank transactions for a specific bank account,
|
|
117065
117081
|
or to see all bank transactions before running.
|
|
117066
117082
|
Ask the user if they want the next page of quotes after running this tool if
|
|
@@ -117084,7 +117100,7 @@ var ListBankTransactionsTool = CreateXeroTool(
|
|
|
117084
117100
|
};
|
|
117085
117101
|
}
|
|
117086
117102
|
const bankTransactions = response.result;
|
|
117087
|
-
return {
|
|
117103
|
+
return withUnreconciledBlindSpotNote({
|
|
117088
117104
|
content: [
|
|
117089
117105
|
{
|
|
117090
117106
|
type: "text",
|
|
@@ -117110,7 +117126,7 @@ var ListBankTransactionsTool = CreateXeroTool(
|
|
|
117110
117126
|
].filter(Boolean).join("\n")
|
|
117111
117127
|
})) || []
|
|
117112
117128
|
]
|
|
117113
|
-
};
|
|
117129
|
+
});
|
|
117114
117130
|
}
|
|
117115
117131
|
);
|
|
117116
117132
|
var list_bank_transactions_tool_default = ListBankTransactionsTool;
|
|
@@ -117367,7 +117383,7 @@ async function listXeroInvoices(page = 1, contactIds, invoiceNumbers) {
|
|
|
117367
117383
|
// src/tools/list/list-invoices.tool.ts
|
|
117368
117384
|
var ListInvoicesTool = CreateXeroTool(
|
|
117369
117385
|
"list-invoices",
|
|
117370
|
-
|
|
117386
|
+
`List invoices in Xero. This includes Draft, Submitted, and Paid invoices. CS-1638: an invoice reads AUTHORISED and fully unpaid until the customer's payment is RECONCILED, so "unpaid" here means "not yet matched in Xero", not "the money has not arrived". Do not chase on this evidence alone. Ask the user if they want to see invoices for a specific contact, invoice number, or to see all invoices before running. Ask the user if they want the next page of invoices after running this tool if 10 invoices are returned. If they want the next page, call this tool again with the next page number and the contact or invoice number if one was provided in the previous call.`,
|
|
117371
117387
|
{
|
|
117372
117388
|
page: external_exports.number(),
|
|
117373
117389
|
contactIds: external_exports.array(external_exports.string()).optional(),
|
|
@@ -117387,7 +117403,7 @@ var ListInvoicesTool = CreateXeroTool(
|
|
|
117387
117403
|
}
|
|
117388
117404
|
const invoices = response.result;
|
|
117389
117405
|
const returnLineItems = (invoiceNumbers?.length ?? 0) > 0;
|
|
117390
|
-
return {
|
|
117406
|
+
return withUnreconciledBlindSpotNote({
|
|
117391
117407
|
content: [
|
|
117392
117408
|
{
|
|
117393
117409
|
type: "text",
|
|
@@ -117422,7 +117438,7 @@ var ListInvoicesTool = CreateXeroTool(
|
|
|
117422
117438
|
].filter(Boolean).join("\n")
|
|
117423
117439
|
})) || []
|
|
117424
117440
|
]
|
|
117425
|
-
};
|
|
117441
|
+
});
|
|
117426
117442
|
}
|
|
117427
117443
|
);
|
|
117428
117444
|
var list_invoices_tool_default = ListInvoicesTool;
|
|
@@ -49,8 +49,8 @@ import {
|
|
|
49
49
|
writeDirectChatSessionState,
|
|
50
50
|
writeEgressAllowlist,
|
|
51
51
|
writePersistentClaudeWrapper
|
|
52
|
-
} from "./chunk-
|
|
53
|
-
import "./chunk-
|
|
52
|
+
} from "./chunk-UL2W5NY6.js";
|
|
53
|
+
import "./chunk-75UAJFJJ.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-E4AHQHRA.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-UL2W5NY6.js";
|
|
4
|
+
import "./chunk-75UAJFJJ.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-EN6IOLBG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-75UAJFJJ.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-LNYMXEHY.js.map
|