iosm-cli 0.2.15 → 0.2.16

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 (159) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +18 -1
  3. package/dist/cli/args.d.ts +2 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +16 -3
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/core/agent-profiles.d.ts.map +1 -1
  8. package/dist/core/agent-profiles.js +3 -0
  9. package/dist/core/agent-profiles.js.map +1 -1
  10. package/dist/core/agent-session.d.ts +2 -0
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +26 -10
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/agent-teams.d.ts.map +1 -1
  15. package/dist/core/agent-teams.js +12 -9
  16. package/dist/core/agent-teams.js.map +1 -1
  17. package/dist/core/checkpoint/fs-checkpoint.d.ts +14 -0
  18. package/dist/core/checkpoint/fs-checkpoint.d.ts.map +1 -0
  19. package/dist/core/checkpoint/fs-checkpoint.js +211 -0
  20. package/dist/core/checkpoint/fs-checkpoint.js.map +1 -0
  21. package/dist/core/command-dispatcher.d.ts +2 -0
  22. package/dist/core/command-dispatcher.d.ts.map +1 -1
  23. package/dist/core/command-dispatcher.js +78 -13
  24. package/dist/core/command-dispatcher.js.map +1 -1
  25. package/dist/core/mcp/cli.d.ts.map +1 -1
  26. package/dist/core/mcp/cli.js +26 -0
  27. package/dist/core/mcp/cli.js.map +1 -1
  28. package/dist/core/mcp/config.d.ts.map +1 -1
  29. package/dist/core/mcp/config.js +55 -0
  30. package/dist/core/mcp/config.js.map +1 -1
  31. package/dist/core/mcp/index.d.ts +1 -1
  32. package/dist/core/mcp/index.d.ts.map +1 -1
  33. package/dist/core/mcp/index.js.map +1 -1
  34. package/dist/core/mcp/runtime.d.ts +3 -1
  35. package/dist/core/mcp/runtime.d.ts.map +1 -1
  36. package/dist/core/mcp/runtime.js +21 -2
  37. package/dist/core/mcp/runtime.js.map +1 -1
  38. package/dist/core/mcp/types.d.ts +30 -2
  39. package/dist/core/mcp/types.d.ts.map +1 -1
  40. package/dist/core/mcp/types.js.map +1 -1
  41. package/dist/core/package-manager.d.ts +10 -0
  42. package/dist/core/package-manager.d.ts.map +1 -1
  43. package/dist/core/package-manager.js +100 -2
  44. package/dist/core/package-manager.js.map +1 -1
  45. package/dist/core/policy/engine.d.ts +77 -0
  46. package/dist/core/policy/engine.d.ts.map +1 -0
  47. package/dist/core/policy/engine.js +614 -0
  48. package/dist/core/policy/engine.js.map +1 -0
  49. package/dist/core/policy/index.d.ts +2 -0
  50. package/dist/core/policy/index.d.ts.map +1 -0
  51. package/dist/core/policy/index.js +2 -0
  52. package/dist/core/policy/index.js.map +1 -0
  53. package/dist/core/sandbox/executor.d.ts +13 -0
  54. package/dist/core/sandbox/executor.d.ts.map +1 -0
  55. package/dist/core/sandbox/executor.js +64 -0
  56. package/dist/core/sandbox/executor.js.map +1 -0
  57. package/dist/core/sdk.d.ts +2 -2
  58. package/dist/core/sdk.d.ts.map +1 -1
  59. package/dist/core/sdk.js +3 -3
  60. package/dist/core/sdk.js.map +1 -1
  61. package/dist/core/security/index.d.ts +3 -0
  62. package/dist/core/security/index.d.ts.map +1 -0
  63. package/dist/core/security/index.js +3 -0
  64. package/dist/core/security/index.js.map +1 -0
  65. package/dist/core/security/source-security.d.ts +43 -0
  66. package/dist/core/security/source-security.d.ts.map +1 -0
  67. package/dist/core/security/source-security.js +94 -0
  68. package/dist/core/security/source-security.js.map +1 -0
  69. package/dist/core/security/trust-ledger.d.ts +24 -0
  70. package/dist/core/security/trust-ledger.d.ts.map +1 -0
  71. package/dist/core/security/trust-ledger.js +66 -0
  72. package/dist/core/security/trust-ledger.js.map +1 -0
  73. package/dist/core/session-manager.d.ts.map +1 -1
  74. package/dist/core/session-manager.js +128 -15
  75. package/dist/core/session-manager.js.map +1 -1
  76. package/dist/core/settings-manager.d.ts +6 -0
  77. package/dist/core/settings-manager.d.ts.map +1 -1
  78. package/dist/core/settings-manager.js +22 -1
  79. package/dist/core/settings-manager.js.map +1 -1
  80. package/dist/core/system-prompt.d.ts.map +1 -1
  81. package/dist/core/system-prompt.js +9 -2
  82. package/dist/core/system-prompt.js.map +1 -1
  83. package/dist/core/task-plan.d.ts +1 -0
  84. package/dist/core/task-plan.d.ts.map +1 -1
  85. package/dist/core/task-plan.js +103 -0
  86. package/dist/core/task-plan.js.map +1 -1
  87. package/dist/core/tools/apply-patch.d.ts +29 -0
  88. package/dist/core/tools/apply-patch.d.ts.map +1 -0
  89. package/dist/core/tools/apply-patch.js +167 -0
  90. package/dist/core/tools/apply-patch.js.map +1 -0
  91. package/dist/core/tools/bash.d.ts.map +1 -1
  92. package/dist/core/tools/bash.js +15 -1
  93. package/dist/core/tools/bash.js.map +1 -1
  94. package/dist/core/tools/git-common.d.ts.map +1 -1
  95. package/dist/core/tools/git-common.js +15 -1
  96. package/dist/core/tools/git-common.js.map +1 -1
  97. package/dist/core/tools/index.d.ts +20 -2
  98. package/dist/core/tools/index.d.ts.map +1 -1
  99. package/dist/core/tools/index.js +85 -25
  100. package/dist/core/tools/index.js.map +1 -1
  101. package/dist/core/tools/permissions.d.ts +16 -0
  102. package/dist/core/tools/permissions.d.ts.map +1 -1
  103. package/dist/core/tools/permissions.js +34 -1
  104. package/dist/core/tools/permissions.js.map +1 -1
  105. package/dist/core/tools/task.d.ts.map +1 -1
  106. package/dist/core/tools/task.js +68 -24
  107. package/dist/core/tools/task.js.map +1 -1
  108. package/dist/core/tools/tool-search.d.ts +24 -0
  109. package/dist/core/tools/tool-search.d.ts.map +1 -0
  110. package/dist/core/tools/tool-search.js +85 -0
  111. package/dist/core/tools/tool-search.js.map +1 -0
  112. package/dist/core/tools/tool-suggest.d.ts +18 -0
  113. package/dist/core/tools/tool-suggest.d.ts.map +1 -0
  114. package/dist/core/tools/tool-suggest.js +94 -0
  115. package/dist/core/tools/tool-suggest.js.map +1 -0
  116. package/dist/core/tools/verification-runner.d.ts.map +1 -1
  117. package/dist/core/tools/verification-runner.js +15 -1
  118. package/dist/core/tools/verification-runner.js.map +1 -1
  119. package/dist/core/unified-exec.d.ts +39 -0
  120. package/dist/core/unified-exec.d.ts.map +1 -0
  121. package/dist/core/unified-exec.js +286 -0
  122. package/dist/core/unified-exec.js.map +1 -0
  123. package/dist/main.d.ts.map +1 -1
  124. package/dist/main.js +93 -11
  125. package/dist/main.js.map +1 -1
  126. package/dist/modes/acp/acp-mode.d.ts +17 -0
  127. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  128. package/dist/modes/acp/acp-mode.js +352 -0
  129. package/dist/modes/acp/acp-mode.js.map +1 -0
  130. package/dist/modes/index.d.ts +2 -1
  131. package/dist/modes/index.d.ts.map +1 -1
  132. package/dist/modes/index.js +1 -0
  133. package/dist/modes/index.js.map +1 -1
  134. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  135. package/dist/modes/interactive/components/tool-execution.js +217 -0
  136. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  137. package/dist/modes/interactive/interactive-mode.d.ts +8 -0
  138. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  139. package/dist/modes/interactive/interactive-mode.js +159 -72
  140. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  141. package/dist/modes/rpc/rpc-client.d.ts +25 -1
  142. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  143. package/dist/modes/rpc/rpc-client.js +33 -0
  144. package/dist/modes/rpc/rpc-client.js.map +1 -1
  145. package/dist/modes/rpc/rpc-mode.d.ts +13 -1
  146. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  147. package/dist/modes/rpc/rpc-mode.js +189 -28
  148. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  149. package/dist/modes/rpc/rpc-types.d.ts +54 -1
  150. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  151. package/dist/modes/rpc/rpc-types.js.map +1 -1
  152. package/dist/utils/tools-manager.d.ts.map +1 -1
  153. package/dist/utils/tools-manager.js +96 -9
  154. package/dist/utils/tools-manager.js.map +1 -1
  155. package/docs/README.md +2 -0
  156. package/docs/acp-rpc-mapping.md +38 -0
  157. package/docs/configuration.generated.md +81 -0
  158. package/docs/configuration.md +7 -0
  159. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"command-dispatcher.js","sourceRoot":"","sources":["../../src/core/command-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, spawnSync } from \"node:child_process\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport { getShareViewerUrl } from \"../config.js\";\nimport { getChangelogPath, parseChangelog } from \"../utils/changelog.js\";\nimport type { SettingsManager } from \"./settings-manager.js\";\nimport type { SessionEntry, SessionTreeNode } from \"./session-manager.js\";\n\nexport interface BuiltinCommandContext {\n\tsession: AgentSession;\n\tsettingsManager: SettingsManager;\n}\n\nexport interface BuiltinCommandResult {\n\thandled: boolean;\n\tlevel?: \"status\" | \"warning\" | \"error\";\n\tmessage?: string;\n\ttext?: string;\n\tfilePath?: string;\n}\n\nconst CHECKPOINT_LABEL_PREFIX = \"checkpoint:\";\n\nexport function parseSlashArgs(input: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet quote: '\"' | \"'\" | undefined;\n\tlet escape = false;\n\n\tfor (const ch of input.trim()) {\n\t\tif (escape) {\n\t\t\tcurrent += ch;\n\t\t\tescape = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tescape = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (ch === quote) {\n\t\t\t\tquote = undefined;\n\t\t\t} else {\n\t\t\t\tcurrent += ch;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\s/.test(ch)) {\n\t\t\tif (current) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent += ch;\n\t}\n\n\tif (escape) {\n\t\tcurrent += \"\\\\\";\n\t}\n\tif (current) {\n\t\targs.push(current);\n\t}\n\n\treturn args;\n}\n\nfunction formatPermissionStatus(settingsManager: SettingsManager): string {\n\tconst mode = settingsManager.getPermissionMode();\n\tconst allowRules = settingsManager.getPermissionAllowRules();\n\tconst denyRules = settingsManager.getPermissionDenyRules();\n\treturn `Permissions: ${mode}${allowRules.length > 0 ? ` · allow rules: ${allowRules.length}` : \"\"}${denyRules.length > 0 ? ` · deny rules: ${denyRules.length}` : \"\"}`;\n}\n\nfunction buildSessionStatsText(session: AgentSession): string {\n\tconst stats = session.getSessionStats();\n\tlet info = \"Session Info\\n\\n\";\n\tinfo += `File: ${stats.sessionFile ?? \"(ephemeral)\"}\\n`;\n\tinfo += `ID: ${stats.sessionId}\\n\\n`;\n\tinfo += \"Messages\\n\";\n\tinfo += `User: ${stats.userMessages}\\n`;\n\tinfo += `Assistant: ${stats.assistantMessages}\\n`;\n\tinfo += `Tool Calls: ${stats.toolCalls}\\n`;\n\tinfo += `Tool Results: ${stats.toolResults}\\n`;\n\tinfo += `Total: ${stats.totalMessages}\\n\\n`;\n\tinfo += \"Tokens\\n\";\n\tinfo += `Input: ${stats.tokens.input.toLocaleString()}\\n`;\n\tinfo += `Output: ${stats.tokens.output.toLocaleString()}\\n`;\n\tif (stats.tokens.cacheRead > 0) {\n\t\tinfo += `Cache Read: ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t}\n\tif (stats.tokens.cacheWrite > 0) {\n\t\tinfo += `Cache Write: ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t}\n\tinfo += `Total: ${stats.tokens.total.toLocaleString()}\\n`;\n\tif (stats.cost > 0) {\n\t\tinfo += `\\nCost\\nTotal: ${stats.cost.toFixed(4)}\\n`;\n\t}\n\treturn info.trimEnd();\n}\n\nfunction normalizePermissionRule(rule: string): string | undefined {\n\tconst normalized = rule.trim();\n\tif (!normalized || !normalized.includes(\":\")) return undefined;\n\treturn normalized;\n}\n\nfunction extractEntryText(entry: SessionEntry): string {\n\tif (entry.type === \"message\") {\n\t\tconst message = entry.message as { content?: unknown; role?: string; command?: string };\n\t\tif (typeof message.command === \"string\" && message.command.trim().length > 0) {\n\t\t\treturn message.command.replace(/\\s+/g, \" \").trim();\n\t\t}\n\t\tif (!(\"content\" in message)) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst content = message.content;\n\t\tif (typeof content === \"string\") return content.replace(/\\s+/g, \" \").trim();\n\t\tif (Array.isArray(content)) {\n\t\t\treturn content\n\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\" \")\n\t\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t\t.trim();\n\t\t}\n\t}\n\tif (entry.type === \"branch_summary\" || entry.type === \"compaction\") {\n\t\treturn entry.summary.replace(/\\s+/g, \" \").trim();\n\t}\n\tif (entry.type === \"label\") {\n\t\treturn entry.label?.trim() ?? \"\";\n\t}\n\tif (entry.type === \"session_info\") {\n\t\treturn entry.name?.trim() ?? \"\";\n\t}\n\tif (entry.type === \"model_change\") {\n\t\treturn `${entry.provider}/${entry.modelId}`;\n\t}\n\tif (entry.type === \"thinking_level_change\") {\n\t\treturn entry.thinkingLevel;\n\t}\n\treturn \"\";\n}\n\nfunction summarizeEntry(entry: SessionEntry): string {\n\tconst text = extractEntryText(entry);\n\tif (!text) return \"\";\n\tconst max = 72;\n\treturn text.length > max ? `${text.slice(0, max - 3)}...` : text;\n}\n\nfunction flattenTree(nodes: SessionTreeNode[], depth = 0, lines: string[] = [], currentLeafId: string | null = null): string[] {\n\tfor (const node of nodes) {\n\t\tconst marker = node.entry.id === currentLeafId ? \"*\" : \" \";\n\t\tconst indent = \" \".repeat(depth);\n\t\tconst label = node.label ? ` [${node.label}]` : \"\";\n\t\tconst summary = summarizeEntry(node.entry);\n\t\tlines.push(\n\t\t\t`${marker} ${indent}${node.entry.id} (${node.entry.type}${label})${summary ? ` - ${summary}` : \"\"}`,\n\t\t);\n\t\tflattenTree(node.children, depth + 1, lines, currentLeafId);\n\t}\n\treturn lines;\n}\n\nfunction buildTreeText(session: AgentSession): string {\n\tconst tree = session.sessionManager.getTree();\n\tif (tree.length === 0) {\n\t\treturn \"No entries in session.\";\n\t}\n\tconst currentLeafId = session.sessionManager.getLeafId();\n\tconst lines = flattenTree(tree, 0, [], currentLeafId);\n\tlines.push(\"\");\n\tlines.push(currentLeafId ? `Current leaf: ${currentLeafId}` : \"Current leaf: (root)\");\n\tlines.push(\"Usage: /tree [list|<entry-id>|goto <entry-id>]\");\n\treturn lines.join(\"\\n\");\n}\n\ninterface SessionCheckpoint {\n\tname: string;\n\ttargetId: string;\n\tlabelEntryId: string;\n\ttimestamp: string;\n}\n\nfunction parseCheckpointNameFromLabel(label: string | undefined): string | undefined {\n\tif (!label) return undefined;\n\tif (!label.startsWith(CHECKPOINT_LABEL_PREFIX)) return undefined;\n\tconst name = label.slice(CHECKPOINT_LABEL_PREFIX.length).trim();\n\treturn name.length > 0 ? name : undefined;\n}\n\nfunction buildCheckpointLabel(name: string): string {\n\treturn `${CHECKPOINT_LABEL_PREFIX}${name}`;\n}\n\nfunction normalizeCheckpointName(raw: string): string | undefined {\n\tconst normalized = raw.replace(/\\s+/g, \" \").trim();\n\tif (!normalized) return undefined;\n\tif (normalized.length > 80) return undefined;\n\treturn normalized;\n}\n\nfunction getSessionCheckpoints(session: AgentSession): SessionCheckpoint[] {\n\tconst active = new Map<string, SessionCheckpoint>();\n\tfor (const entry of session.sessionManager.getEntries()) {\n\t\tif (entry.type !== \"label\") continue;\n\t\tconst name = parseCheckpointNameFromLabel(entry.label);\n\t\tif (!name) {\n\t\t\tactive.delete(entry.targetId);\n\t\t\tcontinue;\n\t\t}\n\t\tactive.set(entry.targetId, {\n\t\t\tname,\n\t\t\ttargetId: entry.targetId,\n\t\t\tlabelEntryId: entry.id,\n\t\t\ttimestamp: entry.timestamp,\n\t\t});\n\t}\n\treturn [...active.values()].sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n}\n\nfunction buildDefaultCheckpointName(checkpoints: SessionCheckpoint[]): string {\n\tconst used = new Set(checkpoints.map((checkpoint) => checkpoint.name.toLowerCase()));\n\tlet index = 1;\n\twhile (used.has(`cp-${index}`)) {\n\t\tindex += 1;\n\t}\n\treturn `cp-${index}`;\n}\n\nfunction formatCheckpointList(session: AgentSession, checkpoints: SessionCheckpoint[]): string {\n\tif (checkpoints.length === 0) {\n\t\treturn \"No checkpoints yet.\\nCreate one with: /checkpoint [name]\";\n\t}\n\tconst newestFirst = [...checkpoints].reverse();\n\tconst lines = newestFirst.map((checkpoint, index) => {\n\t\tconst target = session.sessionManager.getEntry(checkpoint.targetId);\n\t\tconst type = target?.type ?? \"missing\";\n\t\treturn `${index + 1}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t});\n\tlines.push(\"\");\n\tlines.push(\"Usage: /rollback [name|index]\");\n\treturn lines.join(\"\\n\");\n}\n\nasync function runCommandCapture(command: string, args: string[]): Promise<{ code: number | null; stdout: string; stderr: string }> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst child = spawn(command, args);\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tchild.stdout?.on(\"data\", (chunk) => {\n\t\t\tstdout += chunk.toString();\n\t\t});\n\t\tchild.stderr?.on(\"data\", (chunk) => {\n\t\t\tstderr += chunk.toString();\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"close\", (code) => {\n\t\t\tresolve({ code, stdout, stderr });\n\t\t});\n\t});\n}\n\nexport async function dispatchBuiltinSlashCommand(\n\ttext: string,\n\tcontext: BuiltinCommandContext,\n): Promise<BuiltinCommandResult> {\n\tif (!text.startsWith(\"/\")) {\n\t\treturn { handled: false };\n\t}\n\tconst args = parseSlashArgs(text);\n\tconst commandToken = args[0]?.toLowerCase();\n\tif (!commandToken?.startsWith(\"/\")) {\n\t\treturn { handled: false };\n\t}\n\tconst command = commandToken.slice(1);\n\tconst rest = args.slice(1);\n\tconst { session, settingsManager } = context;\n\n\tif (command === \"help\") {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\ttext: [\n\t\t\t\t\"Core commands:\",\n\t\t\t\t\"/status /abort /yolo /permissions /model /new /resume /session /name /copy /export /fork\",\n\t\t\t\t\"/compact /reload /tree /checkpoint /rollback /changelog /share /logout\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tif (command === \"yolo\") {\n\t\tconst value = rest[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tconst nextMode = settingsManager.getPermissionMode() === \"yolo\" ? \"ask\" : \"yolo\";\n\t\t\tsettingsManager.setPermissionMode(nextMode);\n\t\t\treturn { handled: true, level: \"status\", message: `YOLO mode: ${nextMode === \"yolo\" ? \"ON\" : \"OFF\"}` };\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `YOLO mode: ${settingsManager.getPermissionMode() === \"yolo\" ? \"ON\" : \"OFF\"}`,\n\t\t\t};\n\t\t}\n\t\tif (value === \"on\") {\n\t\t\tsettingsManager.setPermissionMode(\"yolo\");\n\t\t\treturn { handled: true, level: \"status\", message: \"YOLO mode: ON (tool confirmations disabled)\" };\n\t\t}\n\t\tif (value === \"off\") {\n\t\t\tsettingsManager.setPermissionMode(\"ask\");\n\t\t\treturn { handled: true, level: \"status\", message: \"YOLO mode: OFF (tool confirmations enabled)\" };\n\t\t}\n\t\treturn { handled: true, level: \"warning\", message: \"Usage: /yolo [on|off|status]\" };\n\t}\n\n\tif (command === \"permissions\") {\n\t\tconst value = rest[0]?.toLowerCase();\n\t\tif (!value || value === \"status\") {\n\t\t\treturn { handled: true, level: \"status\", message: formatPermissionStatus(settingsManager) };\n\t\t}\n\t\tif (value === \"ask\" || value === \"auto\" || value === \"yolo\") {\n\t\t\tsettingsManager.setPermissionMode(value);\n\t\t\treturn { handled: true, level: \"status\", message: `Permissions: ${value}` };\n\t\t}\n\t\tif (value === \"allow\" || value === \"deny\") {\n\t\t\tconst action = rest[1]?.toLowerCase();\n\t\t\tconst isAllow = value === \"allow\";\n\t\t\tlet rules = isAllow ? settingsManager.getPermissionAllowRules() : settingsManager.getPermissionDenyRules();\n\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\treturn { handled: true, level: \"status\", message: `Permissions ${value} rules: (empty)` };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\thandled: true,\n\t\t\t\t\tlevel: \"status\",\n\t\t\t\t\ttext: rules.map((rule) => `- ${rule}`).join(\"\\n\"),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = rest.slice(2).join(\" \");\n\t\t\t\tconst normalizedRule = normalizePermissionRule(rawRule);\n\t\t\t\tif (!normalizedRule) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Usage: /permissions ${value} add <tool:match>` };\n\t\t\t\t}\n\t\t\t\tif (!rules.includes(normalizedRule)) {\n\t\t\t\t\trules = [...rules, normalizedRule];\n\t\t\t\t\tif (isAllow) {\n\t\t\t\t\t\tsettingsManager.setPermissionAllowRules(rules);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettingsManager.setPermissionDenyRules(rules);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { handled: true, level: \"status\", message: `Added ${value} rule: ${normalizedRule}` };\n\t\t\t}\n\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = rest.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\thandled: true,\n\t\t\t\t\t\tlevel: \"warning\",\n\t\t\t\t\t\tmessage: `Usage: /permissions ${value} remove <tool:match>`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\trules = rules.filter((rule) => rule !== rawRule);\n\t\t\t\tif (isAllow) {\n\t\t\t\t\tsettingsManager.setPermissionAllowRules(rules);\n\t\t\t\t} else {\n\t\t\t\t\tsettingsManager.setPermissionDenyRules(rules);\n\t\t\t\t}\n\t\t\t\treturn { handled: true, level: \"status\", message: `Removed ${value} rule: ${rawRule}` };\n\t\t\t}\n\n\t\t\treturn { handled: true, level: \"warning\", message: `Usage: /permissions ${value} [list|add|remove]` };\n\t\t}\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"warning\",\n\t\t\tmessage: \"Usage: /permissions [ask|auto|yolo|status|allow|deny]\",\n\t\t};\n\t}\n\n\tif (command === \"abort\") {\n\t\tawait session.abort();\n\t\treturn { handled: true, level: \"status\", message: \"Abort signal sent.\" };\n\t}\n\n\tif (command === \"compact\") {\n\t\tconst customInstructions = rest.join(\" \").trim() || undefined;\n\t\ttry {\n\t\t\tconst result = await session.compact(customInstructions);\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Compaction complete. First kept: ${result.firstKeptEntryId}. Tokens before: ${result.tokensBefore}.`,\n\t\t\t\ttext: result.summary,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: `Compaction failed: ${message}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"status\") {\n\t\tconst model = session.model ? `${session.model.provider}/${session.model.id}` : \"not selected\";\n\t\tconst sessionLabel = session.sessionName || session.sessionId || \"(unknown)\";\n\t\tconst lines = [\n\t\t\t`Model: ${model}`,\n\t\t\t`Session: ${sessionLabel}`,\n\t\t\t`Streaming: ${session.isStreaming ? \"yes\" : \"no\"}`,\n\t\t\t`Compacting: ${session.isCompacting ? \"yes\" : \"no\"}`,\n\t\t\t`Queued messages: ${session.pendingMessageCount}`,\n\t\t\tformatPermissionStatus(settingsManager),\n\t\t];\n\t\treturn { handled: true, level: \"status\", text: lines.join(\"\\n\") };\n\t}\n\n\tif (command === \"new\" || command === \"clear\") {\n\t\tconst cancelled = !(await session.newSession());\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\tmessage: cancelled ? \"New session cancelled.\" : \"Started new session.\",\n\t\t};\n\t}\n\n\tif (command === \"reload\") {\n\t\tif (session.isStreaming) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Wait for the current response to finish before reloading.\" };\n\t\t}\n\t\tif (session.isCompacting) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Wait for compaction to finish before reloading.\" };\n\t\t}\n\t\tawait session.reload();\n\t\treturn { handled: true, level: \"status\", message: \"Reloaded extensions, skills, prompts, and themes.\" };\n\t}\n\n\tif (command === \"session\") {\n\t\treturn { handled: true, level: \"status\", text: buildSessionStatsText(session) };\n\t}\n\n\tif (command === \"name\") {\n\t\tconst name = rest.join(\" \").trim();\n\t\tif (!name) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /name <session-name>\" };\n\t\t}\n\t\tsession.setSessionName(name);\n\t\treturn { handled: true, level: \"status\", message: `Session name set: ${name}` };\n\t}\n\n\tif (command === \"copy\") {\n\t\tconst textResult = session.getLastAssistantText();\n\t\tif (!textResult) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No agent messages to copy yet.\" };\n\t\t}\n\t\treturn { handled: true, level: \"status\", text: textResult };\n\t}\n\n\tif (command === \"export\") {\n\t\tconst outputPath = rest.length > 0 ? rest.join(\" \") : undefined;\n\t\tconst path = await session.exportToHtml(outputPath);\n\t\treturn { handled: true, level: \"status\", message: `Session exported to: ${path}`, filePath: path };\n\t}\n\n\tif (command === \"model\") {\n\t\tconst value = rest.join(\" \").trim();\n\t\tif (!value) {\n\t\t\tconst current = session.model;\n\t\t\tif (!current) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"No model selected. Usage: /model <provider/model-id>\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Current model: ${current.provider}/${current.id}`,\n\t\t\t};\n\t\t}\n\t\tif (value.toLowerCase() === \"cycle\") {\n\t\t\tconst next = await session.cycleModel();\n\t\t\tif (!next) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"No next model available to cycle.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Model set: ${next.model.provider}/${next.model.id} (thinking: ${next.thinkingLevel})`,\n\t\t\t};\n\t\t}\n\n\t\tconst allModels = await session.modelRegistry.getAvailable();\n\t\tlet selected =\n\t\t\tallModels.find((model) => `${model.provider}/${model.id}`.toLowerCase() === value.toLowerCase()) ??\n\t\t\tallModels.find((model) => model.id.toLowerCase() === value.toLowerCase());\n\n\t\tif (!selected) {\n\t\t\tconst asProviderModel = value.split(\"/\");\n\t\t\tif (asProviderModel.length === 2) {\n\t\t\t\tconst provider = asProviderModel[0]?.trim().toLowerCase();\n\t\t\t\tconst modelId = asProviderModel[1]?.trim().toLowerCase();\n\t\t\t\tselected = allModels.find(\n\t\t\t\t\t(model) => model.provider.toLowerCase() === provider && model.id.toLowerCase() === modelId,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!selected) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: `Model not found: ${value}. Use /model <provider/model-id>.`,\n\t\t\t};\n\t\t}\n\n\t\tawait session.setModel(selected);\n\t\treturn { handled: true, level: \"status\", message: `Model set: ${selected.provider}/${selected.id}` };\n\t}\n\n\tif (command === \"tree\") {\n\t\tconst action = rest[0]?.toLowerCase();\n\t\tif (!action || action === \"list\" || action === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: buildTreeText(session) };\n\t\t}\n\t\tif (action === \"help\" || action === \"-h\" || action === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /tree\\n /tree <entry-id>\\n /tree goto <entry-id>\\n /tree list\",\n\t\t\t};\n\t\t}\n\n\t\tconst targetId = action === \"goto\" ? rest.slice(1).join(\" \").trim() : rest.join(\" \").trim();\n\t\tif (!targetId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /tree [list|<entry-id>|goto <entry-id>]\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await session.navigateTree(targetId, { summarize: false });\n\t\t\tif (result.aborted || result.cancelled) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"Tree navigation cancelled.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Navigated to: ${targetId}`,\n\t\t\t\ttext: result.editorText,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `Tree navigation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"checkpoint\") {\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\t\tconst checkpoints = getSessionCheckpoints(session);\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: formatCheckpointList(session, checkpoints) };\n\t\t}\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /checkpoint [name]\\n /checkpoint list\",\n\t\t\t};\n\t\t}\n\n\t\tconst leafId = session.sessionManager.getLeafId();\n\t\tif (!leafId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Cannot create checkpoint yet (session has no entries).\" };\n\t\t}\n\n\t\tconst requestedName = rest.join(\" \");\n\t\tconst name = requestedName ? normalizeCheckpointName(requestedName) : buildDefaultCheckpointName(checkpoints);\n\t\tif (!name) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Invalid checkpoint name. Use 1-80 visible characters.\" };\n\t\t}\n\n\t\tsession.sessionManager.appendLabelChange(leafId, buildCheckpointLabel(name));\n\t\treturn { handled: true, level: \"status\", message: `Checkpoint saved: ${name} (${leafId})` };\n\t}\n\n\tif (command === \"rollback\") {\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\t\tconst checkpoints = getSessionCheckpoints(session);\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: formatCheckpointList(session, checkpoints) };\n\t\t}\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /rollback\\n /rollback <name>\\n /rollback <index>\\n /rollback list\",\n\t\t\t};\n\t\t}\n\t\tif (checkpoints.length === 0) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No checkpoints available. Create one with /checkpoint.\" };\n\t\t}\n\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst selector = rest.join(\" \").trim();\n\t\tlet target: SessionCheckpoint | undefined = newestFirst[0];\n\t\tif (selector) {\n\t\t\tconst numeric = Number.parseInt(selector, 10);\n\t\t\tif (Number.isFinite(numeric) && `${numeric}` === selector) {\n\t\t\t\ttarget = newestFirst[numeric - 1];\n\t\t\t\tif (!target) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Checkpoint index ${numeric} is out of range.` };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttarget = newestFirst.find((checkpoint) => checkpoint.name === selector);\n\t\t\t\tif (!target) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Checkpoint \"${selector}\" not found.` };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!target) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No rollback target selected.\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await session.navigateTree(target.targetId, { summarize: false });\n\t\t\tif (result.cancelled || result.aborted) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"Rollback cancelled.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Rolled back to checkpoint: ${target.name}`,\n\t\t\t\ttext: result.editorText,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `Rollback failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"changelog\") {\n\t\tconst entries = parseChangelog(getChangelogPath());\n\t\tconst changelogText =\n\t\t\tentries.length > 0 ? entries.slice().reverse().map((entry) => entry.content).join(\"\\n\\n\") : \"No changelog entries found.\";\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\ttext: changelogText,\n\t\t};\n\t}\n\n\tif (command === \"share\") {\n\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\tif (authResult.status !== 0) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: \"GitHub CLI is not logged in. Run `gh auth login` first.\",\n\t\t\t};\n\t\t}\n\n\t\tconst tmpFile = join(tmpdir(), `iosm-session-${Date.now()}.html`);\n\t\ttry {\n\t\t\tawait session.exportToHtml(tmpFile);\n\t\t\tconst result = await runCommandCapture(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\tif (result.code !== 0) {\n\t\t\t\treturn {\n\t\t\t\t\thandled: true,\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tmessage: `Failed to create gist: ${result.stderr.trim() || \"Unknown error\"}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst gistUrl = result.stdout.trim();\n\t\t\tconst gistId = gistUrl.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\treturn { handled: true, level: \"error\", message: \"Failed to parse gist ID from gh output.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: `Share URL: ${getShareViewerUrl(gistId)}\\nGist: ${gistUrl}`,\n\t\t\t};\n\t\t} finally {\n\t\t\tif (existsSync(tmpFile)) {\n\t\t\t\trmSync(tmpFile, { force: true });\n\t\t\t}\n\t\t}\n\t}\n\n\tif (command === \"auth\" || command === \"login\") {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"warning\",\n\t\t\tmessage: \"Interactive /login flow is not available in Telegram bridge yet. Use local CLI /login, then continue remotely.\",\n\t\t};\n\t}\n\n\tif (command === \"logout\") {\n\t\tconst provider = rest.join(\" \").trim() || session.model?.provider;\n\t\tif (!provider) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /logout <provider> (or select a model first)\" };\n\t\t}\n\t\tsession.modelRegistry.authStorage.logout(provider);\n\t\treturn { handled: true, level: \"status\", message: `Logged out provider: ${provider}` };\n\t}\n\n\tif (command === \"resume\") {\n\t\tconst sessionPath = rest.join(\" \").trim();\n\t\tif (!sessionPath) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /resume <session-path>\" };\n\t\t}\n\t\tconst cancelled = !(await session.switchSession(sessionPath));\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\tmessage: cancelled ? \"Session switch cancelled.\" : `Switched session: ${sessionPath}`,\n\t\t};\n\t}\n\n\tif (command === \"fork\") {\n\t\tconst entryId = rest.join(\" \").trim();\n\t\tif (!entryId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /fork <entry-id>\" };\n\t\t}\n\t\tconst result = await session.fork(entryId);\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: result.cancelled ? \"warning\" : \"status\",\n\t\t\tmessage: result.cancelled ? \"Fork cancelled.\" : `Forked from message: ${entryId}`,\n\t\t\ttext: result.selectedText,\n\t\t};\n\t}\n\n\treturn { handled: false };\n}\n"]}
1
+ {"version":3,"file":"command-dispatcher.js","sourceRoot":"","sources":["../../src/core/command-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport { getShareViewerUrl } from \"../config.js\";\nimport { createFsCheckpointSnapshot, restoreFsCheckpointSnapshot, type FsCheckpointMetadata } from \"./checkpoint/fs-checkpoint.js\";\nimport { getChangelogPath, parseChangelog } from \"../utils/changelog.js\";\nimport type { PolicyEngineV2 } from \"./policy/index.js\";\nimport type { SettingsManager } from \"./settings-manager.js\";\nimport type { SessionEntry, SessionTreeNode } from \"./session-manager.js\";\n\nexport interface BuiltinCommandContext {\n\tsession: AgentSession;\n\tsettingsManager: SettingsManager;\n\tpolicyEngine?: PolicyEngineV2;\n}\n\nexport interface BuiltinCommandResult {\n\thandled: boolean;\n\tlevel?: \"status\" | \"warning\" | \"error\";\n\tmessage?: string;\n\ttext?: string;\n\tfilePath?: string;\n}\n\nconst CHECKPOINT_LABEL_PREFIX = \"checkpoint:\";\n\nexport function parseSlashArgs(input: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet quote: '\"' | \"'\" | undefined;\n\tlet escape = false;\n\n\tfor (const ch of input.trim()) {\n\t\tif (escape) {\n\t\t\tcurrent += ch;\n\t\t\tescape = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tescape = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (ch === quote) {\n\t\t\t\tquote = undefined;\n\t\t\t} else {\n\t\t\t\tcurrent += ch;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\s/.test(ch)) {\n\t\t\tif (current) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent += ch;\n\t}\n\n\tif (escape) {\n\t\tcurrent += \"\\\\\";\n\t}\n\tif (current) {\n\t\targs.push(current);\n\t}\n\n\treturn args;\n}\n\nfunction formatPermissionStatus(settingsManager: SettingsManager, policyEngine?: PolicyEngineV2): string {\n\tconst mode = settingsManager.getPermissionMode();\n\tconst allowRules = policyEngine?.getLegacyRules(\"allow\") ?? settingsManager.getPermissionAllowRules();\n\tconst denyRules = policyEngine?.getLegacyRules(\"deny\") ?? settingsManager.getPermissionDenyRules();\n\treturn `Permissions: ${mode}${allowRules.length > 0 ? ` · allow rules: ${allowRules.length}` : \"\"}${denyRules.length > 0 ? ` · deny rules: ${denyRules.length}` : \"\"}`;\n}\n\nfunction buildSessionStatsText(session: AgentSession): string {\n\tconst stats = session.getSessionStats();\n\tlet info = \"Session Info\\n\\n\";\n\tinfo += `File: ${stats.sessionFile ?? \"(ephemeral)\"}\\n`;\n\tinfo += `ID: ${stats.sessionId}\\n\\n`;\n\tinfo += \"Messages\\n\";\n\tinfo += `User: ${stats.userMessages}\\n`;\n\tinfo += `Assistant: ${stats.assistantMessages}\\n`;\n\tinfo += `Tool Calls: ${stats.toolCalls}\\n`;\n\tinfo += `Tool Results: ${stats.toolResults}\\n`;\n\tinfo += `Total: ${stats.totalMessages}\\n\\n`;\n\tinfo += \"Tokens\\n\";\n\tinfo += `Input: ${stats.tokens.input.toLocaleString()}\\n`;\n\tinfo += `Output: ${stats.tokens.output.toLocaleString()}\\n`;\n\tif (stats.tokens.cacheRead > 0) {\n\t\tinfo += `Cache Read: ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t}\n\tif (stats.tokens.cacheWrite > 0) {\n\t\tinfo += `Cache Write: ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t}\n\tinfo += `Total: ${stats.tokens.total.toLocaleString()}\\n`;\n\tif (stats.cost > 0) {\n\t\tinfo += `\\nCost\\nTotal: ${stats.cost.toFixed(4)}\\n`;\n\t}\n\treturn info.trimEnd();\n}\n\nfunction normalizePermissionRule(rule: string): string | undefined {\n\tconst normalized = rule.trim();\n\tif (!normalized || !normalized.includes(\":\")) return undefined;\n\treturn normalized;\n}\n\nfunction extractEntryText(entry: SessionEntry): string {\n\tif (entry.type === \"message\") {\n\t\tconst message = entry.message as { content?: unknown; role?: string; command?: string };\n\t\tif (typeof message.command === \"string\" && message.command.trim().length > 0) {\n\t\t\treturn message.command.replace(/\\s+/g, \" \").trim();\n\t\t}\n\t\tif (!(\"content\" in message)) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst content = message.content;\n\t\tif (typeof content === \"string\") return content.replace(/\\s+/g, \" \").trim();\n\t\tif (Array.isArray(content)) {\n\t\t\treturn content\n\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\" \")\n\t\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t\t.trim();\n\t\t}\n\t}\n\tif (entry.type === \"branch_summary\" || entry.type === \"compaction\") {\n\t\treturn entry.summary.replace(/\\s+/g, \" \").trim();\n\t}\n\tif (entry.type === \"label\") {\n\t\treturn entry.label?.trim() ?? \"\";\n\t}\n\tif (entry.type === \"session_info\") {\n\t\treturn entry.name?.trim() ?? \"\";\n\t}\n\tif (entry.type === \"model_change\") {\n\t\treturn `${entry.provider}/${entry.modelId}`;\n\t}\n\tif (entry.type === \"thinking_level_change\") {\n\t\treturn entry.thinkingLevel;\n\t}\n\treturn \"\";\n}\n\nfunction summarizeEntry(entry: SessionEntry): string {\n\tconst text = extractEntryText(entry);\n\tif (!text) return \"\";\n\tconst max = 72;\n\treturn text.length > max ? `${text.slice(0, max - 3)}...` : text;\n}\n\nfunction flattenTree(nodes: SessionTreeNode[], depth = 0, lines: string[] = [], currentLeafId: string | null = null): string[] {\n\tfor (const node of nodes) {\n\t\tconst marker = node.entry.id === currentLeafId ? \"*\" : \" \";\n\t\tconst indent = \" \".repeat(depth);\n\t\tconst label = node.label ? ` [${node.label}]` : \"\";\n\t\tconst summary = summarizeEntry(node.entry);\n\t\tlines.push(\n\t\t\t`${marker} ${indent}${node.entry.id} (${node.entry.type}${label})${summary ? ` - ${summary}` : \"\"}`,\n\t\t);\n\t\tflattenTree(node.children, depth + 1, lines, currentLeafId);\n\t}\n\treturn lines;\n}\n\nfunction buildTreeText(session: AgentSession): string {\n\tconst tree = session.sessionManager.getTree();\n\tif (tree.length === 0) {\n\t\treturn \"No entries in session.\";\n\t}\n\tconst currentLeafId = session.sessionManager.getLeafId();\n\tconst lines = flattenTree(tree, 0, [], currentLeafId);\n\tlines.push(\"\");\n\tlines.push(currentLeafId ? `Current leaf: ${currentLeafId}` : \"Current leaf: (root)\");\n\tlines.push(\"Usage: /tree [list|<entry-id>|goto <entry-id>]\");\n\treturn lines.join(\"\\n\");\n}\n\ninterface SessionCheckpoint {\n\tname: string;\n\ttargetId: string;\n\tlabelEntryId: string;\n\ttimestamp: string;\n}\n\ninterface CheckpointSnapshotIndex {\n\tsnapshots: Record<string, FsCheckpointMetadata>;\n}\n\nfunction getCheckpointIndexPath(cwd: string): string {\n\treturn join(cwd, \".iosm\", \"checkpoints\", \"index.json\");\n}\n\nfunction readCheckpointSnapshotIndex(cwd: string): CheckpointSnapshotIndex {\n\tconst path = getCheckpointIndexPath(cwd);\n\tif (!existsSync(path)) {\n\t\treturn { snapshots: {} };\n\t}\n\ttry {\n\t\tconst raw = readFileSync(path, \"utf8\");\n\t\tconst parsed = JSON.parse(raw) as Partial<CheckpointSnapshotIndex>;\n\t\tconst snapshots = parsed.snapshots && typeof parsed.snapshots === \"object\" ? parsed.snapshots : {};\n\t\treturn { snapshots: snapshots as Record<string, FsCheckpointMetadata> };\n\t} catch {\n\t\treturn { snapshots: {} };\n\t}\n}\n\nfunction writeCheckpointSnapshotIndex(cwd: string, index: CheckpointSnapshotIndex): void {\n\tconst path = getCheckpointIndexPath(cwd);\n\tconst dir = join(cwd, \".iosm\", \"checkpoints\");\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\twriteFileSync(path, `${JSON.stringify(index, null, 2)}\\n`, \"utf8\");\n}\n\nfunction parseCheckpointNameFromLabel(label: string | undefined): string | undefined {\n\tif (!label) return undefined;\n\tif (!label.startsWith(CHECKPOINT_LABEL_PREFIX)) return undefined;\n\tconst name = label.slice(CHECKPOINT_LABEL_PREFIX.length).trim();\n\treturn name.length > 0 ? name : undefined;\n}\n\nfunction buildCheckpointLabel(name: string): string {\n\treturn `${CHECKPOINT_LABEL_PREFIX}${name}`;\n}\n\nfunction normalizeCheckpointName(raw: string): string | undefined {\n\tconst normalized = raw.replace(/\\s+/g, \" \").trim();\n\tif (!normalized) return undefined;\n\tif (normalized.length > 80) return undefined;\n\treturn normalized;\n}\n\nfunction getSessionCheckpoints(session: AgentSession): SessionCheckpoint[] {\n\tconst active = new Map<string, SessionCheckpoint>();\n\tfor (const entry of session.sessionManager.getEntries()) {\n\t\tif (entry.type !== \"label\") continue;\n\t\tconst name = parseCheckpointNameFromLabel(entry.label);\n\t\tif (!name) {\n\t\t\tactive.delete(entry.targetId);\n\t\t\tcontinue;\n\t\t}\n\t\tactive.set(entry.targetId, {\n\t\t\tname,\n\t\t\ttargetId: entry.targetId,\n\t\t\tlabelEntryId: entry.id,\n\t\t\ttimestamp: entry.timestamp,\n\t\t});\n\t}\n\treturn [...active.values()].sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\n}\n\nfunction buildDefaultCheckpointName(checkpoints: SessionCheckpoint[]): string {\n\tconst used = new Set(checkpoints.map((checkpoint) => checkpoint.name.toLowerCase()));\n\tlet index = 1;\n\twhile (used.has(`cp-${index}`)) {\n\t\tindex += 1;\n\t}\n\treturn `cp-${index}`;\n}\n\nfunction formatCheckpointList(session: AgentSession, checkpoints: SessionCheckpoint[]): string {\n\tif (checkpoints.length === 0) {\n\t\treturn \"No checkpoints yet.\\nCreate one with: /checkpoint [name]\";\n\t}\n\tconst newestFirst = [...checkpoints].reverse();\n\tconst lines = newestFirst.map((checkpoint, index) => {\n\t\tconst target = session.sessionManager.getEntry(checkpoint.targetId);\n\t\tconst type = target?.type ?? \"missing\";\n\t\treturn `${index + 1}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t});\n\tlines.push(\"\");\n\tlines.push(\"Usage: /rollback [name|index]\");\n\treturn lines.join(\"\\n\");\n}\n\nasync function runCommandCapture(command: string, args: string[]): Promise<{ code: number | null; stdout: string; stderr: string }> {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst child = spawn(command, args);\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tchild.stdout?.on(\"data\", (chunk) => {\n\t\t\tstdout += chunk.toString();\n\t\t});\n\t\tchild.stderr?.on(\"data\", (chunk) => {\n\t\t\tstderr += chunk.toString();\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"close\", (code) => {\n\t\t\tresolve({ code, stdout, stderr });\n\t\t});\n\t});\n}\n\nexport async function dispatchBuiltinSlashCommand(\n\ttext: string,\n\tcontext: BuiltinCommandContext,\n): Promise<BuiltinCommandResult> {\n\tif (!text.startsWith(\"/\")) {\n\t\treturn { handled: false };\n\t}\n\tconst args = parseSlashArgs(text);\n\tconst commandToken = args[0]?.toLowerCase();\n\tif (!commandToken?.startsWith(\"/\")) {\n\t\treturn { handled: false };\n\t}\n\tconst command = commandToken.slice(1);\n\tconst rest = args.slice(1);\n\tconst { session, settingsManager, policyEngine } = context;\n\tpolicyEngine?.refresh();\n\n\tif (command === \"help\") {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\ttext: [\n\t\t\t\t\"Core commands:\",\n\t\t\t\t\"/status /abort /yolo /permissions /model /new /resume /session /name /copy /export /fork\",\n\t\t\t\t\"/compact /reload /tree /checkpoint /rollback /changelog /share /logout\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tif (command === \"yolo\") {\n\t\tconst value = rest[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tconst nextMode = settingsManager.getPermissionMode() === \"yolo\" ? \"ask\" : \"yolo\";\n\t\t\tsettingsManager.setPermissionMode(nextMode);\n\t\t\treturn { handled: true, level: \"status\", message: `YOLO mode: ${nextMode === \"yolo\" ? \"ON\" : \"OFF\"}` };\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `YOLO mode: ${settingsManager.getPermissionMode() === \"yolo\" ? \"ON\" : \"OFF\"}`,\n\t\t\t};\n\t\t}\n\t\tif (value === \"on\") {\n\t\t\tsettingsManager.setPermissionMode(\"yolo\");\n\t\t\treturn { handled: true, level: \"status\", message: \"YOLO mode: ON (tool confirmations disabled)\" };\n\t\t}\n\t\tif (value === \"off\") {\n\t\t\tsettingsManager.setPermissionMode(\"ask\");\n\t\t\treturn { handled: true, level: \"status\", message: \"YOLO mode: OFF (tool confirmations enabled)\" };\n\t\t}\n\t\treturn { handled: true, level: \"warning\", message: \"Usage: /yolo [on|off|status]\" };\n\t}\n\n\tif (command === \"permissions\") {\n\t\tconst value = rest[0]?.toLowerCase();\n\t\tif (!value || value === \"status\") {\n\t\t\treturn { handled: true, level: \"status\", message: formatPermissionStatus(settingsManager, policyEngine) };\n\t\t}\n\t\tif (value === \"ask\" || value === \"auto\" || value === \"yolo\") {\n\t\t\tsettingsManager.setPermissionMode(value);\n\t\t\treturn { handled: true, level: \"status\", message: `Permissions: ${value}` };\n\t\t}\n\t\tif (value === \"allow\" || value === \"deny\") {\n\t\t\tconst action = rest[1]?.toLowerCase();\n\t\t\tconst isAllow = value === \"allow\";\n\t\t\tlet rules = isAllow\n\t\t\t\t? (policyEngine?.getLegacyRules(\"allow\") ?? settingsManager.getPermissionAllowRules())\n\t\t\t\t: (policyEngine?.getLegacyRules(\"deny\") ?? settingsManager.getPermissionDenyRules());\n\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\treturn { handled: true, level: \"status\", message: `Permissions ${value} rules: (empty)` };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\thandled: true,\n\t\t\t\t\tlevel: \"status\",\n\t\t\t\t\ttext: rules.map((rule) => `- ${rule}`).join(\"\\n\"),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = rest.slice(2).join(\" \");\n\t\t\t\tconst normalizedRule = normalizePermissionRule(rawRule);\n\t\t\t\tif (!normalizedRule) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Usage: /permissions ${value} add <tool:match>` };\n\t\t\t\t}\n\t\t\t\tif (!rules.includes(normalizedRule)) {\n\t\t\t\t\trules = [...rules, normalizedRule];\n\t\t\t\t\tif (policyEngine) {\n\t\t\t\t\t\tpolicyEngine.setLegacyRules(isAllow ? \"allow\" : \"deny\", rules);\n\t\t\t\t\t\tpolicyEngine.refresh();\n\t\t\t\t\t} else if (isAllow) {\n\t\t\t\t\t\tsettingsManager.setPermissionAllowRules(rules);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettingsManager.setPermissionDenyRules(rules);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { handled: true, level: \"status\", message: `Added ${value} rule: ${normalizedRule}` };\n\t\t\t}\n\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = rest.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\thandled: true,\n\t\t\t\t\t\tlevel: \"warning\",\n\t\t\t\t\t\tmessage: `Usage: /permissions ${value} remove <tool:match>`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\trules = rules.filter((rule) => rule !== rawRule);\n\t\t\t\tif (policyEngine) {\n\t\t\t\t\tpolicyEngine.setLegacyRules(isAllow ? \"allow\" : \"deny\", rules);\n\t\t\t\t\tpolicyEngine.refresh();\n\t\t\t\t} else if (isAllow) {\n\t\t\t\t\tsettingsManager.setPermissionAllowRules(rules);\n\t\t\t\t} else {\n\t\t\t\t\tsettingsManager.setPermissionDenyRules(rules);\n\t\t\t\t}\n\t\t\t\treturn { handled: true, level: \"status\", message: `Removed ${value} rule: ${rawRule}` };\n\t\t\t}\n\n\t\t\treturn { handled: true, level: \"warning\", message: `Usage: /permissions ${value} [list|add|remove]` };\n\t\t}\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"warning\",\n\t\t\tmessage: \"Usage: /permissions [ask|auto|yolo|status|allow|deny]\",\n\t\t};\n\t}\n\n\tif (command === \"abort\") {\n\t\tawait session.abort();\n\t\treturn { handled: true, level: \"status\", message: \"Abort signal sent.\" };\n\t}\n\n\tif (command === \"compact\") {\n\t\tconst customInstructions = rest.join(\" \").trim() || undefined;\n\t\ttry {\n\t\t\tconst result = await session.compact(customInstructions);\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Compaction complete. First kept: ${result.firstKeptEntryId}. Tokens before: ${result.tokensBefore}.`,\n\t\t\t\ttext: result.summary,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: `Compaction failed: ${message}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"status\") {\n\t\tconst model = session.model ? `${session.model.provider}/${session.model.id}` : \"not selected\";\n\t\tconst sessionLabel = session.sessionName || session.sessionId || \"(unknown)\";\n\t\tconst lines = [\n\t\t\t`Model: ${model}`,\n\t\t\t`Session: ${sessionLabel}`,\n\t\t\t`Streaming: ${session.isStreaming ? \"yes\" : \"no\"}`,\n\t\t\t`Compacting: ${session.isCompacting ? \"yes\" : \"no\"}`,\n\t\t\t`Queued messages: ${session.pendingMessageCount}`,\n\t\t\tformatPermissionStatus(settingsManager, policyEngine),\n\t\t];\n\t\treturn { handled: true, level: \"status\", text: lines.join(\"\\n\") };\n\t}\n\n\tif (command === \"new\" || command === \"clear\") {\n\t\tconst cancelled = !(await session.newSession());\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\tmessage: cancelled ? \"New session cancelled.\" : \"Started new session.\",\n\t\t};\n\t}\n\n\tif (command === \"reload\") {\n\t\tif (session.isStreaming) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Wait for the current response to finish before reloading.\" };\n\t\t}\n\t\tif (session.isCompacting) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Wait for compaction to finish before reloading.\" };\n\t\t}\n\t\tawait session.reload();\n\t\treturn { handled: true, level: \"status\", message: \"Reloaded extensions, skills, prompts, and themes.\" };\n\t}\n\n\tif (command === \"session\") {\n\t\treturn { handled: true, level: \"status\", text: buildSessionStatsText(session) };\n\t}\n\n\tif (command === \"name\") {\n\t\tconst name = rest.join(\" \").trim();\n\t\tif (!name) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /name <session-name>\" };\n\t\t}\n\t\tsession.setSessionName(name);\n\t\treturn { handled: true, level: \"status\", message: `Session name set: ${name}` };\n\t}\n\n\tif (command === \"copy\") {\n\t\tconst textResult = session.getLastAssistantText();\n\t\tif (!textResult) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No agent messages to copy yet.\" };\n\t\t}\n\t\treturn { handled: true, level: \"status\", text: textResult };\n\t}\n\n\tif (command === \"export\") {\n\t\tconst outputPath = rest.length > 0 ? rest.join(\" \") : undefined;\n\t\tconst path = await session.exportToHtml(outputPath);\n\t\treturn { handled: true, level: \"status\", message: `Session exported to: ${path}`, filePath: path };\n\t}\n\n\tif (command === \"model\") {\n\t\tconst value = rest.join(\" \").trim();\n\t\tif (!value) {\n\t\t\tconst current = session.model;\n\t\t\tif (!current) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"No model selected. Usage: /model <provider/model-id>\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Current model: ${current.provider}/${current.id}`,\n\t\t\t};\n\t\t}\n\t\tif (value.toLowerCase() === \"cycle\") {\n\t\t\tconst next = await session.cycleModel();\n\t\t\tif (!next) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"No next model available to cycle.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Model set: ${next.model.provider}/${next.model.id} (thinking: ${next.thinkingLevel})`,\n\t\t\t};\n\t\t}\n\n\t\tconst allModels = await session.modelRegistry.getAvailable();\n\t\tlet selected =\n\t\t\tallModels.find((model) => `${model.provider}/${model.id}`.toLowerCase() === value.toLowerCase()) ??\n\t\t\tallModels.find((model) => model.id.toLowerCase() === value.toLowerCase());\n\n\t\tif (!selected) {\n\t\t\tconst asProviderModel = value.split(\"/\");\n\t\t\tif (asProviderModel.length === 2) {\n\t\t\t\tconst provider = asProviderModel[0]?.trim().toLowerCase();\n\t\t\t\tconst modelId = asProviderModel[1]?.trim().toLowerCase();\n\t\t\t\tselected = allModels.find(\n\t\t\t\t\t(model) => model.provider.toLowerCase() === provider && model.id.toLowerCase() === modelId,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!selected) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: `Model not found: ${value}. Use /model <provider/model-id>.`,\n\t\t\t};\n\t\t}\n\n\t\tawait session.setModel(selected);\n\t\treturn { handled: true, level: \"status\", message: `Model set: ${selected.provider}/${selected.id}` };\n\t}\n\n\tif (command === \"tree\") {\n\t\tconst action = rest[0]?.toLowerCase();\n\t\tif (!action || action === \"list\" || action === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: buildTreeText(session) };\n\t\t}\n\t\tif (action === \"help\" || action === \"-h\" || action === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /tree\\n /tree <entry-id>\\n /tree goto <entry-id>\\n /tree list\",\n\t\t\t};\n\t\t}\n\n\t\tconst targetId = action === \"goto\" ? rest.slice(1).join(\" \").trim() : rest.join(\" \").trim();\n\t\tif (!targetId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /tree [list|<entry-id>|goto <entry-id>]\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await session.navigateTree(targetId, { summarize: false });\n\t\t\tif (result.aborted || result.cancelled) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"Tree navigation cancelled.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Navigated to: ${targetId}`,\n\t\t\t\ttext: result.editorText,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `Tree navigation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"checkpoint\") {\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\t\tconst checkpoints = getSessionCheckpoints(session);\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: formatCheckpointList(session, checkpoints) };\n\t\t}\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /checkpoint [name]\\n /checkpoint list\",\n\t\t\t};\n\t\t}\n\n\t\tconst leafId = session.sessionManager.getLeafId();\n\t\tif (!leafId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Cannot create checkpoint yet (session has no entries).\" };\n\t\t}\n\n\t\tconst requestedName = rest.join(\" \");\n\t\tconst name = requestedName ? normalizeCheckpointName(requestedName) : buildDefaultCheckpointName(checkpoints);\n\t\tif (!name) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Invalid checkpoint name. Use 1-80 visible characters.\" };\n\t\t}\n\n\t\tconst labelEntryId = session.sessionManager.appendLabelChange(leafId, buildCheckpointLabel(name));\n\t\ttry {\n\t\t\tconst cwd = typeof session.sessionManager.getCwd === \"function\" ? session.sessionManager.getCwd() : process.cwd();\n\t\t\tconst snapshot = await createFsCheckpointSnapshot(cwd, name, labelEntryId);\n\t\t\tconst index = readCheckpointSnapshotIndex(cwd);\n\t\t\tindex.snapshots[labelEntryId] = snapshot;\n\t\t\twriteCheckpointSnapshotIndex(cwd, index);\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Checkpoint saved: ${name} (${leafId})`,\n\t\t\t\ttext: `Filesystem snapshot: ${snapshot.backend} @ ${snapshot.snapshotDir}`,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: `Checkpoint label saved, but filesystem snapshot failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"rollback\") {\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\t\tconst checkpoints = getSessionCheckpoints(session);\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\treturn { handled: true, level: \"status\", text: formatCheckpointList(session, checkpoints) };\n\t\t}\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: \"Usage:\\n /rollback\\n /rollback <name>\\n /rollback <index>\\n /rollback list\",\n\t\t\t};\n\t\t}\n\t\tif (checkpoints.length === 0) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No checkpoints available. Create one with /checkpoint.\" };\n\t\t}\n\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst selector = rest.join(\" \").trim();\n\t\tlet target: SessionCheckpoint | undefined = newestFirst[0];\n\t\tif (selector) {\n\t\t\tconst numeric = Number.parseInt(selector, 10);\n\t\t\tif (Number.isFinite(numeric) && `${numeric}` === selector) {\n\t\t\t\ttarget = newestFirst[numeric - 1];\n\t\t\t\tif (!target) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Checkpoint index ${numeric} is out of range.` };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttarget = newestFirst.find((checkpoint) => checkpoint.name === selector);\n\t\t\t\tif (!target) {\n\t\t\t\t\treturn { handled: true, level: \"warning\", message: `Checkpoint \"${selector}\" not found.` };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!target) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"No rollback target selected.\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst cwd = typeof session.sessionManager.getCwd === \"function\" ? session.sessionManager.getCwd() : process.cwd();\n\t\t\tconst checkpointIndex = readCheckpointSnapshotIndex(cwd);\n\t\t\tconst snapshot = checkpointIndex.snapshots[target.labelEntryId];\n\t\t\tif (snapshot) {\n\t\t\t\tawait restoreFsCheckpointSnapshot(cwd, snapshot);\n\t\t\t}\n\t\t\tconst result = await session.navigateTree(target.targetId, { summarize: false });\n\t\t\tif (result.cancelled || result.aborted) {\n\t\t\t\treturn { handled: true, level: \"warning\", message: \"Rollback cancelled.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\tmessage: `Rolled back to checkpoint: ${target.name}`,\n\t\t\t\ttext: snapshot\n\t\t\t\t\t? `${result.editorText}\\n\\nFilesystem restored from ${snapshot.backend} snapshot.`\n\t\t\t\t\t: result.editorText,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `Rollback failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tif (command === \"changelog\") {\n\t\tconst entries = parseChangelog(getChangelogPath());\n\t\tconst changelogText =\n\t\t\tentries.length > 0 ? entries.slice().reverse().map((entry) => entry.content).join(\"\\n\\n\") : \"No changelog entries found.\";\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\ttext: changelogText,\n\t\t};\n\t}\n\n\tif (command === \"share\") {\n\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\tif (authResult.status !== 0) {\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"warning\",\n\t\t\t\tmessage: \"GitHub CLI is not logged in. Run `gh auth login` first.\",\n\t\t\t};\n\t\t}\n\n\t\tconst tmpFile = join(tmpdir(), `iosm-session-${Date.now()}.html`);\n\t\ttry {\n\t\t\tawait session.exportToHtml(tmpFile);\n\t\t\tconst result = await runCommandCapture(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\tif (result.code !== 0) {\n\t\t\t\treturn {\n\t\t\t\t\thandled: true,\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tmessage: `Failed to create gist: ${result.stderr.trim() || \"Unknown error\"}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst gistUrl = result.stdout.trim();\n\t\t\tconst gistId = gistUrl.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\treturn { handled: true, level: \"error\", message: \"Failed to parse gist ID from gh output.\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\tlevel: \"status\",\n\t\t\t\ttext: `Share URL: ${getShareViewerUrl(gistId)}\\nGist: ${gistUrl}`,\n\t\t\t};\n\t\t} finally {\n\t\t\tif (existsSync(tmpFile)) {\n\t\t\t\trmSync(tmpFile, { force: true });\n\t\t\t}\n\t\t}\n\t}\n\n\tif (command === \"auth\" || command === \"login\") {\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"warning\",\n\t\t\tmessage: \"Interactive /login flow is not available in Telegram bridge yet. Use local CLI /login, then continue remotely.\",\n\t\t};\n\t}\n\n\tif (command === \"logout\") {\n\t\tconst provider = rest.join(\" \").trim() || session.model?.provider;\n\t\tif (!provider) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /logout <provider> (or select a model first)\" };\n\t\t}\n\t\tsession.modelRegistry.authStorage.logout(provider);\n\t\treturn { handled: true, level: \"status\", message: `Logged out provider: ${provider}` };\n\t}\n\n\tif (command === \"resume\") {\n\t\tconst sessionPath = rest.join(\" \").trim();\n\t\tif (!sessionPath) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /resume <session-path>\" };\n\t\t}\n\t\tconst cancelled = !(await session.switchSession(sessionPath));\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: \"status\",\n\t\t\tmessage: cancelled ? \"Session switch cancelled.\" : `Switched session: ${sessionPath}`,\n\t\t};\n\t}\n\n\tif (command === \"fork\") {\n\t\tconst entryId = rest.join(\" \").trim();\n\t\tif (!entryId) {\n\t\t\treturn { handled: true, level: \"warning\", message: \"Usage: /fork <entry-id>\" };\n\t\t}\n\t\tconst result = await session.fork(entryId);\n\t\treturn {\n\t\t\thandled: true,\n\t\t\tlevel: result.cancelled ? \"warning\" : \"status\",\n\t\t\tmessage: result.cancelled ? \"Fork cancelled.\" : `Forked from message: ${entryId}`,\n\t\t\ttext: result.selectedText,\n\t\t};\n\t}\n\n\treturn { handled: false };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAuB7B,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,cAAsB,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAmC/H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,mBAAmB,CAAC,CA4LnF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAyB7F"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AA6B7B,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,cAAsB,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAmC/H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,mBAAmB,CAAC,CA8MnF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA0B7F"}
@@ -1,6 +1,7 @@
1
1
  const VALID_TRANSPORTS = new Set(["stdio", "sse", "http"]);
2
2
  const VALID_SCOPES = new Set(["user", "project", "all"]);
3
3
  const VALID_SERVER_NAME = /^[a-zA-Z0-9._-]+$/;
4
+ const VALID_APPROVAL_MODES = new Set(["auto", "prompt", "approve"]);
4
5
  function parseKeyValue(token, flagName) {
5
6
  const separatorIndex = token.indexOf("=");
6
7
  if (separatorIndex <= 0 || separatorIndex === token.length - 1) {
@@ -16,6 +17,10 @@ function parseKeyValue(token, flagName) {
16
17
  function normalizeScope(value) {
17
18
  return VALID_SCOPES.has(value) ? value : undefined;
18
19
  }
20
+ function normalizeToolApprovalMode(value) {
21
+ const normalized = value.trim().toLowerCase();
22
+ return VALID_APPROVAL_MODES.has(normalized) ? normalized : undefined;
23
+ }
19
24
  export function parseMcpTargetCommand(args, defaultScope = "all") {
20
25
  if (args.length === 0) {
21
26
  return { ok: false, error: "Missing server name." };
@@ -72,6 +77,7 @@ export function parseMcpAddCommand(args) {
72
77
  const commandArgs = [];
73
78
  const includeTools = [];
74
79
  const excludeTools = [];
80
+ const toolApprovals = {};
75
81
  const env = {};
76
82
  const headers = {};
77
83
  const positional = [];
@@ -200,6 +206,24 @@ export function parseMcpAddCommand(args) {
200
206
  index += 1;
201
207
  continue;
202
208
  }
209
+ if (token === "--tool-approval") {
210
+ const value = rest[index + 1];
211
+ if (!value)
212
+ return { ok: false, error: "Missing value for --tool-approval." };
213
+ const parsed = parseKeyValue(value, "--tool-approval");
214
+ if ("error" in parsed)
215
+ return { ok: false, error: parsed.error };
216
+ const mode = normalizeToolApprovalMode(parsed.value);
217
+ if (!mode) {
218
+ return {
219
+ ok: false,
220
+ error: `Invalid --tool-approval mode "${parsed.value}". Use auto, prompt, or approve.`,
221
+ };
222
+ }
223
+ toolApprovals[parsed.key] = { approvalMode: mode };
224
+ index += 1;
225
+ continue;
226
+ }
203
227
  if (token.startsWith("-")) {
204
228
  return { ok: false, error: `Unknown option ${token}.` };
205
229
  }
@@ -236,6 +260,7 @@ export function parseMcpAddCommand(args) {
236
260
  enabled,
237
261
  includeTools: includeTools.length > 0 ? includeTools : undefined,
238
262
  excludeTools: excludeTools.length > 0 ? excludeTools : undefined,
263
+ tools: Object.keys(toolApprovals).length > 0 ? toolApprovals : undefined,
239
264
  env: Object.keys(env).length > 0 ? env : undefined,
240
265
  headers: Object.keys(headers).length > 0 ? headers : undefined,
241
266
  };
@@ -264,6 +289,7 @@ export function getMcpCommandHelp(prefix, options = {}) {
264
289
  `Examples:`,
265
290
  ` ${cmd} add filesystem --transport stdio --command npx --arg -y --arg @modelcontextprotocol/server-filesystem --arg .`,
266
291
  ` ${cmd} add github --scope user --transport http --url https://mcp.example.com --header Authorization=Bearer\ \${GITHUB_TOKEN}`,
292
+ ` ${cmd} add github --transport http --url https://mcp.example.com --tool-approval search=prompt`,
267
293
  ` ${cmd} disable filesystem --scope project`,
268
294
  ` ${cmd} tools`,
269
295
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/mcp/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpScope, McpScopeTarget, McpServerConfig, McpTransport } from \"./types.js\";\n\nexport interface ParsedMcpAddCommand {\n\tname: string;\n\tscope: McpScope;\n\tconfig: McpServerConfig;\n}\n\nexport interface ParsedMcpTargetCommand {\n\tname: string;\n\tscope: McpScopeTarget;\n}\n\nexport interface McpCommandHelpOptions {\n\tincludeWizard?: boolean;\n}\n\nexport type ParseResult<T> =\n\t| { ok: true; value: T }\n\t| { ok: false; error: string }\n\t| { ok: false; help: true };\n\nconst VALID_TRANSPORTS = new Set<McpTransport>([\"stdio\", \"sse\", \"http\"]);\nconst VALID_SCOPES = new Set<McpScopeTarget>([\"user\", \"project\", \"all\"]);\nconst VALID_SERVER_NAME = /^[a-zA-Z0-9._-]+$/;\n\nfunction parseKeyValue(token: string, flagName: string): { key: string; value: string } | { error: string } {\n\tconst separatorIndex = token.indexOf(\"=\");\n\tif (separatorIndex <= 0 || separatorIndex === token.length - 1) {\n\t\treturn { error: `${flagName} expects KEY=VALUE` };\n\t}\n\tconst key = token.slice(0, separatorIndex).trim();\n\tconst value = token.slice(separatorIndex + 1);\n\tif (!key) {\n\t\treturn { error: `${flagName} expects KEY=VALUE` };\n\t}\n\treturn { key, value };\n}\n\nfunction normalizeScope(value: string): McpScopeTarget | undefined {\n\treturn VALID_SCOPES.has(value as McpScopeTarget) ? (value as McpScopeTarget) : undefined;\n}\n\nexport function parseMcpTargetCommand(args: string[], defaultScope: McpScopeTarget = \"all\"): ParseResult<ParsedMcpTargetCommand> {\n\tif (args.length === 0) {\n\t\treturn { ok: false, error: \"Missing server name.\" };\n\t}\n\tconst [name, ...rest] = args;\n\tif (!VALID_SERVER_NAME.test(name)) {\n\t\treturn { ok: false, error: `Invalid server name \"${name}\".` };\n\t}\n\n\tlet scope: McpScopeTarget = defaultScope;\n\tfor (let index = 0; index < rest.length; index++) {\n\t\tconst token = rest[index];\n\t\tif (token === \"-h\" || token === \"--help\") {\n\t\t\treturn { ok: false, help: true };\n\t\t}\n\t\tif (token === \"--scope\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) {\n\t\t\t\treturn { ok: false, error: \"Missing value for --scope.\" };\n\t\t\t}\n\t\t\tconst normalized = normalizeScope(value);\n\t\t\tif (!normalized) {\n\t\t\t\treturn { ok: false, error: `Invalid scope \"${value}\". Use user, project, or all.` };\n\t\t\t}\n\t\t\tscope = normalized;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.startsWith(\"-\")) {\n\t\t\treturn { ok: false, error: `Unknown option ${token}.` };\n\t\t}\n\t\treturn { ok: false, error: `Unexpected argument \"${token}\".` };\n\t}\n\n\treturn { ok: true, value: { name, scope } };\n}\n\nexport function parseMcpAddCommand(args: string[]): ParseResult<ParsedMcpAddCommand> {\n\tif (args.length === 0) {\n\t\treturn { ok: false, error: \"Missing server name.\" };\n\t}\n\tif (args[0] === \"-h\" || args[0] === \"--help\") {\n\t\treturn { ok: false, help: true };\n\t}\n\n\tconst [name, ...rest] = args;\n\tif (!VALID_SERVER_NAME.test(name)) {\n\t\treturn { ok: false, error: `Invalid server name \"${name}\".` };\n\t}\n\n\tlet scope: McpScope = \"project\";\n\tlet transport: McpTransport | undefined;\n\tlet command: string | undefined;\n\tlet url: string | undefined;\n\tlet cwd: string | undefined;\n\tlet timeoutMs: number | undefined;\n\tlet trust: boolean | undefined;\n\tlet enabled: boolean | undefined;\n\tconst commandArgs: string[] = [];\n\tconst includeTools: string[] = [];\n\tconst excludeTools: string[] = [];\n\tconst env: Record<string, string> = {};\n\tconst headers: Record<string, string> = {};\n\tconst positional: string[] = [];\n\n\tfor (let index = 0; index < rest.length; index++) {\n\t\tconst token = rest[index];\n\t\tif (token === \"-h\" || token === \"--help\") {\n\t\t\treturn { ok: false, help: true };\n\t\t}\n\t\tif (token === \"--scope\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --scope.\" };\n\t\t\tif (value !== \"user\" && value !== \"project\") {\n\t\t\t\treturn { ok: false, error: `Invalid scope \"${value}\". Use user or project.` };\n\t\t\t}\n\t\t\tscope = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--transport\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --transport.\" };\n\t\t\tif (!VALID_TRANSPORTS.has(value as McpTransport)) {\n\t\t\t\treturn { ok: false, error: `Invalid transport \"${value}\". Use stdio, sse, or http.` };\n\t\t\t}\n\t\t\ttransport = value as McpTransport;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--command\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --command.\" };\n\t\t\tcommand = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--url\" || token === \"--http-url\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: `Missing value for ${token}.` };\n\t\t\turl = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--cwd\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --cwd.\" };\n\t\t\tcwd = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--arg\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --arg.\" };\n\t\t\tcommandArgs.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --env.\" };\n\t\t\tconst parsed = parseKeyValue(value, \"--env\");\n\t\t\tif (\"error\" in parsed) return { ok: false, error: parsed.error };\n\t\t\tenv[parsed.key] = parsed.value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--header\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --header.\" };\n\t\t\tconst parsed = parseKeyValue(value, \"--header\");\n\t\t\tif (\"error\" in parsed) return { ok: false, error: parsed.error };\n\t\t\theaders[parsed.key] = parsed.value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--timeout\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --timeout.\" };\n\t\t\tconst parsed = Number.parseInt(value, 10);\n\t\t\tif (!Number.isFinite(parsed) || parsed <= 0) {\n\t\t\t\treturn { ok: false, error: \"--timeout expects a positive integer (milliseconds).\" };\n\t\t\t}\n\t\t\ttimeoutMs = parsed;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--trust\") {\n\t\t\ttrust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--no-trust\") {\n\t\t\ttrust = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--enable\") {\n\t\t\tenabled = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--disable\") {\n\t\t\tenabled = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--include-tool\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --include-tool.\" };\n\t\t\tincludeTools.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--exclude-tool\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --exclude-tool.\" };\n\t\t\texcludeTools.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.startsWith(\"-\")) {\n\t\t\treturn { ok: false, error: `Unknown option ${token}.` };\n\t\t}\n\t\tpositional.push(token);\n\t}\n\n\tif (!command && !url && positional.length > 0) {\n\t\tcommand = positional[0];\n\t\tcommandArgs.push(...positional.slice(1));\n\t} else if (command && positional.length > 0) {\n\t\tcommandArgs.push(...positional);\n\t} else if (!command && !url && positional.length === 0) {\n\t\t// noop\n\t} else if (url && positional.length > 0) {\n\t\treturn { ok: false, error: `Unexpected positional arguments: ${positional.join(\" \")}` };\n\t}\n\n\tconst resolvedTransport: McpTransport = transport ?? (command ? \"stdio\" : \"http\");\n\tif (resolvedTransport === \"stdio\" && !command) {\n\t\treturn { ok: false, error: \"stdio transport requires --command (or positional command).\" };\n\t}\n\tif ((resolvedTransport === \"http\" || resolvedTransport === \"sse\") && !url) {\n\t\treturn { ok: false, error: `${resolvedTransport} transport requires --url.` };\n\t}\n\n\tconst config: McpServerConfig = {\n\t\ttransport: resolvedTransport,\n\t\tcommand,\n\t\targs: commandArgs,\n\t\turl,\n\t\tcwd,\n\t\ttimeoutMs,\n\t\ttrust,\n\t\tenabled,\n\t\tincludeTools: includeTools.length > 0 ? includeTools : undefined,\n\t\texcludeTools: excludeTools.length > 0 ? excludeTools : undefined,\n\t\tenv: Object.keys(env).length > 0 ? env : undefined,\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t};\n\n\treturn {\n\t\tok: true,\n\t\tvalue: {\n\t\t\tname,\n\t\t\tscope,\n\t\t\tconfig,\n\t\t},\n\t};\n}\n\nexport function getMcpCommandHelp(prefix: string, options: McpCommandHelpOptions = {}): string {\n\tconst cmd = prefix.trim();\n\tconst lines = [\n\t\t`Usage:`,\n\t\t` ${cmd} list`,\n\t\t` ${cmd} get <name>`,\n\t\t` ${cmd} add [name] [--scope user|project] [--transport stdio|sse|http]`,\n\t\t` ${cmd} remove <name> [--scope user|project|all]`,\n\t\t` ${cmd} enable <name> [--scope user|project|all]`,\n\t\t` ${cmd} disable <name> [--scope user|project|all]`,\n\t\t` ${cmd} tools [name]`,\n\t\t` ${cmd} test <name>`,\n\t\t\"\",\n\t\t`Examples:`,\n\t\t` ${cmd} add filesystem --transport stdio --command npx --arg -y --arg @modelcontextprotocol/server-filesystem --arg .`,\n\t\t` ${cmd} add github --scope user --transport http --url https://mcp.example.com --header Authorization=Bearer\\ \\${GITHUB_TOKEN}`,\n\t\t` ${cmd} disable filesystem --scope project`,\n\t\t` ${cmd} tools`,\n\t];\n\n\tif (options.includeWizard) {\n\t\tlines.splice(10, 0, ` ${cmd} add --wizard`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/mcp/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import type { McpScope, McpScopeTarget, McpServerConfig, McpTransport } from \"./types.js\";\n\nexport interface ParsedMcpAddCommand {\n\tname: string;\n\tscope: McpScope;\n\tconfig: McpServerConfig;\n}\n\nexport interface ParsedMcpTargetCommand {\n\tname: string;\n\tscope: McpScopeTarget;\n}\n\nexport interface McpCommandHelpOptions {\n\tincludeWizard?: boolean;\n}\n\nexport type ParseResult<T> =\n\t| { ok: true; value: T }\n\t| { ok: false; error: string }\n\t| { ok: false; help: true };\n\nconst VALID_TRANSPORTS = new Set<McpTransport>([\"stdio\", \"sse\", \"http\"]);\nconst VALID_SCOPES = new Set<McpScopeTarget>([\"user\", \"project\", \"all\"]);\nconst VALID_SERVER_NAME = /^[a-zA-Z0-9._-]+$/;\nconst VALID_APPROVAL_MODES = new Set([\"auto\", \"prompt\", \"approve\"]);\n\nfunction parseKeyValue(token: string, flagName: string): { key: string; value: string } | { error: string } {\n\tconst separatorIndex = token.indexOf(\"=\");\n\tif (separatorIndex <= 0 || separatorIndex === token.length - 1) {\n\t\treturn { error: `${flagName} expects KEY=VALUE` };\n\t}\n\tconst key = token.slice(0, separatorIndex).trim();\n\tconst value = token.slice(separatorIndex + 1);\n\tif (!key) {\n\t\treturn { error: `${flagName} expects KEY=VALUE` };\n\t}\n\treturn { key, value };\n}\n\nfunction normalizeScope(value: string): McpScopeTarget | undefined {\n\treturn VALID_SCOPES.has(value as McpScopeTarget) ? (value as McpScopeTarget) : undefined;\n}\n\nfunction normalizeToolApprovalMode(value: string): \"auto\" | \"prompt\" | \"approve\" | undefined {\n\tconst normalized = value.trim().toLowerCase();\n\treturn VALID_APPROVAL_MODES.has(normalized) ? (normalized as \"auto\" | \"prompt\" | \"approve\") : undefined;\n}\n\nexport function parseMcpTargetCommand(args: string[], defaultScope: McpScopeTarget = \"all\"): ParseResult<ParsedMcpTargetCommand> {\n\tif (args.length === 0) {\n\t\treturn { ok: false, error: \"Missing server name.\" };\n\t}\n\tconst [name, ...rest] = args;\n\tif (!VALID_SERVER_NAME.test(name)) {\n\t\treturn { ok: false, error: `Invalid server name \"${name}\".` };\n\t}\n\n\tlet scope: McpScopeTarget = defaultScope;\n\tfor (let index = 0; index < rest.length; index++) {\n\t\tconst token = rest[index];\n\t\tif (token === \"-h\" || token === \"--help\") {\n\t\t\treturn { ok: false, help: true };\n\t\t}\n\t\tif (token === \"--scope\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) {\n\t\t\t\treturn { ok: false, error: \"Missing value for --scope.\" };\n\t\t\t}\n\t\t\tconst normalized = normalizeScope(value);\n\t\t\tif (!normalized) {\n\t\t\t\treturn { ok: false, error: `Invalid scope \"${value}\". Use user, project, or all.` };\n\t\t\t}\n\t\t\tscope = normalized;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.startsWith(\"-\")) {\n\t\t\treturn { ok: false, error: `Unknown option ${token}.` };\n\t\t}\n\t\treturn { ok: false, error: `Unexpected argument \"${token}\".` };\n\t}\n\n\treturn { ok: true, value: { name, scope } };\n}\n\nexport function parseMcpAddCommand(args: string[]): ParseResult<ParsedMcpAddCommand> {\n\tif (args.length === 0) {\n\t\treturn { ok: false, error: \"Missing server name.\" };\n\t}\n\tif (args[0] === \"-h\" || args[0] === \"--help\") {\n\t\treturn { ok: false, help: true };\n\t}\n\n\tconst [name, ...rest] = args;\n\tif (!VALID_SERVER_NAME.test(name)) {\n\t\treturn { ok: false, error: `Invalid server name \"${name}\".` };\n\t}\n\n\tlet scope: McpScope = \"project\";\n\tlet transport: McpTransport | undefined;\n\tlet command: string | undefined;\n\tlet url: string | undefined;\n\tlet cwd: string | undefined;\n\tlet timeoutMs: number | undefined;\n\tlet trust: boolean | undefined;\n\tlet enabled: boolean | undefined;\n\tconst commandArgs: string[] = [];\n\tconst includeTools: string[] = [];\n\tconst excludeTools: string[] = [];\n\tconst toolApprovals: NonNullable<McpServerConfig[\"tools\"]> = {};\n\tconst env: Record<string, string> = {};\n\tconst headers: Record<string, string> = {};\n\tconst positional: string[] = [];\n\n\tfor (let index = 0; index < rest.length; index++) {\n\t\tconst token = rest[index];\n\t\tif (token === \"-h\" || token === \"--help\") {\n\t\t\treturn { ok: false, help: true };\n\t\t}\n\t\tif (token === \"--scope\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --scope.\" };\n\t\t\tif (value !== \"user\" && value !== \"project\") {\n\t\t\t\treturn { ok: false, error: `Invalid scope \"${value}\". Use user or project.` };\n\t\t\t}\n\t\t\tscope = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--transport\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --transport.\" };\n\t\t\tif (!VALID_TRANSPORTS.has(value as McpTransport)) {\n\t\t\t\treturn { ok: false, error: `Invalid transport \"${value}\". Use stdio, sse, or http.` };\n\t\t\t}\n\t\t\ttransport = value as McpTransport;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--command\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --command.\" };\n\t\t\tcommand = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--url\" || token === \"--http-url\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: `Missing value for ${token}.` };\n\t\t\turl = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--cwd\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --cwd.\" };\n\t\t\tcwd = value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--arg\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --arg.\" };\n\t\t\tcommandArgs.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --env.\" };\n\t\t\tconst parsed = parseKeyValue(value, \"--env\");\n\t\t\tif (\"error\" in parsed) return { ok: false, error: parsed.error };\n\t\t\tenv[parsed.key] = parsed.value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--header\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --header.\" };\n\t\t\tconst parsed = parseKeyValue(value, \"--header\");\n\t\t\tif (\"error\" in parsed) return { ok: false, error: parsed.error };\n\t\t\theaders[parsed.key] = parsed.value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--timeout\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --timeout.\" };\n\t\t\tconst parsed = Number.parseInt(value, 10);\n\t\t\tif (!Number.isFinite(parsed) || parsed <= 0) {\n\t\t\t\treturn { ok: false, error: \"--timeout expects a positive integer (milliseconds).\" };\n\t\t\t}\n\t\t\ttimeoutMs = parsed;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--trust\") {\n\t\t\ttrust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--no-trust\") {\n\t\t\ttrust = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--enable\") {\n\t\t\tenabled = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--disable\") {\n\t\t\tenabled = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--include-tool\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --include-tool.\" };\n\t\t\tincludeTools.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--exclude-tool\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --exclude-tool.\" };\n\t\t\texcludeTools.push(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--tool-approval\") {\n\t\t\tconst value = rest[index + 1];\n\t\t\tif (!value) return { ok: false, error: \"Missing value for --tool-approval.\" };\n\t\t\tconst parsed = parseKeyValue(value, \"--tool-approval\");\n\t\t\tif (\"error\" in parsed) return { ok: false, error: parsed.error };\n\t\t\tconst mode = normalizeToolApprovalMode(parsed.value);\n\t\t\tif (!mode) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: `Invalid --tool-approval mode \"${parsed.value}\". Use auto, prompt, or approve.`,\n\t\t\t\t};\n\t\t\t}\n\t\t\ttoolApprovals[parsed.key] = { approvalMode: mode };\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.startsWith(\"-\")) {\n\t\t\treturn { ok: false, error: `Unknown option ${token}.` };\n\t\t}\n\t\tpositional.push(token);\n\t}\n\n\tif (!command && !url && positional.length > 0) {\n\t\tcommand = positional[0];\n\t\tcommandArgs.push(...positional.slice(1));\n\t} else if (command && positional.length > 0) {\n\t\tcommandArgs.push(...positional);\n\t} else if (!command && !url && positional.length === 0) {\n\t\t// noop\n\t} else if (url && positional.length > 0) {\n\t\treturn { ok: false, error: `Unexpected positional arguments: ${positional.join(\" \")}` };\n\t}\n\n\tconst resolvedTransport: McpTransport = transport ?? (command ? \"stdio\" : \"http\");\n\tif (resolvedTransport === \"stdio\" && !command) {\n\t\treturn { ok: false, error: \"stdio transport requires --command (or positional command).\" };\n\t}\n\tif ((resolvedTransport === \"http\" || resolvedTransport === \"sse\") && !url) {\n\t\treturn { ok: false, error: `${resolvedTransport} transport requires --url.` };\n\t}\n\n\tconst config: McpServerConfig = {\n\t\ttransport: resolvedTransport,\n\t\tcommand,\n\t\targs: commandArgs,\n\t\turl,\n\t\tcwd,\n\t\ttimeoutMs,\n\t\ttrust,\n\t\tenabled,\n\t\tincludeTools: includeTools.length > 0 ? includeTools : undefined,\n\t\texcludeTools: excludeTools.length > 0 ? excludeTools : undefined,\n\t\ttools: Object.keys(toolApprovals).length > 0 ? toolApprovals : undefined,\n\t\tenv: Object.keys(env).length > 0 ? env : undefined,\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t};\n\n\treturn {\n\t\tok: true,\n\t\tvalue: {\n\t\t\tname,\n\t\t\tscope,\n\t\t\tconfig,\n\t\t},\n\t};\n}\n\nexport function getMcpCommandHelp(prefix: string, options: McpCommandHelpOptions = {}): string {\n\tconst cmd = prefix.trim();\n\tconst lines = [\n\t\t`Usage:`,\n\t\t` ${cmd} list`,\n\t\t` ${cmd} get <name>`,\n\t\t` ${cmd} add [name] [--scope user|project] [--transport stdio|sse|http]`,\n\t\t` ${cmd} remove <name> [--scope user|project|all]`,\n\t\t` ${cmd} enable <name> [--scope user|project|all]`,\n\t\t` ${cmd} disable <name> [--scope user|project|all]`,\n\t\t` ${cmd} tools [name]`,\n\t\t` ${cmd} test <name>`,\n\t\t\"\",\n\t\t`Examples:`,\n\t\t` ${cmd} add filesystem --transport stdio --command npx --arg -y --arg @modelcontextprotocol/server-filesystem --arg .`,\n\t\t` ${cmd} add github --scope user --transport http --url https://mcp.example.com --header Authorization=Bearer\\ \\${GITHUB_TOKEN}`,\n\t\t` ${cmd} add github --transport http --url https://mcp.example.com --tool-approval search=prompt`,\n\t\t` ${cmd} disable filesystem --scope project`,\n\t\t` ${cmd} tools`,\n\t];\n\n\tif (options.includeWizard) {\n\t\tlines.splice(10, 0, ` ${cmd} add --wizard`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,eAAe,EAEf,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM7F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvF;AA0CD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAgBvG;AAsED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,eAAe,CA6BjB;AAoBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhH;AAeD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,CAWR;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,QAAQ,EAAE,CAoBZ;AAcD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,GAAG,MAAM,EACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,QAAQ,GAAG,SAAS,CAkBtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAGtH"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,aAAa,EACb,eAAe,EACf,uBAAuB,EAEvB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,eAAe,EAGf,MAAM,YAAY,CAAC;AAuFpB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM7F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvF;AA2CD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAgBvG;AAuED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,eAAe,CA6BjB;AA+BD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhH;AAeD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,CAWR;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,QAAQ,EAAE,CAoBZ;AAcD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,GAAG,MAAM,EACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,QAAQ,GAAG,SAAS,CAkBtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAGtH"}
@@ -19,6 +19,47 @@ function sanitizeStringArray(value) {
19
19
  const normalized = value.filter((item) => typeof item === "string").map((item) => item.trim());
20
20
  return [...new Set(normalized.filter((item) => item.length > 0))];
21
21
  }
22
+ function asMcpToolApprovalMode(value) {
23
+ if (typeof value !== "string")
24
+ return undefined;
25
+ const normalized = value.trim().toLowerCase();
26
+ if (normalized === "auto" || normalized === "prompt" || normalized === "approve") {
27
+ return normalized;
28
+ }
29
+ return undefined;
30
+ }
31
+ function sanitizeToolsConfig(value) {
32
+ if (!isRecord(value))
33
+ return undefined;
34
+ const result = {};
35
+ for (const [toolName, rawConfig] of Object.entries(value)) {
36
+ const name = toolName.trim();
37
+ if (!name)
38
+ continue;
39
+ if (!isRecord(rawConfig))
40
+ continue;
41
+ const approvalMode = asMcpToolApprovalMode(rawConfig.approvalMode);
42
+ if (!approvalMode)
43
+ continue;
44
+ result[name] = { approvalMode };
45
+ }
46
+ return Object.keys(result).length > 0 ? result : undefined;
47
+ }
48
+ function normalizeResolvedToolsConfig(value) {
49
+ const result = {};
50
+ if (!value)
51
+ return result;
52
+ for (const [toolName, config] of Object.entries(value)) {
53
+ const name = toolName.trim();
54
+ if (!name)
55
+ continue;
56
+ const approvalMode = asMcpToolApprovalMode(config.approvalMode);
57
+ if (!approvalMode)
58
+ continue;
59
+ result[name] = { approvalMode };
60
+ }
61
+ return result;
62
+ }
22
63
  function sanitizeStringRecord(value) {
23
64
  if (!isRecord(value))
24
65
  return undefined;
@@ -87,6 +128,7 @@ function parseMcpConfigFile(path) {
87
128
  trust: asBoolean(server.trust),
88
129
  includeTools: sanitizeStringArray(server.includeTools),
89
130
  excludeTools: sanitizeStringArray(server.excludeTools),
131
+ tools: sanitizeToolsConfig(server.tools),
90
132
  };
91
133
  }
92
134
  result.mcpServers = normalizedServers;
@@ -166,6 +208,7 @@ function normalizeServerConfig(name, rawConfig, scope, cwd, agentDir, env) {
166
208
  trust: rawConfig.trust ?? false,
167
209
  includeTools: sanitizeStringArray(rawConfig.includeTools),
168
210
  excludeTools: sanitizeStringArray(rawConfig.excludeTools),
211
+ tools: normalizeResolvedToolsConfig(rawConfig.tools),
169
212
  };
170
213
  }
171
214
  export function loadMergedMcpConfig(cwd, agentDir, env = process.env) {
@@ -224,6 +267,18 @@ function cleanServerConfigForSave(config) {
224
267
  cleaned.includeTools = [...config.includeTools];
225
268
  if (config.excludeTools && config.excludeTools.length > 0)
226
269
  cleaned.excludeTools = [...config.excludeTools];
270
+ if (config.tools) {
271
+ const tools = {};
272
+ for (const [toolName, toolConfig] of Object.entries(config.tools)) {
273
+ const approvalMode = asMcpToolApprovalMode(toolConfig.approvalMode);
274
+ if (!approvalMode)
275
+ continue;
276
+ tools[toolName] = { approvalMode };
277
+ }
278
+ if (Object.keys(tools).length > 0) {
279
+ cleaned.tools = tools;
280
+ }
281
+ }
227
282
  return cleaned;
228
283
  }
229
284
  export function writeScopedMcpConfig(scope, file, cwd, agentDir) {