@integrity-labs/agt-cli 0.28.254 → 0.28.255

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.
@@ -18,7 +18,7 @@ import {
18
18
  resolveConnectivityProbe,
19
19
  worseConnectivityOutcome,
20
20
  wrapScheduledTaskPrompt
21
- } from "./chunk-UMXGONVE.js";
21
+ } from "./chunk-GFX74FGP.js";
22
22
  import {
23
23
  parsePsRows
24
24
  } from "./chunk-XWVM4KPK.js";
@@ -5832,7 +5832,7 @@ function requireHost() {
5832
5832
  }
5833
5833
 
5834
5834
  // src/lib/api-client.ts
5835
- var agtCliVersion = true ? "0.28.254" : "dev";
5835
+ var agtCliVersion = true ? "0.28.255" : "dev";
5836
5836
  var lastConfigHash = null;
5837
5837
  function setConfigHash(hash) {
5838
5838
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -8102,4 +8102,4 @@ export {
8102
8102
  managerInstallSystemUnitCommand,
8103
8103
  managerUninstallSystemUnitCommand
8104
8104
  };
8105
- //# sourceMappingURL=chunk-GKHDPXML.js.map
8105
+ //# sourceMappingURL=chunk-O5JHX7FG.js.map
@@ -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-CHYTU6HG.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-EKXNGE5B.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-S6LYZUEC.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-EE3MXQHY.js.map
@@ -37,7 +37,7 @@ import {
37
37
  requireHost,
38
38
  safeWriteJsonAtomic,
39
39
  setConfigHash
40
- } from "../chunk-GKHDPXML.js";
40
+ } from "../chunk-O5JHX7FG.js";
41
41
  import {
42
42
  getProjectDir as getProjectDir2,
43
43
  getReadyTasks,
@@ -122,7 +122,7 @@ import {
122
122
  takeZombieDetection,
123
123
  transcriptActivityAgeSeconds,
124
124
  writeEgressAllowlist
125
- } from "../chunk-UMXGONVE.js";
125
+ } from "../chunk-GFX74FGP.js";
126
126
  import {
127
127
  reapOrphanChannelMcps
128
128
  } from "../chunk-XWVM4KPK.js";
@@ -6669,7 +6669,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6669
6669
  var lastVersionCheckAt = 0;
6670
6670
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6671
6671
  var lastResponsivenessProbeAt = 0;
6672
- var agtCliVersion = true ? "0.28.254" : "dev";
6672
+ var agtCliVersion = true ? "0.28.255" : "dev";
6673
6673
  function resolveBrewPath(execFileSync2) {
6674
6674
  try {
6675
6675
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -7519,7 +7519,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
7519
7519
  if (codeNames.length === 0) return;
7520
7520
  void (async () => {
7521
7521
  try {
7522
- const { collectDiagnostics } = await import("../persistent-session-CHYTU6HG.js");
7522
+ const { collectDiagnostics } = await import("../persistent-session-EKXNGE5B.js");
7523
7523
  await api.post("/host/heartbeat", {
7524
7524
  host_id: hostId,
7525
7525
  agent_diagnostics: collectDiagnostics(codeNames)
@@ -7617,7 +7617,7 @@ async function pollCycle() {
7617
7617
  }
7618
7618
  try {
7619
7619
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
7620
- const { collectDiagnostics } = await import("../persistent-session-CHYTU6HG.js");
7620
+ const { collectDiagnostics } = await import("../persistent-session-EKXNGE5B.js");
7621
7621
  const diagCodeNames = [...agentState.persistentSessionAgents];
7622
7622
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
7623
7623
  let tailscaleHostname;
@@ -7765,7 +7765,7 @@ async function pollCycle() {
7765
7765
  const {
7766
7766
  collectResponsivenessProbes,
7767
7767
  getResponsivenessIntervalMs
7768
- } = await import("../responsiveness-probe-D74I4CS6.js");
7768
+ } = await import("../responsiveness-probe-DE6TIHJZ.js");
7769
7769
  const probeIntervalMs = getResponsivenessIntervalMs();
7770
7770
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
7771
7771
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -7797,7 +7797,7 @@ async function pollCycle() {
7797
7797
  collectResponsivenessProbes,
7798
7798
  livePendingInboundOldestAgeSeconds,
7799
7799
  parkPendingInbound
7800
- } = await import("../responsiveness-probe-D74I4CS6.js");
7800
+ } = await import("../responsiveness-probe-DE6TIHJZ.js");
7801
7801
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
7802
7802
  const wedgeNow = /* @__PURE__ */ new Date();
7803
7803
  const liveAgents = agentState.persistentSessionAgents;
@@ -10623,7 +10623,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
10623
10623
  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}`));
10624
10624
  void (async () => {
10625
10625
  try {
10626
- const { collectDiagnostics } = await import("../persistent-session-CHYTU6HG.js");
10626
+ const { collectDiagnostics } = await import("../persistent-session-EKXNGE5B.js");
10627
10627
  await api.post("/host/heartbeat", {
10628
10628
  host_id: hostId,
10629
10629
  agent_diagnostics: collectDiagnostics([codeName])
@@ -10673,7 +10673,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
10673
10673
  }
10674
10674
  try {
10675
10675
  const hostId = await getHostId();
10676
- const { collectDiagnostics } = await import("../persistent-session-CHYTU6HG.js");
10676
+ const { collectDiagnostics } = await import("../persistent-session-EKXNGE5B.js");
10677
10677
  await api.post("/host/heartbeat", {
10678
10678
  host_id: hostId,
10679
10679
  agent_diagnostics: collectDiagnostics([codeName])
@@ -11064,7 +11064,7 @@ async function processClaudePairSessions(agents) {
11064
11064
  killPairSession,
11065
11065
  pairTmuxSession,
11066
11066
  finalizeClaudePairOnboarding
11067
- } = await import("../claude-pair-runtime-S6LYZUEC.js");
11067
+ } = await import("../claude-pair-runtime-EE3MXQHY.js");
11068
11068
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11069
11069
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11070
11070
  const killed = await killPairSession(pairTmuxSession(pairId));
package/dist/mcp/index.js CHANGED
@@ -22746,6 +22746,42 @@ server.tool(
22746
22746
  };
22747
22747
  }
22748
22748
  );
22749
+ server.tool(
22750
+ "submit_routine_output",
22751
+ "Submit a gated routine's drafted output for human approval. Use ONLY when your routine prompt says the routine is in its approval phase - the platform delivers the draft after sign-off; do not deliver it yourself.",
22752
+ {
22753
+ routine_id: external_exports.string().describe("The routine id from your routine prompt"),
22754
+ content: external_exports.string().describe("The drafted output, exactly as it should be delivered"),
22755
+ summary: external_exports.string().optional().describe("One-line summary shown on the approval card")
22756
+ },
22757
+ async ({ routine_id, content, summary }) => {
22758
+ let data;
22759
+ try {
22760
+ data = await apiPost("/host/routines/submit-output", {
22761
+ agent_id: AGT_AGENT_ID,
22762
+ routine_id,
22763
+ content,
22764
+ ...summary ? { summary } : {}
22765
+ });
22766
+ } catch (err) {
22767
+ return {
22768
+ content: [{ type: "text", text: `Could not submit: ${err.message}` }]
22769
+ };
22770
+ }
22771
+ if (!data.ok) {
22772
+ return { content: [{ type: "text", text: `Could not submit: ${data.error ?? data.message ?? "unknown error"}` }] };
22773
+ }
22774
+ if (data.gated === false) {
22775
+ return { content: [{ type: "text", text: data.message ?? "This routine is not approval-gated - deliver the output yourself." }] };
22776
+ }
22777
+ return {
22778
+ content: [{
22779
+ type: "text",
22780
+ text: data.duplicate ? `Already submitted (request ${data.request_id}); the approval is still pending. Do not deliver the output yourself.` : `Submitted for approval (request ${data.request_id}). The platform will deliver it once approved - do NOT deliver it yourself, and do not wait around; continue other work.`
22781
+ }]
22782
+ };
22783
+ }
22784
+ );
22749
22785
  server.tool(
22750
22786
  "schedule_list",
22751
22787
  "List your scheduled tasks (cron jobs, reminders, recurring work).",
@@ -23385,6 +23421,7 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
23385
23421
  "schedule_create",
23386
23422
  "schedule_delete",
23387
23423
  "schedule_update",
23424
+ "submit_routine_output",
23388
23425
  "knowledge_list",
23389
23426
  "knowledge_add",
23390
23427
  "knowledge_update",
@@ -39048,6 +39048,49 @@ var INTEGRATION_REGISTRY = [
39048
39048
  ]
39049
39049
  }
39050
39050
  },
39051
+ {
39052
+ // ENG-7439: X Search is a PREMIUM, platform-managed integration on the
39053
+ // Deck / Firecrawl / ElevenLabs model (ADR-0031, epic ENG-6920): Augmented
39054
+ // holds ONE X (Twitter) developer app whose OAuth2 app-only bearer
39055
+ // (X_APP_BEARER_TOKEN) every customer agent's search bills back to, so the
39056
+ // key is a single platform-held secret, NOT a per-agent credential. Auth
39057
+ // type is `none` - customers never enter a key. The one read tool runs on
39058
+ // the Direct-HTTP broker lane (integration-broker-agent-tools.ts, seed
39059
+ // metadata.tools); usage is metered at that chokepoint per resource
39060
+ // RETURNED, mirroring X's own read pricing.
39061
+ //
39062
+ // No `installable` here on purpose: x-search is a Direct-HTTP SEED
39063
+ // integration (integration-definitions.json), so the seed catalog already
39064
+ // makes it picker-visible. This registry entry exists ONLY to carry the
39065
+ // `premium` descriptor that `isPremiumDefinition` reads - which arms the
39066
+ // per-org opt-in gate, the priced acknowledgement modal, and the admin
39067
+ // pricing tab. See docs/adr/0034-x-search-platform-held-credential.md.
39068
+ id: "x-search",
39069
+ name: "X Search",
39070
+ category: "social",
39071
+ description: "Read-only X (Twitter) search: recent public posts by keyword, hashtag, author, or any X search operator - for sentiment sweeps, topic monitoring, and trend research. Augmented Team manages X access for you - there is no key to enter.",
39072
+ supported_auth_types: ["none"],
39073
+ capabilities: [
39074
+ { id: "x-search:read", name: "Search Posts", description: "Search recent public X posts (last ~7 days) via x_search_recent.", access: "read" }
39075
+ ],
39076
+ docs_url: "https://docs.x.com/x-api/posts/recent-search",
39077
+ beta: true,
39078
+ // ENG-7439: premium (billable). X bills us PER RESOURCE returned in a read
39079
+ // response ($0.005/post, $0.010/user via the app-only bearer), so the
39080
+ // integration is usage-priced and metered per resource at the broker
39081
+ // chokepoint. `meters` declares WHAT is metered + the physical unit; the
39082
+ // priced rate card (integration_rate_cards) holds the per-unit amount. Each
39083
+ // event_type must match what the broker writes to integration_usage_events.
39084
+ // Until a rate row is seeded an event prices at 0 (budget gate inert).
39085
+ premium: {
39086
+ pricing: "usage",
39087
+ note: "Billed per resource returned - each post and each unique author in a search result, mirroring X API read pricing.",
39088
+ meters: [
39089
+ { event_type: "post_read", unit: "post" },
39090
+ { event_type: "user_read", unit: "user" }
39091
+ ]
39092
+ }
39093
+ },
39051
39094
  {
39052
39095
  // Seed-catalog toolkit (composed by the ultimate-app-coder bundle). Registered
39053
39096
  // here only so the manager's ensureToolkitCli installs the binary via the
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-UMXGONVE.js";
39
+ } from "./chunk-GFX74FGP.js";
40
40
  import "./chunk-XWVM4KPK.js";
41
41
  export {
42
42
  EGRESS_BASELINE_DOMAINS,
@@ -77,4 +77,4 @@ export {
77
77
  writeEgressAllowlist,
78
78
  writePersistentClaudeWrapper
79
79
  };
80
- //# sourceMappingURL=persistent-session-CHYTU6HG.js.map
80
+ //# sourceMappingURL=persistent-session-EKXNGE5B.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-UMXGONVE.js";
3
+ } from "./chunk-GFX74FGP.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -418,4 +418,4 @@ export {
418
418
  readAndResetSlackReplyBindingClassifications,
419
419
  readAndResetSlackReplyTargetClassifications
420
420
  };
421
- //# sourceMappingURL=responsiveness-probe-D74I4CS6.js.map
421
+ //# sourceMappingURL=responsiveness-probe-DE6TIHJZ.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.254",
3
+ "version": "0.28.255",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {