@integrity-labs/agt-cli 0.28.805 → 0.28.807

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.
Files changed (24) hide show
  1. package/dist/bin/agt.js +5 -5
  2. package/dist/{chunk-DHOVIXR5.js → chunk-GIV6ORI3.js} +17 -2
  3. package/dist/{chunk-DHOVIXR5.js.map → chunk-GIV6ORI3.js.map} +1 -1
  4. package/dist/{chunk-YNSVQMSD.js → chunk-SHQCTBFE.js} +59 -6
  5. package/dist/{chunk-YNSVQMSD.js.map → chunk-SHQCTBFE.js.map} +1 -1
  6. package/dist/{chunk-2FL6V4E5.js → chunk-VK35F6O7.js} +53 -1
  7. package/dist/chunk-VK35F6O7.js.map +1 -0
  8. package/dist/{claude-pair-runtime-WS3IVDDE.js → claude-pair-runtime-XZLX2PEL.js} +2 -2
  9. package/dist/lib/manager-worker.js +54 -13
  10. package/dist/lib/manager-worker.js.map +1 -1
  11. package/dist/mcp/direct-chat-channel.js +52 -0
  12. package/dist/mcp/index.js +110 -1
  13. package/dist/mcp/origami.js +52 -0
  14. package/dist/mcp/slack-channel.js +52 -0
  15. package/dist/mcp/telegram-channel.js +52 -0
  16. package/dist/{persistent-session-PV4GPHG3.js → persistent-session-LEICQMWY.js} +3 -3
  17. package/dist/{responsiveness-probe-X3AW5TGA.js → responsiveness-probe-WEXP254C.js} +3 -3
  18. package/dist/{session-auth-dead-W6K5VEU7.js → session-auth-dead-AROKHZET.js} +2 -2
  19. package/package.json +1 -1
  20. package/dist/chunk-2FL6V4E5.js.map +0 -1
  21. /package/dist/{claude-pair-runtime-WS3IVDDE.js.map → claude-pair-runtime-XZLX2PEL.js.map} +0 -0
  22. /package/dist/{persistent-session-PV4GPHG3.js.map → persistent-session-LEICQMWY.js.map} +0 -0
  23. /package/dist/{responsiveness-probe-X3AW5TGA.js.map → responsiveness-probe-WEXP254C.js.map} +0 -0
  24. /package/dist/{session-auth-dead-W6K5VEU7.js.map → session-auth-dead-AROKHZET.js.map} +0 -0
@@ -36899,6 +36899,38 @@ var FLAG_REGISTRY = [
36899
36899
  // envVar — this is a net-new control with no pre-flags env gate to migrate.
36900
36900
  defaultValue: false
36901
36901
  },
36902
+ {
36903
+ key: "skill-dreaming-support-intake",
36904
+ description: "Route skill dreaming's GLOBAL-scope proposals into Integrity Labs' own support-intake Linear workspace (ENG-9926). 42% of dreaming output targets a global skill no product surface can change, so those drafts can only ever become an agent-scoped fork that never reaches the thing it improves \u2014 the improvement is therefore ALSO filed as a support-intake issue, deduped per target skill with one Linear customer need per requesting org. Boolean gate; ships dark \u2014 when off nothing is filed and the fork behaviour is exactly today's.",
36905
+ flagType: "boolean",
36906
+ // Arming this starts exporting customer-derived text to a third-party tracker, so it
36907
+ // takes the ADR-0022 §4 explicit-confirmation step rather than a single unguarded
36908
+ // write — matching every comparable export gate in this file
36909
+ // (`org-email-domain-derivation`, `kanban-push-status`,
36910
+ // `augmented-support-auto-provision`, `email-guard-enforce-enabled`).
36911
+ // (CodeRabbit, PR #5519: the first cut documented the risk in the comment below and
36912
+ // then omitted the marker that acts on it.)
36913
+ sensitive: true,
36914
+ // THIS GATES A DATA CROSSING, NOT A COST. Read that before arming it.
36915
+ //
36916
+ // Everything skill dreaming does today stays inside the control plane: it reads
36917
+ // `agent_memories` and writes a `skill_definitions` row in the same Postgres, same
36918
+ // org, same RLS. This flag is what sends LLM-written rationale, confidence, and the
36919
+ // verbatim NAMES of the memories that motivated a proposal OUT to Linear — and
36920
+ // `feature-request-intake.ts` already calls Linear "the third-party tracker" where it
36921
+ // refuses to export a requester's contact details there. Via
36922
+ // linkFeatureRequestCustomerNeed it also sends the org's verified email domains.
36923
+ //
36924
+ // That is strictly more than ADR-0052 §6 gated for PostHog, and ENG-8247 is the
36925
+ // precedent for why a credential must not BE the gate: holding a support-intake key
36926
+ // is not the same as being cleared to send customer-derived text to a vendor's
36927
+ // tracker. Hence a separate flag rather than leaning on isFeatureIntakeConfigured.
36928
+ //
36929
+ // Declared safe value is `false` (nothing filed). Fail-safe direction: a flag-DB read
36930
+ // error must never start exporting on its own. No envVar — net-new control with no
36931
+ // pre-flags env gate to migrate (ADR-0022).
36932
+ defaultValue: false
36933
+ },
36902
36934
  {
36903
36935
  key: "skill-draft-review-notify",
36904
36936
  description: "Pending skill-draft review nudge (ENG-6505): when a skill lands as a status=draft awaiting operator review, send a low-severity informational notification to the right reviewer(s) by scope \u2014 agent-scoped \u2192 the agent's manager (reports_to_person), falling back to team owners/admins; team-scoped \u2192 team owners/admins; org-scoped \u2192 org owners/admins \u2014 with a deep link to the Pending Skills card. Distinct from (and never doubles up on) the HIGH+ SkillSpector security alert. Covers both the agent-authored (ENG-4589) and skill-dreaming (ENG-6500) draft paths. Boolean gate; ships dark \u2014 when off no nudge is sent, so the steady state until an org is armed is silence.",
@@ -37247,6 +37279,26 @@ var FLAG_REGISTRY = [
37247
37279
  // env var is retired.
37248
37280
  envVar: "AUGMENTED_CONNECTIVITY_ESCALATION_ENABLED"
37249
37281
  },
37282
+ {
37283
+ key: "slack-manifest-remediate",
37284
+ description: "Let the Slack manifest drift monitor PUSH, not just alert (ENG-9963). updateSlackManifest had exactly one caller \u2014 a console button \u2014 so nothing but a human click ever pushed a manifest; ENG-7762 changed the generator with no rollout mechanism and 26 agents went 53 days with no working per-agent slash commands. When on, the daily drift cron pushes the generated manifest for a drifted agent. When off it alerts exactly as before. NOTE what arming this authorises: a push REPLACES a customer-owned Slack app's entire manifest, so the cron only ever pushes drift whose diffs are purely additive (isSafelyRemediable) \u2014 an app with live-only entries a push would destroy is declined and left for a human. Boolean gate; ships dark.",
37285
+ flagType: "boolean",
37286
+ // Declared safe value is `false` (alert-only), matching the cron's compiled
37287
+ // default. The fail-safe direction is the opposite of a paging gate's and
37288
+ // matters more: a flag-DB read error must never authorise a WRITE to a
37289
+ // customer's Slack app.
37290
+ defaultValue: false,
37291
+ // Operator override, same precedence and vocabulary as the connectivity
37292
+ // escalation gate above, so an operator who knows one knows both.
37293
+ envVar: "AUGMENTED_SLACK_MANIFEST_REMEDIATE_ENABLED",
37294
+ // ADR-0022 §4. NOTE this is where it diverges from the connectivity gate it
37295
+ // otherwise mirrors, and the divergence is the point: arming THAT one only
37296
+ // causes alerts to open, while arming THIS one authorises a cron to REPLACE
37297
+ // manifests on customer-owned Slack apps. That is precisely the class the
37298
+ // sensitive marker exists for — a control whose relaxation should not be one
37299
+ // unguarded write away.
37300
+ sensitive: true
37301
+ },
37250
37302
  {
37251
37303
  key: "integration-reauth-reminders",
37252
37304
  description: "Re-notify an integration that stays in needs_reauth (ENG-8370). Failure notification is at-most-once PER TRANSITION, so an integration nobody repairs is announced once and then silent forever - prod carried a row failing every 30-minute tick for ~21 days on a single day-one notification. When on, the IntegrationReauthReminder cron re-fires the existing reconnect notification on a backoff measured from failure ONSET (+1d, +3d, +7d, then weekly), skipping rows an operator has muted. When off the cron still scans and logs what it WOULD have sent, so the volume can be sized before anyone is messaged. Boolean gate; ships dark.",
package/dist/mcp/index.js CHANGED
@@ -37099,7 +37099,7 @@ function renderKanbanList(items, nowMs = Date.now()) {
37099
37099
  return lines.join("\n");
37100
37100
  }
37101
37101
  var BLOCKED_ON_ME_SECTION_HEADING = "You are blocking these (another agent has stopped)";
37102
- var BLOCKED_ON_ME_SECTION_NOTE = "_Another agent has PARKED its own work until you act. These are not your cards and not pullable work \u2014 you cannot move, note or complete them, and they do not count toward your in-progress load. Do the thing named, then tell the agent so it can resume; it un-parks its own card._";
37102
+ var BLOCKED_ON_ME_SECTION_NOTE = "_Another agent has PARKED its own work until you act. These are not your cards and not pullable work \u2014 you cannot move, note or complete them, and they do not count toward your in-progress load. Do the thing named, then answer with `kanban_respond` (card_id + your answer) \u2014 that delivers it ON the parked card and un-parks it. Do NOT open a second card to carry the answer._";
37103
37103
  var HUMAN_ASSIGNED_SECTION_HEADING = "Assigned to a person (not yours to action)";
37104
37104
  var HUMAN_ASSIGNED_SECTION_NOTE = "_These belong to a person, not to you. You cannot move, note or complete them \u2014 every kanban write is refused. If the work is finished (or was never really theirs), use `kanban_recall` to pull the card back onto your board, then close it as normal._";
37105
37105
 
@@ -37824,6 +37824,27 @@ function formatKanbanLogResult(label, data, match = {}) {
37824
37824
  };
37825
37825
  }
37826
37826
 
37827
+ // src/kanban-respond-outcome.ts
37828
+ function describeKanbanRespondOutcome(data) {
37829
+ if (data.ok && data.delivered !== false) {
37830
+ return "Answer delivered. Their card is un-parked and back on their board \u2014 they will pick it up from here, so it is off your plate.";
37831
+ }
37832
+ if (data.reason === "recorded_undelivered" || data.ok && data.delivered === false) {
37833
+ return "Your answer was recorded and the card un-parked, but delivery to that agent could not be confirmed \u2014 tell them directly as well so it is not lost.";
37834
+ }
37835
+ const refusal = REFUSAL_MESSAGES[data.reason ?? ""];
37836
+ if (refusal) return refusal(data);
37837
+ return data.error ?? "Could not send your answer.";
37838
+ }
37839
+ var REFUSAL_MESSAGES = {
37840
+ not_found: () => 'No card is parked on you with that id. Re-read kanban_list \u2014 only cards under "You are blocking these" can be answered here, and the id must be copied exactly.',
37841
+ self_block: () => "That card is parked on YOU by you \u2014 a self-block, almost always a mistyped code_name when it was parked. Fix it on your own card rather than answering it.",
37842
+ already_responded: () => "Someone already answered that card, so it has resumed. Nothing more to do.",
37843
+ not_actionable: (d) => `That card is no longer parked (status: ${d.status ?? "unknown"}), so there is nothing to un-park. The agent has moved on.`,
37844
+ recorded_not_unparked: () => "Your answer was recorded but the card could not be un-parked, so the agent is still blocked \u2014 tell them directly and check the card."
37845
+ };
37846
+ var HANDLED_REFUSAL_REASONS = Object.keys(REFUSAL_MESSAGES).sort();
37847
+
37827
37848
  // src/kanban-update.ts
37828
37849
  function buildKanbanUpdateItem(id, fields) {
37829
37850
  const item = { id };
@@ -43983,6 +44004,38 @@ var FLAG_REGISTRY = [
43983
44004
  // envVar — this is a net-new control with no pre-flags env gate to migrate.
43984
44005
  defaultValue: false
43985
44006
  },
44007
+ {
44008
+ key: "skill-dreaming-support-intake",
44009
+ description: "Route skill dreaming's GLOBAL-scope proposals into Integrity Labs' own support-intake Linear workspace (ENG-9926). 42% of dreaming output targets a global skill no product surface can change, so those drafts can only ever become an agent-scoped fork that never reaches the thing it improves \u2014 the improvement is therefore ALSO filed as a support-intake issue, deduped per target skill with one Linear customer need per requesting org. Boolean gate; ships dark \u2014 when off nothing is filed and the fork behaviour is exactly today's.",
44010
+ flagType: "boolean",
44011
+ // Arming this starts exporting customer-derived text to a third-party tracker, so it
44012
+ // takes the ADR-0022 §4 explicit-confirmation step rather than a single unguarded
44013
+ // write — matching every comparable export gate in this file
44014
+ // (`org-email-domain-derivation`, `kanban-push-status`,
44015
+ // `augmented-support-auto-provision`, `email-guard-enforce-enabled`).
44016
+ // (CodeRabbit, PR #5519: the first cut documented the risk in the comment below and
44017
+ // then omitted the marker that acts on it.)
44018
+ sensitive: true,
44019
+ // THIS GATES A DATA CROSSING, NOT A COST. Read that before arming it.
44020
+ //
44021
+ // Everything skill dreaming does today stays inside the control plane: it reads
44022
+ // `agent_memories` and writes a `skill_definitions` row in the same Postgres, same
44023
+ // org, same RLS. This flag is what sends LLM-written rationale, confidence, and the
44024
+ // verbatim NAMES of the memories that motivated a proposal OUT to Linear — and
44025
+ // `feature-request-intake.ts` already calls Linear "the third-party tracker" where it
44026
+ // refuses to export a requester's contact details there. Via
44027
+ // linkFeatureRequestCustomerNeed it also sends the org's verified email domains.
44028
+ //
44029
+ // That is strictly more than ADR-0052 §6 gated for PostHog, and ENG-8247 is the
44030
+ // precedent for why a credential must not BE the gate: holding a support-intake key
44031
+ // is not the same as being cleared to send customer-derived text to a vendor's
44032
+ // tracker. Hence a separate flag rather than leaning on isFeatureIntakeConfigured.
44033
+ //
44034
+ // Declared safe value is `false` (nothing filed). Fail-safe direction: a flag-DB read
44035
+ // error must never start exporting on its own. No envVar — net-new control with no
44036
+ // pre-flags env gate to migrate (ADR-0022).
44037
+ defaultValue: false
44038
+ },
43986
44039
  {
43987
44040
  key: "skill-draft-review-notify",
43988
44041
  description: "Pending skill-draft review nudge (ENG-6505): when a skill lands as a status=draft awaiting operator review, send a low-severity informational notification to the right reviewer(s) by scope \u2014 agent-scoped \u2192 the agent's manager (reports_to_person), falling back to team owners/admins; team-scoped \u2192 team owners/admins; org-scoped \u2192 org owners/admins \u2014 with a deep link to the Pending Skills card. Distinct from (and never doubles up on) the HIGH+ SkillSpector security alert. Covers both the agent-authored (ENG-4589) and skill-dreaming (ENG-6500) draft paths. Boolean gate; ships dark \u2014 when off no nudge is sent, so the steady state until an org is armed is silence.",
@@ -44331,6 +44384,26 @@ var FLAG_REGISTRY = [
44331
44384
  // env var is retired.
44332
44385
  envVar: "AUGMENTED_CONNECTIVITY_ESCALATION_ENABLED"
44333
44386
  },
44387
+ {
44388
+ key: "slack-manifest-remediate",
44389
+ description: "Let the Slack manifest drift monitor PUSH, not just alert (ENG-9963). updateSlackManifest had exactly one caller \u2014 a console button \u2014 so nothing but a human click ever pushed a manifest; ENG-7762 changed the generator with no rollout mechanism and 26 agents went 53 days with no working per-agent slash commands. When on, the daily drift cron pushes the generated manifest for a drifted agent. When off it alerts exactly as before. NOTE what arming this authorises: a push REPLACES a customer-owned Slack app's entire manifest, so the cron only ever pushes drift whose diffs are purely additive (isSafelyRemediable) \u2014 an app with live-only entries a push would destroy is declined and left for a human. Boolean gate; ships dark.",
44390
+ flagType: "boolean",
44391
+ // Declared safe value is `false` (alert-only), matching the cron's compiled
44392
+ // default. The fail-safe direction is the opposite of a paging gate's and
44393
+ // matters more: a flag-DB read error must never authorise a WRITE to a
44394
+ // customer's Slack app.
44395
+ defaultValue: false,
44396
+ // Operator override, same precedence and vocabulary as the connectivity
44397
+ // escalation gate above, so an operator who knows one knows both.
44398
+ envVar: "AUGMENTED_SLACK_MANIFEST_REMEDIATE_ENABLED",
44399
+ // ADR-0022 §4. NOTE this is where it diverges from the connectivity gate it
44400
+ // otherwise mirrors, and the divergence is the point: arming THAT one only
44401
+ // causes alerts to open, while arming THIS one authorises a cron to REPLACE
44402
+ // manifests on customer-owned Slack apps. That is precisely the class the
44403
+ // sensitive marker exists for — a control whose relaxation should not be one
44404
+ // unguarded write away.
44405
+ sensitive: true
44406
+ },
44334
44407
  {
44335
44408
  key: "integration-reauth-reminders",
44336
44409
  description: "Re-notify an integration that stays in needs_reauth (ENG-8370). Failure notification is at-most-once PER TRANSITION, so an integration nobody repairs is announced once and then silent forever - prod carried a row failing every 30-minute tick for ~21 days on a single day-one notification. When on, the IntegrationReauthReminder cron re-fires the existing reconnect notification on a backoff measured from failure ONSET (+1d, +3d, +7d, then weekly), skipping rows an operator has muted. When off the cron still scans and logs what it WOULD have sent, so the volume can be sized before anyone is messaged. Boolean gate; ships dark.",
@@ -45936,6 +46009,37 @@ server.tool(
45936
46009
  }
45937
46010
  }
45938
46011
  );
46012
+ server.tool(
46013
+ "kanban_respond",
46014
+ 'Answer a card ANOTHER agent parked on you, and un-park it so they can resume. Use this for any card in the "You are blocking these" section of kanban_list: that agent has STOPPED until you act, and this is the only way your answer reaches the card they are blocked on. Do the thing they asked, then send the answer here. Do NOT create a second card to carry it - they would end up with the parked card AND a separate one holding the thing that unblocks it, joined by nothing. You can only respond to a card that names YOU in its wait.',
46015
+ {
46016
+ card_id: external_exports.string().describe(
46017
+ 'The card id, exactly as kanban_list shows it under "You are blocking these".'
46018
+ ),
46019
+ text: external_exports.string().optional().describe(
46020
+ "Your answer, self-contained. This is what the blocked agent resumes on, so give it the ANSWER rather than a pointer to one - it cannot see your board, your session or your files. Required unless you are picking a choice with `value`."
46021
+ ),
46022
+ value: external_exports.string().optional().describe("Machine value of a choice, when the card offered options. Otherwise omit."),
46023
+ label: external_exports.string().optional().describe("Human label for that choice, when it differs from the value.")
46024
+ },
46025
+ async (params) => {
46026
+ let data;
46027
+ try {
46028
+ data = await apiPost("/host/kanban/respond", {
46029
+ agent_id: AGT_AGENT_ID,
46030
+ card_id: params.card_id,
46031
+ ...params.text ? { text: params.text } : {},
46032
+ ...params.value ? { value: params.value } : {},
46033
+ ...params.label ? { label: params.label } : {}
46034
+ });
46035
+ } catch (err) {
46036
+ return {
46037
+ content: [{ type: "text", text: `Could not send your answer: ${err.message}` }]
46038
+ };
46039
+ }
46040
+ return { content: [{ type: "text", text: describeKanbanRespondOutcome(data) }] };
46041
+ }
46042
+ );
45939
46043
  server.tool(
45940
46044
  "kanban_recall",
45941
46045
  'Pull a card you assigned to a HUMAN teammate back onto your own board. Use this when a card shows under "Assigned to a person" in kanban_list and you need to act on it - typically because the person finished the work (or it is no longer needed) and the card has to be closed. While a card is assigned to a person, every kanban write to it is refused; recall makes it yours again so kanban_move / kanban_done / kanban_log work. Recall does NOT complete the card - after recalling, close it yourself with kanban_done and a result. You can only recall a card you assigned.',
@@ -47816,6 +47920,11 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
47816
47920
  // ENG-8281: the inverse of assign_kanban_to_human — take a human-assigned
47817
47921
  // card back so the agent can finally close it.
47818
47922
  "kanban_recall",
47923
+ // ENG-9838: the UNBLOCKING direction of waiting_on_agent. Parking already
47924
+ // notified the target; the answer had no route back, so every agent-to-agent
47925
+ // park needed a second, unlinked card carrying the answer beside the card it
47926
+ // was meant to unblock.
47927
+ "kanban_respond",
47819
47928
  // ENG-9050: the return path for delegated work.
47820
47929
  "kanban_reopen",
47821
47930
  // ENG-9375: the READ path over a teammate's board (counts only).
@@ -42623,6 +42623,38 @@ var FLAG_REGISTRY = [
42623
42623
  // envVar — this is a net-new control with no pre-flags env gate to migrate.
42624
42624
  defaultValue: false
42625
42625
  },
42626
+ {
42627
+ key: "skill-dreaming-support-intake",
42628
+ description: "Route skill dreaming's GLOBAL-scope proposals into Integrity Labs' own support-intake Linear workspace (ENG-9926). 42% of dreaming output targets a global skill no product surface can change, so those drafts can only ever become an agent-scoped fork that never reaches the thing it improves \u2014 the improvement is therefore ALSO filed as a support-intake issue, deduped per target skill with one Linear customer need per requesting org. Boolean gate; ships dark \u2014 when off nothing is filed and the fork behaviour is exactly today's.",
42629
+ flagType: "boolean",
42630
+ // Arming this starts exporting customer-derived text to a third-party tracker, so it
42631
+ // takes the ADR-0022 §4 explicit-confirmation step rather than a single unguarded
42632
+ // write — matching every comparable export gate in this file
42633
+ // (`org-email-domain-derivation`, `kanban-push-status`,
42634
+ // `augmented-support-auto-provision`, `email-guard-enforce-enabled`).
42635
+ // (CodeRabbit, PR #5519: the first cut documented the risk in the comment below and
42636
+ // then omitted the marker that acts on it.)
42637
+ sensitive: true,
42638
+ // THIS GATES A DATA CROSSING, NOT A COST. Read that before arming it.
42639
+ //
42640
+ // Everything skill dreaming does today stays inside the control plane: it reads
42641
+ // `agent_memories` and writes a `skill_definitions` row in the same Postgres, same
42642
+ // org, same RLS. This flag is what sends LLM-written rationale, confidence, and the
42643
+ // verbatim NAMES of the memories that motivated a proposal OUT to Linear — and
42644
+ // `feature-request-intake.ts` already calls Linear "the third-party tracker" where it
42645
+ // refuses to export a requester's contact details there. Via
42646
+ // linkFeatureRequestCustomerNeed it also sends the org's verified email domains.
42647
+ //
42648
+ // That is strictly more than ADR-0052 §6 gated for PostHog, and ENG-8247 is the
42649
+ // precedent for why a credential must not BE the gate: holding a support-intake key
42650
+ // is not the same as being cleared to send customer-derived text to a vendor's
42651
+ // tracker. Hence a separate flag rather than leaning on isFeatureIntakeConfigured.
42652
+ //
42653
+ // Declared safe value is `false` (nothing filed). Fail-safe direction: a flag-DB read
42654
+ // error must never start exporting on its own. No envVar — net-new control with no
42655
+ // pre-flags env gate to migrate (ADR-0022).
42656
+ defaultValue: false
42657
+ },
42626
42658
  {
42627
42659
  key: "skill-draft-review-notify",
42628
42660
  description: "Pending skill-draft review nudge (ENG-6505): when a skill lands as a status=draft awaiting operator review, send a low-severity informational notification to the right reviewer(s) by scope \u2014 agent-scoped \u2192 the agent's manager (reports_to_person), falling back to team owners/admins; team-scoped \u2192 team owners/admins; org-scoped \u2192 org owners/admins \u2014 with a deep link to the Pending Skills card. Distinct from (and never doubles up on) the HIGH+ SkillSpector security alert. Covers both the agent-authored (ENG-4589) and skill-dreaming (ENG-6500) draft paths. Boolean gate; ships dark \u2014 when off no nudge is sent, so the steady state until an org is armed is silence.",
@@ -42971,6 +43003,26 @@ var FLAG_REGISTRY = [
42971
43003
  // env var is retired.
42972
43004
  envVar: "AUGMENTED_CONNECTIVITY_ESCALATION_ENABLED"
42973
43005
  },
43006
+ {
43007
+ key: "slack-manifest-remediate",
43008
+ description: "Let the Slack manifest drift monitor PUSH, not just alert (ENG-9963). updateSlackManifest had exactly one caller \u2014 a console button \u2014 so nothing but a human click ever pushed a manifest; ENG-7762 changed the generator with no rollout mechanism and 26 agents went 53 days with no working per-agent slash commands. When on, the daily drift cron pushes the generated manifest for a drifted agent. When off it alerts exactly as before. NOTE what arming this authorises: a push REPLACES a customer-owned Slack app's entire manifest, so the cron only ever pushes drift whose diffs are purely additive (isSafelyRemediable) \u2014 an app with live-only entries a push would destroy is declined and left for a human. Boolean gate; ships dark.",
43009
+ flagType: "boolean",
43010
+ // Declared safe value is `false` (alert-only), matching the cron's compiled
43011
+ // default. The fail-safe direction is the opposite of a paging gate's and
43012
+ // matters more: a flag-DB read error must never authorise a WRITE to a
43013
+ // customer's Slack app.
43014
+ defaultValue: false,
43015
+ // Operator override, same precedence and vocabulary as the connectivity
43016
+ // escalation gate above, so an operator who knows one knows both.
43017
+ envVar: "AUGMENTED_SLACK_MANIFEST_REMEDIATE_ENABLED",
43018
+ // ADR-0022 §4. NOTE this is where it diverges from the connectivity gate it
43019
+ // otherwise mirrors, and the divergence is the point: arming THAT one only
43020
+ // causes alerts to open, while arming THIS one authorises a cron to REPLACE
43021
+ // manifests on customer-owned Slack apps. That is precisely the class the
43022
+ // sensitive marker exists for — a control whose relaxation should not be one
43023
+ // unguarded write away.
43024
+ sensitive: true
43025
+ },
42974
43026
  {
42975
43027
  key: "integration-reauth-reminders",
42976
43028
  description: "Re-notify an integration that stays in needs_reauth (ENG-8370). Failure notification is at-most-once PER TRANSITION, so an integration nobody repairs is announced once and then silent forever - prod carried a row failing every 30-minute tick for ~21 days on a single day-one notification. When on, the IntegrationReauthReminder cron re-fires the existing reconnect notification on a backoff measured from failure ONSET (+1d, +3d, +7d, then weekly), skipping rows an operator has muted. When off the cron still scans and logs what it WOULD have sent, so the volume can be sized before anyone is messaged. Boolean gate; ships dark.",
@@ -37146,6 +37146,38 @@ var FLAG_REGISTRY = [
37146
37146
  // envVar — this is a net-new control with no pre-flags env gate to migrate.
37147
37147
  defaultValue: false
37148
37148
  },
37149
+ {
37150
+ key: "skill-dreaming-support-intake",
37151
+ description: "Route skill dreaming's GLOBAL-scope proposals into Integrity Labs' own support-intake Linear workspace (ENG-9926). 42% of dreaming output targets a global skill no product surface can change, so those drafts can only ever become an agent-scoped fork that never reaches the thing it improves \u2014 the improvement is therefore ALSO filed as a support-intake issue, deduped per target skill with one Linear customer need per requesting org. Boolean gate; ships dark \u2014 when off nothing is filed and the fork behaviour is exactly today's.",
37152
+ flagType: "boolean",
37153
+ // Arming this starts exporting customer-derived text to a third-party tracker, so it
37154
+ // takes the ADR-0022 §4 explicit-confirmation step rather than a single unguarded
37155
+ // write — matching every comparable export gate in this file
37156
+ // (`org-email-domain-derivation`, `kanban-push-status`,
37157
+ // `augmented-support-auto-provision`, `email-guard-enforce-enabled`).
37158
+ // (CodeRabbit, PR #5519: the first cut documented the risk in the comment below and
37159
+ // then omitted the marker that acts on it.)
37160
+ sensitive: true,
37161
+ // THIS GATES A DATA CROSSING, NOT A COST. Read that before arming it.
37162
+ //
37163
+ // Everything skill dreaming does today stays inside the control plane: it reads
37164
+ // `agent_memories` and writes a `skill_definitions` row in the same Postgres, same
37165
+ // org, same RLS. This flag is what sends LLM-written rationale, confidence, and the
37166
+ // verbatim NAMES of the memories that motivated a proposal OUT to Linear — and
37167
+ // `feature-request-intake.ts` already calls Linear "the third-party tracker" where it
37168
+ // refuses to export a requester's contact details there. Via
37169
+ // linkFeatureRequestCustomerNeed it also sends the org's verified email domains.
37170
+ //
37171
+ // That is strictly more than ADR-0052 §6 gated for PostHog, and ENG-8247 is the
37172
+ // precedent for why a credential must not BE the gate: holding a support-intake key
37173
+ // is not the same as being cleared to send customer-derived text to a vendor's
37174
+ // tracker. Hence a separate flag rather than leaning on isFeatureIntakeConfigured.
37175
+ //
37176
+ // Declared safe value is `false` (nothing filed). Fail-safe direction: a flag-DB read
37177
+ // error must never start exporting on its own. No envVar — net-new control with no
37178
+ // pre-flags env gate to migrate (ADR-0022).
37179
+ defaultValue: false
37180
+ },
37149
37181
  {
37150
37182
  key: "skill-draft-review-notify",
37151
37183
  description: "Pending skill-draft review nudge (ENG-6505): when a skill lands as a status=draft awaiting operator review, send a low-severity informational notification to the right reviewer(s) by scope \u2014 agent-scoped \u2192 the agent's manager (reports_to_person), falling back to team owners/admins; team-scoped \u2192 team owners/admins; org-scoped \u2192 org owners/admins \u2014 with a deep link to the Pending Skills card. Distinct from (and never doubles up on) the HIGH+ SkillSpector security alert. Covers both the agent-authored (ENG-4589) and skill-dreaming (ENG-6500) draft paths. Boolean gate; ships dark \u2014 when off no nudge is sent, so the steady state until an org is armed is silence.",
@@ -37494,6 +37526,26 @@ var FLAG_REGISTRY = [
37494
37526
  // env var is retired.
37495
37527
  envVar: "AUGMENTED_CONNECTIVITY_ESCALATION_ENABLED"
37496
37528
  },
37529
+ {
37530
+ key: "slack-manifest-remediate",
37531
+ description: "Let the Slack manifest drift monitor PUSH, not just alert (ENG-9963). updateSlackManifest had exactly one caller \u2014 a console button \u2014 so nothing but a human click ever pushed a manifest; ENG-7762 changed the generator with no rollout mechanism and 26 agents went 53 days with no working per-agent slash commands. When on, the daily drift cron pushes the generated manifest for a drifted agent. When off it alerts exactly as before. NOTE what arming this authorises: a push REPLACES a customer-owned Slack app's entire manifest, so the cron only ever pushes drift whose diffs are purely additive (isSafelyRemediable) \u2014 an app with live-only entries a push would destroy is declined and left for a human. Boolean gate; ships dark.",
37532
+ flagType: "boolean",
37533
+ // Declared safe value is `false` (alert-only), matching the cron's compiled
37534
+ // default. The fail-safe direction is the opposite of a paging gate's and
37535
+ // matters more: a flag-DB read error must never authorise a WRITE to a
37536
+ // customer's Slack app.
37537
+ defaultValue: false,
37538
+ // Operator override, same precedence and vocabulary as the connectivity
37539
+ // escalation gate above, so an operator who knows one knows both.
37540
+ envVar: "AUGMENTED_SLACK_MANIFEST_REMEDIATE_ENABLED",
37541
+ // ADR-0022 §4. NOTE this is where it diverges from the connectivity gate it
37542
+ // otherwise mirrors, and the divergence is the point: arming THAT one only
37543
+ // causes alerts to open, while arming THIS one authorises a cron to REPLACE
37544
+ // manifests on customer-owned Slack apps. That is precisely the class the
37545
+ // sensitive marker exists for — a control whose relaxation should not be one
37546
+ // unguarded write away.
37547
+ sensitive: true
37548
+ },
37497
37549
  {
37498
37550
  key: "integration-reauth-reminders",
37499
37551
  description: "Re-notify an integration that stays in needs_reauth (ENG-8370). Failure notification is at-most-once PER TRANSITION, so an integration nobody repairs is announced once and then silent forever - prod carried a row failing every 30-minute tick for ~21 days on a single day-one notification. When on, the IntegrationReauthReminder cron re-fires the existing reconnect notification on a backoff measured from failure ONSET (+1d, +3d, +7d, then weekly), skipping rows an operator has muted. When off the cron still scans and logs what it WOULD have sent, so the volume can be sized before anyone is messaged. Boolean gate; ships dark.",
@@ -37304,6 +37304,38 @@ var FLAG_REGISTRY = [
37304
37304
  // envVar — this is a net-new control with no pre-flags env gate to migrate.
37305
37305
  defaultValue: false
37306
37306
  },
37307
+ {
37308
+ key: "skill-dreaming-support-intake",
37309
+ description: "Route skill dreaming's GLOBAL-scope proposals into Integrity Labs' own support-intake Linear workspace (ENG-9926). 42% of dreaming output targets a global skill no product surface can change, so those drafts can only ever become an agent-scoped fork that never reaches the thing it improves \u2014 the improvement is therefore ALSO filed as a support-intake issue, deduped per target skill with one Linear customer need per requesting org. Boolean gate; ships dark \u2014 when off nothing is filed and the fork behaviour is exactly today's.",
37310
+ flagType: "boolean",
37311
+ // Arming this starts exporting customer-derived text to a third-party tracker, so it
37312
+ // takes the ADR-0022 §4 explicit-confirmation step rather than a single unguarded
37313
+ // write — matching every comparable export gate in this file
37314
+ // (`org-email-domain-derivation`, `kanban-push-status`,
37315
+ // `augmented-support-auto-provision`, `email-guard-enforce-enabled`).
37316
+ // (CodeRabbit, PR #5519: the first cut documented the risk in the comment below and
37317
+ // then omitted the marker that acts on it.)
37318
+ sensitive: true,
37319
+ // THIS GATES A DATA CROSSING, NOT A COST. Read that before arming it.
37320
+ //
37321
+ // Everything skill dreaming does today stays inside the control plane: it reads
37322
+ // `agent_memories` and writes a `skill_definitions` row in the same Postgres, same
37323
+ // org, same RLS. This flag is what sends LLM-written rationale, confidence, and the
37324
+ // verbatim NAMES of the memories that motivated a proposal OUT to Linear — and
37325
+ // `feature-request-intake.ts` already calls Linear "the third-party tracker" where it
37326
+ // refuses to export a requester's contact details there. Via
37327
+ // linkFeatureRequestCustomerNeed it also sends the org's verified email domains.
37328
+ //
37329
+ // That is strictly more than ADR-0052 §6 gated for PostHog, and ENG-8247 is the
37330
+ // precedent for why a credential must not BE the gate: holding a support-intake key
37331
+ // is not the same as being cleared to send customer-derived text to a vendor's
37332
+ // tracker. Hence a separate flag rather than leaning on isFeatureIntakeConfigured.
37333
+ //
37334
+ // Declared safe value is `false` (nothing filed). Fail-safe direction: a flag-DB read
37335
+ // error must never start exporting on its own. No envVar — net-new control with no
37336
+ // pre-flags env gate to migrate (ADR-0022).
37337
+ defaultValue: false
37338
+ },
37307
37339
  {
37308
37340
  key: "skill-draft-review-notify",
37309
37341
  description: "Pending skill-draft review nudge (ENG-6505): when a skill lands as a status=draft awaiting operator review, send a low-severity informational notification to the right reviewer(s) by scope \u2014 agent-scoped \u2192 the agent's manager (reports_to_person), falling back to team owners/admins; team-scoped \u2192 team owners/admins; org-scoped \u2192 org owners/admins \u2014 with a deep link to the Pending Skills card. Distinct from (and never doubles up on) the HIGH+ SkillSpector security alert. Covers both the agent-authored (ENG-4589) and skill-dreaming (ENG-6500) draft paths. Boolean gate; ships dark \u2014 when off no nudge is sent, so the steady state until an org is armed is silence.",
@@ -37652,6 +37684,26 @@ var FLAG_REGISTRY = [
37652
37684
  // env var is retired.
37653
37685
  envVar: "AUGMENTED_CONNECTIVITY_ESCALATION_ENABLED"
37654
37686
  },
37687
+ {
37688
+ key: "slack-manifest-remediate",
37689
+ description: "Let the Slack manifest drift monitor PUSH, not just alert (ENG-9963). updateSlackManifest had exactly one caller \u2014 a console button \u2014 so nothing but a human click ever pushed a manifest; ENG-7762 changed the generator with no rollout mechanism and 26 agents went 53 days with no working per-agent slash commands. When on, the daily drift cron pushes the generated manifest for a drifted agent. When off it alerts exactly as before. NOTE what arming this authorises: a push REPLACES a customer-owned Slack app's entire manifest, so the cron only ever pushes drift whose diffs are purely additive (isSafelyRemediable) \u2014 an app with live-only entries a push would destroy is declined and left for a human. Boolean gate; ships dark.",
37690
+ flagType: "boolean",
37691
+ // Declared safe value is `false` (alert-only), matching the cron's compiled
37692
+ // default. The fail-safe direction is the opposite of a paging gate's and
37693
+ // matters more: a flag-DB read error must never authorise a WRITE to a
37694
+ // customer's Slack app.
37695
+ defaultValue: false,
37696
+ // Operator override, same precedence and vocabulary as the connectivity
37697
+ // escalation gate above, so an operator who knows one knows both.
37698
+ envVar: "AUGMENTED_SLACK_MANIFEST_REMEDIATE_ENABLED",
37699
+ // ADR-0022 §4. NOTE this is where it diverges from the connectivity gate it
37700
+ // otherwise mirrors, and the divergence is the point: arming THAT one only
37701
+ // causes alerts to open, while arming THIS one authorises a cron to REPLACE
37702
+ // manifests on customer-owned Slack apps. That is precisely the class the
37703
+ // sensitive marker exists for — a control whose relaxation should not be one
37704
+ // unguarded write away.
37705
+ sensitive: true
37706
+ },
37655
37707
  {
37656
37708
  key: "integration-reauth-reminders",
37657
37709
  description: "Re-notify an integration that stays in needs_reauth (ENG-8370). Failure notification is at-most-once PER TRANSITION, so an integration nobody repairs is announced once and then silent forever - prod carried a row failing every 30-minute tick for ~21 days on a single day-one notification. When on, the IntegrationReauthReminder cron re-fires the existing reconnect notification on a backoff measured from failure ONSET (+1d, +3d, +7d, then weekly), skipping rows an operator has muted. When off the cron still scans and logs what it WOULD have sent, so the volume can be sized before anyone is messaged. Boolean gate; ships dark.",
@@ -49,8 +49,8 @@ import {
49
49
  writeDirectChatSessionState,
50
50
  writeEgressAllowlist,
51
51
  writePersistentClaudeWrapper
52
- } from "./chunk-DHOVIXR5.js";
53
- import "./chunk-2FL6V4E5.js";
52
+ } from "./chunk-GIV6ORI3.js";
53
+ import "./chunk-VK35F6O7.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-PV4GPHG3.js.map
107
+ //# sourceMappingURL=persistent-session-LEICQMWY.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-DHOVIXR5.js";
4
- import "./chunk-2FL6V4E5.js";
3
+ } from "./chunk-GIV6ORI3.js";
4
+ import "./chunk-VK35F6O7.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-X3AW5TGA.js.map
748
+ //# sourceMappingURL=responsiveness-probe-WEXP254C.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-2FL6V4E5.js";
3
+ } from "./chunk-VK35F6O7.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-W6K5VEU7.js.map
206
+ //# sourceMappingURL=session-auth-dead-AROKHZET.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.805",
3
+ "version": "0.28.807",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {