@integrity-labs/agt-cli 0.28.774 → 0.28.776
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-PMKI7ZTP.js → chunk-N6DU2RYO.js} +1 -1
- package/dist/chunk-N6DU2RYO.js.map +1 -0
- package/dist/{chunk-SXTHAF3R.js → chunk-NRMBKDER.js} +2 -2
- package/dist/{chunk-BUCKLMKD.js → chunk-P5SXR47I.js} +35 -4
- package/dist/{chunk-BUCKLMKD.js.map → chunk-P5SXR47I.js.map} +1 -1
- package/dist/{claude-pair-runtime-O7T3PIMT.js → claude-pair-runtime-MI65DVTR.js} +2 -2
- package/dist/lib/manager-worker.js +13 -13
- package/dist/mcp/index.js +46 -4
- package/dist/{persistent-session-C2Y4CSAY.js → persistent-session-CGIB77UQ.js} +3 -3
- package/dist/{responsiveness-probe-7CVB5NBT.js → responsiveness-probe-YINXZH3S.js} +3 -3
- package/dist/{session-auth-dead-E3WEZYEH.js → session-auth-dead-OZBNHFPN.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-PMKI7ZTP.js.map +0 -1
- /package/dist/{chunk-SXTHAF3R.js.map → chunk-NRMBKDER.js.map} +0 -0
- /package/dist/{claude-pair-runtime-O7T3PIMT.js.map → claude-pair-runtime-MI65DVTR.js.map} +0 -0
- /package/dist/{persistent-session-C2Y4CSAY.js.map → persistent-session-CGIB77UQ.js.map} +0 -0
- /package/dist/{responsiveness-probe-7CVB5NBT.js.map → responsiveness-probe-YINXZH3S.js.map} +0 -0
- /package/dist/{session-auth-dead-E3WEZYEH.js.map → session-auth-dead-OZBNHFPN.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-CGIB77UQ.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-MI65DVTR.js.map
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
safeWriteJsonAtomic,
|
|
59
59
|
setConfigHash,
|
|
60
60
|
tripClass
|
|
61
|
-
} from "../chunk-
|
|
61
|
+
} from "../chunk-P5SXR47I.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-NRMBKDER.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-N6DU2RYO.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-YINXZH3S.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.776" : "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-CGIB77UQ.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-CGIB77UQ.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-YINXZH3S.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-YINXZH3S.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-OZBNHFPN.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-CGIB77UQ.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-CGIB77UQ.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-MI65DVTR.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
|
@@ -46672,7 +46672,7 @@ ${lines}` }
|
|
|
46672
46672
|
);
|
|
46673
46673
|
server.tool(
|
|
46674
46674
|
"rule_add",
|
|
46675
|
-
'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.
|
|
46675
|
+
'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. Do NOT use replace_id merely to get rid of a rule you no longer want - that swaps in a rule nobody asked for. If a rule is simply WRONG, use rule_remove, which requires a reason. Replacing is for "I want this instead"; removing is for "this should never have been made". Either way the person MUST be told what stopped applying, in the same message: a rule that quietly stops applying is worse than one that was never made, because nobody notices.',
|
|
46676
46676
|
{
|
|
46677
46677
|
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."),
|
|
46678
46678
|
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.")
|
|
@@ -46693,6 +46693,40 @@ server.tool(
|
|
|
46693
46693
|
return { content: [{ type: "text", text: said }] };
|
|
46694
46694
|
}
|
|
46695
46695
|
);
|
|
46696
|
+
server.tool(
|
|
46697
|
+
"rule_remove",
|
|
46698
|
+
"Retire a standing rule that is WRONG - factually incorrect, harmful, or written for a workflow that has since changed. Use this instead of rule_add+replace_id when there is no replacement rule you actually want: swapping in a rule nobody asked for to evict a bad one leaves two problems instead of one, both resident on every turn. A wrong rule is not inert, it steers every single request until it is gone. You MUST tell the person which rule stopped applying, in the same reply - that obligation is the whole reason removal is allowed at all. `reason` is required: a removal with nothing recorded is the silent disappearance this design exists to prevent. Removing your last rule is fine; zero rules is a normal state.",
|
|
46699
|
+
{
|
|
46700
|
+
rule_id: external_exports.string().describe("The id of the rule to retire, from rule_list."),
|
|
46701
|
+
// Trimmed and length-checked HERE as well as in planAgentRuleRemove.
|
|
46702
|
+
// Not redundant: the schema refusal reaches the agent immediately and
|
|
46703
|
+
// without a round trip, whereas the server check is the one that actually
|
|
46704
|
+
// guarantees the invariant for every caller. The server check stays because
|
|
46705
|
+
// it also carries the credential-shape refusal, which a schema cannot do.
|
|
46706
|
+
reason: external_exports.string().trim().min(1, "A reason is required \u2014 a rule that disappears with nothing recorded is what this design prevents.").describe('Why it is being removed, in one short phrase ("factually wrong", "workflow changed", "superseded by policy"). Required and non-blank. It is recorded in the audit trail so the removal stays answerable after the rule is gone.')
|
|
46707
|
+
},
|
|
46708
|
+
async (params) => {
|
|
46709
|
+
const data = await apiPost("/host/agent-rules/remove", {
|
|
46710
|
+
agent_id: AGT_AGENT_ID,
|
|
46711
|
+
rule_id: params.rule_id,
|
|
46712
|
+
reason: params.reason
|
|
46713
|
+
});
|
|
46714
|
+
if (!data.ok) {
|
|
46715
|
+
return {
|
|
46716
|
+
content: [{ type: "text", text: data.message ?? "Could not remove that rule." }],
|
|
46717
|
+
isError: true
|
|
46718
|
+
};
|
|
46719
|
+
}
|
|
46720
|
+
return {
|
|
46721
|
+
content: [
|
|
46722
|
+
{
|
|
46723
|
+
type: "text",
|
|
46724
|
+
text: `Removed the rule: "${data.removed?.text}". It no longer applies. TELL THE PERSON this rule stopped applying, in this same reply - do not let it disappear silently.`
|
|
46725
|
+
}
|
|
46726
|
+
]
|
|
46727
|
+
};
|
|
46728
|
+
}
|
|
46729
|
+
);
|
|
46696
46730
|
server.tool(
|
|
46697
46731
|
"knowledge_add",
|
|
46698
46732
|
'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.',
|
|
@@ -47207,11 +47241,19 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
|
47207
47241
|
"kanban_reopen",
|
|
47208
47242
|
// ENG-9375: the READ path over a teammate's board (counts only).
|
|
47209
47243
|
"kanban_peek",
|
|
47210
|
-
// ENG-9789: per-agent standing rules.
|
|
47211
|
-
//
|
|
47212
|
-
//
|
|
47244
|
+
// ENG-9789: per-agent standing rules. The ADD path is swap-only — an agent
|
|
47245
|
+
// may not displace a rule except by naming it while adding another, so a full
|
|
47246
|
+
// list can never be resolved by a silent delete.
|
|
47247
|
+
//
|
|
47248
|
+
// ENG-9860 added `rule_remove` as a separate exit for a rule that turned out
|
|
47249
|
+
// to be WRONG, which swap-only left with no move that was not also bad
|
|
47250
|
+
// (invent a replacement nobody wants, or leave a known-wrong instruction
|
|
47251
|
+
// resident on every turn). It does NOT relax the above: removal is its own
|
|
47252
|
+
// call, requires a non-blank reason, and obliges the agent to say what
|
|
47253
|
+
// stopped applying in the same reply.
|
|
47213
47254
|
"rule_list",
|
|
47214
47255
|
"rule_add",
|
|
47256
|
+
"rule_remove",
|
|
47215
47257
|
// ENG-6953: agent + people directory lookup (always registered locally).
|
|
47216
47258
|
"directory_lookup",
|
|
47217
47259
|
"status_standup",
|
|
@@ -49,8 +49,8 @@ import {
|
|
|
49
49
|
writeDirectChatSessionState,
|
|
50
50
|
writeEgressAllowlist,
|
|
51
51
|
writePersistentClaudeWrapper
|
|
52
|
-
} from "./chunk-
|
|
53
|
-
import "./chunk-
|
|
52
|
+
} from "./chunk-NRMBKDER.js";
|
|
53
|
+
import "./chunk-N6DU2RYO.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-CGIB77UQ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-NRMBKDER.js";
|
|
4
|
+
import "./chunk-N6DU2RYO.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-YINXZH3S.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionTranscriptDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-N6DU2RYO.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-OZBNHFPN.js.map
|