wepscli 0.1.0

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 (130) hide show
  1. package/README.md +293 -0
  2. package/dist/WEPSCLI-shell/agent-runtime.js +824 -0
  3. package/dist/WEPSCLI-shell/agent-runtime.js.map +1 -0
  4. package/dist/WEPSCLI-shell/approval-overlay.js +275 -0
  5. package/dist/WEPSCLI-shell/approval-overlay.js.map +1 -0
  6. package/dist/WEPSCLI-shell/chat-components.js +760 -0
  7. package/dist/WEPSCLI-shell/chat-components.js.map +1 -0
  8. package/dist/WEPSCLI-shell/components.js +850 -0
  9. package/dist/WEPSCLI-shell/components.js.map +1 -0
  10. package/dist/WEPSCLI-shell/config-overlays.js +205 -0
  11. package/dist/WEPSCLI-shell/config-overlays.js.map +1 -0
  12. package/dist/WEPSCLI-shell/debug-log.js +16 -0
  13. package/dist/WEPSCLI-shell/debug-log.js.map +1 -0
  14. package/dist/WEPSCLI-shell/file-change-preview.js +261 -0
  15. package/dist/WEPSCLI-shell/file-change-preview.js.map +1 -0
  16. package/dist/WEPSCLI-shell/helpers.js +112 -0
  17. package/dist/WEPSCLI-shell/helpers.js.map +1 -0
  18. package/dist/WEPSCLI-shell/index.js +3 -0
  19. package/dist/WEPSCLI-shell/index.js.map +1 -0
  20. package/dist/WEPSCLI-shell/provider-add-flow.js +406 -0
  21. package/dist/WEPSCLI-shell/provider-add-flow.js.map +1 -0
  22. package/dist/WEPSCLI-shell/run-wepscli-shell.js +21 -0
  23. package/dist/WEPSCLI-shell/run-wepscli-shell.js.map +1 -0
  24. package/dist/WEPSCLI-shell/runtime-recovery.js +37 -0
  25. package/dist/WEPSCLI-shell/runtime-recovery.js.map +1 -0
  26. package/dist/WEPSCLI-shell/runtime-status.js +66 -0
  27. package/dist/WEPSCLI-shell/runtime-status.js.map +1 -0
  28. package/dist/WEPSCLI-shell/shell-app.js +1047 -0
  29. package/dist/WEPSCLI-shell/shell-app.js.map +1 -0
  30. package/dist/WEPSCLI-shell/shell-modes.js +77 -0
  31. package/dist/WEPSCLI-shell/shell-modes.js.map +1 -0
  32. package/dist/WEPSCLI-shell/slash-commands.js +135 -0
  33. package/dist/WEPSCLI-shell/slash-commands.js.map +1 -0
  34. package/dist/WEPSCLI-shell/theme.js +19 -0
  35. package/dist/WEPSCLI-shell/theme.js.map +1 -0
  36. package/dist/WEPSCLI-shell/tool-approval.js +85 -0
  37. package/dist/WEPSCLI-shell/tool-approval.js.map +1 -0
  38. package/dist/WEPSCLI-shell/tool-diff.js +76 -0
  39. package/dist/WEPSCLI-shell/tool-diff.js.map +1 -0
  40. package/dist/WEPSCLI-shell/tool-file-changes.js +268 -0
  41. package/dist/WEPSCLI-shell/tool-file-changes.js.map +1 -0
  42. package/dist/WEPSCLI-shell/tool-message-detail.js +138 -0
  43. package/dist/WEPSCLI-shell/tool-message-detail.js.map +1 -0
  44. package/dist/WEPSCLI-shell/tool-messages.js +145 -0
  45. package/dist/WEPSCLI-shell/tool-messages.js.map +1 -0
  46. package/dist/WEPSCLI-shell/transcript-panel.js +372 -0
  47. package/dist/WEPSCLI-shell/transcript-panel.js.map +1 -0
  48. package/dist/WEPSCLI-shell/transcript-state.js +62 -0
  49. package/dist/WEPSCLI-shell/transcript-state.js.map +1 -0
  50. package/dist/WEPSCLI-shell/types.js +1 -0
  51. package/dist/WEPSCLI-shell/types.js.map +1 -0
  52. package/dist/cli.js +11 -0
  53. package/dist/cli.js.map +1 -0
  54. package/dist/config.js +40 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/index.js +4 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/main.js +140 -0
  59. package/dist/main.js.map +1 -0
  60. package/dist/onboarding/action-screen.js +90 -0
  61. package/dist/onboarding/action-screen.js.map +1 -0
  62. package/dist/onboarding/framed-screen.js +35 -0
  63. package/dist/onboarding/framed-screen.js.map +1 -0
  64. package/dist/onboarding/onboarding-app.js +312 -0
  65. package/dist/onboarding/onboarding-app.js.map +1 -0
  66. package/dist/onboarding/run-onboarding.js +23 -0
  67. package/dist/onboarding/run-onboarding.js.map +1 -0
  68. package/dist/onboarding/select-screen.js +21 -0
  69. package/dist/onboarding/select-screen.js.map +1 -0
  70. package/dist/onboarding/summary-screen.js +23 -0
  71. package/dist/onboarding/summary-screen.js.map +1 -0
  72. package/dist/onboarding/text-input-screen.js +55 -0
  73. package/dist/onboarding/text-input-screen.js.map +1 -0
  74. package/dist/onboarding/theme.js +26 -0
  75. package/dist/onboarding/theme.js.map +1 -0
  76. package/dist/provider-profiles/api-key-store.js +51 -0
  77. package/dist/provider-profiles/api-key-store.js.map +1 -0
  78. package/dist/provider-profiles/defaults.js +18 -0
  79. package/dist/provider-profiles/defaults.js.map +1 -0
  80. package/dist/provider-profiles/fetch-models.js +53 -0
  81. package/dist/provider-profiles/fetch-models.js.map +1 -0
  82. package/dist/provider-profiles/index.js +6 -0
  83. package/dist/provider-profiles/index.js.map +1 -0
  84. package/dist/provider-profiles/provider-profile-service.js +223 -0
  85. package/dist/provider-profiles/provider-profile-service.js.map +1 -0
  86. package/dist/provider-profiles/providers-config-store.js +17 -0
  87. package/dist/provider-profiles/providers-config-store.js.map +1 -0
  88. package/dist/provider-profiles/types.js +1 -0
  89. package/dist/provider-profiles/types.js.map +1 -0
  90. package/dist/session-history/session-history-service.js +142 -0
  91. package/dist/session-history/session-history-service.js.map +1 -0
  92. package/dist/shell/animator.js +30 -0
  93. package/dist/shell/animator.js.map +1 -0
  94. package/dist/shell/clickables.js +101 -0
  95. package/dist/shell/clickables.js.map +1 -0
  96. package/dist/shell/dashboard-shell.js +292 -0
  97. package/dist/shell/dashboard-shell.js.map +1 -0
  98. package/dist/shell/index.js +5 -0
  99. package/dist/shell/index.js.map +1 -0
  100. package/dist/shell/keymap.js +14 -0
  101. package/dist/shell/keymap.js.map +1 -0
  102. package/dist/shell/mouse.js +39 -0
  103. package/dist/shell/mouse.js.map +1 -0
  104. package/dist/shell/render.js +122 -0
  105. package/dist/shell/render.js.map +1 -0
  106. package/dist/shell/run-shell.js +36 -0
  107. package/dist/shell/run-shell.js.map +1 -0
  108. package/dist/shell/theme.js +56 -0
  109. package/dist/shell/theme.js.map +1 -0
  110. package/dist/storage/locked-json-file.js +88 -0
  111. package/dist/storage/locked-json-file.js.map +1 -0
  112. package/dist/workbench/animator.js +30 -0
  113. package/dist/workbench/animator.js.map +1 -0
  114. package/dist/workbench/index.js +6 -0
  115. package/dist/workbench/index.js.map +1 -0
  116. package/dist/workbench/mouse.js +39 -0
  117. package/dist/workbench/mouse.js.map +1 -0
  118. package/dist/workbench/render.js +82 -0
  119. package/dist/workbench/render.js.map +1 -0
  120. package/dist/workbench/renderer.js +364 -0
  121. package/dist/workbench/renderer.js.map +1 -0
  122. package/dist/workbench/run-workbench.js +36 -0
  123. package/dist/workbench/run-workbench.js.map +1 -0
  124. package/dist/workbench/theme.js +63 -0
  125. package/dist/workbench/theme.js.map +1 -0
  126. package/dist/workbench/types.js +1 -0
  127. package/dist/workbench/types.js.map +1 -0
  128. package/dist/workbench/workbench-shell.js +649 -0
  129. package/dist/workbench/workbench-shell.js.map +1 -0
  130. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useKeyboard","useRenderer","useTerminalDimensions","batch","createEffect","createMemo","createSignal","onMount","SessionHistoryService","getAgentDir","ApprovalOverlay","WepsAgentRuntime","writeShellDebugLog","executeSlashCommand","createIdleRuntimeState","runtimeStateTone","applyShellModePrompt","getShellMode","nextShellMode","shellModeSwitchMessage","wepscliShellTheme","theme","formatTimestamp","INITIAL_SESSIONS","overlayDescription","overlayTitle","truncate","wrapIndex","createProviderAddFlow","appendSessionMessage","insertSessionMessageBefore","patchSessionMessage","toggleSessionMessage","toggleSessionMessageState","TranscriptPanel","ChatComposer","OverlayPicker","LOGO","WEPSCLIShellApp","props","renderer","dimensions","sessionHistory","view","setView","focusRegion","setFocusRegionState","overlay","setOverlay","undefined","profiles","setProfiles","profileService","listProfiles","selection","setSelection","getActiveSelection","overlayIndex","setOverlayIndex","modelPickerProfileId","setModelPickerProfileId","profileId","sessions","setSessions","ensureSeed","composerValue","setComposerValue","shellMode","setShellMode","activeSessionId","setActiveSessionId","messagesBySession","setMessagesBySession","runtimeStateBySession","setRuntimeStateBySession","approvalRequests","setApprovalRequests","approvalDecisionIndex","setApprovalDecisionIndex","runtime","appendMessage","sessionId","message","appendTranscriptMessage","insertMessageBefore","beforeMessageId","insertTranscriptMessageBefore","replaceMessages","messages","replaceTranscriptMessages","patchMessage","messageId","patch","patchTranscriptMessage","openApproval","_sessionId","request","openApprovalRequest","closeApproval","requestId","closeApprovalRequest","updateRuntimeState","state","updateSessionBinding","binding","persistRuntimeSessionBinding","composerRef","transcriptScroll","closed","transcriptScrollTimer","providerAddFlow","onCreated","profile","modelId","reloadProviderState","currentSession","updateSession","id","providerProfileId","providerLabel","label","listSessions","syncSelection","pushChatMessage","createdTransientSessionId","Date","now","role","content","time","toLocaleTimeString","hour","minute","onClose","setFocusRegion","viewport","width","height","showSidebar","shellReady","length","activeShellMode","activeProfile","current","find","activeModel","models","currentId","list","item","currentMessages","session","currentRuntimeState","activeApproval","recentSessions","slice","sessionSummary","summary","overlayOptions","map","description","family","lastValidationStatus","badge","model","name","title","updatedAt","setTimeout","focus","setMode","syncActiveSelectionFromSession","ensureSessionTranscript","runtimeSessionFile","loadSession","selectionForSession","evt","ctrl","preventDefault","exitShell","abortActiveRequest","resolveActiveApproval","isActive","back","isPickerStep","moveSelection","confirmSelection","closeOverlay","target","activateAction","option","applyShellMode","includes","nextMode","cycleFocus","value","trim","clearTimeout","dispose","setTerminalTitle","destroy","onExit","requestRender","cancelTranscriptAutoScroll","scheduleTranscriptScrollToBottom","isDestroyed","scrollTo","scrollHeight","aborted","abort","kind","compactCurrentSession","compact","toolName","filter","decision","resolveApproval","region","blur","order","index","indexOf","setShellView","next","openOverlay","activeProviderId","Math","max","findIndex","openProviderAdd","open","initial","toggleTranscriptMessage","existing","setActiveSelection","activateSession","markActive","startNewSession","provider","created","createSession","JSON","stringify","handleComposerSubmit","trimmed","startsWith","runSlashCommand","lastPrompt","setText","prompt","commandId","modeId","getCurrentMode","getStatusSummary","runtimeState","join","queuePromptTemplate","pushTimeline","actionId","nextModel","payload","separator","topStatus","sidebarSummary","baseUrl","runtimeStatusColor","accent","warning","danger","success","muted","_el$","_$createElement","_el$2","_el$3","_el$4","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","_$insertNode","_$setProp","_$createTextNode","_$insert","_c$","_$memo","interruptible","_el$10","_el$11","_$effect","_p$","_v$7","_v$8","background","e","t","_$createComponent","activeModelLabel","scrollRef","ref","onToggleMessage","focused","modelLabel","modeLabel","composerLabel","modeTone","tone","inputRef","onAction","onFocus","onInput","onModeClick","onSubmit","onSelectSlashCommand","_c$2","options","selectedIndex","onSelect","_c$3","onSelectIndex","onResolve","render","_v$","_v$2","header","_v$3","accentStrong","_v$4","text","_v$5","_v$6","a","o","i","n"],"sources":["shell-app.tsx"],"sourcesContent":["import { useKeyboard, useRenderer, useTerminalDimensions } from \"@opentui/solid\";\r\nimport { batch, createEffect, createMemo, createSignal, onMount } from \"solid-js\";\r\nimport type { ProviderProfile, ProviderProfileService } from \"../provider-profiles/index.js\";\r\nimport { SessionHistoryService } from \"../session-history/session-history-service.js\";\r\nimport { getAgentDir } from \"../config.js\";\r\nimport { ApprovalOverlay } from \"./approval-overlay.js\";\nimport { WepsAgentRuntime, type RuntimeSelection } from \"./agent-runtime.js\";\nimport { writeShellDebugLog } from \"./debug-log.js\";\nimport { executeSlashCommand, getSlashCommands } from \"./slash-commands.js\";\nimport { createIdleRuntimeState, runtimeStateTone, type RuntimeSessionState } from \"./runtime-status.js\";\nimport { applyShellModePrompt, getShellMode, nextShellMode, shellModeSwitchMessage, type ShellModeId } from \"./shell-modes.js\";\nimport { providerFamilyColor, wepscliShellTheme as theme } from \"./theme.js\";\nimport type { ToolApprovalDecision, ToolApprovalRequest } from \"./tool-approval.js\";\nimport type { OverlayKind, OverlayOption, ShellFocus, ShellView } from \"./types.js\";\nimport { formatTimestamp, INITIAL_SESSIONS, overlayDescription, overlayTitle, truncate, wrapIndex } from \"./helpers.js\";\r\nimport { createProviderAddFlow } from \"./provider-add-flow.js\";\r\nimport {\r\n\tappendSessionMessage,\r\n\tinsertSessionMessageBefore,\r\n\tpatchSessionMessage,\r\n\ttoggleSessionMessage as toggleSessionMessageState,\r\n\ttype TranscriptMessagePatch,\r\n} from \"./transcript-state.js\";\r\nimport { TranscriptPanel } from \"./transcript-panel.js\";\r\nimport {\r\n\tChatComposer,\r\n\tOverlayPicker,\r\n\ttype ChatMessage,\r\n\ttype ComposerInputRef,\r\n} from \"./chat-components.js\";\r\n\r\nconst LOGO = \"WEPsCLI\";\r\n\r\nexport function WEPSCLIShellApp(props: { profileService: ProviderProfileService; onExit: () => void }) {\r\n\tconst renderer = useRenderer();\r\n\tconst dimensions = useTerminalDimensions();\r\n\tconst sessionHistory = new SessionHistoryService();\r\n\r\n\tconst [view, setView] = createSignal<ShellView>(\"home\");\r\n\tconst [focusRegion, setFocusRegionState] = createSignal<ShellFocus>(\"composer\");\r\n\tconst [overlay, setOverlay] = createSignal<OverlayKind | undefined>(undefined);\r\n\tconst [profiles, setProfiles] = createSignal<ProviderProfile[]>(props.profileService.listProfiles());\r\n\tconst [selection, setSelection] = createSignal(props.profileService.getActiveSelection());\r\n\tconst [overlayIndex, setOverlayIndex] = createSignal(0);\r\n\tconst [modelPickerProfileId, setModelPickerProfileId] = createSignal<string | undefined>(selection().profileId);\n\tconst [sessions, setSessions] = createSignal(sessionHistory.ensureSeed(INITIAL_SESSIONS));\n\tconst [composerValue, setComposerValue] = createSignal(\"\");\n\tconst [shellMode, setShellMode] = createSignal<ShellModeId>(\"agent\");\n\tconst [activeSessionId, setActiveSessionId] = createSignal<string | undefined>(undefined);\n\tconst [messagesBySession, setMessagesBySession] = createSignal<Record<string, ChatMessage[]>>({});\n\tconst [runtimeStateBySession, setRuntimeStateBySession] = createSignal<Record<string, RuntimeSessionState>>({});\r\n\tconst [approvalRequests, setApprovalRequests] = createSignal<ToolApprovalRequest[]>([]);\r\n\tconst [approvalDecisionIndex, setApprovalDecisionIndex] = createSignal(0);\r\n\tconst runtime = new WepsAgentRuntime(props.profileService, {\r\n\t\tappendMessage: (sessionId, message) => appendTranscriptMessage(sessionId, message),\r\n\t\tinsertMessageBefore: (sessionId, beforeMessageId, message) => insertTranscriptMessageBefore(sessionId, beforeMessageId, message),\r\n\t\treplaceMessages: (sessionId, messages) => replaceTranscriptMessages(sessionId, messages),\r\n\t\tpatchMessage: (sessionId, messageId, patch) => patchTranscriptMessage(sessionId, messageId, patch),\r\n\t\topenApproval: (_sessionId, request) => openApprovalRequest(request),\r\n\t\tcloseApproval: (_sessionId, requestId) => closeApprovalRequest(requestId),\r\n\t\tupdateRuntimeState: (sessionId, state) => updateRuntimeState(sessionId, state),\r\n\t\tupdateSessionBinding: (sessionId, binding) => persistRuntimeSessionBinding(sessionId, binding),\r\n\t});\r\n\r\n\tlet composerRef: ComposerInputRef | undefined;\r\n\tlet transcriptScroll:\r\n\t\t| {\r\n\t\t\t\tscrollTo(position: number): void;\r\n\t\t\t\tscrollHeight: number;\r\n\t\t\t\tisDestroyed?: boolean;\r\n\t\t }\r\n\t\t| undefined;\r\n\tlet closed = false;\r\n\tlet transcriptScrollTimer: ReturnType<typeof setTimeout> | undefined;\r\n\tconst providerAddFlow = createProviderAddFlow({\r\n\t\tprofileService: props.profileService,\r\n\t\tonCreated: ({ profile, modelId }) => {\r\n\t\t\treloadProviderState();\r\n\t\t\tif (currentSession()) {\r\n\t\t\t\tsessionHistory.updateSession(currentSession()!.id, {\r\n\t\t\t\t\tproviderProfileId: profile.id,\r\n\t\t\t\t\tproviderLabel: profile.label,\r\n\t\t\t\t\tmodelId,\r\n\t\t\t\t});\r\n\t\t\t\tsetSessions(sessionHistory.listSessions());\r\n\t\t\t\tvoid runtime.syncSelection(currentSession()!.id, { profileId: profile.id, modelId });\r\n\t\t\t}\r\n\t\t\tpushChatMessage(currentSession()?.id ?? createdTransientSessionId(), {\r\n\t\t\t\tid: `provider-add:${profile.id}:${Date.now()}`,\r\n\t\t\t\trole: \"system\",\r\n\t\t\t\tcontent: `Added provider ${profile.label} / ${modelId}`,\r\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t});\r\n\t\t},\r\n\t\tonClose: () => setFocusRegion(\"composer\"),\r\n\t});\r\n\r\n\tconst viewport = createMemo(() => ({\r\n\t\twidth: dimensions().width || 120,\r\n\t\theight: dimensions().height || 32,\r\n\t}));\r\n\tconst showSidebar = createMemo(() => false);\n\tconst shellReady = createMemo(() => profiles().length > 0);\n\tconst activeShellMode = createMemo(() => getShellMode(shellMode()));\n\r\n\tconst activeProfile = createMemo(() => {\r\n\t\tconst current = selection().profileId;\r\n\t\treturn current ? profiles().find((profile) => profile.id === current) : profiles()[0];\r\n\t});\r\n\r\n\tconst activeModel = createMemo(() => selection().modelId ?? activeProfile()?.models[0]?.id);\r\n\tconst currentSession = createMemo(() => {\r\n\t\tconst currentId = activeSessionId();\r\n\t\tconst list = sessions();\r\n\t\treturn currentId ? list.find((item) => item.id === currentId) : list.find((item) => item.state === \"active\") ?? list[0];\r\n\t});\r\n\tconst currentMessages = createMemo(() => {\r\n\t\tconst session = currentSession();\r\n\t\treturn session ? messagesBySession()[session.id] ?? [] : [];\r\n\t});\r\n\tconst currentRuntimeState = createMemo(() => {\r\n\t\tconst session = currentSession();\r\n\t\treturn session ? runtimeStateBySession()[session.id] ?? createIdleRuntimeState() : createIdleRuntimeState();\r\n\t});\r\n\tconst activeApproval = createMemo(() => approvalRequests()[0]);\r\n\tconst recentSessions = createMemo(() => sessions().slice(0, 5));\r\n\tconst sessionSummary = createMemo(() => currentSession()?.summary ?? \"No session selected yet.\");\r\n\r\n\tconst overlayOptions = createMemo<OverlayOption[]>(() => {\r\n\t\tswitch (overlay()) {\r\n\t\t\tcase \"provider\":\r\n\t\t\t\treturn [\r\n\t\t\t\t\t...profiles().map((profile) => ({\r\n\t\t\t\t\t\tid: `provider:${profile.id}`,\r\n\t\t\t\t\t\tlabel: profile.label,\r\n\t\t\t\t\t\tdescription: `${profile.family} | ${profile.models.length} model${profile.models.length === 1 ? \"\" : \"s\"} | ${profile.lastValidationStatus}`,\r\n\t\t\t\t\t\tbadge: selection().profileId === profile.id ? \"ACTIVE\" : undefined,\r\n\t\t\t\t\t})),\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: \"provider:add\",\r\n\t\t\t\t\t\tlabel: \"Add provider\",\r\n\t\t\t\t\t\tdescription: \"Create a new provider profile with a guided setup flow.\",\r\n\t\t\t\t\t\tbadge: \"NEW\",\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\t\t\tcase \"model-provider\":\r\n\t\t\t\treturn profiles().map((profile) => ({\r\n\t\t\t\t\tid: `model-provider:${profile.id}`,\r\n\t\t\t\t\tlabel: profile.label,\r\n\t\t\t\t\tdescription: `${profile.family} | ${profile.models.length} model${profile.models.length === 1 ? \"\" : \"s\"} available`,\r\n\t\t\t\t\tbadge: modelPickerProfileId() === profile.id ? \"OPEN\" : selection().profileId === profile.id ? \"ACTIVE\" : undefined,\r\n\t\t\t\t}));\r\n\t\t\tcase \"model\":\r\n\t\t\t\treturn (profiles().find((profile) => profile.id === modelPickerProfileId())?.models ?? []).map((model) => ({\r\n\t\t\t\t\tid: `model:${modelPickerProfileId()}:${model.id}`,\r\n\t\t\t\t\tlabel: model.id,\r\n\t\t\t\t\tdescription: `${model.family} | ${model.name}`,\r\n\t\t\t\t\tbadge: selection().profileId === modelPickerProfileId() && activeModel() === model.id ? \"CURRENT\" : undefined,\r\n\t\t\t\t}));\r\n\t\t\tcase \"session\":\r\n\t\t\t\treturn sessions().map((session) => ({\r\n\t\t\t\t\tid: `session:${session.id}`,\r\n\t\t\t\t\tlabel: session.title,\r\n\t\t\t\t\tdescription: `${session.state} | ${formatTimestamp(session.updatedAt)} | ${session.summary}`,\r\n\t\t\t\t\tbadge: session.id === currentSession()?.id ? \"OPEN\" : undefined,\r\n\t\t\t\t}));\r\n\t\t\tcase undefined:\r\n\t\t\t\treturn [];\r\n\t\t}\r\n\t});\r\n\r\n\tonMount(() => {\r\n\t\twriteShellDebugLog(`mounted chat shell profiles=${profiles().length} sessions=${sessionHistory.listSessions().length}`);\r\n\t\tsetTimeout(() => composerRef?.focus(), 10);\r\n\t});\r\n\r\n\tcreateEffect(() => {\n\t\truntime.setMode(shellMode());\n\t});\n\n\tcreateEffect(() => {\n\t\tconst session = currentSession();\n\t\tif (!session) {\n\t\t\twriteShellDebugLog(\"effect session=none messages=0\");\n\t\t\treturn;\n\t\t}\r\n\t\tif (!activeSessionId()) {\r\n\t\t\tsetActiveSessionId(session.id);\r\n\t\t\tsyncActiveSelectionFromSession(session.id);\r\n\t\t}\r\n\t\tensureSessionTranscript(session.id);\r\n\t\tif (session.runtimeSessionFile) {\r\n\t\t\tvoid runtime.loadSession(session.id, selectionForSession(session), {\r\n\t\t\t\truntimeSessionFile: session.runtimeSessionFile,\r\n\t\t\t});\r\n\t\t}\r\n\t\twriteShellDebugLog(`effect session=${session.id} messages=${currentMessages().length}`);\r\n\t});\r\n\r\n\tuseKeyboard((evt) => {\r\n\t\twriteShellDebugLog(`key name=${evt.name} focus=${focusRegion()} overlay=${overlay() ?? \"none\"}`);\r\n\r\n\t\tif (evt.ctrl && evt.name === \"c\") {\r\n\t\t\tevt.preventDefault();\r\n\t\t\texitShell();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (evt.ctrl && evt.name === \".\") {\r\n\t\t\tevt.preventDefault();\r\n\t\t\tvoid abortActiveRequest();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (activeApproval()) {\r\n\t\t\tif (evt.name === \"escape\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tresolveActiveApproval(\"cancel\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"left\" || evt.name === \"up\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tsetApprovalDecisionIndex((current) => wrapIndex(current, -1, 3));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"right\" || evt.name === \"down\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tsetApprovalDecisionIndex((current) => wrapIndex(current, 1, 3));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"return\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tresolveActiveApproval(([\"allow\", \"reject\", \"cancel\"] as ToolApprovalDecision[])[approvalDecisionIndex()] ?? \"cancel\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (providerAddFlow.isActive()) {\r\n\t\t\tif (evt.name === \"escape\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tproviderAddFlow.back();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (providerAddFlow.isPickerStep()) {\r\n\t\t\t\tif (evt.name === \"up\") {\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\tproviderAddFlow.moveSelection(-1);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (evt.name === \"down\") {\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\tproviderAddFlow.moveSelection(1);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (evt.name === \"return\") {\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\tproviderAddFlow.confirmSelection();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (overlay()) {\n\t\t\tif (evt.name === \"escape\") {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tcloseOverlay();\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"up\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tsetOverlayIndex(wrapIndex(overlayIndex(), -1, overlayOptions().length));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"down\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tsetOverlayIndex(wrapIndex(overlayIndex(), 1, overlayOptions().length));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"return\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tconst target = overlayOptions()[overlayIndex()];\r\n\t\t\t\tif (target) activateAction(target.id);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treturn;\n\t\t}\n\n\t\tif (evt.option && evt.name === \"m\") {\n\t\t\tevt.preventDefault();\n\t\t\tapplyShellMode(nextShellMode(shellMode()));\n\t\t\treturn;\n\t\t}\n\n\t\tif (evt.option && [\"1\", \"2\", \"3\", \"4\"].includes(evt.name)) {\n\t\t\tevt.preventDefault();\n\t\t\tconst nextMode = ({\n\t\t\t\t\"1\": \"agent\",\n\t\t\t\t\"2\": \"plan\",\n\t\t\t\t\"3\": \"read-only\",\n\t\t\t\t\"4\": \"auto-approve\",\n\t\t\t} as Record<string, ShellModeId>)[evt.name];\n\t\t\tif (nextMode) {\n\t\t\t\tapplyShellMode(nextMode);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (evt.name === \"tab\") {\n\t\t\tevt.preventDefault();\n\t\t\tcycleFocus();\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (focusRegion() === \"main\") {\r\n\t\t\tif (evt.name === \"up\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"down\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (evt.name === \"escape\") {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\tsetFocusRegion(\"composer\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (focusRegion() === \"composer\" && evt.name === \"escape\" && !(composerRef?.value ?? \"\").trim()) {\r\n\t\t\tevt.preventDefault();\r\n\t\t\texitShell();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction exitShell(): void {\r\n\t\tif (closed) return;\r\n\t\tclosed = true;\r\n\t\twriteShellDebugLog(\"exit shell\");\r\n\t\tif (transcriptScrollTimer) {\r\n\t\t\tclearTimeout(transcriptScrollTimer);\r\n\t\t\ttranscriptScrollTimer = undefined;\r\n\t\t}\r\n\t\truntime.dispose();\r\n\t\trenderer.setTerminalTitle(\"\");\r\n\t\trenderer.destroy();\r\n\t\tprops.onExit();\r\n\t}\r\n\r\n\tfunction requestRender(): void {\r\n\t\t(renderer as { requestRender?: () => void }).requestRender?.();\r\n\t}\r\n\r\n\tfunction cancelTranscriptAutoScroll(): void {\r\n\t\tif (!transcriptScrollTimer) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tclearTimeout(transcriptScrollTimer);\r\n\t\ttranscriptScrollTimer = undefined;\r\n\t}\r\n\r\n\tfunction scheduleTranscriptScrollToBottom(): void {\r\n\t\tcancelTranscriptAutoScroll();\r\n\t\ttranscriptScrollTimer = setTimeout(() => {\r\n\t\t\ttranscriptScrollTimer = undefined;\r\n\t\t\tif (!transcriptScroll || transcriptScroll.isDestroyed) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\ttranscriptScroll.scrollTo(transcriptScroll.scrollHeight);\r\n\t\t}, 50);\r\n\t}\r\n\r\n\tfunction reloadProviderState(): void {\r\n\t\tsetProfiles(props.profileService.listProfiles());\r\n\t\tsetSelection(props.profileService.getActiveSelection());\r\n\t}\r\n\r\n\tfunction updateRuntimeState(sessionId: string, state: RuntimeSessionState): void {\r\n\t\tsetRuntimeStateBySession((current) => ({\r\n\t\t\t...current,\r\n\t\t\t[sessionId]: state,\r\n\t\t}));\r\n\t\trequestRender();\r\n\t}\r\n\r\n\tasync function abortActiveRequest(): Promise<void> {\n\t\tconst session = currentSession();\n\t\tif (!session) {\n\t\t\treturn;\n\t\t}\r\n\t\tconst aborted = await runtime.abort(session.id);\r\n\t\tif (!aborted) {\r\n\t\t\tpushChatMessage(session.id, {\r\n\t\t\t\tid: `${session.id}:system:${Date.now()}`,\r\n\t\t\t\trole: \"system\",\r\n\t\t\t\tcontent: \"No active request to interrupt.\",\r\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t\tkind: \"status\",\r\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function compactCurrentSession(): Promise<void> {\n\t\tconst session = currentSession();\n\t\tif (!session) {\n\t\t\tconst sessionId = createdTransientSessionId();\n\t\t\tpushChatMessage(sessionId, {\n\t\t\t\tid: `${sessionId}:system:${Date.now()}`,\n\t\t\t\trole: \"system\",\n\t\t\t\tcontent: \"No active session is ready to compact yet.\",\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\n\t\t\t\tkind: \"status\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tawait runtime.compact(session.id, selectionForSession(session), {\n\t\t\truntimeSessionFile: session.runtimeSessionFile,\n\t\t});\n\t}\n\n\tfunction applyShellMode(nextMode: ShellModeId): void {\n\t\tif (shellMode() === nextMode) {\n\t\t\tconst sessionId = currentSession()?.id ?? createdTransientSessionId();\n\t\t\tpushChatMessage(sessionId, {\n\t\t\t\tid: `${sessionId}:system:${Date.now()}`,\n\t\t\t\trole: \"system\",\n\t\t\t\tcontent: `Already in ${getShellMode(nextMode).label} mode.`,\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\n\t\t\t\tkind: \"status\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tsetShellMode(nextMode);\n\t\tconst sessionId = currentSession()?.id ?? createdTransientSessionId();\n\t\tpushChatMessage(sessionId, {\n\t\t\tid: `${sessionId}:system:${Date.now()}`,\n\t\t\trole: \"system\",\n\t\t\tcontent: shellModeSwitchMessage(nextMode),\n\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\n\t\t\tkind: \"status\",\n\t\t});\n\t\tcomposerRef?.focus();\n\t\tsetFocusRegion(\"composer\");\n\t\trequestRender();\n\t}\n\r\n\tfunction openApprovalRequest(request: ToolApprovalRequest): void {\r\n\t\twriteShellDebugLog(`approval open tool=${request.toolName} id=${request.id}`);\r\n\t\tsetOverlay(undefined);\r\n\t\tsetApprovalRequests((current) => [...current, request]);\r\n\t\tsetApprovalDecisionIndex(0);\r\n\t\tsetFocusRegion(\"overlay\");\r\n\t\trequestRender();\r\n\t}\r\n\r\n\tfunction closeApprovalRequest(requestId: string): void {\r\n\t\twriteShellDebugLog(`approval close id=${requestId}`);\r\n\t\tsetApprovalRequests((current) => current.filter((request) => request.id !== requestId));\r\n\t\tsetApprovalDecisionIndex(0);\r\n\t\tif (!providerAddFlow.isActive() && !overlay() && approvalRequests().filter((request) => request.id !== requestId).length === 0) {\r\n\t\t\tsetFocusRegion(\"composer\");\r\n\t\t}\r\n\t\trequestRender();\r\n\t}\r\n\r\n\tfunction resolveActiveApproval(decision: ToolApprovalDecision): void {\r\n\t\tconst request = activeApproval();\r\n\t\tif (!request) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\twriteShellDebugLog(`approval decision tool=${request.toolName} decision=${decision}`);\r\n\t\truntime.resolveApproval(request.id, decision);\r\n\t}\r\n\r\n\tfunction setFocusRegion(region: ShellFocus): void {\r\n\t\tsetFocusRegionState(region);\r\n\t\tif (region === \"composer\") {\r\n\t\t\tsetTimeout(() => composerRef?.focus(), 0);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcomposerRef?.blur();\r\n\t}\r\n\r\n\tfunction cycleFocus(): void {\r\n\t\tif (activeApproval() || overlay()) {\r\n\t\t\tsetFocusRegion(\"overlay\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst order: ShellFocus[] = [\"main\", \"composer\"];\r\n\t\tconst index = order.indexOf(focusRegion());\r\n\t\tsetFocusRegion(order[(index + 1) % order.length] ?? \"composer\");\r\n\t}\r\n\r\n\tfunction setShellView(next: ShellView): void {\r\n\t\tbatch(() => {\r\n\t\t\tsetView(next);\r\n\t\t});\r\n\t\tsetFocusRegion(\"composer\");\r\n\t}\r\n\r\n\tfunction openOverlay(kind: OverlayKind): void {\r\n\t\tif (kind === \"model\" && profiles().length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (kind === \"model\") {\r\n\t\t\tconst activeProviderId = selection().profileId ?? profiles()[0]?.id;\r\n\t\t\tif (!activeProviderId) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tsetModelPickerProfileId(activeProviderId);\r\n\t\t\tif (profiles().length > 1) {\r\n\t\t\t\tsetOverlay(\"model-provider\");\r\n\t\t\t\tsetOverlayIndex(Math.max(0, profiles().findIndex((profile) => profile.id === activeProviderId)));\r\n\t\t\t\tsetFocusRegion(\"overlay\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetOverlay(kind);\r\n\t\tsetOverlayIndex(0);\r\n\t\tsetFocusRegion(\"overlay\");\r\n\t}\r\n\r\n\tfunction closeOverlay(): void {\r\n\t\tsetOverlay(undefined);\r\n\t\tsetFocusRegion(\"composer\");\r\n\t}\r\n\r\n\tfunction openProviderAdd(): void {\r\n\t\tsetOverlay(undefined);\r\n\t\tproviderAddFlow.open();\r\n\t\tsetFocusRegion(\"overlay\");\r\n\t}\r\n\r\n\tfunction ensureSessionTranscript(sessionId: string): void {\r\n\t\tsetMessagesBySession((current) => {\r\n\t\t\tif (current[sessionId]) return current;\r\n\t\t\tconst session = sessions().find((item) => item.id === sessionId);\r\n\t\t\tconst initial: ChatMessage[] = [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: `${sessionId}:system:0`,\r\n\t\t\t\t\trole: \"system\",\r\n\t\t\t\t\tcontent: session ? `Opened ${session.title}` : \"Opened session\",\r\n\t\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t\t},\r\n\t\t\t];\r\n\t\t\treturn { ...current, [sessionId]: initial };\r\n\t\t});\r\n\t\tsetRuntimeStateBySession((current) => (current[sessionId] ? current : { ...current, [sessionId]: createIdleRuntimeState() }));\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t}\r\n\r\n\tfunction appendTranscriptMessage(sessionId: string, message: ChatMessage): void {\r\n\t\tsetMessagesBySession((current) => appendSessionMessage(current, sessionId, message));\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t}\r\n\r\n\tfunction replaceTranscriptMessages(sessionId: string, messages: ChatMessage[]): void {\r\n\t\tsetMessagesBySession((current) => ({\r\n\t\t\t...current,\r\n\t\t\t[sessionId]: messages.slice(-200),\r\n\t\t}));\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t}\r\n\r\n\tfunction insertTranscriptMessageBefore(sessionId: string, beforeMessageId: string, message: ChatMessage): void {\r\n\t\tsetMessagesBySession((current) => insertSessionMessageBefore(current, sessionId, beforeMessageId, message));\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t}\r\n\r\n\tfunction patchTranscriptMessage(sessionId: string, messageId: string, patch: TranscriptMessagePatch): void {\r\n\t\tsetMessagesBySession((current) => {\r\n\t\t\tconst next = patchSessionMessage(current, sessionId, messageId, patch);\r\n\t\t\treturn next.messagesBySession;\r\n\t\t});\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t}\r\n\r\n\tfunction toggleTranscriptMessage(sessionId: string, messageId: string): void {\r\n\t\tcancelTranscriptAutoScroll();\r\n\t\tsetMessagesBySession((current) => toggleSessionMessageState(current, sessionId, messageId));\r\n\t\trequestRender();\r\n\t}\r\n\r\n\tfunction selectionForSession(session = currentSession()): RuntimeSelection {\r\n\t\treturn {\r\n\t\t\tprofileId: session?.providerProfileId ?? selection().profileId,\r\n\t\t\tmodelId: session?.modelId ?? selection().modelId,\r\n\t\t};\r\n\t}\r\n\r\n\tfunction persistRuntimeSessionBinding(sessionId: string, binding: { runtimeSessionFile?: string }): void {\r\n\t\tif (!binding.runtimeSessionFile) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst existing = sessions().find((session) => session.id === sessionId);\r\n\t\tif (existing?.runtimeSessionFile === binding.runtimeSessionFile) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsessionHistory.updateSession(sessionId, {\r\n\t\t\truntimeSessionFile: binding.runtimeSessionFile,\r\n\t\t});\r\n\t\tsetSessions(sessionHistory.listSessions());\r\n\t}\r\n\r\n\tfunction syncActiveSelectionFromSession(sessionId: string): void {\r\n\t\tconst session = sessions().find((item) => item.id === sessionId);\r\n\t\tif (!session?.providerProfileId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst profile = profiles().find((item) => item.id === session.providerProfileId);\r\n\t\tif (!profile) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tprops.profileService.setActiveSelection(profile.id, session.modelId ?? profile.models[0]?.id);\r\n\t\treloadProviderState();\r\n\t}\r\n\r\n\tfunction activateSession(sessionId: string): void {\r\n\t\tsetActiveSessionId(sessionId);\r\n\t\tensureSessionTranscript(sessionId);\r\n\t\tsyncActiveSelectionFromSession(sessionId);\r\n\t\tconst session = sessions().find((item) => item.id === sessionId);\r\n\t\tif (session) {\r\n\t\t\tsessionHistory.markActive(sessionId);\r\n\t\t\tsetSessions(sessionHistory.listSessions());\r\n\t\t\tsetShellView(\"home\");\r\n\t\t\tvoid runtime.syncSelection(sessionId, selectionForSession(session));\r\n\t\t\tif (session.runtimeSessionFile) {\r\n\t\t\t\tvoid runtime.loadSession(sessionId, selectionForSession(session), {\r\n\t\t\t\t\truntimeSessionFile: session.runtimeSessionFile,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tcloseOverlay();\r\n\t}\r\n\r\n\tfunction startNewSession() {\r\n\t\tconst provider = activeProfile();\r\n\t\tconst created = sessionHistory.createSession({\r\n\t\t\ttitle: \"New WEPsCLI chat\",\r\n\t\t\tsummary: provider ? `Chat ready with ${provider.label}.` : \"Chat ready before provider selection.\",\r\n\t\t\tstate: \"active\",\r\n\t\t\tproviderProfileId: provider?.id,\r\n\t\t\tproviderLabel: provider?.label,\r\n\t\t\tmodelId: activeModel(),\r\n\t\t});\r\n\t\tsetSessions(sessionHistory.listSessions());\r\n\t\tsetActiveSessionId(created.id);\r\n\t\tensureSessionTranscript(created.id);\r\n\t\tsetMessagesBySession((current) => ({\r\n\t\t\t...current,\r\n\t\t\t[created.id]: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: `${created.id}:system:0`,\r\n\t\t\t\t\trole: \"system\",\r\n\t\t\t\t\tcontent: provider ? `Ready with ${provider.label}${activeModel() ? ` / ${activeModel()}` : \"\"}` : \"Connect a provider to start sending prompts.\",\r\n\t\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t}));\r\n\t\tsetComposerValue(\"\");\r\n\t\tcomposerRef?.focus();\r\n\t\tsetFocusRegion(\"composer\");\r\n\t\trequestRender();\r\n\t\tscheduleTranscriptScrollToBottom();\r\n\t\treturn created;\r\n\t}\r\n\r\n\tfunction pushChatMessage(sessionId: string, message: ChatMessage): void {\r\n\t\twriteShellDebugLog(`pushChatMessage session=${sessionId} role=${message.role} content=${JSON.stringify(message.content)}`);\r\n\t\tsetMessagesBySession((current) => {\r\n\t\t\tconst next = appendSessionMessage(current, sessionId, message);\r\n\t\t\twriteShellDebugLog(`pushChatMessage nextCount=${next[sessionId]?.length ?? 0}`);\r\n\t\t\treturn next;\r\n\t\t});\r\n\t\trequestRender();\r\n\t}\r\n\r\n\tfunction handleComposerSubmit(value: string): void {\r\n\t\tconst trimmed = value.trim();\r\n\t\twriteShellDebugLog(`handleComposerSubmit raw=${JSON.stringify(value)} trimmed=${JSON.stringify(trimmed)}`);\r\n\t\tif (!trimmed) return;\r\n\r\n\t\tconst session = currentSession() ?? startNewSession();\r\n\t\twriteShellDebugLog(`handleComposerSubmit currentSession=${session?.id ?? \"none\"}`);\r\n\t\tif (!session) {\r\n\t\t\twriteShellDebugLog(\"handleComposerSubmit no current session available\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (trimmed.startsWith(\"/\")) {\r\n\t\t\twriteShellDebugLog(`handleComposerSubmit slash=${trimmed}`);\r\n\t\t\trunSlashCommand(trimmed);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tensureSessionTranscript(session.id);\r\n\t\tsessionHistory.updateSession(session.id, {\r\n\t\t\ttitle: `Chat: ${truncate(trimmed, 24)}`,\r\n\t\t\tsummary: `Last prompt: ${truncate(trimmed, 60)}`,\r\n\t\t\tproviderProfileId: selectionForSession(session).profileId,\r\n\t\t\tproviderLabel: activeProfile()?.label,\r\n\t\t\tmodelId: selectionForSession(session).modelId,\r\n\t\t\tlastPrompt: trimmed,\r\n\t\t\tstate: \"active\",\r\n\t\t});\r\n\t\tsetSessions(sessionHistory.listSessions());\r\n\t\twriteShellDebugLog(`handleComposerSubmit sessionUpdated=${session.id}`);\r\n\t\tsetComposerValue(\"\");\r\n\t\tcomposerRef?.setText?.(\"\");\r\n\t\tcomposerRef?.focus();\r\n\t\tvoid runtime.prompt(session.id, applyShellModePrompt(shellMode(), trimmed), selectionForSession(session), {\n\t\t\truntimeSessionFile: session.runtimeSessionFile,\n\t\t});\n\t\trequestRender();\n\t}\n\r\n\tfunction runSlashCommand(commandId: string): void {\n\t\texecuteSlashCommand(commandId, {\n\t\t\tstartNewSession,\n\t\t\topenOverlay,\n\t\t\topenProviderAdd,\n\t\t\tcompactCurrentSession,\n\t\t\tabortActiveRequest: () => {\n\t\t\t\tvoid abortActiveRequest();\n\t\t\t},\n\t\t\tsetMode: (modeId) => applyShellMode(modeId),\n\t\t\tgetCurrentMode: () => shellMode(),\n\t\t\tgetStatusSummary: () => {\n\t\t\t\tconst session = currentSession();\n\t\t\t\tconst runtimeState = currentRuntimeState();\n\t\t\t\treturn [\n\t\t\t\t\t\"Current shell status:\",\n\t\t\t\t\t`Session: ${session?.title ?? \"none\"}`,\n\t\t\t\t\t`Mode: ${activeShellMode().label}`,\n\t\t\t\t\t`Provider: ${activeProfile()?.label ?? \"none\"}`,\n\t\t\t\t\t`Model: ${activeModel() ?? \"none\"}`,\n\t\t\t\t\t`Runtime: ${runtimeState.label}`,\n\t\t\t\t\t`Agent dir: ${getAgentDir()}`,\n\t\t\t\t].join(\"\\n\");\n\t\t\t},\n\t\t\tqueuePromptTemplate: (title: string, prompt: string, summary: string) => {\n\t\t\t\tconst session = currentSession() ?? startNewSession();\n\t\t\t\tpushChatMessage(session.id, {\n\t\t\t\t\tid: `${session.id}:system:${Date.now()}`,\r\n\t\t\t\t\trole: \"system\",\r\n\t\t\t\t\tcontent: `${title}: ${summary}`,\r\n\t\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t\t});\r\n\t\t\t\tsetComposerValue(prompt);\r\n\t\t\t\tcomposerRef?.setText?.(prompt);\r\n\t\t\t\tcomposerRef?.focus();\r\n\t\t\t\tsetFocusRegion(\"composer\");\r\n\t\t\t},\r\n\t\t\tpushTimeline: (message: string) => {\r\n\t\t\t\tconst session = currentSession() ?? startNewSession();\r\n\t\t\t\tpushChatMessage(session.id, {\r\n\t\t\t\t\tid: `${session.id}:system:${Date.now()}`,\r\n\t\t\t\t\trole: \"system\",\r\n\t\t\t\t\tcontent: message,\r\n\t\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tfunction activateAction(actionId: string): void {\r\n\t\tif (actionId === \"session:new\") {\r\n\t\t\tstartNewSession();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId === \"overlay:provider\") {\r\n\t\t\topenOverlay(\"provider\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId === \"overlay:model\") {\r\n\t\t\topenOverlay(\"model\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId === \"overlay:session\") {\r\n\t\t\topenOverlay(\"session\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId === \"command-menu\") {\r\n\t\t\tsetComposerValue(\"/\");\r\n\t\t\tcomposerRef?.setText?.(\"/\");\r\n\t\t\tcomposerRef?.focus();\r\n\t\t\tsetFocusRegion(\"composer\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId === \"provider:add\") {\r\n\t\t\topenProviderAdd();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId.startsWith(\"provider:\")) {\r\n\t\t\tconst profile = profiles().find((item) => item.id === actionId.slice(9));\r\n\t\t\tif (!profile) return;\r\n\t\t\tconst nextModel = selection().profileId === profile.id ? selection().modelId ?? profile.models[0]?.id : profile.models[0]?.id;\r\n\t\t\tprops.profileService.setActiveSelection(profile.id, nextModel);\r\n\t\t\treloadProviderState();\r\n\t\t\tif (currentSession()) {\r\n\t\t\t\tsessionHistory.updateSession(currentSession()!.id, {\r\n\t\t\t\t\tproviderProfileId: profile.id,\r\n\t\t\t\t\tproviderLabel: profile.label,\r\n\t\t\t\t\tmodelId: nextModel,\r\n\t\t\t\t});\r\n\t\t\t\tsetSessions(sessionHistory.listSessions());\r\n\t\t\t\tvoid runtime.syncSelection(currentSession()!.id, selectionForSession(currentSession()!));\r\n\t\t\t}\r\n\t\t\tpushChatMessage(currentSession()?.id ?? createdTransientSessionId(), {\r\n\t\t\t\tid: `provider:${profile.id}:${Date.now()}`,\r\n\t\t\t\trole: \"system\",\r\n\t\t\t\tcontent: `Provider switched to ${profile.label}${nextModel ? ` / ${nextModel}` : \"\"}`,\r\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t});\r\n\t\t\tcloseOverlay();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId.startsWith(\"model-provider:\")) {\r\n\t\t\tconst profileId = actionId.slice(\"model-provider:\".length);\r\n\t\t\tsetModelPickerProfileId(profileId);\r\n\t\t\tsetOverlay(\"model\");\r\n\t\t\tsetOverlayIndex(0);\r\n\t\t\tsetFocusRegion(\"overlay\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId.startsWith(\"model:\")) {\r\n\t\t\tconst payload = actionId.slice(6);\r\n\t\t\tconst separator = payload.indexOf(\":\");\r\n\t\t\tconst profileId = separator === -1 ? selection().profileId ?? activeProfile()?.id : payload.slice(0, separator);\r\n\t\t\tconst modelId = separator === -1 ? payload : payload.slice(separator + 1);\r\n\t\t\tconst profile = profiles().find((item) => item.id === profileId);\r\n\t\t\tif (!profile) return;\r\n\t\t\tprops.profileService.setActiveSelection(profile.id, modelId);\r\n\t\t\treloadProviderState();\r\n\t\t\tif (currentSession()) {\r\n\t\t\t\tsessionHistory.updateSession(currentSession()!.id, {\r\n\t\t\t\t\tproviderProfileId: profile.id,\r\n\t\t\t\t\tproviderLabel: profile.label,\r\n\t\t\t\t\tmodelId,\r\n\t\t\t\t});\r\n\t\t\t\tsetSessions(sessionHistory.listSessions());\r\n\t\t\t\tvoid runtime.syncSelection(currentSession()!.id, selectionForSession(currentSession()!));\r\n\t\t\t}\r\n\t\t\tpushChatMessage(currentSession()?.id ?? createdTransientSessionId(), {\r\n\t\t\t\tid: `model:${modelId}:${Date.now()}`,\r\n\t\t\t\trole: \"system\",\r\n\t\t\t\tcontent: `Model switched to ${profile.label} / ${modelId}`,\r\n\t\t\t\ttime: new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" }),\r\n\t\t\t});\r\n\t\t\tcloseOverlay();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (actionId.startsWith(\"session:\")) {\r\n\t\t\tactivateSession(actionId.slice(8));\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction createdTransientSessionId(): string {\r\n\t\tconst current = currentSession();\r\n\t\tif (current) return current.id;\r\n\t\tconst created = sessionHistory.createSession({\r\n\t\t\ttitle: \"Transient chat\",\r\n\t\t\tsummary: \"Temporary chat session created while initializing.\",\r\n\t\t\tstate: \"active\",\r\n\t\t\tproviderProfileId: activeProfile()?.id,\r\n\t\t\tproviderLabel: activeProfile()?.label,\r\n\t\t\tmodelId: activeModel(),\r\n\t\t});\r\n\t\tsetSessions(sessionHistory.listSessions());\r\n\t\tsetActiveSessionId(created.id);\r\n\t\tensureSessionTranscript(created.id);\r\n\t\treturn created.id;\r\n\t}\r\n\r\n\tconst topStatus = createMemo(() => {\r\n\t\tconst profile = activeProfile();\r\n\t\tconst runtimeState = currentRuntimeState();\r\n\t\tif (!profile) return runtimeState.label;\r\n\t\treturn `${profile.label} · ${activeModel() ?? \"no model\"} · ${runtimeState.label}`;\r\n\t});\r\n\r\n\tconst sidebarSummary = createMemo(() => {\r\n\t\tif (!shellReady()) return \"Complete onboarding to connect a provider.\";\r\n\t\treturn activeProfile()?.baseUrl ?? \"Provider ready.\";\r\n\t});\r\n\r\n\tfunction runtimeStatusColor(state: RuntimeSessionState): string {\r\n\t\tswitch (runtimeStateTone(state)) {\r\n\t\t\tcase \"accent\":\r\n\t\t\t\treturn theme.accent;\r\n\t\t\tcase \"warning\":\r\n\t\t\t\treturn theme.warning;\r\n\t\t\tcase \"danger\":\r\n\t\t\t\treturn theme.danger;\r\n\t\t\tcase \"success\":\r\n\t\t\t\treturn theme.success;\r\n\t\t\tcase \"muted\":\r\n\t\t\t\treturn theme.muted;\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<box flexGrow={1} flexDirection=\"column\" backgroundColor={theme.background}>\r\n\t\t\t<box flexShrink={0} backgroundColor={theme.header} paddingLeft={1} paddingRight={1} paddingTop={1} paddingBottom={1} flexDirection=\"row\" justifyContent=\"space-between\" gap={1}>\r\n\t\t\t\t<box flexDirection=\"row\" gap={1} minWidth={0} flexGrow={1}>\r\n\t\t\t\t\t<text fg={theme.accentStrong}>{LOGO}</text>\r\n\t\t\t\t\t<text fg={theme.text}>{truncate(currentSession()?.title ?? \"WEPsCLI\", 28)}</text>\r\n\t\t\t\t</box>\r\n\t\t\t\t<box flexDirection=\"row\" gap={1} alignItems=\"center\">\r\n\t\t\t\t\t{currentRuntimeState().interruptible ? (\r\n\t\t\t\t\t\t<box backgroundColor={theme.danger} paddingLeft={1} paddingRight={1} onMouseUp={() => void abortActiveRequest()}>\r\n\t\t\t\t\t\t\t<text fg={theme.background}>Stop</text>\r\n\t\t\t\t\t\t</box>\r\n\t\t\t\t\t) : null}\r\n\t\t\t\t\t<text fg={runtimeStatusColor(currentRuntimeState())}>{truncate(topStatus(), 36)}</text>\r\n\t\t\t\t</box>\r\n\t\t\t</box>\r\n\r\n\t\t\t<box flexGrow={1} minHeight={0} flexDirection=\"row\" gap={1} paddingLeft={1} paddingRight={1} paddingTop={1}>\r\n\t\t\t\t<TranscriptPanel\r\n\t\t\t\t\tmessages={currentMessages()}\r\n\t\t\t\t\tactiveModelLabel={`${activeProfile()?.label ?? \"none\"} / ${activeModel() ?? \"none\"}`}\r\n\t\t\t\t\twidth={viewport().width}\r\n\t\t\t\t\tscrollRef={(ref) => {\r\n\t\t\t\t\t\ttranscriptScroll = ref as typeof transcriptScroll;\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonToggleMessage={(messageId) => toggleTranscriptMessage(currentSession()!.id, messageId)}\r\n\t\t\t\t/>\r\n\t\t\t</box>\r\n\r\n\t\t\t<ChatComposer\n\t\t\t\tfocused={focusRegion() === \"composer\"}\n\t\t\t\tvalue={composerValue()}\n\t\t\t\tproviderLabel={activeProfile()?.label ?? \"No provider\"}\n\t\t\t\tmodelLabel={activeModel() ?? \"No model\"}\n\t\t\t\tmodeLabel={activeShellMode().composerLabel}\n\t\t\t\tmodeTone={activeShellMode().tone}\n\t\t\t\tinputRef={(ref) => {\n\t\t\t\t\tcomposerRef = ref;\n\t\t\t\t}}\n\t\t\t\tonAction={activateAction}\n\t\t\t\tonFocus={() => setFocusRegion(\"composer\")}\n\t\t\t\tonInput={(value) => setComposerValue(value)}\n\t\t\t\tonModeClick={() => applyShellMode(nextShellMode(shellMode()))}\n\t\t\t\tonSubmit={handleComposerSubmit}\n\t\t\t\tonSelectSlashCommand={runSlashCommand}\n\t\t\t/>\n\r\n\t\t\t{overlay() ? (\r\n\t\t\t\t<OverlayPicker\r\n\t\t\t\t\ttitle={overlayTitle(overlay())}\r\n\t\t\t\t\tdescription={overlayDescription(overlay())}\r\n\t\t\t\t\toptions={overlayOptions()}\r\n\t\t\t\t\tselectedIndex={overlayIndex()}\r\n\t\t\t\t\tonClose={closeOverlay}\r\n\t\t\t\t\tonSelect={(id, index) => {\r\n\t\t\t\t\t\tsetOverlayIndex(index);\r\n\t\t\t\t\t\tactivateAction(id);\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t) : null}\r\n\r\n\t\t\t{activeApproval() ? (\r\n\t\t\t\t<ApprovalOverlay\r\n\t\t\t\t\trequest={activeApproval()!}\r\n\t\t\t\t\tselectedIndex={approvalDecisionIndex()}\r\n\t\t\t\t\tonSelectIndex={setApprovalDecisionIndex}\r\n\t\t\t\t\tonResolve={resolveActiveApproval}\r\n\t\t\t\t/>\r\n\t\t\t) : null}\r\n\r\n\t\t\t{providerAddFlow.render()}\r\n\r\n\t\t\t<box flexShrink={0} paddingLeft={1} paddingRight={1} paddingBottom={0} paddingTop={0} flexDirection=\"row\">\r\n\t\t\t\t<text fg={theme.muted}>{truncate(getAgentDir(), 36)}</text>\r\n\t\t\t</box>\r\n\t\t</box>\r\n\t);\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ const SHELL_MODES = [{
2
+ id: "agent",
3
+ label: "Agent",
4
+ composerLabel: "AGENT",
5
+ description: "Normal coding mode. The agent can inspect, edit, and use tools with approval as needed.",
6
+ tone: "accent",
7
+ commandId: "/mode agent",
8
+ shortcutHint: "Alt+1"
9
+ }, {
10
+ id: "plan",
11
+ label: "Plan",
12
+ composerLabel: "PLAN",
13
+ description: "Analysis-first mode. The agent should reason, propose steps, and avoid making changes unless asked.",
14
+ tone: "warning",
15
+ commandId: "/mode plan",
16
+ shortcutHint: "Alt+2",
17
+ promptPrefix: "Plan mode is active. Analyze the task first, explain the intended implementation, and avoid making code changes or running mutating tools unless the user explicitly asks for execution."
18
+ }, {
19
+ id: "read-only",
20
+ label: "Read Only",
21
+ composerLabel: "READ ONLY",
22
+ description: "Inspection mode. The agent should read, explain, review, and avoid changing files or running risky commands.",
23
+ tone: "muted",
24
+ commandId: "/mode read-only",
25
+ shortcutHint: "Alt+3",
26
+ promptPrefix: "Read-only mode is active. Do not modify files, execute risky shell commands, or take side-effecting actions. Limit the work to inspection, diagnosis, explanation, and review."
27
+ }, {
28
+ id: "auto-approve",
29
+ label: "Auto Approve",
30
+ composerLabel: "AUTO",
31
+ description: "Fast execution mode. Risky tool approvals are automatically allowed when possible.",
32
+ tone: "danger",
33
+ commandId: "/mode auto-approve",
34
+ shortcutHint: "Alt+4"
35
+ }];
36
+ export function listShellModes() {
37
+ return SHELL_MODES;
38
+ }
39
+ export function getShellMode(modeId) {
40
+ return SHELL_MODES.find(mode => mode.id === modeId) ?? SHELL_MODES[0];
41
+ }
42
+ export function nextShellMode(currentMode) {
43
+ const index = SHELL_MODES.findIndex(mode => mode.id === currentMode);
44
+ return SHELL_MODES[(index + 1 + SHELL_MODES.length) % SHELL_MODES.length]?.id ?? "agent";
45
+ }
46
+ export function findShellModeByCommand(commandId) {
47
+ return SHELL_MODES.find(mode => mode.commandId === commandId);
48
+ }
49
+ export function applyShellModePrompt(modeId, prompt) {
50
+ const mode = getShellMode(modeId);
51
+ if (!mode.promptPrefix) {
52
+ return prompt;
53
+ }
54
+ return `${mode.promptPrefix}\n\nUser request:\n${prompt}`;
55
+ }
56
+ export function shellModeSwitchMessage(modeId) {
57
+ const mode = getShellMode(modeId);
58
+ return `Mode switched to ${mode.label}. ${mode.description}`;
59
+ }
60
+ export function shellModeHelpMessage(currentMode) {
61
+ const current = getShellMode(currentMode);
62
+ const options = SHELL_MODES.map(mode => `${mode.commandId} (${mode.shortcutHint})`).join(" | ");
63
+ return `Current mode: ${current.label}. Available modes: ${options}`;
64
+ }
65
+ export function buildShellModeSlashCommands() {
66
+ return [{
67
+ id: "/mode",
68
+ label: "/mode",
69
+ description: "Show the current mode and available mode switches",
70
+ keyHint: "m"
71
+ }, ...SHELL_MODES.map(mode => ({
72
+ id: mode.commandId,
73
+ label: mode.commandId,
74
+ description: `Switch to ${mode.label} mode`,
75
+ keyHint: mode.shortcutHint.replace("Alt+", "A")
76
+ }))];
77
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SHELL_MODES","id","label","composerLabel","description","tone","commandId","shortcutHint","promptPrefix","listShellModes","getShellMode","modeId","find","mode","nextShellMode","currentMode","index","findIndex","length","findShellModeByCommand","applyShellModePrompt","prompt","shellModeSwitchMessage","shellModeHelpMessage","current","options","map","join","buildShellModeSlashCommands","keyHint","replace"],"sources":["shell-modes.ts"],"sourcesContent":["import type { SlashCommandItem } from \"./types.js\";\n\nexport type ShellModeId = \"agent\" | \"plan\" | \"read-only\" | \"auto-approve\";\nexport type ShellModeTone = \"accent\" | \"warning\" | \"muted\" | \"danger\";\n\nexport interface ShellModeDefinition {\n\tid: ShellModeId;\n\tlabel: string;\n\tcomposerLabel: string;\n\tdescription: string;\n\ttone: ShellModeTone;\n\tcommandId: string;\n\tshortcutHint: string;\n\tpromptPrefix?: string;\n}\n\nconst SHELL_MODES: ShellModeDefinition[] = [\n\t{\n\t\tid: \"agent\",\n\t\tlabel: \"Agent\",\n\t\tcomposerLabel: \"AGENT\",\n\t\tdescription: \"Normal coding mode. The agent can inspect, edit, and use tools with approval as needed.\",\n\t\ttone: \"accent\",\n\t\tcommandId: \"/mode agent\",\n\t\tshortcutHint: \"Alt+1\",\n\t},\n\t{\n\t\tid: \"plan\",\n\t\tlabel: \"Plan\",\n\t\tcomposerLabel: \"PLAN\",\n\t\tdescription: \"Analysis-first mode. The agent should reason, propose steps, and avoid making changes unless asked.\",\n\t\ttone: \"warning\",\n\t\tcommandId: \"/mode plan\",\n\t\tshortcutHint: \"Alt+2\",\n\t\tpromptPrefix:\n\t\t\t\"Plan mode is active. Analyze the task first, explain the intended implementation, and avoid making code changes or running mutating tools unless the user explicitly asks for execution.\",\n\t},\n\t{\n\t\tid: \"read-only\",\n\t\tlabel: \"Read Only\",\n\t\tcomposerLabel: \"READ ONLY\",\n\t\tdescription: \"Inspection mode. The agent should read, explain, review, and avoid changing files or running risky commands.\",\n\t\ttone: \"muted\",\n\t\tcommandId: \"/mode read-only\",\n\t\tshortcutHint: \"Alt+3\",\n\t\tpromptPrefix:\n\t\t\t\"Read-only mode is active. Do not modify files, execute risky shell commands, or take side-effecting actions. Limit the work to inspection, diagnosis, explanation, and review.\",\n\t},\n\t{\n\t\tid: \"auto-approve\",\n\t\tlabel: \"Auto Approve\",\n\t\tcomposerLabel: \"AUTO\",\n\t\tdescription: \"Fast execution mode. Risky tool approvals are automatically allowed when possible.\",\n\t\ttone: \"danger\",\n\t\tcommandId: \"/mode auto-approve\",\n\t\tshortcutHint: \"Alt+4\",\n\t},\n];\n\nexport function listShellModes(): ShellModeDefinition[] {\n\treturn SHELL_MODES;\n}\n\nexport function getShellMode(modeId: ShellModeId): ShellModeDefinition {\n\treturn SHELL_MODES.find((mode) => mode.id === modeId) ?? SHELL_MODES[0]!;\n}\n\nexport function nextShellMode(currentMode: ShellModeId): ShellModeId {\n\tconst index = SHELL_MODES.findIndex((mode) => mode.id === currentMode);\n\treturn SHELL_MODES[(index + 1 + SHELL_MODES.length) % SHELL_MODES.length]?.id ?? \"agent\";\n}\n\nexport function findShellModeByCommand(commandId: string): ShellModeDefinition | undefined {\n\treturn SHELL_MODES.find((mode) => mode.commandId === commandId);\n}\n\nexport function applyShellModePrompt(modeId: ShellModeId, prompt: string): string {\n\tconst mode = getShellMode(modeId);\n\tif (!mode.promptPrefix) {\n\t\treturn prompt;\n\t}\n\n\treturn `${mode.promptPrefix}\\n\\nUser request:\\n${prompt}`;\n}\n\nexport function shellModeSwitchMessage(modeId: ShellModeId): string {\n\tconst mode = getShellMode(modeId);\n\treturn `Mode switched to ${mode.label}. ${mode.description}`;\n}\n\nexport function shellModeHelpMessage(currentMode: ShellModeId): string {\n\tconst current = getShellMode(currentMode);\n\tconst options = SHELL_MODES.map((mode) => `${mode.commandId} (${mode.shortcutHint})`).join(\" | \");\n\treturn `Current mode: ${current.label}. Available modes: ${options}`;\n}\n\nexport function buildShellModeSlashCommands(): SlashCommandItem[] {\n\treturn [\n\t\t{\n\t\t\tid: \"/mode\",\n\t\t\tlabel: \"/mode\",\n\t\t\tdescription: \"Show the current mode and available mode switches\",\n\t\t\tkeyHint: \"m\",\n\t\t},\n\t\t...SHELL_MODES.map((mode) => ({\n\t\t\tid: mode.commandId,\n\t\t\tlabel: mode.commandId,\n\t\t\tdescription: `Switch to ${mode.label} mode`,\n\t\t\tkeyHint: mode.shortcutHint.replace(\"Alt+\", \"A\"),\n\t\t})),\n\t];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ import { buildShellModeSlashCommands, findShellModeByCommand, shellModeHelpMessage } from "./shell-modes.js";
2
+ const ALL_SLASH_COMMANDS = [{
3
+ id: "/new",
4
+ label: "/new",
5
+ description: "Stage a new shell session",
6
+ keyHint: "n"
7
+ }, {
8
+ id: "/clear",
9
+ label: "/clear",
10
+ description: "Start a fresh session immediately",
11
+ keyHint: "l"
12
+ }, {
13
+ id: "/providers",
14
+ label: "/providers",
15
+ description: "Open the provider picker",
16
+ keyHint: "p"
17
+ }, {
18
+ id: "/provider add",
19
+ label: "/provider add",
20
+ description: "Open the guided provider setup flow",
21
+ keyHint: "a"
22
+ }, {
23
+ id: "/models",
24
+ label: "/models",
25
+ description: "Open the model picker",
26
+ keyHint: "m"
27
+ }, {
28
+ id: "/sessions",
29
+ label: "/sessions",
30
+ description: "Open the session picker",
31
+ keyHint: "s"
32
+ }, {
33
+ id: "/resume",
34
+ label: "/resume",
35
+ description: "Open the session picker to resume another chat",
36
+ keyHint: "r"
37
+ }, {
38
+ id: "/compact",
39
+ label: "/compact",
40
+ description: "Manually compact the current session context",
41
+ keyHint: "c"
42
+ }, {
43
+ id: "/stop",
44
+ label: "/stop",
45
+ description: "Interrupt the current request",
46
+ keyHint: "."
47
+ }, {
48
+ id: "/status",
49
+ label: "/status",
50
+ description: "Show the current shell/provider/runtime status",
51
+ keyHint: "t"
52
+ }, {
53
+ id: "/help",
54
+ label: "/help",
55
+ description: "Show a compact overview of available slash commands",
56
+ keyHint: "h"
57
+ }, {
58
+ id: "/review",
59
+ label: "/review",
60
+ description: "Queue a review-first prompt template"
61
+ }, {
62
+ id: "/debug",
63
+ label: "/debug",
64
+ description: "Queue a debugging prompt template"
65
+ }, {
66
+ id: "/provider-check",
67
+ label: "/provider-check",
68
+ description: "Queue a provider verification task"
69
+ }, ...buildShellModeSlashCommands()];
70
+ function helpSummary() {
71
+ const lines = ["Available slash commands:", ...ALL_SLASH_COMMANDS.map(command => `${command.id} - ${command.description}`), "", "Type / to browse the full command list from the composer."];
72
+ return lines.join("\n");
73
+ }
74
+ export function getSlashCommands(query) {
75
+ const trimmed = query.trim().toLowerCase();
76
+ if (!trimmed.startsWith("/")) {
77
+ return [];
78
+ }
79
+ if (trimmed === "/") {
80
+ return ALL_SLASH_COMMANDS;
81
+ }
82
+ return ALL_SLASH_COMMANDS.filter(command => command.id.startsWith(trimmed));
83
+ }
84
+ export function executeSlashCommand(commandId, handlers) {
85
+ switch (commandId) {
86
+ case "/new":
87
+ case "/clear":
88
+ handlers.startNewSession();
89
+ return;
90
+ case "/providers":
91
+ handlers.openOverlay("provider");
92
+ return;
93
+ case "/provider add":
94
+ handlers.openProviderAdd();
95
+ return;
96
+ case "/models":
97
+ handlers.openOverlay("model");
98
+ return;
99
+ case "/sessions":
100
+ case "/resume":
101
+ handlers.openOverlay("session");
102
+ return;
103
+ case "/compact":
104
+ void handlers.compactCurrentSession();
105
+ return;
106
+ case "/mode":
107
+ handlers.pushTimeline(shellModeHelpMessage(handlers.getCurrentMode()));
108
+ return;
109
+ case "/stop":
110
+ handlers.abortActiveRequest();
111
+ return;
112
+ case "/status":
113
+ handlers.pushTimeline(handlers.getStatusSummary());
114
+ return;
115
+ case "/help":
116
+ handlers.pushTimeline(helpSummary());
117
+ return;
118
+ case "/review":
119
+ handlers.queuePromptTemplate("Review current change", "Review the current implementation for bugs, regressions, and missing tests. Focus findings first, then summarize the change surface.", "Queued a review-first task from the slash menu.");
120
+ return;
121
+ case "/debug":
122
+ handlers.queuePromptTemplate("Debug current issue", "Investigate the current failure, identify the root cause, implement the minimal correct fix, and verify the result.", "Queued a debug-oriented task from the slash menu.");
123
+ return;
124
+ case "/provider-check":
125
+ handlers.queuePromptTemplate("Check provider configuration", "Inspect the current provider and model configuration, confirm the active selection, and note any validation or cache issues that still need work.", "Queued a provider-state inspection task from the slash menu.");
126
+ return;
127
+ default:
128
+ const mode = findShellModeByCommand(commandId);
129
+ if (mode) {
130
+ handlers.setMode(mode.id);
131
+ return;
132
+ }
133
+ handlers.pushTimeline(`Unknown slash command: ${commandId}`);
134
+ }
135
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildShellModeSlashCommands","findShellModeByCommand","shellModeHelpMessage","ALL_SLASH_COMMANDS","id","label","description","keyHint","helpSummary","lines","map","command","join","getSlashCommands","query","trimmed","trim","toLowerCase","startsWith","filter","executeSlashCommand","commandId","handlers","startNewSession","openOverlay","openProviderAdd","compactCurrentSession","pushTimeline","getCurrentMode","abortActiveRequest","getStatusSummary","queuePromptTemplate","mode","setMode"],"sources":["slash-commands.ts"],"sourcesContent":["import type { SlashCommandItem } from \"./types.js\";\nimport { buildShellModeSlashCommands, findShellModeByCommand, shellModeHelpMessage, type ShellModeId } from \"./shell-modes.js\";\n\nconst ALL_SLASH_COMMANDS: SlashCommandItem[] = [\n\t{ id: \"/new\", label: \"/new\", description: \"Stage a new shell session\", keyHint: \"n\" },\n\t{ id: \"/clear\", label: \"/clear\", description: \"Start a fresh session immediately\", keyHint: \"l\" },\n\t{ id: \"/providers\", label: \"/providers\", description: \"Open the provider picker\", keyHint: \"p\" },\n\t{ id: \"/provider add\", label: \"/provider add\", description: \"Open the guided provider setup flow\", keyHint: \"a\" },\n\t{ id: \"/models\", label: \"/models\", description: \"Open the model picker\", keyHint: \"m\" },\n\t{ id: \"/sessions\", label: \"/sessions\", description: \"Open the session picker\", keyHint: \"s\" },\n\t{ id: \"/resume\", label: \"/resume\", description: \"Open the session picker to resume another chat\", keyHint: \"r\" },\n\t{ id: \"/compact\", label: \"/compact\", description: \"Manually compact the current session context\", keyHint: \"c\" },\n\t{ id: \"/stop\", label: \"/stop\", description: \"Interrupt the current request\", keyHint: \".\" },\n\t{ id: \"/status\", label: \"/status\", description: \"Show the current shell/provider/runtime status\", keyHint: \"t\" },\n\t{ id: \"/help\", label: \"/help\", description: \"Show a compact overview of available slash commands\", keyHint: \"h\" },\n\t{ id: \"/review\", label: \"/review\", description: \"Queue a review-first prompt template\" },\n\t{ id: \"/debug\", label: \"/debug\", description: \"Queue a debugging prompt template\" },\n\t{ id: \"/provider-check\", label: \"/provider-check\", description: \"Queue a provider verification task\" },\n\t...buildShellModeSlashCommands(),\n];\n\ninterface SlashHandlers {\n\tstartNewSession: () => void;\n\topenOverlay: (kind: \"provider\" | \"model\" | \"session\") => void;\n\topenProviderAdd: () => void;\n\tcompactCurrentSession: () => Promise<void> | void;\n\tabortActiveRequest: () => void;\n\tsetMode: (modeId: ShellModeId) => void;\n\tgetCurrentMode: () => ShellModeId;\n\tgetStatusSummary: () => string;\n\tqueuePromptTemplate: (title: string, prompt: string, summary: string) => void;\n\tpushTimeline: (message: string) => void;\n}\n\nfunction helpSummary(): string {\n\tconst lines = [\n\t\t\"Available slash commands:\",\n\t\t...ALL_SLASH_COMMANDS.map((command) => `${command.id} - ${command.description}`),\n\t\t\"\",\n\t\t\"Type / to browse the full command list from the composer.\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nexport function getSlashCommands(query: string): SlashCommandItem[] {\n\tconst trimmed = query.trim().toLowerCase();\n\tif (!trimmed.startsWith(\"/\")) {\r\n\t\treturn [];\r\n\t}\r\n\tif (trimmed === \"/\") {\r\n\t\treturn ALL_SLASH_COMMANDS;\r\n\t}\r\n\treturn ALL_SLASH_COMMANDS.filter((command) => command.id.startsWith(trimmed));\r\n}\r\n\r\nexport function executeSlashCommand(commandId: string, handlers: SlashHandlers): void {\r\n\tswitch (commandId) {\n\t\tcase \"/new\":\n\t\tcase \"/clear\":\n\t\t\thandlers.startNewSession();\n\t\t\treturn;\n\t\tcase \"/providers\":\n\t\t\thandlers.openOverlay(\"provider\");\n\t\t\treturn;\n\t\tcase \"/provider add\":\r\n\t\t\thandlers.openProviderAdd();\r\n\t\t\treturn;\r\n\t\tcase \"/models\":\n\t\t\thandlers.openOverlay(\"model\");\n\t\t\treturn;\n\t\tcase \"/sessions\":\n\t\tcase \"/resume\":\n\t\t\thandlers.openOverlay(\"session\");\n\t\t\treturn;\n\t\tcase \"/compact\":\n\t\t\tvoid handlers.compactCurrentSession();\n\t\t\treturn;\n\t\tcase \"/mode\":\n\t\t\thandlers.pushTimeline(shellModeHelpMessage(handlers.getCurrentMode()));\n\t\t\treturn;\n\t\tcase \"/stop\":\n\t\t\thandlers.abortActiveRequest();\n\t\t\treturn;\n\t\tcase \"/status\":\n\t\t\thandlers.pushTimeline(handlers.getStatusSummary());\n\t\t\treturn;\n\t\tcase \"/help\":\n\t\t\thandlers.pushTimeline(helpSummary());\n\t\t\treturn;\n\t\tcase \"/review\":\n\t\t\thandlers.queuePromptTemplate(\n\t\t\t\t\"Review current change\",\n\t\t\t\t\"Review the current implementation for bugs, regressions, and missing tests. Focus findings first, then summarize the change surface.\",\r\n\t\t\t\t\"Queued a review-first task from the slash menu.\",\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\tcase \"/debug\":\r\n\t\t\thandlers.queuePromptTemplate(\r\n\t\t\t\t\"Debug current issue\",\r\n\t\t\t\t\"Investigate the current failure, identify the root cause, implement the minimal correct fix, and verify the result.\",\r\n\t\t\t\t\"Queued a debug-oriented task from the slash menu.\",\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\tcase \"/provider-check\":\n\t\t\thandlers.queuePromptTemplate(\n\t\t\t\t\"Check provider configuration\",\n\t\t\t\t\"Inspect the current provider and model configuration, confirm the active selection, and note any validation or cache issues that still need work.\",\n\t\t\t\t\"Queued a provider-state inspection task from the slash menu.\",\n\t\t\t);\n\t\t\treturn;\n\t\tdefault:\n\t\t\tconst mode = findShellModeByCommand(commandId);\n\t\t\tif (mode) {\n\t\t\t\thandlers.setMode(mode.id);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandlers.pushTimeline(`Unknown slash command: ${commandId}`);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ export const wepscliShellTheme = {
2
+ background: "#051018",
3
+ header: "#0a2235",
4
+ panel: "#081827",
5
+ panelAlt: "#0b2738",
6
+ panelMuted: "#07131d",
7
+ border: "#184764",
8
+ accent: "#73d8ff",
9
+ accentStrong: "#d7f4ff",
10
+ text: "#e6f7ff",
11
+ muted: "#7fa5bb",
12
+ success: "#5eead4",
13
+ warning: "#fde68a",
14
+ danger: "#fda4af"
15
+ };
16
+ export const providerFamilyColor = {
17
+ openai: "#7dd3fc",
18
+ anthropic: "#f9a8d4"
19
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"names":["wepscliShellTheme","background","header","panel","panelAlt","panelMuted","border","accent","accentStrong","text","muted","success","warning","danger","providerFamilyColor","openai","anthropic"],"sources":["theme.ts"],"sourcesContent":["export const wepscliShellTheme = {\r\n\tbackground: \"#051018\",\r\n\theader: \"#0a2235\",\r\n\tpanel: \"#081827\",\r\n\tpanelAlt: \"#0b2738\",\r\n\tpanelMuted: \"#07131d\",\r\n\tborder: \"#184764\",\r\n\taccent: \"#73d8ff\",\r\n\taccentStrong: \"#d7f4ff\",\r\n\ttext: \"#e6f7ff\",\r\n\tmuted: \"#7fa5bb\",\r\n\tsuccess: \"#5eead4\",\r\n\twarning: \"#fde68a\",\r\n\tdanger: \"#fda4af\",\r\n};\r\n\r\nexport const providerFamilyColor: Record<\"openai\" | \"anthropic\", string> = {\r\n\topenai: \"#7dd3fc\",\r\n\tanthropic: \"#f9a8d4\",\r\n};\r\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG;EAChCC,UAAU,EAAE,SAAS;EACrBC,MAAM,EAAE,SAAS;EACjBC,KAAK,EAAE,SAAS;EAChBC,QAAQ,EAAE,SAAS;EACnBC,UAAU,EAAE,SAAS;EACrBC,MAAM,EAAE,SAAS;EACjBC,MAAM,EAAE,SAAS;EACjBC,YAAY,EAAE,SAAS;EACvBC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,SAAS;EAChBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE;AACT,CAAC;AAED,OAAO,MAAMC,mBAA2D,GAAG;EAC1EC,MAAM,EAAE,SAAS;EACjBC,SAAS,EAAE;AACZ,CAAC","ignoreList":[]}
@@ -0,0 +1,85 @@
1
+ import { formatToolDiffStats, toolFileChangeLocation, extractToolFileChanges } from "./tool-file-changes.js";
2
+ import { formatToolArgs } from "./tool-messages.js";
3
+ function readRecord(args) {
4
+ return typeof args === "object" && args !== null ? args : undefined;
5
+ }
6
+ function readString(record, keys) {
7
+ if (!record) {
8
+ return undefined;
9
+ }
10
+ for (const key of keys) {
11
+ const value = record[key];
12
+ if (typeof value === "string" && value.trim()) {
13
+ return value.trim();
14
+ }
15
+ }
16
+ return undefined;
17
+ }
18
+ function readCommand(args) {
19
+ return readString(readRecord(args), ["command", "cmd", "script"]);
20
+ }
21
+ function summarizeFileChange(prefix, change) {
22
+ if (!change) {
23
+ return prefix;
24
+ }
25
+ const location = toolFileChangeLocation(change);
26
+ const stats = formatToolDiffStats(change.diffStats);
27
+ return `${prefix} ${location}${stats ? ` (${stats})` : ""}`;
28
+ }
29
+ function classifyToolRisk(toolName, args, fileChanges) {
30
+ const normalized = toolName.toLowerCase();
31
+ const command = readCommand(args);
32
+ const firstFileChange = fileChanges[0];
33
+ if (normalized === "bash" || normalized === "shell_command" || normalized === "shell" || normalized === "exec") {
34
+ return {
35
+ riskLabel: "SHELL COMMAND",
36
+ reason: "This command can execute arbitrary shell operations in the workspace.",
37
+ summary: command ? "Run a shell command in the workspace." : "Run a shell command with arbitrary side effects.",
38
+ commandText: command
39
+ };
40
+ }
41
+ if (normalized === "write" || normalized === "write_file") {
42
+ return {
43
+ riskLabel: "FILE WRITE",
44
+ reason: "This tool will create or overwrite a file on disk.",
45
+ summary: summarizeFileChange("Write", firstFileChange)
46
+ };
47
+ }
48
+ if (normalized === "edit" || normalized === "edit_file" || normalized === "apply_patch" || normalized === "patch") {
49
+ return {
50
+ riskLabel: "FILE EDIT",
51
+ reason: "This tool will modify existing file contents on disk.",
52
+ summary: summarizeFileChange("Edit", firstFileChange)
53
+ };
54
+ }
55
+ return undefined;
56
+ }
57
+ export function createToolApprovalRequest(id, sessionId, toolCallId, toolName, args) {
58
+ const fileChanges = extractToolFileChanges(toolName, args, undefined);
59
+ const classification = classifyToolRisk(toolName, args, fileChanges);
60
+ if (!classification) {
61
+ return undefined;
62
+ }
63
+ return {
64
+ id,
65
+ sessionId,
66
+ toolCallId,
67
+ toolName,
68
+ riskLabel: classification.riskLabel,
69
+ reason: classification.reason,
70
+ summary: classification.summary,
71
+ argsText: formatToolArgs(args),
72
+ commandText: classification.commandText,
73
+ fileChanges
74
+ };
75
+ }
76
+ export function toolApprovalDecisionReason(decision, request) {
77
+ switch (decision) {
78
+ case "allow":
79
+ return "";
80
+ case "reject":
81
+ return `${request.toolName} was rejected by the user before execution.`;
82
+ case "cancel":
83
+ return `${request.toolName} approval was cancelled before execution.`;
84
+ }
85
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["formatToolDiffStats","toolFileChangeLocation","extractToolFileChanges","formatToolArgs","readRecord","args","undefined","readString","record","keys","key","value","trim","readCommand","summarizeFileChange","prefix","change","location","stats","diffStats","classifyToolRisk","toolName","fileChanges","normalized","toLowerCase","command","firstFileChange","riskLabel","reason","summary","commandText","createToolApprovalRequest","id","sessionId","toolCallId","classification","argsText","toolApprovalDecisionReason","decision","request"],"sources":["tool-approval.ts"],"sourcesContent":["import { formatToolDiffStats, toolFileChangeLocation, type ToolFileChange, extractToolFileChanges } from \"./tool-file-changes.js\";\nimport { formatToolArgs } from \"./tool-messages.js\";\n\nexport type ToolApprovalDecision = \"allow\" | \"reject\" | \"cancel\";\n\nexport interface ToolApprovalRequest {\n\tid: string;\n\tsessionId: string;\n\ttoolCallId: string;\n\ttoolName: string;\n\triskLabel: string;\n\treason: string;\n\tsummary: string;\n\targsText: string;\n\tcommandText?: string;\n\tfileChanges: ToolFileChange[];\n}\n\nfunction readRecord(args: unknown): Record<string, unknown> | undefined {\n\treturn typeof args === \"object\" && args !== null ? (args as Record<string, unknown>) : undefined;\n}\n\nfunction readString(record: Record<string, unknown> | undefined, keys: string[]): string | undefined {\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction readCommand(args: unknown): string | undefined {\n\treturn readString(readRecord(args), [\"command\", \"cmd\", \"script\"]);\n}\n\nfunction summarizeFileChange(prefix: string, change: ToolFileChange | undefined): string {\n\tif (!change) {\n\t\treturn prefix;\n\t}\n\n\tconst location = toolFileChangeLocation(change);\n\tconst stats = formatToolDiffStats(change.diffStats);\n\treturn `${prefix} ${location}${stats ? ` (${stats})` : \"\"}`;\n}\n\nfunction classifyToolRisk(\n\ttoolName: string,\n\targs: unknown,\n\tfileChanges: ToolFileChange[],\n): {\n\triskLabel: string;\n\treason: string;\n\tsummary: string;\n\tcommandText?: string;\n} | undefined {\n\tconst normalized = toolName.toLowerCase();\n\tconst command = readCommand(args);\n\tconst firstFileChange = fileChanges[0];\n\n\tif (normalized === \"bash\" || normalized === \"shell_command\" || normalized === \"shell\" || normalized === \"exec\") {\n\t\treturn {\n\t\t\triskLabel: \"SHELL COMMAND\",\n\t\t\treason: \"This command can execute arbitrary shell operations in the workspace.\",\n\t\t\tsummary: command ? \"Run a shell command in the workspace.\" : \"Run a shell command with arbitrary side effects.\",\n\t\t\tcommandText: command,\n\t\t};\n\t}\n\n\tif (normalized === \"write\" || normalized === \"write_file\") {\n\t\treturn {\n\t\t\triskLabel: \"FILE WRITE\",\n\t\t\treason: \"This tool will create or overwrite a file on disk.\",\n\t\t\tsummary: summarizeFileChange(\"Write\", firstFileChange),\n\t\t};\n\t}\n\n\tif (normalized === \"edit\" || normalized === \"edit_file\" || normalized === \"apply_patch\" || normalized === \"patch\") {\n\t\treturn {\n\t\t\triskLabel: \"FILE EDIT\",\n\t\t\treason: \"This tool will modify existing file contents on disk.\",\n\t\t\tsummary: summarizeFileChange(\"Edit\", firstFileChange),\n\t\t};\n\t}\n\n\treturn undefined;\n}\n\nexport function createToolApprovalRequest(\n\tid: string,\n\tsessionId: string,\n\ttoolCallId: string,\n\ttoolName: string,\n\targs: unknown,\n): ToolApprovalRequest | undefined {\n\tconst fileChanges = extractToolFileChanges(toolName, args, undefined);\n\tconst classification = classifyToolRisk(toolName, args, fileChanges);\n\tif (!classification) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tid,\n\t\tsessionId,\n\t\ttoolCallId,\n\t\ttoolName,\n\t\triskLabel: classification.riskLabel,\n\t\treason: classification.reason,\n\t\tsummary: classification.summary,\n\t\targsText: formatToolArgs(args),\n\t\tcommandText: classification.commandText,\n\t\tfileChanges,\n\t};\n}\n\nexport function toolApprovalDecisionReason(decision: ToolApprovalDecision, request: ToolApprovalRequest): string {\n\tswitch (decision) {\n\t\tcase \"allow\":\n\t\t\treturn \"\";\n\t\tcase \"reject\":\n\t\t\treturn `${request.toolName} was rejected by the user before execution.`;\n\t\tcase \"cancel\":\n\t\t\treturn `${request.toolName} approval was cancelled before execution.`;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}