{"version":3,"file":"majorModeText-y7YRPKIB.mjs","names":[],"sources":["../src/services/majorModeText/index.ts"],"sourcesContent":["import type { MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport type { TransitionExecutionStrategy } from '@agimon-ai/doompi-core/transition';\nimport type { SelectItem } from '@earendil-works/pi-tui';\n\nconst OPTION_PREFIX = /^\\[[ x]\\] /;\nconst CORE_ONLY = 'core only';\nconst MARK_ON = '[x]';\nconst MARK_OFF = '[ ]';\nconst RELAUNCH = 'Relaunch with:';\nconst MAJOR_MODE_OPTION = '--major-mode';\nexport const MAJOR_MODE_COMMAND = 'mode';\nexport const VOICE_SWITCH_TOKEN_PREFIX = '--voice-switch-token=';\n\n/** Picker rows show the resolved layers while retaining bare major mode values. */\nexport function majorModeItems(config: MajorModesConfig, names: string[]): SelectItem[] {\n  return names.map((name) => ({\n    value: name,\n    label: name,\n    description: config.majorMode[name]?.description ?? CORE_ONLY,\n  }));\n}\n\nexport function majorModeOptionLabel(name: string, layers: string[], current: string): string {\n  return `${name === current ? MARK_ON : MARK_OFF} ${name}: ${layers.join(', ') || CORE_ONLY}`;\n}\n\nexport function optionName(option: string): string {\n  return option.replace(OPTION_PREFIX, '').split(':')[0] ?? option;\n}\n\n/**\n * What a switch actually applied.\n *\n * A synced session composes its extension set on every load, so a reload picks\n * up the new layers outright. A launcher session cannot: Pi freezes the CLI\n * `--extension` list at construction, so a layer that contributes extensions\n * needs a relaunch there and only the hooks change in place.\n */\nexport function applySummary(\n  picked: string,\n  layers: string[],\n  stale: boolean,\n  composed = false,\n  strategy?: TransitionExecutionStrategy,\n  supervised = false,\n): string {\n  const head = `Switched to ${picked}: ${layers.join(', ') || CORE_ONLY}`;\n  if (strategy === 'process-relaunch') {\n    if (supervised) {\n      return `Major mode ${picked} is pending; the supervisor is restarting the agent with it.`;\n    }\n    return [\n      `Major mode ${picked} is pending; the current process remains active.`,\n      `  ./pi.sh ${MAJOR_MODE_OPTION} ${picked}`,\n    ].join('\\n');\n  }\n  if (strategy === 'pi-reload') return [head, 'Pi reloaded.'].join('\\n');\n  if (!stale || composed) return [head, 'Hooks reloaded.'].join('\\n');\n  return [\n    head,\n    'Hooks reloaded. Extensions are fixed at launch, so for those:',\n    `  ./pi.sh ${MAJOR_MODE_OPTION} ${picked}`,\n  ].join('\\n');\n}\n\nexport function majorModeSummary(picked: string, layers: string[], current: string, composed = false): string {\n  const contents = `Major mode ${picked}: ${layers.join(', ') || CORE_ONLY}`;\n  if (picked !== current && !composed) {\n    return [contents, `${RELAUNCH}\\n  ./pi.sh ${MAJOR_MODE_OPTION} ${picked}`].join('\\n');\n  }\n  if (picked !== current) return contents;\n  return [contents, 'Already using this major mode.'].join('\\n');\n}\n\n/** The opaque token a voice switch hands to the follow-up command invocation. */\nexport function voiceSwitchToken(args: string): string | undefined {\n  const trimmed = args.trim();\n  if (!trimmed.startsWith(VOICE_SWITCH_TOKEN_PREFIX)) return undefined;\n  const parts = trimmed.split(/\\s+/u);\n  if (parts.length !== 1) throw new Error('The voice major-mode switch token must be the only command argument.');\n  const token = parts[0]?.slice(VOICE_SWITCH_TOKEN_PREFIX.length).trim();\n  if (!token) throw new Error('The voice major-mode switch token is missing.');\n  return token;\n}\n\nexport function errorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":";AAIA,MAAM,gBAAgB;AACtB,MAAM,YAAY;AAClB,MAAM,UAAU;AAChB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,oBAAoB;AAC1B,MAAa,qBAAqB;AAClC,MAAa,4BAA4B;;AAGzC,SAAgB,eAAe,QAA0B,OAA+B;CACtF,OAAO,MAAM,KAAK,UAAU;EAC1B,OAAO;EACP,OAAO;EACP,aAAa,OAAO,UAAU,KAAK,EAAE,eAAe;CACtD,EAAE;AACJ;AAEA,SAAgB,qBAAqB,MAAc,QAAkB,SAAyB;CAC5F,OAAO,GAAG,SAAS,UAAU,UAAU,SAAS,GAAG,KAAK,IAAI,OAAO,KAAK,IAAI,KAAK;AACnF;AAEA,SAAgB,WAAW,QAAwB;CACjD,OAAO,OAAO,QAAQ,eAAe,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC5D;;;;;;;;;AAUA,SAAgB,aACd,QACA,QACA,OACA,WAAW,OACX,UACA,aAAa,OACL;CACR,MAAM,OAAO,eAAe,OAAO,IAAI,OAAO,KAAK,IAAI,KAAK;CAC5D,IAAI,aAAa,oBAAoB;EACnC,IAAI,YACF,OAAO,cAAc,OAAO;EAE9B,OAAO,CACL,cAAc,OAAO,mDACrB,aAAa,kBAAkB,GAAG,QACpC,CAAC,CAAC,KAAK,IAAI;CACb;CACA,IAAI,aAAa,aAAa,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC,KAAK,IAAI;CACrE,IAAI,CAAC,SAAS,UAAU,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC,KAAK,IAAI;CAClE,OAAO;EACL;EACA;EACA,aAAa,kBAAkB,GAAG;CACpC,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAgB,iBAAiB,QAAgB,QAAkB,SAAiB,WAAW,OAAe;CAC5G,MAAM,WAAW,cAAc,OAAO,IAAI,OAAO,KAAK,IAAI,KAAK;CAC/D,IAAI,WAAW,WAAW,CAAC,UACzB,OAAO,CAAC,UAAU,GAAG,SAAS,cAAc,kBAAkB,GAAG,QAAQ,CAAC,CAAC,KAAK,IAAI;CAEtF,IAAI,WAAW,SAAS,OAAO;CAC/B,OAAO,CAAC,UAAU,gCAAgC,CAAC,CAAC,KAAK,IAAI;AAC/D;;AAGA,SAAgB,iBAAiB,MAAkC;CACjE,MAAM,UAAU,KAAK,KAAK;CAC1B,IAAI,CAAC,QAAQ,WAAA,uBAAoC,GAAG,OAAO,KAAA;CAC3D,MAAM,QAAQ,QAAQ,MAAM,MAAM;CAClC,IAAI,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,sEAAsE;CAC9G,MAAM,QAAQ,MAAM,EAAE,EAAE,MAAM,EAAgC,CAAC,CAAC,KAAK;CACrE,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,+CAA+C;CAC3E,OAAO;AACT;AAEA,SAAgB,aAAa,OAAwB;CACnD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D"}