@integrity-labs/agt-cli 0.28.480 → 0.28.482

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.
@@ -34852,17 +34852,25 @@ var FLAG_REGISTRY = [
34852
34852
  },
34853
34853
  {
34854
34854
  key: "synthetic-probe-enabled",
34855
- description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. Ships dark (OFF) because the probe cron was generating false positives (probe_timeout on angie for 7+ days while healthy, ENG-8048) and had open cron_invocation_errors alarms (since 2026-07-23). Flip ON per-environment via the admin Feature Flags page once the reliability issues are resolved. The existing AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it to "true"/"1" to force-enable (env takes precedence over the DB stage value), or "false"/"0" to force-disable without a DB lookup. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
34855
+ description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. This is the fleet-wide kill switch for synthetic probing, flippable per-environment from the admin Feature Flags page. The AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it in the deploy environment to "true"/"1" to force-enable or "false"/"0" to force-disable without a DB lookup. Leave it UNSET (the default on every stage since ENG-8303) so this flag governs. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
34856
34856
  flagType: "boolean",
34857
- // Safe/dark default: false = probe off. This encodes the ENG-8074 intent (disable
34858
- // in prod until reliability issues are resolved) and is the fail-safe direction for
34859
- // a flag-DB read error — a hiccup degrades to keeping the cron dormant rather than
34860
- // silently re-arming a broken probe fleet-wide.
34861
- // The env var AUGMENTED_SYNTHETIC_PROBE_ENABLED was the pre-flag emergency kill switch
34862
- // (read as `!== 'false'`, so unset = probe ON). The flag inverts this: unset env var
34863
- // now resolves to the flag default (OFF). Set AUGMENTED_SYNTHETIC_PROBE_ENABLED=true to
34864
- // explicitly re-arm the probe via env, or flip the flag ON from the admin UI.
34865
- defaultValue: false,
34857
+ // ON by default this deliberately matches the fleet's live behaviour rather than the
34858
+ // dark default ENG-8074 declared, and the history is worth keeping straight:
34859
+ //
34860
+ // ENG-8074 set `false` to hold the probe dark until its reliability issues were fixed
34861
+ // (probe_timeout false positives, ENG-8048; open cron_invocation_errors alarms). That
34862
+ // default was never reachable: sst.config.ts pinned the declared envVar to the literal
34863
+ // 'true' on every deployed stage, and a declared envVar outranks the DB value, so the
34864
+ // probe ran throughout (ENG-8303). ENG-8303 un-pinned the env var, which hands this flag
34865
+ // real authority for the first time — so its value must now be chosen for the fleet it
34866
+ // actually controls, not inherited from an intent that never took effect.
34867
+ //
34868
+ // `true` keeps prod exactly as it has been running. Flipping to `false` here instead
34869
+ // would have silently switched agent liveness probing off at the next deploy — including
34870
+ // the prod verification of ENG-8302's PutMetricAlarm quota fix, which needs the cron
34871
+ // alive to observe. The reliability concern behind ENG-8074 is addressed by ENG-8302;
34872
+ // if it recurs, the kill switch is now a genuine admin-UI flip rather than a redeploy.
34873
+ defaultValue: true,
34866
34874
  envVar: "AUGMENTED_SYNTHETIC_PROBE_ENABLED"
34867
34875
  },
34868
34876
  {
package/dist/mcp/index.js CHANGED
@@ -21415,6 +21415,78 @@ function describeRecruitAgentResult(resp) {
21415
21415
  }
21416
21416
  }
21417
21417
 
21418
+ // src/agent-roles.ts
21419
+ function renderRole(r) {
21420
+ const id = r.id ?? "(unknown)";
21421
+ const title = r.title ?? id;
21422
+ const tier = r.suggested_risk_tier ? ` \xB7 risk ${r.suggested_risk_tier}` : "";
21423
+ const custom3 = r.source === "custom" ? " \xB7 custom to your org" : "";
21424
+ const lines = [`- role_id: ${id} \u2014 ${title}${tier}${custom3}`];
21425
+ if (r.summary && r.summary !== title) lines.push(` ${r.summary}`);
21426
+ const tasks = (r.default_tasks ?? []).filter((t) => t && t.name);
21427
+ if (tasks.length > 0) {
21428
+ const shown = tasks.slice(0, 4).map((t) => `${t.name}${t.cadence ? ` (${t.cadence})` : ""}`);
21429
+ const more = tasks.length > shown.length ? `, +${tasks.length - shown.length} more` : "";
21430
+ lines.push(` comes with ${tasks.length} scheduled task(s): ${shown.join("; ")}${more}`);
21431
+ }
21432
+ if (r.bundled_skill_count && r.bundled_skill_count > 0) {
21433
+ lines.push(` comes with ${r.bundled_skill_count} bundled skill(s)`);
21434
+ }
21435
+ if (r.suggested_integrations && r.suggested_integrations.length > 0) {
21436
+ lines.push(` typically needs: ${r.suggested_integrations.join(", ")}`);
21437
+ }
21438
+ return lines.join("\n");
21439
+ }
21440
+ function describeListAgentRolesResult(resp) {
21441
+ if (resp.status === "feature_disabled") {
21442
+ return {
21443
+ text: `${resp.message ?? "Recruiting teammates is not enabled for this organization."} This is a setting, not a fault \u2014 do not retry.`,
21444
+ isError: true
21445
+ };
21446
+ }
21447
+ if (resp.status !== "ok" || !Array.isArray(resp.roles)) {
21448
+ return {
21449
+ text: `Could not load the role catalog${resp.message ? `: ${resp.message}` : ""}. Do not invent a role in its place \u2014 a role label that is not in the catalog will not provision the role's scheduled tasks or skills. Try again shortly, or tell your operator.`,
21450
+ isError: true
21451
+ };
21452
+ }
21453
+ if (resp.roles.length === 0) {
21454
+ return {
21455
+ text: "The role catalog came back empty, which is unexpected. Do not substitute a made-up role \u2014 tell your operator.",
21456
+ isError: true
21457
+ };
21458
+ }
21459
+ const labels = /* @__PURE__ */ new Map();
21460
+ for (const c of resp.categories ?? []) {
21461
+ if (c?.id) labels.set(c.id, c.label ?? c.id);
21462
+ }
21463
+ const byCategory = /* @__PURE__ */ new Map();
21464
+ for (const r of resp.roles) {
21465
+ const key = r.category ?? "other";
21466
+ const bucket = byCategory.get(key);
21467
+ if (bucket) bucket.push(r);
21468
+ else byCategory.set(key, [r]);
21469
+ }
21470
+ const ordered = [
21471
+ ...[...labels.keys()].filter((k) => byCategory.has(k)),
21472
+ ...[...byCategory.keys()].filter((k) => !labels.has(k))
21473
+ ];
21474
+ const sections = ordered.map((key) => {
21475
+ const heading = labels.get(key) ?? key;
21476
+ const body = (byCategory.get(key) ?? []).map(renderRole).join("\n");
21477
+ return `${heading}:
21478
+ ${body}`;
21479
+ });
21480
+ return {
21481
+ text: `${resp.roles.length} role(s) available to your organization.
21482
+
21483
+ ${sections.join("\n\n")}
21484
+
21485
+ Pass the exact role_id to recruit_agent as \`role_id\`. Choosing a catalog role is strongly preferred over a free-text role: it seeds the new agent's description and risk tier, and its scheduled tasks and bundled skills are provisioned automatically. A made-up role label gets none of that. Only use a custom role when nothing here fits the remit you agreed with the person you are interviewing.`,
21486
+ isError: false
21487
+ };
21488
+ }
21489
+
21418
21490
  // src/request-reconnect.ts
21419
21491
  function describeReconnectRequestResult(resp) {
21420
21492
  switch (resp.status) {
@@ -22599,9 +22671,44 @@ server.tool(
22599
22671
  return { content: [{ type: "text", text }], ...isError ? { isError: true } : {} };
22600
22672
  }
22601
22673
  );
22674
+ server.tool(
22675
+ "list_agent_roles",
22676
+ "List the predefined agent roles available to your organization. Call this BEFORE recruit_agent, and go through the results with the person who asked, so the new teammate is created from a curated role rather than a label you invented. Each role carries a vetted description, a risk tier, scheduled tasks and bundled skills that are provisioned automatically when the role is used \u2014 a made-up role label gets none of that. Pass the chosen role_id to recruit_agent.",
22677
+ {},
22678
+ async () => {
22679
+ if (!AGT_AGENT_CODE_NAME) {
22680
+ return {
22681
+ content: [{ type: "text", text: "Error: AGT_AGENT_CODE_NAME not configured." }],
22682
+ isError: true
22683
+ };
22684
+ }
22685
+ let resp;
22686
+ try {
22687
+ resp = await apiGet(
22688
+ `/host/agent-roles?agent_code_name=${encodeURIComponent(AGT_AGENT_CODE_NAME)}`
22689
+ );
22690
+ } catch (err) {
22691
+ process.stderr.write(
22692
+ `list_agent_roles: GET /host/agent-roles failed: ${err instanceof Error ? err.message : String(err)}
22693
+ `
22694
+ );
22695
+ return {
22696
+ content: [
22697
+ {
22698
+ type: "text",
22699
+ text: "Could not reach the role catalog. Do not substitute a made-up role \u2014 a label that is not in the catalog provisions no tasks and no skills. Try again shortly."
22700
+ }
22701
+ ],
22702
+ isError: true
22703
+ };
22704
+ }
22705
+ const { text, isError } = describeListAgentRolesResult(resp);
22706
+ return { content: [{ type: "text", text }], ...isError ? { isError: true } : {} };
22707
+ }
22708
+ );
22602
22709
  server.tool(
22603
22710
  "recruit_agent",
22604
- "Propose a NEW teammate agent for your organization when the work in front of you genuinely needs a different agent \u2014 a distinct role, a separate remit, or capacity you cannot cover yourself. This does NOT create anything: it sends a request to an organization owner, who approves or denies it. Use it sparingly and only when you can say concretely what the new agent is for; do not use it to duplicate yourself, to get around a tool you are missing (use request_feature), or because a single task is large. After calling this, stop and report that it is awaiting approval \u2014 poll with check_approval if you need the outcome.",
22711
+ "Propose a NEW teammate agent for your organization when the work in front of you genuinely needs a different agent \u2014 a distinct role, a separate remit, or capacity you cannot cover yourself. This does NOT create anything: it sends a request to an organization owner, who approves or denies it. INTERVIEW THE PERSON WHO ASKED BEFORE CALLING THIS. You need their answers, not your own assumptions, for: what the agent is responsible for, what it must NOT do, how they will judge whether it is working, and who it reports to (use directory_lookup to get that id). Call list_agent_roles first and agree a role with them \u2014 a catalog role brings a vetted description, scheduled tasks and skills that a made-up role label does not. If you cannot get those answers, ask for them; do not fill them in yourself. Use this sparingly: do not duplicate yourself, do not use it to get around a tool you are missing (use request_feature), and do not use it because a single task is large. After calling this, stop and report that it is awaiting approval \u2014 poll with check_approval if you need the outcome.",
22605
22712
  {
22606
22713
  code_name: external_exports.string().min(1).max(64).regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, "code_name must be kebab-case").describe(
22607
22714
  'kebab-case identifier for the proposed agent (lowercase, hyphen-separated), e.g. "invoice-helper". If the name is already taken in your team a numeric suffix is added automatically.'
@@ -22610,7 +22717,25 @@ server.tool(
22610
22717
  description: external_exports.string().min(20).max(2e3).describe(
22611
22718
  "What this teammate is FOR: its remit, the work it would take on, and why that work needs a separate agent. A human reads this to decide \u2014 be specific and honest. Vague descriptions get denied."
22612
22719
  ),
22613
- role: external_exports.string().max(200).optional().describe('Optional short role label for the proposed agent, e.g. "Accounts receivable".'),
22720
+ role_id: external_exports.string().max(120).optional().describe(
22721
+ "Preferred. The id of a role from list_agent_roles, agreed with the person you interviewed. Using one seeds the new agent's description and risk tier from the catalog and provisions that role's scheduled tasks and bundled skills on approval. A free-text role gets none of that."
22722
+ ),
22723
+ role: external_exports.string().max(200).optional().describe(
22724
+ 'Only when no catalog role fits: a short free-text role label, e.g. "Accounts receivable". Ignored when role_id is supplied.'
22725
+ ),
22726
+ responsibilities: external_exports.array(external_exports.string().min(3).max(300)).min(1).max(8).describe(
22727
+ "What this teammate will be responsible for, in the words of the person who asked for it. Ask them \u2014 do not write this yourself. One short bullet each."
22728
+ ),
22729
+ boundaries: external_exports.array(external_exports.string().min(3).max(300)).min(1).max(8).describe(
22730
+ "What this teammate must NOT do \u2014 the limits of its remit, agreed explicitly with the person you interviewed. This is the field approvers rely on most, so ask the question directly rather than inferring the answer."
22731
+ ),
22732
+ success_criteria: external_exports.array(external_exports.string().min(3).max(300)).min(1).max(8).describe(
22733
+ "How the person will judge whether this teammate is working. Ask them for concrete, checkable statements."
22734
+ ),
22735
+ reports_to: external_exports.string().uuid().describe(
22736
+ "Who this teammate answers to: the uuid of an existing agent or person in your organization. Ask the requester, then use directory_lookup to resolve the id \u2014 do not guess it."
22737
+ ),
22738
+ reports_to_type: external_exports.enum(["agent", "person"]).describe("Whether reports_to is another 'agent' or a 'person' (a human in your organization)."),
22614
22739
  reason: external_exports.string().max(1e3).optional().describe(
22615
22740
  "Optional context for the approver: what prompted this now (a spike in volume, a user request, a gap you keep hitting). Shown as context only \u2014 the decision is made on the description above."
22616
22741
  ),
@@ -22632,6 +22757,16 @@ server.tool(
22632
22757
  code_name: params.code_name,
22633
22758
  display_name: params.display_name,
22634
22759
  description: params.description,
22760
+ // ENG-8306: the interviewed remit. Sent unconditionally — the API
22761
+ // REJECTS a proposal missing any of these, which is what makes the
22762
+ // interview mandatory rather than advisory (the server cannot observe
22763
+ // that the conversation happened, only that its output is present).
22764
+ responsibilities: params.responsibilities,
22765
+ boundaries: params.boundaries,
22766
+ success_criteria: params.success_criteria,
22767
+ reports_to: params.reports_to,
22768
+ reports_to_type: params.reports_to_type,
22769
+ ...params.role_id ? { role_id: params.role_id } : {},
22635
22770
  ...params.role ? { role: params.role } : {},
22636
22771
  ...params.reason ? { reason: params.reason } : {},
22637
22772
  ...params.host_id ? { host_id: params.host_id } : {}
@@ -24034,6 +24169,10 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
24034
24169
  // server-side org-scoped agent-recruit flag, see the registration comment).
24035
24170
  // No API tool shares this name; listed here to keep the lockstep guard green.
24036
24171
  "recruit_agent",
24172
+ // ENG-8306: enumerate the org's role catalog so a recruit can pick a curated
24173
+ // role instead of inventing a free-text label. Always registered for the same
24174
+ // reason as recruit_agent — the gate is server-side.
24175
+ "list_agent_roles",
24037
24176
  // ENG-6686: self-service identity edit (always registered). Listed here to
24038
24177
  // keep the lockstep guard green; no API tool shares this name.
24039
24178
  "update_identity",
@@ -40799,17 +40799,25 @@ var FLAG_REGISTRY = [
40799
40799
  },
40800
40800
  {
40801
40801
  key: "synthetic-probe-enabled",
40802
- description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. Ships dark (OFF) because the probe cron was generating false positives (probe_timeout on angie for 7+ days while healthy, ENG-8048) and had open cron_invocation_errors alarms (since 2026-07-23). Flip ON per-environment via the admin Feature Flags page once the reliability issues are resolved. The existing AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it to "true"/"1" to force-enable (env takes precedence over the DB stage value), or "false"/"0" to force-disable without a DB lookup. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
40802
+ description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. This is the fleet-wide kill switch for synthetic probing, flippable per-environment from the admin Feature Flags page. The AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it in the deploy environment to "true"/"1" to force-enable or "false"/"0" to force-disable without a DB lookup. Leave it UNSET (the default on every stage since ENG-8303) so this flag governs. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
40803
40803
  flagType: "boolean",
40804
- // Safe/dark default: false = probe off. This encodes the ENG-8074 intent (disable
40805
- // in prod until reliability issues are resolved) and is the fail-safe direction for
40806
- // a flag-DB read error — a hiccup degrades to keeping the cron dormant rather than
40807
- // silently re-arming a broken probe fleet-wide.
40808
- // The env var AUGMENTED_SYNTHETIC_PROBE_ENABLED was the pre-flag emergency kill switch
40809
- // (read as `!== 'false'`, so unset = probe ON). The flag inverts this: unset env var
40810
- // now resolves to the flag default (OFF). Set AUGMENTED_SYNTHETIC_PROBE_ENABLED=true to
40811
- // explicitly re-arm the probe via env, or flip the flag ON from the admin UI.
40812
- defaultValue: false,
40804
+ // ON by default this deliberately matches the fleet's live behaviour rather than the
40805
+ // dark default ENG-8074 declared, and the history is worth keeping straight:
40806
+ //
40807
+ // ENG-8074 set `false` to hold the probe dark until its reliability issues were fixed
40808
+ // (probe_timeout false positives, ENG-8048; open cron_invocation_errors alarms). That
40809
+ // default was never reachable: sst.config.ts pinned the declared envVar to the literal
40810
+ // 'true' on every deployed stage, and a declared envVar outranks the DB value, so the
40811
+ // probe ran throughout (ENG-8303). ENG-8303 un-pinned the env var, which hands this flag
40812
+ // real authority for the first time — so its value must now be chosen for the fleet it
40813
+ // actually controls, not inherited from an intent that never took effect.
40814
+ //
40815
+ // `true` keeps prod exactly as it has been running. Flipping to `false` here instead
40816
+ // would have silently switched agent liveness probing off at the next deploy — including
40817
+ // the prod verification of ENG-8302's PutMetricAlarm quota fix, which needs the cron
40818
+ // alive to observe. The reliability concern behind ENG-8074 is addressed by ENG-8302;
40819
+ // if it recurs, the kill switch is now a genuine admin-UI flip rather than a redeploy.
40820
+ defaultValue: true,
40813
40821
  envVar: "AUGMENTED_SYNTHETIC_PROBE_ENABLED"
40814
40822
  },
40815
40823
  {
@@ -35077,17 +35077,25 @@ var FLAG_REGISTRY = [
35077
35077
  },
35078
35078
  {
35079
35079
  key: "synthetic-probe-enabled",
35080
- description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. Ships dark (OFF) because the probe cron was generating false positives (probe_timeout on angie for 7+ days while healthy, ENG-8048) and had open cron_invocation_errors alarms (since 2026-07-23). Flip ON per-environment via the admin Feature Flags page once the reliability issues are resolved. The existing AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it to "true"/"1" to force-enable (env takes precedence over the DB stage value), or "false"/"0" to force-disable without a DB lookup. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
35080
+ description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. This is the fleet-wide kill switch for synthetic probing, flippable per-environment from the admin Feature Flags page. The AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it in the deploy environment to "true"/"1" to force-enable or "false"/"0" to force-disable without a DB lookup. Leave it UNSET (the default on every stage since ENG-8303) so this flag governs. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
35081
35081
  flagType: "boolean",
35082
- // Safe/dark default: false = probe off. This encodes the ENG-8074 intent (disable
35083
- // in prod until reliability issues are resolved) and is the fail-safe direction for
35084
- // a flag-DB read error — a hiccup degrades to keeping the cron dormant rather than
35085
- // silently re-arming a broken probe fleet-wide.
35086
- // The env var AUGMENTED_SYNTHETIC_PROBE_ENABLED was the pre-flag emergency kill switch
35087
- // (read as `!== 'false'`, so unset = probe ON). The flag inverts this: unset env var
35088
- // now resolves to the flag default (OFF). Set AUGMENTED_SYNTHETIC_PROBE_ENABLED=true to
35089
- // explicitly re-arm the probe via env, or flip the flag ON from the admin UI.
35090
- defaultValue: false,
35082
+ // ON by default this deliberately matches the fleet's live behaviour rather than the
35083
+ // dark default ENG-8074 declared, and the history is worth keeping straight:
35084
+ //
35085
+ // ENG-8074 set `false` to hold the probe dark until its reliability issues were fixed
35086
+ // (probe_timeout false positives, ENG-8048; open cron_invocation_errors alarms). That
35087
+ // default was never reachable: sst.config.ts pinned the declared envVar to the literal
35088
+ // 'true' on every deployed stage, and a declared envVar outranks the DB value, so the
35089
+ // probe ran throughout (ENG-8303). ENG-8303 un-pinned the env var, which hands this flag
35090
+ // real authority for the first time — so its value must now be chosen for the fleet it
35091
+ // actually controls, not inherited from an intent that never took effect.
35092
+ //
35093
+ // `true` keeps prod exactly as it has been running. Flipping to `false` here instead
35094
+ // would have silently switched agent liveness probing off at the next deploy — including
35095
+ // the prod verification of ENG-8302's PutMetricAlarm quota fix, which needs the cron
35096
+ // alive to observe. The reliability concern behind ENG-8074 is addressed by ENG-8302;
35097
+ // if it recurs, the kill switch is now a genuine admin-UI flip rather than a redeploy.
35098
+ defaultValue: true,
35091
35099
  envVar: "AUGMENTED_SYNTHETIC_PROBE_ENABLED"
35092
35100
  },
35093
35101
  {
@@ -35403,17 +35403,25 @@ var FLAG_REGISTRY = [
35403
35403
  },
35404
35404
  {
35405
35405
  key: "synthetic-probe-enabled",
35406
- description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. Ships dark (OFF) because the probe cron was generating false positives (probe_timeout on angie for 7+ days while healthy, ENG-8048) and had open cron_invocation_errors alarms (since 2026-07-23). Flip ON per-environment via the admin Feature Flags page once the reliability issues are resolved. The existing AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it to "true"/"1" to force-enable (env takes precedence over the DB stage value), or "false"/"0" to force-disable without a DB lookup. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
35406
+ description: 'Global gate for the agent synthetic-liveness cron (ENG-8074). When OFF, the cron exits after reading the flag \u2014 no probes sent, no metrics emitted, no CloudWatch alarms fired, near-zero DB footprint. This is the fleet-wide kill switch for synthetic probing, flippable per-environment from the admin Feature Flags page. The AUGMENTED_SYNTHETIC_PROBE_ENABLED env var is the declared envVar for this flag (ADR-0022): set it in the deploy environment to "true"/"1" to force-enable or "false"/"0" to force-disable without a DB lookup. Leave it UNSET (the default on every stage since ENG-8303) so this flag governs. Evaluated as a global stage value by the central cron (no per-org targeting). Boolean gate.',
35407
35407
  flagType: "boolean",
35408
- // Safe/dark default: false = probe off. This encodes the ENG-8074 intent (disable
35409
- // in prod until reliability issues are resolved) and is the fail-safe direction for
35410
- // a flag-DB read error — a hiccup degrades to keeping the cron dormant rather than
35411
- // silently re-arming a broken probe fleet-wide.
35412
- // The env var AUGMENTED_SYNTHETIC_PROBE_ENABLED was the pre-flag emergency kill switch
35413
- // (read as `!== 'false'`, so unset = probe ON). The flag inverts this: unset env var
35414
- // now resolves to the flag default (OFF). Set AUGMENTED_SYNTHETIC_PROBE_ENABLED=true to
35415
- // explicitly re-arm the probe via env, or flip the flag ON from the admin UI.
35416
- defaultValue: false,
35408
+ // ON by default this deliberately matches the fleet's live behaviour rather than the
35409
+ // dark default ENG-8074 declared, and the history is worth keeping straight:
35410
+ //
35411
+ // ENG-8074 set `false` to hold the probe dark until its reliability issues were fixed
35412
+ // (probe_timeout false positives, ENG-8048; open cron_invocation_errors alarms). That
35413
+ // default was never reachable: sst.config.ts pinned the declared envVar to the literal
35414
+ // 'true' on every deployed stage, and a declared envVar outranks the DB value, so the
35415
+ // probe ran throughout (ENG-8303). ENG-8303 un-pinned the env var, which hands this flag
35416
+ // real authority for the first time — so its value must now be chosen for the fleet it
35417
+ // actually controls, not inherited from an intent that never took effect.
35418
+ //
35419
+ // `true` keeps prod exactly as it has been running. Flipping to `false` here instead
35420
+ // would have silently switched agent liveness probing off at the next deploy — including
35421
+ // the prod verification of ENG-8302's PutMetricAlarm quota fix, which needs the cron
35422
+ // alive to observe. The reliability concern behind ENG-8074 is addressed by ENG-8302;
35423
+ // if it recurs, the kill switch is now a genuine admin-UI flip rather than a redeploy.
35424
+ defaultValue: true,
35417
35425
  envVar: "AUGMENTED_SYNTHETIC_PROBE_ENABLED"
35418
35426
  },
35419
35427
  {
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-EOH75U22.js";
39
+ } from "./chunk-DNC5JGOV.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-USTI74Q5.js.map
80
+ //# sourceMappingURL=persistent-session-IBMUPQZ2.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-EOH75U22.js";
3
+ } from "./chunk-DNC5JGOV.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -596,4 +596,4 @@ export {
596
596
  readAndResetSlackReplyBindingClassifications,
597
597
  readAndResetSlackReplyTargetClassifications
598
598
  };
599
- //# sourceMappingURL=responsiveness-probe-3PRCIAML.js.map
599
+ //# sourceMappingURL=responsiveness-probe-QBLQIMZR.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.480",
3
+ "version": "0.28.482",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {