{"version":3,"file":"leader.mjs","names":[],"sources":["../../../src/tui/leader.ts"],"sourcesContent":["import type { LeaderBinding } from '@agimon-ai/doompi-core/leader';\nimport type { DoomUiHubService } from '@agimon-ai/doompi-core/ui-hub';\n\nimport {\n  LEADER_CATALOG_ACTION,\n  LEADER_DETAIL,\n  LEADER_DISABLE_ACTION,\n  LEADER_ENABLE_ACTION,\n  LEADER_KEY,\n  LEADER_LABEL,\n  LEADER_MANAGE_ACTION,\n  LEADER_ORDER,\n  LEADER_RECOVER_ACTION,\n  PACKAGE_SOURCE,\n} from '../constants/workflow';\n\nconst LEADER_BINDING_PREFIX = 'doom-workflow';\nconst GROUP_SEGMENT = {\n  key: LEADER_KEY,\n  label: LEADER_LABEL,\n  detail: LEADER_DETAIL,\n  order: LEADER_ORDER,\n} as const;\n\nexport interface WorkflowLeaderHandle {\n  /** Republish the menu for the mode's current state. */\n  setMode(enabled: boolean): void;\n  dispose(): void;\n}\n\n/**\n * The menu as it stands with the mode on or off.\n *\n * One entry on `e` rather than an enable row beside a disable row: only one of\n * the two ever does anything, and a menu that prints both makes the reader\n * check the mode line to find out which. The label says which way it flips.\n */\nexport function workflowLeaderBindings(mode: boolean): LeaderBinding[] {\n  return [\n    {\n      id: `${LEADER_BINDING_PREFIX}.catalog`,\n      // Launching lives on this board's own `r` key rather than a second menu\n      // entry: picking which workflow to run is the same act as reading what\n      // one does.\n      path: [GROUP_SEGMENT, { key: 'l', label: 'list', detail: 'browse and launch workflows' }],\n      action: { name: LEADER_CATALOG_ACTION },\n    },\n    {\n      id: `${LEADER_BINDING_PREFIX}.manage`,\n      path: [GROUP_SEGMENT, { key: 'r', label: 'runs', detail: 'runs in this session' }],\n      action: { name: LEADER_MANAGE_ACTION },\n    },\n    mode\n      ? {\n          id: `${LEADER_BINDING_PREFIX}.disable`,\n          path: [GROUP_SEGMENT, { key: 'e', label: 'exit', detail: 'take back workflow tools', tone: 'exit' }],\n          action: { name: LEADER_DISABLE_ACTION },\n        }\n      : {\n          id: `${LEADER_BINDING_PREFIX}.enable`,\n          path: [GROUP_SEGMENT, { key: 'e', label: 'enter', detail: 'give the agent workflow tools' }],\n          action: { name: LEADER_ENABLE_ACTION },\n        },\n    // `r` is runs everywhere, so recovery moves off it rather than reading as a\n    // third flavour of list in the one space that has both.\n    {\n      id: `${LEADER_BINDING_PREFIX}.recover`,\n      path: [GROUP_SEGMENT, { key: 'c', label: 'recover', detail: 'adopt a failed run' }],\n      action: { name: LEADER_RECOVER_ACTION },\n    },\n  ];\n}\n\nexport function registerLeaderContribution(hub: DoomUiHubService, enabled = false): WorkflowLeaderHandle {\n  const contribution = hub.registerLeader({\n    source: PACKAGE_SOURCE,\n    bindings: workflowLeaderBindings(enabled),\n  });\n  return {\n    setMode(enabled) {\n      contribution.update(workflowLeaderBindings(enabled));\n    },\n    dispose() {\n      contribution.dispose();\n    },\n  };\n}\n"],"mappings":";;AAgBA,MAAM,wBAAwB;AAC9B,MAAM,gBAAgB;CACpB,KAAA;CACA,OAAO;CACP,QAAQ;CACR,OAAA;AACF;;;;;;;;AAeA,SAAgB,uBAAuB,MAAgC;CACrE,OAAO;EACL;GACE,IAAI,GAAG,sBAAsB;GAI7B,MAAM,CAAC,eAAe;IAAE,KAAK;IAAK,OAAO;IAAQ,QAAQ;GAA8B,CAAC;GACxF,QAAQ,EAAE,MAAM,sBAAsB;EACxC;EACA;GACE,IAAI,GAAG,sBAAsB;GAC7B,MAAM,CAAC,eAAe;IAAE,KAAK;IAAK,OAAO;IAAQ,QAAQ;GAAuB,CAAC;GACjF,QAAQ,EAAE,MAAM,qBAAqB;EACvC;EACA,OACI;GACE,IAAI,GAAG,sBAAsB;GAC7B,MAAM,CAAC,eAAe;IAAE,KAAK;IAAK,OAAO;IAAQ,QAAQ;IAA4B,MAAM;GAAO,CAAC;GACnG,QAAQ,EAAE,MAAM,sBAAsB;EACxC,IACA;GACE,IAAI,GAAG,sBAAsB;GAC7B,MAAM,CAAC,eAAe;IAAE,KAAK;IAAK,OAAO;IAAS,QAAQ;GAAgC,CAAC;GAC3F,QAAQ,EAAE,MAAM,qBAAqB;EACvC;EAGJ;GACE,IAAI,GAAG,sBAAsB;GAC7B,MAAM,CAAC,eAAe;IAAE,KAAK;IAAK,OAAO;IAAW,QAAQ;GAAqB,CAAC;GAClF,QAAQ,EAAE,MAAM,sBAAsB;EACxC;CACF;AACF;AAEA,SAAgB,2BAA2B,KAAuB,UAAU,OAA6B;CACvG,MAAM,eAAe,IAAI,eAAe;EACtC,QAAQ;EACR,UAAU,uBAAuB,OAAO;CAC1C,CAAC;CACD,OAAO;EACL,QAAQ,SAAS;GACf,aAAa,OAAO,uBAAuB,OAAO,CAAC;EACrD;EACA,UAAU;GACR,aAAa,QAAQ;EACvB;CACF;AACF"}