@integrity-labs/agt-cli 0.28.694 → 0.28.696
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-YLADZNC5.js → chunk-QCYRC5FK.js} +2 -2
- package/dist/{chunk-7F4RC4PU.js → chunk-WB6ERJPU.js} +4 -4
- package/dist/{chunk-NYWCE5JH.js → chunk-Y7AHOXHP.js} +255 -80
- package/dist/chunk-Y7AHOXHP.js.map +1 -0
- package/dist/{claude-pair-runtime-WRVD63Q7.js → claude-pair-runtime-I7MIDQSW.js} +2 -2
- package/dist/lib/manager-worker.js +271 -144
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +114 -79
- package/dist/mcp/index.js +49 -4
- package/dist/mcp/origami.js +49 -4
- package/dist/mcp/slack-channel.js +114 -79
- package/dist/mcp/telegram-channel.js +114 -79
- package/dist/{persistent-session-WC27KXJE.js → persistent-session-5ZWDVVIH.js} +3 -3
- package/dist/{responsiveness-probe-V5M5OXNB.js → responsiveness-probe-KDQFIROB.js} +3 -3
- package/dist/{session-auth-dead-TVTRCTJR.js → session-auth-dead-7S7IQGNX.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-NYWCE5JH.js.map +0 -1
- /package/dist/{chunk-YLADZNC5.js.map → chunk-QCYRC5FK.js.map} +0 -0
- /package/dist/{chunk-7F4RC4PU.js.map → chunk-WB6ERJPU.js.map} +0 -0
- /package/dist/{claude-pair-runtime-WRVD63Q7.js.map → claude-pair-runtime-I7MIDQSW.js.map} +0 -0
- /package/dist/{persistent-session-WC27KXJE.js.map → persistent-session-5ZWDVVIH.js.map} +0 -0
- /package/dist/{responsiveness-probe-V5M5OXNB.js.map → responsiveness-probe-KDQFIROB.js.map} +0 -0
- /package/dist/{session-auth-dead-TVTRCTJR.js.map → session-auth-dead-7S7IQGNX.js.map} +0 -0
package/dist/bin/agt.js
CHANGED
|
@@ -40,10 +40,10 @@ import {
|
|
|
40
40
|
success,
|
|
41
41
|
table,
|
|
42
42
|
warn
|
|
43
|
-
} from "../chunk-
|
|
43
|
+
} from "../chunk-WB6ERJPU.js";
|
|
44
44
|
import {
|
|
45
45
|
readDirectChatSessionState
|
|
46
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-QCYRC5FK.js";
|
|
47
47
|
import {
|
|
48
48
|
AnchorSessionClient,
|
|
49
49
|
CHANNEL_REGISTRY,
|
|
@@ -73,7 +73,7 @@ import {
|
|
|
73
73
|
requiredMcpWildcard,
|
|
74
74
|
resolveChannels,
|
|
75
75
|
serializeManifestForSlackCli
|
|
76
|
-
} from "../chunk-
|
|
76
|
+
} from "../chunk-Y7AHOXHP.js";
|
|
77
77
|
import "../chunk-XWVM4KPK.js";
|
|
78
78
|
|
|
79
79
|
// src/bin/agt.ts
|
|
@@ -4909,7 +4909,7 @@ import { execFileSync, execSync } from "child_process";
|
|
|
4909
4909
|
import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
|
|
4910
4910
|
import chalk18 from "chalk";
|
|
4911
4911
|
import ora16 from "ora";
|
|
4912
|
-
var cliVersion = true ? "0.28.
|
|
4912
|
+
var cliVersion = true ? "0.28.696" : "dev";
|
|
4913
4913
|
async function fetchLatestVersion() {
|
|
4914
4914
|
const host2 = getHost();
|
|
4915
4915
|
if (!host2) return null;
|
|
@@ -6089,7 +6089,7 @@ function handleError(err) {
|
|
|
6089
6089
|
}
|
|
6090
6090
|
|
|
6091
6091
|
// src/bin/agt.ts
|
|
6092
|
-
var cliVersion2 = true ? "0.28.
|
|
6092
|
+
var cliVersion2 = true ? "0.28.696" : "dev";
|
|
6093
6093
|
var program = new Command();
|
|
6094
6094
|
program.name("agt").description("Augmented CLI \u2014 agent provisioning and management").version(cliVersion2).option("--json", "Emit machine-readable JSON output (suppress spinners and colors)").option("--skip-update-check", "Skip the automatic update check on startup");
|
|
6095
6095
|
program.hook("preAction", async (thisCommand, actionCommand) => {
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
rotateDailySession,
|
|
18
18
|
sessionFileExists,
|
|
19
19
|
todayLocalIso
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-Y7AHOXHP.js";
|
|
21
21
|
import {
|
|
22
22
|
reapOrphanChannelMcps
|
|
23
23
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -4531,4 +4531,4 @@ export {
|
|
|
4531
4531
|
stopAllSessionsAndWait,
|
|
4532
4532
|
getProjectDir
|
|
4533
4533
|
};
|
|
4534
|
-
//# sourceMappingURL=chunk-
|
|
4534
|
+
//# sourceMappingURL=chunk-QCYRC5FK.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
parseEnvFileEntries,
|
|
13
13
|
parseEnvIntegrations,
|
|
14
14
|
shellQuote
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QCYRC5FK.js";
|
|
16
16
|
import {
|
|
17
17
|
BIND_FAILURE_QUARANTINE_THRESHOLD,
|
|
18
18
|
INTEGRATIONS_SECTION_END,
|
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
resolveConnectivityProbe,
|
|
60
60
|
worseConnectivityOutcome,
|
|
61
61
|
wrapScheduledTaskPrompt
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-Y7AHOXHP.js";
|
|
63
63
|
import {
|
|
64
64
|
parsePsRows
|
|
65
65
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -6329,7 +6329,7 @@ function exchangeFailureKind(err) {
|
|
|
6329
6329
|
}
|
|
6330
6330
|
|
|
6331
6331
|
// src/lib/api-client.ts
|
|
6332
|
-
var agtCliVersion = true ? "0.28.
|
|
6332
|
+
var agtCliVersion = true ? "0.28.696" : "dev";
|
|
6333
6333
|
var lastConfigHash = null;
|
|
6334
6334
|
function setConfigHash(hash) {
|
|
6335
6335
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -10070,4 +10070,4 @@ export {
|
|
|
10070
10070
|
managerInstallSystemUnitCommand,
|
|
10071
10071
|
managerUninstallSystemUnitCommand
|
|
10072
10072
|
};
|
|
10073
|
-
//# sourceMappingURL=chunk-
|
|
10073
|
+
//# sourceMappingURL=chunk-WB6ERJPU.js.map
|
|
@@ -4936,7 +4936,7 @@ var FLAG_REGISTRY = [
|
|
|
4936
4936
|
},
|
|
4937
4937
|
{
|
|
4938
4938
|
key: "tool-call-audit",
|
|
4939
|
-
description: "Host-side tool-call audit extraction (ENG-8575, slice 3 of ENG-8427): the manager scans agent transcripts for tool calls, redacts each to identity-without-content, and POSTs them to /host/tool-calls. Boolean gate;
|
|
4939
|
+
description: "Host-side tool-call audit extraction (ENG-8575, slice 3 of ENG-8427): the manager scans agent transcripts for tool calls, redacts each to identity-without-content, and POSTs them to /host/tool-calls. Boolean gate; when off the manager reads no transcripts and sends nothing. ARMED STAGE-WIDE SINCE 2026-08-17 \u2014 the compiled default below is what a host resolves when nothing else says otherwise, NOT a description of the fleet. This text once asserted the opposite and outlived its truth by nine days, which is what got ENG-9472 filed to arm an already-armed flag. Query the table, do not infer it from this line. NOT the commercial gate: /host/tool-calls independently re-checks the advanced_governance entitlement and refuses regardless of this flag, because the host is customer-owned infrastructure. This flag is rollout control only.",
|
|
4940
4940
|
flagType: "boolean",
|
|
4941
4941
|
// Declared safe value is `false` (no extraction). Fail-safe direction: a
|
|
4942
4942
|
// flag-DB read error must never start shipping tool-call metadata across the
|
|
@@ -11129,6 +11129,111 @@ var SCHEDULED_TURN_MARKER_FILENAME = ".current-scheduled-turn.json";
|
|
|
11129
11129
|
// ../../packages/core/dist/liveness/agent-liveness.js
|
|
11130
11130
|
var FRESH_HEARTBEAT_THRESHOLD_MS = 2 * 60 * 1e3;
|
|
11131
11131
|
|
|
11132
|
+
// ../../packages/core/dist/claude-code-usage/reset-time.js
|
|
11133
|
+
var MONTHS = [
|
|
11134
|
+
"jan",
|
|
11135
|
+
"feb",
|
|
11136
|
+
"mar",
|
|
11137
|
+
"apr",
|
|
11138
|
+
"may",
|
|
11139
|
+
"jun",
|
|
11140
|
+
"jul",
|
|
11141
|
+
"aug",
|
|
11142
|
+
"sep",
|
|
11143
|
+
"oct",
|
|
11144
|
+
"nov",
|
|
11145
|
+
"dec"
|
|
11146
|
+
];
|
|
11147
|
+
var FULL_MONTHS = [
|
|
11148
|
+
"january",
|
|
11149
|
+
"february",
|
|
11150
|
+
"march",
|
|
11151
|
+
"april",
|
|
11152
|
+
"may",
|
|
11153
|
+
"june",
|
|
11154
|
+
"july",
|
|
11155
|
+
"august",
|
|
11156
|
+
"september",
|
|
11157
|
+
"october",
|
|
11158
|
+
"november",
|
|
11159
|
+
"december"
|
|
11160
|
+
];
|
|
11161
|
+
var MONTH_TOKENS = new Map([
|
|
11162
|
+
...MONTHS.map((m, i) => [m, i]),
|
|
11163
|
+
...FULL_MONTHS.map((m, i) => [m, i]),
|
|
11164
|
+
// "Sept" is the one four-letter abbreviation in common use and is inside the
|
|
11165
|
+
// {3,9} the grammar accepts, so it is reachable and must resolve.
|
|
11166
|
+
["sept", 8]
|
|
11167
|
+
]);
|
|
11168
|
+
var TIME_OF_DAY_SOURCE = /\d{1,2}(?::\d{2})?\s*(?:am|pm)(?:\s*\(?UTC\)?)?/.source;
|
|
11169
|
+
var RESET_DATE_SOURCE = `(?:[A-Za-z]{3,9}\\s+\\d{1,2}(?:\\s*,\\s*${TIME_OF_DAY_SOURCE})?|${TIME_OF_DAY_SOURCE})`;
|
|
11170
|
+
var TIME_TAIL = /,\s*(\d{1,2})(?::(\d{2}))?\s*(am|pm)(?:\s*\(?UTC\)?)?\s*$/i;
|
|
11171
|
+
var TIME_ONLY = /^(\d{1,2})(?::(\d{2}))?\s*(am|pm)(?:\s*\(?UTC\)?)?$/i;
|
|
11172
|
+
var MS_PER_DAY = 24 * 60 * 60 * 1e3;
|
|
11173
|
+
function parseAmPm(hourStr, minStr, ampm) {
|
|
11174
|
+
const rawHour = Number.parseInt(hourStr, 10);
|
|
11175
|
+
if (!Number.isFinite(rawHour) || rawHour < 1 || rawHour > 12)
|
|
11176
|
+
return null;
|
|
11177
|
+
let minute = 0;
|
|
11178
|
+
if (minStr) {
|
|
11179
|
+
minute = Number.parseInt(minStr, 10);
|
|
11180
|
+
if (!Number.isFinite(minute) || minute < 0 || minute > 59)
|
|
11181
|
+
return null;
|
|
11182
|
+
}
|
|
11183
|
+
const isPm = ampm.toLowerCase() === "pm";
|
|
11184
|
+
return { hour: rawHour % 12 + (isPm ? 12 : 0), minute };
|
|
11185
|
+
}
|
|
11186
|
+
function parseResetDateTime(humanDate, now) {
|
|
11187
|
+
const trimmed = humanDate.trim();
|
|
11188
|
+
const timeOnly = trimmed.match(TIME_ONLY);
|
|
11189
|
+
if (timeOnly) {
|
|
11190
|
+
const hm = parseAmPm(timeOnly[1], timeOnly[2], timeOnly[3]);
|
|
11191
|
+
if (!hm)
|
|
11192
|
+
return null;
|
|
11193
|
+
const todayAt = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), hm.hour, hm.minute);
|
|
11194
|
+
return {
|
|
11195
|
+
at: new Date(todayAt <= now.getTime() ? todayAt + MS_PER_DAY : todayAt),
|
|
11196
|
+
precision: "hour_only"
|
|
11197
|
+
};
|
|
11198
|
+
}
|
|
11199
|
+
const timeMatch = trimmed.match(TIME_TAIL);
|
|
11200
|
+
const dateOnly = timeMatch ? trimmed.slice(0, timeMatch.index).trim() : trimmed;
|
|
11201
|
+
const parts = dateOnly.split(/\s+/);
|
|
11202
|
+
if (parts.length !== 2)
|
|
11203
|
+
return null;
|
|
11204
|
+
const lookedUpMonth = MONTH_TOKENS.get(parts[0].toLowerCase());
|
|
11205
|
+
if (lookedUpMonth === void 0)
|
|
11206
|
+
return null;
|
|
11207
|
+
const month = lookedUpMonth;
|
|
11208
|
+
const day = Number.parseInt(parts[1], 10);
|
|
11209
|
+
if (!Number.isFinite(day) || day < 1 || day > 31)
|
|
11210
|
+
return null;
|
|
11211
|
+
let hour = 0;
|
|
11212
|
+
let minute = 0;
|
|
11213
|
+
if (timeMatch) {
|
|
11214
|
+
const hm = parseAmPm(timeMatch[1], timeMatch[2], timeMatch[3]);
|
|
11215
|
+
if (!hm)
|
|
11216
|
+
return null;
|
|
11217
|
+
hour = hm.hour;
|
|
11218
|
+
minute = hm.minute;
|
|
11219
|
+
}
|
|
11220
|
+
const baseYear = now.getUTCFullYear();
|
|
11221
|
+
let resolved = null;
|
|
11222
|
+
let bestDelta = Number.POSITIVE_INFINITY;
|
|
11223
|
+
for (const y of [baseYear - 1, baseYear, baseYear + 1]) {
|
|
11224
|
+
const candidate = new Date(Date.UTC(y, month, day, hour, minute));
|
|
11225
|
+
if (candidate.getUTCFullYear() !== y || candidate.getUTCMonth() !== month || candidate.getUTCDate() !== day) {
|
|
11226
|
+
continue;
|
|
11227
|
+
}
|
|
11228
|
+
const delta = Math.abs(candidate.getTime() - now.getTime());
|
|
11229
|
+
if (delta < bestDelta) {
|
|
11230
|
+
bestDelta = delta;
|
|
11231
|
+
resolved = candidate;
|
|
11232
|
+
}
|
|
11233
|
+
}
|
|
11234
|
+
return resolved ? { at: resolved, precision: "dated" } : null;
|
|
11235
|
+
}
|
|
11236
|
+
|
|
11132
11237
|
// ../../packages/core/dist/claude-code-usage/banner-parser.js
|
|
11133
11238
|
var SESSION_QUALIFIER = /^(?:session|\d{1,2}\s*-?\s*hours?|\d{1,2}h)$/i;
|
|
11134
11239
|
function classifyLimitScope(qualifier) {
|
|
@@ -11143,8 +11248,7 @@ function classifyLimitScope(qualifier) {
|
|
|
11143
11248
|
}
|
|
11144
11249
|
var SEP = /[\s·\-–—]+/.source;
|
|
11145
11250
|
var SUBJECT = /(?:You(?:['’]ve|\s+have)?\s+)?/.source;
|
|
11146
|
-
var
|
|
11147
|
-
var RESET_DATE = `(?:[A-Za-z]{3,9}\\s+\\d{1,2}(?:\\s*,\\s*${TIME_OF_DAY})?|${TIME_OF_DAY})`;
|
|
11251
|
+
var RESET_DATE = RESET_DATE_SOURCE;
|
|
11148
11252
|
var BANNER_PATTERNS = [
|
|
11149
11253
|
// Percentage form — pct in group 1, reset in group 2.
|
|
11150
11254
|
new RegExp(`${SUBJECT}used\\s+(\\d{1,3})%\\s+of\\s+your\\s+weekly\\s+limit${SEP}resets\\s+(${RESET_DATE})`, "i"),
|
|
@@ -11219,82 +11323,6 @@ function parseUsageBanner(text, now = /* @__PURE__ */ new Date()) {
|
|
|
11219
11323
|
}
|
|
11220
11324
|
return best;
|
|
11221
11325
|
}
|
|
11222
|
-
var MONTHS = [
|
|
11223
|
-
"jan",
|
|
11224
|
-
"feb",
|
|
11225
|
-
"mar",
|
|
11226
|
-
"apr",
|
|
11227
|
-
"may",
|
|
11228
|
-
"jun",
|
|
11229
|
-
"jul",
|
|
11230
|
-
"aug",
|
|
11231
|
-
"sep",
|
|
11232
|
-
"oct",
|
|
11233
|
-
"nov",
|
|
11234
|
-
"dec"
|
|
11235
|
-
];
|
|
11236
|
-
var TIME_TAIL = /,\s*(\d{1,2})(?::(\d{2}))?\s*(am|pm)(?:\s*\(?UTC\)?)?\s*$/i;
|
|
11237
|
-
var TIME_ONLY = /^(\d{1,2})(?::(\d{2}))?\s*(am|pm)(?:\s*\(?UTC\)?)?$/i;
|
|
11238
|
-
var MS_PER_DAY = 24 * 60 * 60 * 1e3;
|
|
11239
|
-
function parseAmPm(hourStr, minStr, ampm) {
|
|
11240
|
-
const rawHour = Number.parseInt(hourStr, 10);
|
|
11241
|
-
if (!Number.isFinite(rawHour) || rawHour < 1 || rawHour > 12)
|
|
11242
|
-
return null;
|
|
11243
|
-
let minute = 0;
|
|
11244
|
-
if (minStr) {
|
|
11245
|
-
minute = Number.parseInt(minStr, 10);
|
|
11246
|
-
if (!Number.isFinite(minute) || minute < 0 || minute > 59)
|
|
11247
|
-
return null;
|
|
11248
|
-
}
|
|
11249
|
-
const isPm = ampm.toLowerCase() === "pm";
|
|
11250
|
-
return { hour: rawHour % 12 + (isPm ? 12 : 0), minute };
|
|
11251
|
-
}
|
|
11252
|
-
function parseResetDateTime(humanDate, now) {
|
|
11253
|
-
const trimmed = humanDate.trim();
|
|
11254
|
-
const timeOnly = trimmed.match(TIME_ONLY);
|
|
11255
|
-
if (timeOnly) {
|
|
11256
|
-
const hm = parseAmPm(timeOnly[1], timeOnly[2], timeOnly[3]);
|
|
11257
|
-
if (!hm)
|
|
11258
|
-
return null;
|
|
11259
|
-
const todayAt = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), hm.hour, hm.minute);
|
|
11260
|
-
return {
|
|
11261
|
-
at: new Date(todayAt <= now.getTime() ? todayAt + MS_PER_DAY : todayAt),
|
|
11262
|
-
precision: "hour_only"
|
|
11263
|
-
};
|
|
11264
|
-
}
|
|
11265
|
-
const timeMatch = trimmed.match(TIME_TAIL);
|
|
11266
|
-
const dateOnly = timeMatch ? trimmed.slice(0, timeMatch.index).trim() : trimmed;
|
|
11267
|
-
const parts = dateOnly.split(/\s+/);
|
|
11268
|
-
if (parts.length !== 2)
|
|
11269
|
-
return null;
|
|
11270
|
-
const month = MONTHS.indexOf(parts[0].slice(0, 3).toLowerCase());
|
|
11271
|
-
if (month < 0)
|
|
11272
|
-
return null;
|
|
11273
|
-
const day = Number.parseInt(parts[1], 10);
|
|
11274
|
-
if (!Number.isFinite(day) || day < 1 || day > 31)
|
|
11275
|
-
return null;
|
|
11276
|
-
let hour = 0;
|
|
11277
|
-
let minute = 0;
|
|
11278
|
-
if (timeMatch) {
|
|
11279
|
-
const hm = parseAmPm(timeMatch[1], timeMatch[2], timeMatch[3]);
|
|
11280
|
-
if (!hm)
|
|
11281
|
-
return null;
|
|
11282
|
-
hour = hm.hour;
|
|
11283
|
-
minute = hm.minute;
|
|
11284
|
-
}
|
|
11285
|
-
const baseYear = now.getUTCFullYear();
|
|
11286
|
-
let resolved = null;
|
|
11287
|
-
let bestDelta = Number.POSITIVE_INFINITY;
|
|
11288
|
-
for (const y of [baseYear - 1, baseYear, baseYear + 1]) {
|
|
11289
|
-
const candidate = new Date(Date.UTC(y, month, day, hour, minute));
|
|
11290
|
-
const delta = Math.abs(candidate.getTime() - now.getTime());
|
|
11291
|
-
if (delta < bestDelta) {
|
|
11292
|
-
bestDelta = delta;
|
|
11293
|
-
resolved = candidate;
|
|
11294
|
-
}
|
|
11295
|
-
}
|
|
11296
|
-
return resolved ? { at: resolved, precision: "dated" } : null;
|
|
11297
|
-
}
|
|
11298
11326
|
|
|
11299
11327
|
// ../../packages/core/dist/claude-code-usage/transcript-parser.js
|
|
11300
11328
|
function nonNegInt(value) {
|
|
@@ -11521,6 +11549,150 @@ function attributeTranscriptUsageByRun(jsonl) {
|
|
|
11521
11549
|
return { perRunModel: [...agg.values()], runIds: [...runIds] };
|
|
11522
11550
|
}
|
|
11523
11551
|
|
|
11552
|
+
// ../../packages/core/dist/claude-code-usage/usage-report-parser.js
|
|
11553
|
+
var AGGREGATE_BUCKET = "all models";
|
|
11554
|
+
var SEP2 = /[\s·\-–—]+/.source;
|
|
11555
|
+
var WINDOW_LINE = new RegExp(`^\\s*Current\\s+(session|week)(?:\\s*\\(([^)]*)\\))?\\s*:\\s*(\\d{1,3})%\\s+used(?:${SEP2}resets\\s+(${RESET_DATE_SOURCE}))?\\s*$`, "gim");
|
|
11556
|
+
var SUBSCRIPTION_LINE = /using\s+your\s+subscription\s+to\s+power\s+your\s+Claude\s+Code\s+usage/i;
|
|
11557
|
+
function parseUsageReport(text, now = /* @__PURE__ */ new Date()) {
|
|
11558
|
+
if (typeof text !== "string" || text.length === 0)
|
|
11559
|
+
return null;
|
|
11560
|
+
const windows = [];
|
|
11561
|
+
const pattern = new RegExp(WINDOW_LINE.source, WINDOW_LINE.flags);
|
|
11562
|
+
let match;
|
|
11563
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
11564
|
+
if (match.index === pattern.lastIndex)
|
|
11565
|
+
pattern.lastIndex++;
|
|
11566
|
+
const kind = match[1].toLowerCase();
|
|
11567
|
+
const bucketRaw = match[2];
|
|
11568
|
+
const pct = Number.parseInt(match[3], 10);
|
|
11569
|
+
const resetStr = match[4];
|
|
11570
|
+
if (!Number.isFinite(pct) || pct < 0 || pct > 100)
|
|
11571
|
+
continue;
|
|
11572
|
+
let resetsAt = null;
|
|
11573
|
+
let resetPrecision = null;
|
|
11574
|
+
if (resetStr) {
|
|
11575
|
+
const resolved = parseResetDateTime(resetStr, now);
|
|
11576
|
+
if (!resolved)
|
|
11577
|
+
continue;
|
|
11578
|
+
resetsAt = resolved.at;
|
|
11579
|
+
resetPrecision = resolved.precision;
|
|
11580
|
+
}
|
|
11581
|
+
windows.push({
|
|
11582
|
+
kind,
|
|
11583
|
+
bucket: bucketRaw === void 0 ? null : bucketRaw.trim(),
|
|
11584
|
+
pct,
|
|
11585
|
+
resetsAt,
|
|
11586
|
+
resetPrecision
|
|
11587
|
+
});
|
|
11588
|
+
}
|
|
11589
|
+
if (windows.length === 0)
|
|
11590
|
+
return null;
|
|
11591
|
+
const session = windows.find((w) => w.kind === "session") ?? null;
|
|
11592
|
+
const weeks = windows.filter((w) => w.kind === "week");
|
|
11593
|
+
const week = weeks.find((w) => (w.bucket ?? "").toLowerCase() === AGGREGATE_BUCKET) ?? // Defensive: if the CLI ever drops the "(all models)" label from the
|
|
11594
|
+
// aggregate, a bucket-less weekly line is still the aggregate. A per-model
|
|
11595
|
+
// bucket always names its model, so this cannot capture one by accident.
|
|
11596
|
+
weeks.find((w) => w.bucket === null) ?? null;
|
|
11597
|
+
const perModelWeek = weeks.filter((w) => w !== week);
|
|
11598
|
+
return {
|
|
11599
|
+
subscription: SUBSCRIPTION_LINE.test(text),
|
|
11600
|
+
session,
|
|
11601
|
+
week,
|
|
11602
|
+
perModelWeek,
|
|
11603
|
+
windows
|
|
11604
|
+
};
|
|
11605
|
+
}
|
|
11606
|
+
|
|
11607
|
+
// ../../packages/core/dist/claude-code-usage/host-usage-reading.js
|
|
11608
|
+
var HOST_USAGE_SOURCE = "cli_print_usage";
|
|
11609
|
+
function unknown(reason, readAt, cliVersion) {
|
|
11610
|
+
return {
|
|
11611
|
+
state: "unknown",
|
|
11612
|
+
weekPct: null,
|
|
11613
|
+
weekResetsAt: null,
|
|
11614
|
+
sessionPct: null,
|
|
11615
|
+
sessionResetsAt: null,
|
|
11616
|
+
readAt,
|
|
11617
|
+
cliVersion,
|
|
11618
|
+
source: HOST_USAGE_SOURCE,
|
|
11619
|
+
unknownReason: reason
|
|
11620
|
+
};
|
|
11621
|
+
}
|
|
11622
|
+
function buildHostUsageReading(input) {
|
|
11623
|
+
const { report, readAt, cliVersion, authMode, pollFailed } = input;
|
|
11624
|
+
if (authMode != null && authMode !== "subscription") {
|
|
11625
|
+
return {
|
|
11626
|
+
state: "not_applicable",
|
|
11627
|
+
weekPct: null,
|
|
11628
|
+
weekResetsAt: null,
|
|
11629
|
+
sessionPct: null,
|
|
11630
|
+
sessionResetsAt: null,
|
|
11631
|
+
readAt,
|
|
11632
|
+
cliVersion,
|
|
11633
|
+
source: HOST_USAGE_SOURCE,
|
|
11634
|
+
unknownReason: null
|
|
11635
|
+
};
|
|
11636
|
+
}
|
|
11637
|
+
if (pollFailed)
|
|
11638
|
+
return unknown("poll_failed", readAt, cliVersion);
|
|
11639
|
+
if (!report)
|
|
11640
|
+
return unknown("unparseable_output", readAt, cliVersion);
|
|
11641
|
+
if (!report.subscription) {
|
|
11642
|
+
return {
|
|
11643
|
+
state: "not_applicable",
|
|
11644
|
+
weekPct: null,
|
|
11645
|
+
weekResetsAt: null,
|
|
11646
|
+
sessionPct: null,
|
|
11647
|
+
sessionResetsAt: null,
|
|
11648
|
+
readAt,
|
|
11649
|
+
cliVersion,
|
|
11650
|
+
source: HOST_USAGE_SOURCE,
|
|
11651
|
+
unknownReason: null
|
|
11652
|
+
};
|
|
11653
|
+
}
|
|
11654
|
+
if (!report.week && !report.session) {
|
|
11655
|
+
return unknown("unparseable_output", readAt, cliVersion);
|
|
11656
|
+
}
|
|
11657
|
+
return {
|
|
11658
|
+
state: "ok",
|
|
11659
|
+
weekPct: report.week?.pct ?? null,
|
|
11660
|
+
// ONLY a DATED reset is stored (CodeRabbit on #4988).
|
|
11661
|
+
//
|
|
11662
|
+
// Print mode has always rendered a date, so `hour_only` here means the CLI
|
|
11663
|
+
// changed its render and `parseResetDateTime` reconstructed the day from an
|
|
11664
|
+
// hour. That reconstruction can never be more than 24h out, and storing it
|
|
11665
|
+
// in a column consumers treat as a measurement is precisely ENG-8472: every
|
|
11666
|
+
// host whose render named the same hour landed on the same millisecond, and
|
|
11667
|
+
// eleven days went into reading that as evidence of a shared subscription.
|
|
11668
|
+
//
|
|
11669
|
+
// The PERCENTAGE survives - it is a real reading either way, and dropping it
|
|
11670
|
+
// would blind the fleet over a formatting change. Only the boundary is
|
|
11671
|
+
// withheld, which degrades an alert to "cannot auto-close at reset" rather
|
|
11672
|
+
// than to "asserts a reset instant nobody measured".
|
|
11673
|
+
weekResetsAt: datedResetOnly(report.week),
|
|
11674
|
+
sessionPct: report.session?.pct ?? null,
|
|
11675
|
+
sessionResetsAt: datedResetOnly(report.session),
|
|
11676
|
+
readAt,
|
|
11677
|
+
cliVersion,
|
|
11678
|
+
source: HOST_USAGE_SOURCE,
|
|
11679
|
+
unknownReason: null
|
|
11680
|
+
};
|
|
11681
|
+
}
|
|
11682
|
+
function datedResetOnly(window) {
|
|
11683
|
+
if (!window || !window.resetsAt)
|
|
11684
|
+
return null;
|
|
11685
|
+
return window.resetPrecision === "dated" ? window.resetsAt : null;
|
|
11686
|
+
}
|
|
11687
|
+
var RESET_JITTER_TOLERANCE_MS = 5 * 60 * 1e3;
|
|
11688
|
+
function stabiliseResetInstant(previous, next, toleranceMs = RESET_JITTER_TOLERANCE_MS) {
|
|
11689
|
+
if (!next)
|
|
11690
|
+
return null;
|
|
11691
|
+
if (!previous)
|
|
11692
|
+
return next;
|
|
11693
|
+
return Math.abs(next.getTime() - previous.getTime()) <= toleranceMs ? previous : next;
|
|
11694
|
+
}
|
|
11695
|
+
|
|
11524
11696
|
// ../../packages/core/dist/claude-code-usage/rate-limit-classifier.js
|
|
11525
11697
|
var UNKNOWN_RATE_LIMIT = Object.freeze({
|
|
11526
11698
|
verdict: "unknown",
|
|
@@ -12571,6 +12743,9 @@ export {
|
|
|
12571
12743
|
sumTranscriptUsageInWindow,
|
|
12572
12744
|
isEmptyTotals,
|
|
12573
12745
|
attributeTranscriptUsageByRun,
|
|
12746
|
+
parseUsageReport,
|
|
12747
|
+
buildHostUsageReading,
|
|
12748
|
+
stabiliseResetInstant,
|
|
12574
12749
|
UNKNOWN_RATE_LIMIT,
|
|
12575
12750
|
pickNewerClassification,
|
|
12576
12751
|
classifyTranscriptRateLimit,
|
|
@@ -12622,4 +12797,4 @@ export {
|
|
|
12622
12797
|
minutesSinceLocalMidnight,
|
|
12623
12798
|
peekCurrentSession
|
|
12624
12799
|
};
|
|
12625
|
-
//# sourceMappingURL=chunk-
|
|
12800
|
+
//# sourceMappingURL=chunk-Y7AHOXHP.js.map
|