ummaya 0.2.3 → 0.2.5

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 (534) hide show
  1. package/README.md +17 -3
  2. package/bin/ummaya +10 -1
  3. package/npm-shrinkwrap.json +253 -2
  4. package/package.json +5 -1
  5. package/prompts/manifest.yaml +2 -2
  6. package/prompts/session_guidance_v1.md +3 -1
  7. package/prompts/system_v1.md +9 -7
  8. package/pyproject.toml +26 -7
  9. package/specs/2803-document-production-hardening/contracts/document-tools.schema.json +1043 -0
  10. package/src/ummaya/_canonical/__init__.py +2 -0
  11. package/src/ummaya/context/builder.py +17 -11
  12. package/src/ummaya/engine/engine.py +30 -113
  13. package/src/ummaya/engine/query.py +20 -0
  14. package/src/ummaya/evidence/__init__.py +44 -0
  15. package/src/ummaya/evidence/__main__.py +7 -0
  16. package/src/ummaya/evidence/dataset_contract.py +193 -0
  17. package/src/ummaya/evidence/document_authoring_cases.py +33 -0
  18. package/src/ummaya/evidence/document_harness.py +313 -0
  19. package/src/ummaya/evidence/document_viewer_ux.py +391 -0
  20. package/src/ummaya/evidence/gates.py +70 -0
  21. package/src/ummaya/evidence/json_types.py +20 -0
  22. package/src/ummaya/evidence/models.py +145 -0
  23. package/src/ummaya/evidence/output_payload.py +89 -0
  24. package/src/ummaya/evidence/payload_documents.py +233 -0
  25. package/src/ummaya/evidence/route_contracts.py +224 -0
  26. package/src/ummaya/evidence/route_helpers.py +150 -0
  27. package/src/ummaya/evidence/runner.py +177 -0
  28. package/src/ummaya/evidence/source_provenance.py +246 -0
  29. package/src/ummaya/evidence/source_provenance_redaction.py +176 -0
  30. package/src/ummaya/evidence/task_registry.py +264 -0
  31. package/src/ummaya/evidence/tool_layer.py +39 -0
  32. package/src/ummaya/evidence/tool_layer_models.py +151 -0
  33. package/src/ummaya/ipc/adapter_manifest_emitter.py +26 -10
  34. package/src/ummaya/ipc/document_intent_normalization.py +185 -0
  35. package/src/ummaya/ipc/frame_schema.py +52 -5
  36. package/src/ummaya/ipc/route_diagnostics.py +73 -0
  37. package/src/ummaya/ipc/stdio.py +2282 -417
  38. package/src/ummaya/llm/client.py +234 -59
  39. package/src/ummaya/llm/config.py +8 -3
  40. package/src/ummaya/llm/reasoning.py +84 -0
  41. package/src/ummaya/primitives/__init__.py +6 -2
  42. package/src/ummaya/primitives/delegation.py +1 -1
  43. package/src/ummaya/primitives/document.py +28 -0
  44. package/src/ummaya/settings.py +0 -3
  45. package/src/ummaya/tools/discovery_bridge.py +34 -2
  46. package/src/ummaya/tools/documents/__init__.py +297 -0
  47. package/src/ummaya/tools/documents/adapter_registry.py +487 -0
  48. package/src/ummaya/tools/documents/archive_container_probe.py +167 -0
  49. package/src/ummaya/tools/documents/artifact_store.py +454 -0
  50. package/src/ummaya/tools/documents/authoring.py +283 -0
  51. package/src/ummaya/tools/documents/baselines.py +114 -0
  52. package/src/ummaya/tools/documents/capability.py +331 -0
  53. package/src/ummaya/tools/documents/contracts.py +112 -0
  54. package/src/ummaya/tools/documents/conversion.py +521 -0
  55. package/src/ummaya/tools/documents/diff.py +275 -0
  56. package/src/ummaya/tools/documents/engines.py +163 -0
  57. package/src/ummaya/tools/documents/evaluation.py +291 -0
  58. package/src/ummaya/tools/documents/explicit_values.py +108 -0
  59. package/src/ummaya/tools/documents/fixtures.py +174 -0
  60. package/src/ummaya/tools/documents/format_completion_audit.py +471 -0
  61. package/src/ummaya/tools/documents/formats/__init__.py +2 -0
  62. package/src/ummaya/tools/documents/formats/archive.py +528 -0
  63. package/src/ummaya/tools/documents/formats/base.py +41 -0
  64. package/src/ummaya/tools/documents/formats/code_file.py +211 -0
  65. package/src/ummaya/tools/documents/formats/data_file.py +272 -0
  66. package/src/ummaya/tools/documents/formats/hwp.py +284 -0
  67. package/src/ummaya/tools/documents/formats/hwpx.py +1837 -0
  68. package/src/ummaya/tools/documents/formats/odf.py +435 -0
  69. package/src/ummaya/tools/documents/formats/ooxml.py +1030 -0
  70. package/src/ummaya/tools/documents/formats/passive.py +766 -0
  71. package/src/ummaya/tools/documents/formats/pdf.py +702 -0
  72. package/src/ummaya/tools/documents/formats/text_web.py +268 -0
  73. package/src/ummaya/tools/documents/hwp_conversion_probe.py +178 -0
  74. package/src/ummaya/tools/documents/hwp_direct_candidate.py +141 -0
  75. package/src/ummaya/tools/documents/inspection.py +289 -0
  76. package/src/ummaya/tools/documents/intake.py +1079 -0
  77. package/src/ummaya/tools/documents/legacy_office_promotion_probe.py +366 -0
  78. package/src/ummaya/tools/documents/models.py +1598 -0
  79. package/src/ummaya/tools/documents/odf_promotion_probe.py +167 -0
  80. package/src/ummaya/tools/documents/orchestrator.py +96 -0
  81. package/src/ummaya/tools/documents/passive_capability_probe.py +251 -0
  82. package/src/ummaya/tools/documents/patch.py +170 -0
  83. package/src/ummaya/tools/documents/pdfa_conformance.py +284 -0
  84. package/src/ummaya/tools/documents/pdfa_promotion_probe.py +198 -0
  85. package/src/ummaya/tools/documents/permissions.py +110 -0
  86. package/src/ummaya/tools/documents/planner.py +616 -0
  87. package/src/ummaya/tools/documents/registry.py +2733 -0
  88. package/src/ummaya/tools/documents/render.py +978 -0
  89. package/src/ummaya/tools/documents/render_comparison.py +113 -0
  90. package/src/ummaya/tools/documents/render_comparison_models.py +74 -0
  91. package/src/ummaya/tools/documents/render_comparison_regions.py +73 -0
  92. package/src/ummaya/tools/documents/render_comparison_style.py +161 -0
  93. package/src/ummaya/tools/documents/reread.py +157 -0
  94. package/src/ummaya/tools/documents/runtime_authoring.py +244 -0
  95. package/src/ummaya/tools/documents/runtime_authoring_bundle.py +76 -0
  96. package/src/ummaya/tools/documents/scorecard.py +184 -0
  97. package/src/ummaya/tools/documents/socratic_planner.py +193 -0
  98. package/src/ummaya/tools/documents/style.py +48 -0
  99. package/src/ummaya/tools/documents/tool_defs.py +523 -0
  100. package/src/ummaya/tools/documents/validate.py +347 -0
  101. package/src/ummaya/tools/executor.py +61 -12
  102. package/src/ummaya/tools/geocoding/kakao_client.py +1 -2
  103. package/src/ummaya/tools/kma/apihub_catalog.py +984 -1
  104. package/src/ummaya/tools/kma/apihub_structured_adapter.py +86 -6
  105. package/src/ummaya/tools/kma/apihub_url_adapter.py +593 -0
  106. package/src/ummaya/tools/kma/apihub_url_catalog.py +296 -0
  107. package/src/ummaya/tools/live_proxy.py +0 -3
  108. package/src/ummaya/tools/location_adapters.py +8 -6
  109. package/src/ummaya/tools/manifest_metadata.py +16 -3
  110. package/src/ummaya/tools/models.py +5 -1
  111. package/src/ummaya/tools/mvp_surface.py +2 -2
  112. package/src/ummaya/tools/nmc/emergency_search.py +8 -6
  113. package/src/ummaya/tools/register_all.py +17 -0
  114. package/src/ummaya/tools/registry.py +10 -1
  115. package/src/ummaya/tools/resolve_location.py +4 -4
  116. package/src/ummaya/tools/routing/__init__.py +59 -0
  117. package/src/ummaya/tools/routing/builder.py +105 -0
  118. package/src/ummaya/tools/routing/cards.py +29 -0
  119. package/src/ummaya/tools/routing/decision_service.py +534 -0
  120. package/src/ummaya/tools/routing/decision_types.py +74 -0
  121. package/src/ummaya/tools/routing/feasibility.py +122 -0
  122. package/src/ummaya/tools/routing/intent.py +17 -0
  123. package/src/ummaya/tools/routing/intent_extractor.py +207 -0
  124. package/src/ummaya/tools/routing/intent_patterns.py +160 -0
  125. package/src/ummaya/tools/routing/intent_public_data.py +150 -0
  126. package/src/ummaya/tools/routing/intent_types.py +48 -0
  127. package/src/ummaya/tools/routing/lint.py +78 -0
  128. package/src/ummaya/tools/routing/metadata.py +174 -0
  129. package/src/ummaya/tools/routing/projection.py +340 -0
  130. package/src/ummaya/tools/routing/retrieval_policy.py +629 -0
  131. package/src/ummaya/tools/routing/schema.py +81 -0
  132. package/src/ummaya/tools/routing/types.py +96 -0
  133. package/src/ummaya/tools/routing_index.py +2 -2
  134. package/src/ummaya/tools/search.py +40 -106
  135. package/src/ummaya/tools/verified_data_go_kr/_manifest.py +115 -25
  136. package/src/ummaya/tools/verified_data_go_kr/airkorea_air_quality.py +109 -4
  137. package/src/ummaya/tools/verified_data_go_kr/nmc_aed_site.py +108 -2
  138. package/src/ummaya/tools/verified_data_go_kr/pps_bid_public_info.py +174 -9
  139. package/src/ummaya/tools/verified_data_go_kr/tago_bus_arrival.py +66 -3
  140. package/src/ummaya/tools/verified_data_go_kr/tago_bus_location.py +12 -2
  141. package/src/ummaya/tools/verified_data_go_kr/tago_bus_route.py +8 -2
  142. package/src/ummaya/tools/verified_data_go_kr/tago_bus_route_station.py +114 -0
  143. package/src/ummaya/tools/verified_data_go_kr/tago_bus_station.py +14 -3
  144. package/src/ummaya/tools/verify_canonical_map.py +21 -0
  145. package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
  146. package/tui/package.json +1 -2
  147. package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
  148. package/tui/src/QueryEngine.ts +12 -4
  149. package/tui/src/bridge/inboundAttachments.ts +3 -3
  150. package/tui/src/cli/handlers/auth.ts +4 -13
  151. package/tui/src/cli/handlers/mcp.tsx +3 -3
  152. package/tui/src/cli/print.ts +69 -18
  153. package/tui/src/cli/update.ts +13 -13
  154. package/tui/src/commands/copy/index.ts +1 -1
  155. package/tui/src/commands/cost/cost.ts +2 -2
  156. package/tui/src/commands/init-verifiers.ts +5 -5
  157. package/tui/src/commands/init.ts +30 -30
  158. package/tui/src/commands/insights.ts +44 -44
  159. package/tui/src/commands/install-github-app/install-github-app.tsx +2 -2
  160. package/tui/src/commands/install-github-app/setupGitHubActions.ts +3 -3
  161. package/tui/src/commands/install-github-app/types.ts +8 -30
  162. package/tui/src/commands/install.tsx +5 -5
  163. package/tui/src/commands/mcp/addCommand.ts +5 -5
  164. package/tui/src/commands/mcp/xaaIdpCommand.ts +2 -2
  165. package/tui/src/commands/plugin/ManageMarketplaces.tsx +2 -2
  166. package/tui/src/commands/plugin/types.ts +6 -28
  167. package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
  168. package/tui/src/commands/reasoning/index.ts +13 -0
  169. package/tui/src/commands/reasoning/reasoning.tsx +177 -0
  170. package/tui/src/commands/rename/generateSessionName.ts +1 -1
  171. package/tui/src/commands/thinkback/thinkback.tsx +3 -3
  172. package/tui/src/commands.ts +2 -0
  173. package/tui/src/components/Feedback.tsx +1 -1
  174. package/tui/src/components/LogoV2/EmergencyTip.tsx +11 -2
  175. package/tui/src/components/LogoV2/WelcomeV2.tsx +1 -3
  176. package/tui/src/components/Messages.tsx +2 -1
  177. package/tui/src/components/ScrollKeybindingHandler.tsx +6 -6
  178. package/tui/src/components/Spinner/types.ts +6 -28
  179. package/tui/src/components/Spinner.tsx +2 -2
  180. package/tui/src/components/agents/generateAgent.ts +1 -1
  181. package/tui/src/components/agents/new-agent-creation/types.ts +4 -26
  182. package/tui/src/components/config/EnvSecretIsolatedEditor.tsx +1 -1
  183. package/tui/src/components/design-system/LoadingState.tsx +2 -2
  184. package/tui/src/components/mcp/types.ts +16 -38
  185. package/tui/src/components/messages/AssistantToolUseMessage.tsx +3 -2
  186. package/tui/src/components/messages/UserCrossSessionMessage.ts +16 -4
  187. package/tui/src/components/messages/UserForkBoilerplateMessage.ts +16 -4
  188. package/tui/src/components/messages/UserGitHubWebhookMessage.ts +16 -4
  189. package/tui/src/components/messages/UserToolResultMessage/utils.tsx +3 -2
  190. package/tui/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +9 -4
  191. package/tui/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +9 -4
  192. package/tui/src/components/primitive/DocumentSocraticReviewBlock.tsx +129 -0
  193. package/tui/src/components/primitive/DocumentToolResultCard.tsx +224 -0
  194. package/tui/src/components/primitive/documentSocraticReview.ts +215 -0
  195. package/tui/src/components/primitive/index.tsx +43 -1
  196. package/tui/src/components/primitive/types.ts +137 -0
  197. package/tui/src/components/ui/option.ts +4 -26
  198. package/tui/src/constants/common.ts +0 -2
  199. package/tui/src/constants/prompts.ts +4 -3
  200. package/tui/src/constants/querySource.ts +4 -26
  201. package/tui/src/entrypoints/sdk/controlTypes.ts +26 -48
  202. package/tui/src/entrypoints/sdk/coreTypes.generated.ts +3 -25
  203. package/tui/src/entrypoints/sdk/runtimeTypes.ts +38 -60
  204. package/tui/src/entrypoints/sdk/sdkUtilityTypes.ts +4 -26
  205. package/tui/src/entrypoints/sdk/settingsTypes.generated.ts +3 -25
  206. package/tui/src/entrypoints/sdk/toolTypes.ts +3 -25
  207. package/tui/src/hooks/toolPermission/handlers/interactiveHandler.ts +10 -0
  208. package/tui/src/hooks/useApiKeyVerification.ts +1 -1
  209. package/tui/src/hooks/useVirtualScroll.ts +1 -1
  210. package/tui/src/ink/ink.tsx +33 -14
  211. package/tui/src/ink/reconciler.ts +2 -3
  212. package/tui/src/ink/render-to-screen.ts +30 -10
  213. package/tui/src/ipc/bridge.ts +62 -15
  214. package/tui/src/ipc/bridgeSingleton.ts +5 -1
  215. package/tui/src/ipc/codec.ts +29 -3
  216. package/tui/src/ipc/frames.generated.ts +407 -312
  217. package/tui/src/ipc/llmClient.ts +279 -76
  218. package/tui/src/ipc/llmTypes.ts +16 -1
  219. package/tui/src/ipc/schema/frame.schema.json +1 -3475
  220. package/tui/src/keybindings/defaultBindings.ts +4 -0
  221. package/tui/src/main.tsx +32 -11
  222. package/tui/src/native-ts/file-index/index.ts +33 -3
  223. package/tui/src/observability/surface.ts +2 -2
  224. package/tui/src/probes/toolRegistryProbe.tsx +3 -1
  225. package/tui/src/projectOnboardingState.ts +7 -6
  226. package/tui/src/query/chatMessageTypes.ts +18 -0
  227. package/tui/src/query/chatMessagesBuilder.ts +1 -1
  228. package/tui/src/query/deps.ts +1 -1
  229. package/tui/src/query/messageGuards.ts +106 -0
  230. package/tui/src/query/publicDataTerminalRepair.ts +384 -0
  231. package/tui/src/query/run.ts +1075 -0
  232. package/tui/src/query/supportBoundary.ts +168 -0
  233. package/tui/src/query/toolResultErrors.ts +103 -0
  234. package/tui/src/query/toolRunner.ts +687 -0
  235. package/tui/src/query/unavailableToolRepair.ts +118 -0
  236. package/tui/src/query.ts +9 -1721
  237. package/tui/src/screens/REPL.tsx +42 -31
  238. package/tui/src/services/api/adapterManifest.ts +4 -0
  239. package/tui/src/services/api/backendChat/events.ts +117 -0
  240. package/tui/src/services/api/backendChat/finalMessage.ts +40 -0
  241. package/tui/src/services/api/backendChat/frame.ts +9 -0
  242. package/tui/src/services/api/backendChat/streaming.ts +430 -0
  243. package/tui/src/services/api/backendChat/types.ts +62 -0
  244. package/tui/src/services/api/backendChat.ts +1 -0
  245. package/tui/src/services/api/client.ts +98 -14
  246. package/tui/src/services/api/errorUtils.ts +5 -5
  247. package/tui/src/services/api/errors.ts +1 -1
  248. package/tui/src/services/api/logging.ts +1 -1
  249. package/tui/src/services/api/ummaya/evidence.ts +194 -0
  250. package/tui/src/services/api/ummaya/messages.ts +255 -0
  251. package/tui/src/services/api/ummaya/nonStreaming.ts +66 -0
  252. package/tui/src/services/api/ummaya/provider.ts +200 -0
  253. package/tui/src/services/api/ummaya/reasoning.ts +24 -0
  254. package/tui/src/services/api/ummaya/request.ts +200 -0
  255. package/tui/src/services/api/ummaya/selectionContext.ts +240 -0
  256. package/tui/src/services/api/ummaya/streaming.ts +365 -0
  257. package/tui/src/services/api/ummaya/streamingPayload.ts +129 -0
  258. package/tui/src/services/api/ummaya/streamingReader.ts +40 -0
  259. package/tui/src/services/api/ummaya/toolSelection.ts +217 -0
  260. package/tui/src/services/api/ummaya/types.ts +110 -0
  261. package/tui/src/services/api/ummaya/usage.ts +30 -0
  262. package/tui/src/services/api/ummaya.ts +26 -364
  263. package/tui/src/services/api/withRetry.ts +1 -1
  264. package/tui/src/services/awaySummary.ts +2 -2
  265. package/tui/src/services/claudeAiLimits.ts +1 -1
  266. package/tui/src/services/compact/autoCompact.ts +1 -1
  267. package/tui/src/services/compact/compact.ts +1 -1
  268. package/tui/src/services/lsp/types.ts +8 -30
  269. package/tui/src/services/tips/types.ts +6 -28
  270. package/tui/src/services/tokenEstimation.ts +1 -1
  271. package/tui/src/services/toolRegistry/bootGuard.ts +5 -5
  272. package/tui/src/services/toolUseSummary/toolUseSummaryGenerator.ts +1 -1
  273. package/tui/src/services/tools/toolExecution.ts +94 -1
  274. package/tui/src/skills/bundled/stuck.ts +12 -12
  275. package/tui/src/state/AppStateStore.ts +7 -0
  276. package/tui/src/store/pendingPermissionSlot.ts +1 -1
  277. package/tui/src/store/session-store.ts +10 -36
  278. package/tui/src/stubs/any-stub.ts +15 -10
  279. package/tui/src/stubs/color-diff-napi.ts +37 -23
  280. package/tui/src/stubs/globals.d.ts +3 -3
  281. package/tui/src/stubs/macro-preload.ts +23 -12
  282. package/tui/src/tools/AdapterTool/AdapterTool.ts +1239 -163
  283. package/tui/src/tools/AdapterTool/routeDiagnostics.ts +75 -0
  284. package/tui/src/tools/AgentTool/AgentTool.tsx +84 -1371
  285. package/tui/src/tools/AgentTool/agentToolHandoff.ts +114 -0
  286. package/tui/src/tools/AgentTool/agentToolPartialResult.ts +16 -0
  287. package/tui/src/tools/AgentTool/agentToolProgress.ts +32 -0
  288. package/tui/src/tools/AgentTool/agentToolResolver.ts +161 -0
  289. package/tui/src/tools/AgentTool/agentToolResult.ts +163 -0
  290. package/tui/src/tools/AgentTool/agentToolUtils.ts +14 -686
  291. package/tui/src/tools/AgentTool/asyncAgentLifecycle.ts +208 -0
  292. package/tui/src/tools/AgentTool/asyncLifecycle.ts +153 -0
  293. package/tui/src/tools/AgentTool/backgroundedCompletion.ts +126 -0
  294. package/tui/src/tools/AgentTool/backgroundedLifecycle.ts +174 -0
  295. package/tui/src/tools/AgentTool/foregroundBackground.ts +83 -0
  296. package/tui/src/tools/AgentTool/foregroundDrain.tsx +133 -0
  297. package/tui/src/tools/AgentTool/foregroundFinalize.ts +98 -0
  298. package/tui/src/tools/AgentTool/foregroundLifecycle.tsx +237 -0
  299. package/tui/src/tools/AgentTool/foregroundProgress.tsx +169 -0
  300. package/tui/src/tools/AgentTool/foregroundTask.ts +89 -0
  301. package/tui/src/tools/AgentTool/forkSubagent.ts +1 -12
  302. package/tui/src/tools/AgentTool/forkSubagentGate.ts +34 -0
  303. package/tui/src/tools/AgentTool/launchRouting.ts +203 -0
  304. package/tui/src/tools/AgentTool/lifecycle.ts +244 -0
  305. package/tui/src/tools/AgentTool/mcpRouting.ts +73 -0
  306. package/tui/src/tools/AgentTool/orchestrationSupport.ts +70 -0
  307. package/tui/src/tools/AgentTool/permissions.ts +39 -0
  308. package/tui/src/tools/AgentTool/promptSetup.ts +181 -0
  309. package/tui/src/tools/AgentTool/remoteRouting.ts +62 -0
  310. package/tui/src/tools/AgentTool/resultMapping.ts +116 -0
  311. package/tui/src/tools/AgentTool/resumeAgent.ts +39 -107
  312. package/tui/src/tools/AgentTool/resumeAgentHelpers.ts +140 -0
  313. package/tui/src/tools/AgentTool/runAgent.ts +1 -1
  314. package/tui/src/tools/AgentTool/runtimeConfig.ts +57 -0
  315. package/tui/src/tools/AgentTool/schemas.ts +196 -0
  316. package/tui/src/tools/AgentTool/sourceVerificationPropagation.ts +263 -0
  317. package/tui/src/tools/AgentTool/worktreeLifecycle.ts +105 -0
  318. package/tui/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +174 -202
  319. package/tui/src/tools/BashTool/BashTool.tsx +71 -1072
  320. package/tui/src/tools/BashTool/bashCommandHelpers.ts +12 -12
  321. package/tui/src/tools/BashTool/bashPermissions/astPreflight.ts +173 -0
  322. package/tui/src/tools/BashTool/bashPermissions/classifierChecks.ts +199 -0
  323. package/tui/src/tools/BashTool/bashPermissions/compoundGuards.ts +53 -0
  324. package/tui/src/tools/BashTool/bashPermissions/constants.ts +99 -0
  325. package/tui/src/tools/BashTool/bashPermissions/index.ts +38 -0
  326. package/tui/src/tools/BashTool/bashPermissions/legacyMisparsing.ts +62 -0
  327. package/tui/src/tools/BashTool/bashPermissions/main.ts +135 -0
  328. package/tui/src/tools/BashTool/bashPermissions/normalizedCommands.ts +33 -0
  329. package/tui/src/tools/BashTool/bashPermissions/operatorFlow.ts +98 -0
  330. package/tui/src/tools/BashTool/bashPermissions/permissionChecks.ts +200 -0
  331. package/tui/src/tools/BashTool/bashPermissions/prefixSuggestions.ts +88 -0
  332. package/tui/src/tools/BashTool/bashPermissions/promptClassifierRules.ts +125 -0
  333. package/tui/src/tools/BashTool/bashPermissions/ruleDelegates.ts +19 -0
  334. package/tui/src/tools/BashTool/bashPermissions/ruleMatching.ts +145 -0
  335. package/tui/src/tools/BashTool/bashPermissions/sandboxAutoAllow.ts +75 -0
  336. package/tui/src/tools/BashTool/bashPermissions/subcommandFlow.ts +205 -0
  337. package/tui/src/tools/BashTool/bashPermissions/subcommandGuards.ts +73 -0
  338. package/tui/src/tools/BashTool/bashPermissions/subcommandResultHelpers.ts +116 -0
  339. package/tui/src/tools/BashTool/bashPermissions/types.ts +26 -0
  340. package/tui/src/tools/BashTool/bashPermissions/wrapperStripping.ts +139 -0
  341. package/tui/src/tools/BashTool/bashPermissions.ts +26 -2621
  342. package/tui/src/tools/BashTool/call.ts +202 -0
  343. package/tui/src/tools/BashTool/callLoader.ts +35 -0
  344. package/tui/src/tools/BashTool/commandClassification.ts +151 -0
  345. package/tui/src/tools/BashTool/commandClassificationLoader.ts +40 -0
  346. package/tui/src/tools/BashTool/cwdReset.ts +33 -0
  347. package/tui/src/tools/BashTool/lineTruncation.ts +11 -0
  348. package/tui/src/tools/BashTool/modeValidation.ts +13 -1
  349. package/tui/src/tools/BashTool/outputPersistence.ts +42 -0
  350. package/tui/src/tools/BashTool/permissionClassification.ts +66 -0
  351. package/tui/src/tools/BashTool/permissionLoader.ts +44 -0
  352. package/tui/src/tools/BashTool/resultLoader.ts +29 -0
  353. package/tui/src/tools/BashTool/resultMapping.ts +83 -0
  354. package/tui/src/tools/BashTool/sandboxPolicy.ts +79 -0
  355. package/tui/src/tools/BashTool/schemas.ts +65 -0
  356. package/tui/src/tools/BashTool/sedEditExecution.ts +59 -0
  357. package/tui/src/tools/BashTool/shellExecution.tsx +245 -0
  358. package/tui/src/tools/BashTool/shellOutputUtils.ts +85 -0
  359. package/tui/src/tools/BashTool/shellPermissionGauntlet.ts +97 -0
  360. package/tui/src/tools/BashTool/uiLoader.ts +37 -0
  361. package/tui/src/tools/BriefTool/upload.ts +1 -1
  362. package/tui/src/tools/CalculatorTool/parser.ts +2 -2
  363. package/tui/src/tools/DocumentPrimitive/DocumentPrimitive.ts +262 -0
  364. package/tui/src/tools/DocumentPrimitive/dispatchNormalization.ts +270 -0
  365. package/tui/src/tools/DocumentPrimitive/documentDestinationPath.ts +18 -0
  366. package/tui/src/tools/DocumentPrimitive/documentMutationGuard.ts +22 -0
  367. package/tui/src/tools/DocumentPrimitive/documentPatchNormalization.ts +248 -0
  368. package/tui/src/tools/DocumentPrimitive/documentSourceVerification.ts +245 -0
  369. package/tui/src/tools/DocumentPrimitive/documentSourceVerificationFields.ts +103 -0
  370. package/tui/src/tools/DocumentPrimitive/modelVisibleOutput.ts +40 -0
  371. package/tui/src/tools/DocumentPrimitive/prompt.ts +35 -0
  372. package/tui/src/tools/FileEditTool/FileEditTool.ts +9 -507
  373. package/tui/src/tools/FileEditTool/call.ts +228 -0
  374. package/tui/src/tools/FileEditTool/validateInput.ts +196 -0
  375. package/tui/src/tools/FileReadTool/imageProcessor.ts +13 -0
  376. package/tui/src/tools/FileWriteTool/FileWriteTool.ts +7 -300
  377. package/tui/src/tools/FileWriteTool/call.ts +223 -0
  378. package/tui/src/tools/FileWriteTool/validateInput.ts +80 -0
  379. package/tui/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +19 -3
  380. package/tui/src/tools/LookupPrimitive/LookupPrimitive.ts +48 -29
  381. package/tui/src/tools/LookupPrimitive/prompt.ts +6 -7
  382. package/tui/src/tools/MCPTool/trustPolicy.ts +118 -0
  383. package/tui/src/tools/McpAuthTool/McpAuthTool.ts +21 -3
  384. package/tui/src/tools/NotebookEditTool/NotebookEditTool.ts +7 -326
  385. package/tui/src/tools/NotebookEditTool/call.ts +254 -0
  386. package/tui/src/tools/NotebookEditTool/notebookModel.ts +51 -0
  387. package/tui/src/tools/NotebookEditTool/validateInput.ts +142 -0
  388. package/tui/src/tools/PowerShellTool/PowerShellTool.tsx +46 -937
  389. package/tui/src/tools/PowerShellTool/acceptEditsCommandValidation.ts +162 -0
  390. package/tui/src/tools/PowerShellTool/call.ts +179 -0
  391. package/tui/src/tools/PowerShellTool/callLoader.ts +37 -0
  392. package/tui/src/tools/PowerShellTool/commandClassification.ts +86 -0
  393. package/tui/src/tools/PowerShellTool/modeValidation.ts +25 -332
  394. package/tui/src/tools/PowerShellTool/outputPersistence.ts +42 -0
  395. package/tui/src/tools/PowerShellTool/permissionClassification.ts +28 -0
  396. package/tui/src/tools/PowerShellTool/resultLoader.ts +31 -0
  397. package/tui/src/tools/PowerShellTool/resultMapping.ts +75 -0
  398. package/tui/src/tools/PowerShellTool/schemas.ts +40 -0
  399. package/tui/src/tools/PowerShellTool/shellExecution.tsx +258 -0
  400. package/tui/src/tools/PowerShellTool/symlinkModeValidation.ts +44 -0
  401. package/tui/src/tools/PowerShellTool/uiLoader.ts +37 -0
  402. package/tui/src/tools/PowerShellTool/validation.ts +39 -0
  403. package/tui/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +19 -3
  404. package/tui/src/tools/ResolveLocationPrimitive/ResolveLocationPrimitive.ts +30 -19
  405. package/tui/src/tools/ResolveLocationPrimitive/prompt.ts +2 -6
  406. package/tui/src/tools/SkillTool/SkillTool.ts +2 -2
  407. package/tui/src/tools/SubmitPrimitive/SubmitPrimitive.ts +51 -18
  408. package/tui/src/tools/TaskCreateTool/TaskCreateTool.ts +16 -2
  409. package/tui/src/tools/TaskGetTool/TaskGetTool.ts +23 -3
  410. package/tui/src/tools/TaskListTool/TaskListTool.ts +22 -4
  411. package/tui/src/tools/TaskOutputTool/TaskOutputTool.tsx +46 -547
  412. package/tui/src/tools/TaskOutputTool/lookup.ts +216 -0
  413. package/tui/src/tools/TaskOutputTool/render.tsx +257 -0
  414. package/tui/src/tools/TaskOutputTool/schemas.ts +55 -0
  415. package/tui/src/tools/TaskOutputTool/serialization.ts +36 -0
  416. package/tui/src/tools/TaskStopTool/TaskStopTool.ts +10 -0
  417. package/tui/src/tools/TaskUpdateTool/TaskUpdateTool.ts +14 -364
  418. package/tui/src/tools/TaskUpdateTool/completion.ts +62 -0
  419. package/tui/src/tools/TaskUpdateTool/schemas.ts +62 -0
  420. package/tui/src/tools/TaskUpdateTool/serialization.ts +46 -0
  421. package/tui/src/tools/TaskUpdateTool/statusUpdate.ts +247 -0
  422. package/tui/src/tools/TodoWriteTool/TodoWriteTool.ts +21 -2
  423. package/tui/src/tools/ToolSearchTool/ToolSearchTool.ts +21 -302
  424. package/tui/src/tools/ToolSearchTool/ccSupportTools.ts +223 -0
  425. package/tui/src/tools/ToolSearchTool/descriptionCache.ts +50 -0
  426. package/tui/src/tools/ToolSearchTool/keywordSearch.ts +216 -0
  427. package/tui/src/tools/ToolSearchTool/prompt.ts +10 -4
  428. package/tui/src/tools/ToolSearchTool/resultMapping.ts +30 -0
  429. package/tui/src/tools/ToolSearchTool/schemas.ts +30 -0
  430. package/tui/src/tools/ToolSearchTool/searchPool.ts +47 -0
  431. package/tui/src/tools/ToolSearchTool/supportIntentHints.ts +140 -0
  432. package/tui/src/tools/TranslateTool/TranslateTool.ts +1 -1
  433. package/tui/src/tools/VerifyPrimitive/VerifyPrimitive.ts +27 -10
  434. package/tui/src/tools/WebFetchTool/WebFetchTool.ts +43 -138
  435. package/tui/src/tools/WebFetchTool/call.ts +227 -0
  436. package/tui/src/tools/WebFetchTool/resolvedAddressSafety.ts +78 -0
  437. package/tui/src/tools/WebFetchTool/sourceVerification.ts +204 -0
  438. package/tui/src/tools/WebFetchTool/types.ts +23 -0
  439. package/tui/src/tools/WebFetchTool/urlSafety.ts +181 -0
  440. package/tui/src/tools/WebFetchTool/utils.ts +1 -1
  441. package/tui/src/tools/WebSearchTool/UI.tsx +0 -1
  442. package/tui/src/tools/WebSearchTool/WebSearchTool.ts +9 -313
  443. package/tui/src/tools/WebSearchTool/call.ts +33 -0
  444. package/tui/src/tools/WebSearchTool/responseMapping.ts +190 -0
  445. package/tui/src/tools/WebSearchTool/resultBlock.ts +47 -0
  446. package/tui/src/tools/WebSearchTool/schemas.ts +47 -0
  447. package/tui/src/tools/WebSearchTool/toolSchema.ts +12 -0
  448. package/tui/src/tools/WorkspaceToolAdapter/WorkspaceToolAdapter.ts +79 -0
  449. package/tui/src/tools/WorkspaceToolAdapter/allowedRootPolicy.ts +85 -0
  450. package/tui/src/tools/WorkspaceToolAdapter/documentFormatGuards.ts +73 -0
  451. package/tui/src/tools/WorkspaceToolAdapter/inputNormalization.ts +105 -0
  452. package/tui/src/tools/WorkspaceToolAdapter/mcpExposurePolicy.ts +64 -0
  453. package/tui/src/tools/WorkspaceToolAdapter/toolDefFactory.ts +215 -0
  454. package/tui/src/tools/WorkspaceToolAdapter/toolNames.ts +6 -0
  455. package/tui/src/tools/WorkspaceToolAdapter/workspacePolicy.ts +15 -0
  456. package/tui/src/tools/_shared/citizenUserText.ts +49 -0
  457. package/tui/src/tools/_shared/dispatchPrimitive.ts +6 -6
  458. package/tui/src/tools/_shared/documentChangeToPatch.ts +125 -0
  459. package/tui/src/tools/_shared/documentDispatchArguments.ts +87 -0
  460. package/tui/src/tools/_shared/documentPrimitiveTimeout.ts +13 -0
  461. package/tui/src/tools/_shared/documentToolResultRender.ts +98 -0
  462. package/tui/src/tools/_shared/locationInputRepair.ts +112 -0
  463. package/tui/src/tools/_shared/pendingCallRegistry.ts +1 -6
  464. package/tui/src/tools/_shared/rootPrimitiveInput.ts +68 -0
  465. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPatterns.ts +58 -0
  466. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPrompt.ts +271 -0
  467. package/tui/src/tools/_shared/toolChoiceRepair/documentRepair.ts +452 -0
  468. package/tui/src/tools/_shared/toolChoiceRepair/messageAccess.ts +80 -0
  469. package/tui/src/tools/_shared/toolChoiceRepair/publicDataRepair.ts +92 -0
  470. package/tui/src/tools/_shared/toolChoiceRepair/supportRepair.ts +135 -0
  471. package/tui/src/tools/_shared/toolChoiceRepair.ts +61 -0
  472. package/tui/src/tools/shared/mockDisclaimer.ts +1 -1
  473. package/tui/src/tools.ts +39 -190
  474. package/tui/src/types/fileSuggestion.ts +4 -26
  475. package/tui/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +186 -148
  476. package/tui/src/types/generated/events_mono/common/v1/auth.ts +25 -11
  477. package/tui/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +47 -30
  478. package/tui/src/types/generated/google/protobuf/timestamp.ts +21 -7
  479. package/tui/src/types/message.ts +80 -102
  480. package/tui/src/types/messageQueueTypes.ts +6 -28
  481. package/tui/src/types/notebook.ts +16 -38
  482. package/tui/src/types/statusLine.ts +4 -26
  483. package/tui/src/types/tools.ts +24 -46
  484. package/tui/src/types/utils.ts +6 -28
  485. package/tui/src/upstreamproxy/relay.ts +7 -3
  486. package/tui/src/upstreamproxy/upstreamproxy.ts +1 -1
  487. package/tui/src/utils/assistantMessageFactories.ts +9 -3
  488. package/tui/src/utils/attachments.ts +1 -1
  489. package/tui/src/utils/auth.ts +129 -139
  490. package/tui/src/utils/bash/ast.ts +23 -23
  491. package/tui/src/utils/bash/bashParser.ts +5 -5
  492. package/tui/src/utils/billing.ts +1 -1
  493. package/tui/src/utils/collapseReadSearch.ts +3 -3
  494. package/tui/src/utils/cronTasks.ts +1 -1
  495. package/tui/src/utils/execFileNoThrow.ts +1 -1
  496. package/tui/src/utils/filePersistence/types.ts +16 -38
  497. package/tui/src/utils/forkedAgent.ts +1 -1
  498. package/tui/src/utils/gracefulShutdown.ts +4 -4
  499. package/tui/src/utils/heapDumpService.ts +12 -8
  500. package/tui/src/utils/hooks/apiQueryHookHelper.ts +1 -1
  501. package/tui/src/utils/hooks/execPromptHook.ts +1 -1
  502. package/tui/src/utils/hooks/skillImprovement.ts +1 -1
  503. package/tui/src/utils/kExaoneReasoning.ts +138 -0
  504. package/tui/src/utils/mcp/dateTimeParser.ts +1 -1
  505. package/tui/src/utils/messages.ts +19 -0
  506. package/tui/src/utils/migrateSessions.ts +3 -3
  507. package/tui/src/utils/model/model.ts +6 -6
  508. package/tui/src/utils/multiToolLayout.ts +13 -0
  509. package/tui/src/utils/permissions/yoloClassifier.ts +1 -1
  510. package/tui/src/utils/plugins/headlessPluginInstall.ts +1 -1
  511. package/tui/src/utils/plugins/mcpPluginIntegration.ts +1 -1
  512. package/tui/src/utils/plugins/mcpbHandler.ts +1 -1
  513. package/tui/src/utils/plugins/pluginLoader.ts +8 -8
  514. package/tui/src/utils/processUserInput/processSlashCommand.tsx +2 -2
  515. package/tui/src/utils/processUserInput/processUserInput.ts +26 -0
  516. package/tui/src/utils/protectedNamespace.ts +5 -3
  517. package/tui/src/utils/rawJsonToolCall.ts +242 -0
  518. package/tui/src/utils/ripgrep.ts +16 -7
  519. package/tui/src/utils/sessionTitle.ts +1 -1
  520. package/tui/src/utils/settings/applySettingsChange.ts +4 -0
  521. package/tui/src/utils/settings/permissionValidation.ts +14 -2
  522. package/tui/src/utils/settings/types.ts +9 -3
  523. package/tui/src/utils/shell/prefix.ts +1 -1
  524. package/tui/src/utils/sideQuery.ts +1 -1
  525. package/tui/src/utils/stats.ts +1 -1
  526. package/tui/src/utils/systemThemeWatcher.ts +13 -3
  527. package/tui/src/utils/teleport.tsx +1 -1
  528. package/uv.lock +394 -22
  529. package/assets/copilot-gate-logo.svg +0 -58
  530. package/assets/govon-logo.svg +0 -40
  531. package/src/ummaya/eval/__init__.py +0 -5
  532. package/src/ummaya/eval/retrieval.py +0 -713
  533. package/tui/src/services/api/claude.ts +0 -3510
  534. package/tui/src/utils/messageStream.ts +0 -186
@@ -0,0 +1,135 @@
1
+ import type { BetaToolChoiceTool } from '../../../sdk-compat.js'
2
+ import type { Tools } from '../../../Tool.js'
3
+ import type { Message } from '../../../types/message.js'
4
+ import { selectRecoveredSupportToolNamesForQuery } from '../../ToolSearchTool/supportIntentHints.js'
5
+ import { shouldSuppressDocumentToolCallsForAnswerSynthesis } from './documentRepair.js'
6
+ import { latestUserText, textFromContent, toolUseNames } from './messageAccess.js'
7
+
8
+ const AGENT_TOOL_NAME = 'Agent'
9
+ const LIST_MCP_RESOURCES_TOOL_NAME = 'ListMcpResourcesTool'
10
+ const WORKSPACE_BASH_TOOL_NAME = 'workspace_bash'
11
+ const WORKSPACE_WRITE_TOOL_NAME = 'workspace_write'
12
+ const FORCED_SUPPORT_TOOL_NAMES = new Set([
13
+ AGENT_TOOL_NAME,
14
+ LIST_MCP_RESOURCES_TOOL_NAME,
15
+ WORKSPACE_BASH_TOOL_NAME,
16
+ ])
17
+ const SENSITIVE_CONTEXT_RE =
18
+ /(AGENTS\.md|CLAUDE\.md|system prompt|prompt-context|project instructions|\/Users\/um-yunsang\/\.claude)/iu
19
+
20
+ function toolAvailable(tools: Tools, toolName: string): boolean {
21
+ return tools.some(tool => tool.name === toolName)
22
+ }
23
+
24
+ function isRecord(value: unknown): value is Record<string, unknown> {
25
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
26
+ }
27
+
28
+ function supportCandidateText(candidate: unknown): string {
29
+ if (typeof candidate === 'string') return candidate
30
+ if (!isRecord(candidate)) return ''
31
+ const message = isRecord(candidate.message) ? candidate.message : candidate
32
+ return textFromContent(message.content)
33
+ }
34
+
35
+ export function selectRecoveredSupportToolChoiceNameForMessages(
36
+ messages: readonly Message[],
37
+ ): string | undefined {
38
+ return selectRecoveredSupportToolNamesForQuery(latestUserText(messages)).find(
39
+ toolName => FORCED_SUPPORT_TOOL_NAMES.has(toolName),
40
+ )
41
+ }
42
+
43
+ export function shouldWithholdIgnoredSupportToolChoiceText({
44
+ toolChoiceName,
45
+ candidate,
46
+ }: {
47
+ readonly toolChoiceName: string
48
+ readonly candidate: unknown
49
+ }): boolean {
50
+ const candidateText = supportCandidateText(candidate)
51
+ if (candidateText.trim().length === 0) return false
52
+ if (toolChoiceName === LIST_MCP_RESOURCES_TOOL_NAME) return true
53
+ if (toolChoiceName === AGENT_TOOL_NAME) return true
54
+ if (toolChoiceName === WORKSPACE_BASH_TOOL_NAME) return true
55
+ return SENSITIVE_CONTEXT_RE.test(candidateText)
56
+ }
57
+
58
+ export function scrubIgnoredSupportToolChoiceMessage({
59
+ toolChoiceName,
60
+ candidate,
61
+ }: {
62
+ readonly toolChoiceName: string
63
+ readonly candidate: unknown
64
+ }): string | undefined {
65
+ return shouldWithholdIgnoredSupportToolChoiceText({ toolChoiceName, candidate })
66
+ ? ''
67
+ : undefined
68
+ }
69
+
70
+ export function buildIgnoredSupportToolChoiceBlockedText(
71
+ toolChoiceName: string,
72
+ toolChoiceAvailable = true,
73
+ ): string {
74
+ if (toolChoiceName === WORKSPACE_BASH_TOOL_NAME) {
75
+ const reason = toolChoiceAvailable
76
+ ? 'provider ignored forced workspace_bash tool_choice.'
77
+ : 'workspace_bash 도구가 현재 TUI 도구 풀에 없어 셸 권한 경계를 실행할 수 없습니다.'
78
+ return [
79
+ '셸 실행 차단: workspace_bash 호출을 강제했지만 모델 응답에 셸 도구 경계가 포함되지 않았습니다.',
80
+ `이유: ${reason}`,
81
+ 'git 상태 확인이나 삭제 명령은 텍스트 안내로 대체하지 않습니다.',
82
+ ].join(' ')
83
+ }
84
+ if (toolChoiceName === WORKSPACE_WRITE_TOOL_NAME) {
85
+ const reason = toolChoiceAvailable
86
+ ? 'provider ignored forced workspace_write tool_choice.'
87
+ : 'workspace_write 도구가 현재 TUI 도구 풀에 없어 파일 쓰기 권한 경계를 실행할 수 없습니다.'
88
+ return [
89
+ '작업공간 쓰기 차단: workspace_write 호출을 강제했지만 모델 응답에 파일 쓰기 도구 경계가 포함되지 않았습니다.',
90
+ `이유: ${reason}`,
91
+ '파일 변경은 텍스트 안내로 대체하지 않습니다.',
92
+ ].join(' ')
93
+ }
94
+ if (toolChoiceName === LIST_MCP_RESOURCES_TOOL_NAME) {
95
+ const reason = toolChoiceAvailable
96
+ ? 'provider ignored forced ListMcpResourcesTool tool_choice.'
97
+ : 'ListMcpResourcesTool 도구가 현재 TUI 도구 풀에 없어 MCP 리소스 목록을 실행할 수 없습니다.'
98
+ return [
99
+ 'MCP 리소스 조회 차단: ListMcpResourcesTool 호출을 강제했지만 모델 응답에 MCP 도구 경계가 포함되지 않았습니다.',
100
+ `이유: ${reason}`,
101
+ '민감한 프로젝트 지침이나 system prompt 내용은 표시하지 않습니다.',
102
+ ].join(' ')
103
+ }
104
+ const reason = toolChoiceAvailable
105
+ ? 'provider ignored forced Agent tool_choice.'
106
+ : 'Agent 도구가 기본 TUI 도구 풀에 없어 provider/query-loop support choice를 실행할 수 없습니다.'
107
+ return [
108
+ '에이전트 위임 차단: Agent 도구 호출을 강제했지만 모델 응답에 Agent/Task 도구 경계가 포함되지 않았습니다.',
109
+ `이유: ${reason}`,
110
+ '진행/취소 상태를 표시할 수 없어 차단했습니다.',
111
+ '구체적인 조사 주제를 주시면 Agent 진행/취소 경계가 보이는 상태로 다시 시도하겠습니다.',
112
+ ].join(' ')
113
+ }
114
+
115
+ export function shouldSuppressUmmayaToolCallsForAnswerSynthesis({
116
+ messages,
117
+ tools,
118
+ }: {
119
+ readonly messages: readonly Message[]
120
+ readonly tools: Tools
121
+ }): boolean {
122
+ if (shouldSuppressDocumentToolCallsForAnswerSynthesis({ messages })) {
123
+ return true
124
+ }
125
+ const recovered = selectRecoveredSupportToolNamesForQuery(latestUserText(messages))
126
+ return recovered.some(toolName => toolAvailable(tools, toolName)) &&
127
+ !recovered.some(toolName => toolUseNames(messages).has(toolName))
128
+ }
129
+
130
+ export function selectUmmayaToolChoiceOverride(_params: {
131
+ readonly messages: readonly Message[]
132
+ readonly tools: Tools
133
+ }): BetaToolChoiceTool | undefined {
134
+ return undefined
135
+ }
@@ -0,0 +1,61 @@
1
+ import type { Tools } from '../../Tool.js'
2
+ import type { Message } from '../../types/message.js'
3
+ import type { BetaToolChoiceTool } from '../../sdk-compat.js'
4
+
5
+ export interface UmmayaTuiRepairPolicy {
6
+ readonly id: string
7
+ readonly kind: 'display_or_answer_repair'
8
+ readonly owner: string
9
+ readonly evidenceEvent: string
10
+ readonly removalCondition: string
11
+ }
12
+
13
+ export interface UmmayaBackendRepairReceipt {
14
+ readonly source: 'backend_route_decision' | 'backend_validation'
15
+ readonly reason: string
16
+ readonly evidenceEvent: string
17
+ readonly toolName?: string
18
+ }
19
+
20
+ export interface ForcedUmmayaToolUse {
21
+ readonly name: string
22
+ readonly input: Record<string, unknown>
23
+ }
24
+
25
+ export const UMMAYA_TUI_REPAIR_POLICIES: readonly UmmayaTuiRepairPolicy[] = []
26
+
27
+ export {
28
+ backfillUmmayaObservableToolInputFromUserQuery,
29
+ buildDocumentCompletionPromptIfNeeded,
30
+ buildIgnoredDocumentToolChoiceBlockedText,
31
+ repairUmmayaDocumentToolInputForDispatch,
32
+ repairUmmayaExplicitDocumentToolUseFromUserQuery,
33
+ selectRecoveredDocumentToolChoiceNameForMessages,
34
+ selectUmmayaClientForcedToolUse,
35
+ shouldSuppressDocumentToolCallsForAnswerSynthesis,
36
+ shouldWithholdIgnoredDocumentToolChoiceText,
37
+ } from './toolChoiceRepair/documentRepair.js'
38
+ export {
39
+ buildIgnoredSupportToolChoiceBlockedText,
40
+ scrubIgnoredSupportToolChoiceMessage,
41
+ selectRecoveredSupportToolChoiceNameForMessages,
42
+ shouldSuppressUmmayaToolCallsForAnswerSynthesis,
43
+ shouldWithholdIgnoredSupportToolChoiceText,
44
+ } from './toolChoiceRepair/supportRepair.js'
45
+ export {
46
+ buildGenericPendingFinalAnswerRepairPromptIfNeeded,
47
+ buildGenericPendingFinalAnswerToolUseBlockedText,
48
+ selectUmmayaClientForcedToolUseForPublicData,
49
+ shouldBlockToolUseAfterGenericPendingFinalAnswerRepair,
50
+ shouldWithholdGenericPendingFinalAnswer,
51
+ } from './toolChoiceRepair/publicDataRepair.js'
52
+ export {
53
+ selectRecoveredSupportToolChoiceNameForMessages as selectRecoveredSupportToolChoiceNameForMessagesFromSupportRepair,
54
+ } from './toolChoiceRepair/supportRepair.js'
55
+
56
+ export function selectUmmayaToolChoiceOverride(_params: {
57
+ readonly messages: readonly Message[]
58
+ readonly tools: Tools
59
+ }): BetaToolChoiceTool | undefined {
60
+ return undefined
61
+ }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // UMMAYA-original — Audit-2 P0 fix · mock disclaimer helpers.
3
3
  //
4
- // Citizen-safety directive: any tool result whose payload contains
4
+ // Citizen-safety directive: each tool result whose payload contains
5
5
  // ``_mode === "mock"`` MUST display a prominent disclaimer so citizens
6
6
  // immediately recognise that no real administrative action was taken.
7
7
  //
package/tui/src/tools.ts CHANGED
@@ -6,163 +6,36 @@ import { LookupPrimitive } from './tools/LookupPrimitive/LookupPrimitive.js'
6
6
  import { ResolveLocationPrimitive } from './tools/ResolveLocationPrimitive/ResolveLocationPrimitive.js'
7
7
  import { SubmitPrimitive } from './tools/SubmitPrimitive/SubmitPrimitive.js'
8
8
  import { VerifyPrimitive } from './tools/VerifyPrimitive/VerifyPrimitive.js'
9
+ import { DocumentPrimitive } from './tools/DocumentPrimitive/DocumentPrimitive.js'
9
10
  import { getAdapterTools } from './tools/AdapterTool/AdapterTool.js'
10
- import { TranslateTool } from './tools/TranslateTool/TranslateTool.js'
11
- import { CalculatorTool } from './tools/CalculatorTool/CalculatorTool.js'
12
- import { DateParserTool } from './tools/DateParserTool/DateParserTool.js'
13
- import { ExportPDFTool } from './tools/ExportPDFTool/ExportPDFTool.js'
14
- import { BashTool } from './tools/BashTool/BashTool.js'
15
- import { FileEditTool } from './tools/FileEditTool/FileEditTool.js'
16
- import { FileReadTool } from './tools/FileReadTool/FileReadTool.js'
17
- import { FileWriteTool } from './tools/FileWriteTool/FileWriteTool.js'
18
- import { GlobTool } from './tools/GlobTool/GlobTool.js'
19
- import { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool.js'
20
- import { WebFetchTool } from './tools/WebFetchTool/WebFetchTool.js'
21
- import { TaskStopTool } from './tools/TaskStopTool/TaskStopTool.js'
22
- import { BriefTool } from './tools/BriefTool/BriefTool.js'
23
- // Dead code elimination: conditional import for ant-only tools
24
- /* eslint-disable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
25
- const REPLTool =
26
- process.env.USER_TYPE === 'ant'
27
- ? require('./tools/REPLTool/REPLTool.js').REPLTool
28
- : null
29
- const SuggestBackgroundPRTool =
30
- process.env.USER_TYPE === 'ant'
31
- ? require('./tools/SuggestBackgroundPRTool/SuggestBackgroundPRTool.js')
32
- .SuggestBackgroundPRTool
33
- : null
34
- const SleepTool =
35
- feature('PROACTIVE') || feature('KAIROS')
36
- ? require('./tools/SleepTool/SleepTool.js').SleepTool
37
- : null
38
- const cronTools = feature('AGENT_TRIGGERS')
39
- ? [
40
- require('./tools/ScheduleCronTool/CronCreateTool.js').CronCreateTool,
41
- require('./tools/ScheduleCronTool/CronDeleteTool.js').CronDeleteTool,
42
- require('./tools/ScheduleCronTool/CronListTool.js').CronListTool,
43
- ]
44
- : []
45
- const RemoteTriggerTool = feature('AGENT_TRIGGERS_REMOTE')
46
- ? require('./tools/RemoteTriggerTool/RemoteTriggerTool.js').RemoteTriggerTool
47
- : null
48
- const MonitorTool = feature('MONITOR_TOOL')
49
- ? require('./tools/MonitorTool/MonitorTool.js').MonitorTool
50
- : null
51
- const SendUserFileTool = feature('KAIROS')
52
- ? require('./tools/SendUserFileTool/SendUserFileTool.js').SendUserFileTool
53
- : null
54
- const PushNotificationTool =
55
- feature('KAIROS') || feature('KAIROS_PUSH_NOTIFICATION')
56
- ? require('./tools/PushNotificationTool/PushNotificationTool.js')
57
- .PushNotificationTool
58
- : null
59
- const SubscribePRTool = feature('KAIROS_GITHUB_WEBHOOKS')
60
- ? require('./tools/SubscribePRTool/SubscribePRTool.js').SubscribePRTool
61
- : null
62
- /* eslint-enable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
63
- import { TaskOutputTool } from './tools/TaskOutputTool/TaskOutputTool.js'
64
- import { WebSearchTool } from './tools/WebSearchTool/WebSearchTool.js'
65
- import { TodoWriteTool } from './tools/TodoWriteTool/TodoWriteTool.js'
66
- import { ExitPlanModeV2Tool } from './tools/ExitPlanModeTool/ExitPlanModeV2Tool.js'
67
- import { TestingPermissionTool } from './tools/testing/TestingPermissionTool.js'
68
- import { GrepTool } from './tools/GrepTool/GrepTool.js'
69
- import { TungstenTool } from './tools/TungstenTool/TungstenTool.js'
70
- // Lazy require to break circular dependency: tools.ts -> TeamCreateTool/TeamDeleteTool -> ... -> tools.ts
71
- /* eslint-disable @typescript-eslint/no-require-imports */
72
- const getTeamCreateTool = () =>
73
- require('./tools/TeamCreateTool/TeamCreateTool.js')
74
- .TeamCreateTool as typeof import('./tools/TeamCreateTool/TeamCreateTool.js').TeamCreateTool
75
- const getTeamDeleteTool = () =>
76
- require('./tools/TeamDeleteTool/TeamDeleteTool.js')
77
- .TeamDeleteTool as typeof import('./tools/TeamDeleteTool/TeamDeleteTool.js').TeamDeleteTool
78
- const getSendMessageTool = () =>
79
- require('./tools/SendMessageTool/SendMessageTool.js')
80
- .SendMessageTool as typeof import('./tools/SendMessageTool/SendMessageTool.js').SendMessageTool
81
- /* eslint-enable @typescript-eslint/no-require-imports */
82
- import { AskUserQuestionTool } from './tools/AskUserQuestionTool/AskUserQuestionTool.js'
83
- import { LSPTool } from './tools/LSPTool/LSPTool.js'
84
- import { ListMcpResourcesTool } from './tools/ListMcpResourcesTool/ListMcpResourcesTool.js'
85
- import { ReadMcpResourceTool } from './tools/ReadMcpResourceTool/ReadMcpResourceTool.js'
86
11
  import { ToolSearchTool } from './tools/ToolSearchTool/ToolSearchTool.js'
87
- import { EnterPlanModeTool } from './tools/EnterPlanModeTool/EnterPlanModeTool.js'
88
- import { EnterWorktreeTool } from './tools/EnterWorktreeTool/EnterWorktreeTool.js'
89
- import { ExitWorktreeTool } from './tools/ExitWorktreeTool/ExitWorktreeTool.js'
90
- import { ConfigTool } from './tools/ConfigTool/ConfigTool.js'
91
- import { TaskCreateTool } from './tools/TaskCreateTool/TaskCreateTool.js'
92
- import { TaskGetTool } from './tools/TaskGetTool/TaskGetTool.js'
93
- import { TaskUpdateTool } from './tools/TaskUpdateTool/TaskUpdateTool.js'
94
- import { TaskListTool } from './tools/TaskListTool/TaskListTool.js'
12
+ import { getWorkspaceTools } from './tools/WorkspaceToolAdapter/WorkspaceToolAdapter.js'
95
13
  import uniqBy from 'lodash-es/uniqBy.js'
96
- import { isToolSearchEnabledOptimistic } from './utils/toolSearch.js'
97
- import { isTodoV2Enabled } from './utils/tasks.js'
98
- // Dead code elimination: conditional import for CLAUDE_CODE_VERIFY_PLAN
99
- /* eslint-disable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
100
- const VerifyPlanExecutionTool =
101
- process.env.CLAUDE_CODE_VERIFY_PLAN === 'true'
102
- ? require('./tools/VerifyPlanExecutionTool/VerifyPlanExecutionTool.js')
103
- .VerifyPlanExecutionTool
104
- : null
105
- /* eslint-enable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
106
- import { SYNTHETIC_OUTPUT_TOOL_NAME } from './tools/SyntheticOutputTool/SyntheticOutputTool.js'
107
14
  export {
108
15
  ALL_AGENT_DISALLOWED_TOOLS,
109
16
  CUSTOM_AGENT_DISALLOWED_TOOLS,
110
17
  ASYNC_AGENT_ALLOWED_TOOLS,
111
18
  COORDINATOR_MODE_ALLOWED_TOOLS,
112
19
  } from './constants/tools.js'
113
- import { feature } from 'bun:bundle'
114
- // Dead code elimination: conditional import for OVERFLOW_TEST_TOOL
115
- /* eslint-disable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
116
- const OverflowTestTool = feature('OVERFLOW_TEST_TOOL')
117
- ? require('./tools/OverflowTestTool/OverflowTestTool.js').OverflowTestTool
118
- : null
119
- const CtxInspectTool = feature('CONTEXT_COLLAPSE')
120
- ? require('./tools/CtxInspectTool/CtxInspectTool.js').CtxInspectTool
121
- : null
122
- const TerminalCaptureTool = feature('TERMINAL_PANEL')
123
- ? require('./tools/TerminalCaptureTool/TerminalCaptureTool.js')
124
- .TerminalCaptureTool
125
- : null
126
- const WebBrowserTool = feature('WEB_BROWSER_TOOL')
127
- ? require('./tools/WebBrowserTool/WebBrowserTool.js').WebBrowserTool
128
- : null
129
- const coordinatorModeModule = feature('COORDINATOR_MODE')
130
- ? (require('./coordinator/coordinatorMode.js') as typeof import('./coordinator/coordinatorMode.js'))
131
- : null
132
- const SnipTool = feature('HISTORY_SNIP')
133
- ? require('./tools/SnipTool/SnipTool.js').SnipTool
134
- : null
135
- const ListPeersTool = feature('UDS_INBOX')
136
- ? require('./tools/ListPeersTool/ListPeersTool.js').ListPeersTool
137
- : null
138
- const WorkflowTool = feature('WORKFLOW_SCRIPTS')
139
- ? (() => {
140
- require('./tools/WorkflowTool/bundled/index.js').initBundledWorkflows()
141
- return require('./tools/WorkflowTool/WorkflowTool.js').WorkflowTool
142
- })()
143
- : null
144
- /* eslint-enable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
145
20
  import type { ToolPermissionContext } from './Tool.js'
146
21
  import { getDenyRuleForTool } from './utils/permissions/permissions.js'
147
- import { hasEmbeddedSearchTools } from './utils/embeddedTools.js'
148
22
  import { isEnvTruthy } from './utils/envUtils.js'
149
- import { isPowerShellToolEnabled } from './utils/shell/shellToolUtils.js'
150
- import { isAgentSwarmsEnabled } from './utils/agentSwarmsEnabled.js'
151
- import { isWorktreeModeEnabled } from './utils/worktreeModeEnabled.js'
152
23
  import {
24
+ areCcSupportToolsEnabled,
25
+ getCcSupportCapabilityTools,
26
+ getSupportSimpleModeTools,
153
27
  REPL_TOOL_NAME,
154
28
  REPL_ONLY_TOOLS,
155
29
  isReplModeEnabled,
156
- } from './tools/REPLTool/constants.js'
157
- export { REPL_ONLY_TOOLS }
158
- /* eslint-disable @typescript-eslint/no-require-imports */
159
- const getPowerShellTool = () => {
160
- if (!isPowerShellToolEnabled()) return null
161
- return (
162
- require('./tools/PowerShellTool/PowerShellTool.js') as typeof import('./tools/PowerShellTool/PowerShellTool.js')
163
- ).PowerShellTool
164
- }
165
- /* eslint-enable @typescript-eslint/no-require-imports */
30
+ } from './tools/ToolSearchTool/ccSupportTools.js'
31
+ import { isModelFacingMcpTool } from './tools/WorkspaceToolAdapter/mcpExposurePolicy.js'
32
+
33
+ export { REPL_ONLY_TOOLS, areCcSupportToolsEnabled }
34
+ export {
35
+ MCP_MODEL_EXPOSURE_SERVER_CLASSES,
36
+ classifyMcpServerForModelExposure,
37
+ type McpModelExposureServerClass,
38
+ } from './tools/WorkspaceToolAdapter/mcpExposurePolicy.js'
166
39
 
167
40
  /**
168
41
  * Predefined tool presets that can be used with --tools flag
@@ -186,7 +59,7 @@ export function parseToolPreset(preset: string): ToolPreset | null {
186
59
  * @returns Array of tool names
187
60
  */
188
61
  export function getToolsForDefaultPreset(): string[] {
189
- const tools = getAllBaseTools()
62
+ const tools = getModelFacingBaseTools()
190
63
  const isEnabled = tools.map(tool => tool.isEnabled())
191
64
  return tools.filter((_, i) => isEnabled[i]).map(tool => tool.name)
192
65
  }
@@ -199,7 +72,7 @@ export function getToolsForDefaultPreset(): string[] {
199
72
  /**
200
73
  * NOTE: This MUST stay in sync with https://console.statsig.com/4aF3Ewatb6xPVpCwxb5nA3/dynamic_configs/claude_code_global_system_caching, in order to cache the system prompt across users.
201
74
  */
202
- export function getAllBaseTools(): Tools {
75
+ export function getModelFacingBaseTools(): Tools {
203
76
  return [
204
77
  // UMMAYA tool-surface swap: keep Claude Code's registry shape, but make
205
78
  // the built-in model-facing catalog the Korean public-service primitives.
@@ -208,9 +81,18 @@ export function getAllBaseTools(): Tools {
208
81
  ResolveLocationPrimitive,
209
82
  SubmitPrimitive,
210
83
  VerifyPrimitive,
84
+ DocumentPrimitive,
85
+ ...getWorkspaceTools(),
211
86
  ]
212
87
  }
213
88
 
89
+ export function getAllBaseTools(): Tools {
90
+ return uniqBy(
91
+ [...getModelFacingBaseTools(), ...getCcSupportCapabilityTools()],
92
+ 'name',
93
+ )
94
+ }
95
+
214
96
  /**
215
97
  * Filters out tools that are blanket-denied by the permission context.
216
98
  * A tool is filtered out if there's a deny rule matching its name with no
@@ -229,56 +111,19 @@ export function filterToolsByDenyRules<
229
111
  return tools.filter(tool => !getDenyRuleForTool(permissionContext, tool))
230
112
  }
231
113
 
232
- function isUmmayaModelFacingMcpTool(tool: {
233
- name: string
234
- mcpInfo?: { serverName: string; toolName: string }
235
- }): boolean {
236
- return (
237
- tool.mcpInfo?.serverName === 'ummaya' ||
238
- tool.name.startsWith('mcp__ummaya__')
239
- )
240
- }
241
-
242
114
  export const getTools = (permissionContext: ToolPermissionContext): Tools => {
243
- // Simple mode: only Bash, Read, and Edit tools
244
115
  if (isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
245
- // --bare + REPL mode: REPL wraps Bash/Read/Edit/etc inside the VM, so
246
- // return REPL instead of the raw primitives. Matches the non-bare path
247
- // below which also hides REPL_ONLY_TOOLS when REPL is enabled.
248
- if (isReplModeEnabled() && REPLTool) {
249
- const replSimple: Tool[] = getAllBaseTools()
250
- if (
251
- feature('COORDINATOR_MODE') &&
252
- coordinatorModeModule?.isCoordinatorMode()
253
- ) {
254
- replSimple.push(TaskStopTool, getSendMessageTool())
255
- }
256
- return filterToolsByDenyRules(replSimple, permissionContext)
257
- }
258
- const simpleTools: Tool[] = getAllBaseTools()
259
- // When coordinator mode is also active, include AgentTool and TaskStopTool
260
- // so the coordinator gets Task+TaskStop (via useMergedTools filtering) and
261
- // workers get Bash/Read/Edit (via filterToolsForAgent filtering).
262
- if (
263
- feature('COORDINATOR_MODE') &&
264
- coordinatorModeModule?.isCoordinatorMode()
265
- ) {
266
- simpleTools.push(AgentTool, TaskStopTool, getSendMessageTool())
267
- }
268
- return filterToolsByDenyRules(simpleTools, permissionContext)
116
+ return filterToolsByDenyRules(
117
+ getSupportSimpleModeTools(getModelFacingBaseTools()),
118
+ permissionContext,
119
+ )
269
120
  }
270
121
 
271
- // Get all base tools and filter out special tools that get added conditionally
272
- const specialTools = new Set([
273
- ListMcpResourcesTool.name,
274
- ReadMcpResourceTool.name,
275
- SYNTHETIC_OUTPUT_TOOL_NAME,
276
- ])
277
-
278
- const tools = getAllBaseTools().filter(tool => !specialTools.has(tool.name))
279
-
280
122
  // Filter out tools that are denied by the deny rules
281
- let allowedTools = filterToolsByDenyRules(tools, permissionContext)
123
+ let allowedTools = filterToolsByDenyRules(
124
+ getModelFacingBaseTools(),
125
+ permissionContext,
126
+ )
282
127
 
283
128
  // When REPL mode is enabled, hide primitive tools from direct use.
284
129
  // They're still accessible inside REPL via the VM context.
@@ -323,7 +168,7 @@ export function assembleToolPool(
323
168
  const allowedMcpTools = filterToolsByDenyRules(
324
169
  mcpTools,
325
170
  permissionContext,
326
- ).filter(isUmmayaModelFacingMcpTool)
171
+ ).filter(tool => isModelFacingMcpTool(tool, permissionContext))
327
172
 
328
173
  // Sort each partition for prompt-cache stability, keeping built-ins as a
329
174
  // contiguous prefix. The server's claude_code_system_cache_policy places a
@@ -359,5 +204,9 @@ export function getMergedTools(
359
204
  mcpTools: Tools,
360
205
  ): Tools {
361
206
  const builtInTools = getTools(permissionContext)
362
- return [...builtInTools, ...mcpTools.filter(isUmmayaModelFacingMcpTool)]
207
+ const allowedMcpTools = filterToolsByDenyRules(
208
+ mcpTools,
209
+ permissionContext,
210
+ ).filter(tool => isModelFacingMcpTool(tool, permissionContext))
211
+ return [...builtInTools, ...allowedMcpTools]
363
212
  }
@@ -1,32 +1,10 @@
1
1
  // [P0 reconstructed · rebuild-stubs.ts · symbol-complete stub]
2
2
  // Aggregated from every consumer import across src/.
3
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import { createStub } from '../stubs/any-stub'
4
4
 
5
- const __noop = (..._args: unknown[]): any => undefined as any;
6
- const __stub: any = new Proxy(function () {} as any, {
7
- get(_t, p) {
8
- if (p === Symbol.toPrimitive) return () => ""
9
- if (p === Symbol.iterator) return function* () {}
10
- if (p === Symbol.asyncIterator) return async function* () {}
11
- if (p === Symbol.toStringTag) return "Stub"
12
- if (p === Symbol.for("nodejs.util.inspect.custom")) return () => "<Stub>"
13
- if (p === "inspect") return () => "<Stub>"
14
- if (p === "then") return undefined
15
- if (p === "toString") return () => ""
16
- if (p === "valueOf") return () => undefined
17
- if (p === "toJSON") return () => null
18
- if (p === "length") return 0
19
- if (p === "name") return "Stub"
20
- if (p === "message") return ""
21
- if (p === "stack") return ""
22
- if (p === "constructor") return Object
23
- return __stub
24
- },
25
- apply() { return __stub },
26
- construct() { return __stub },
27
- });
5
+ const __stub = createStub()
28
6
 
29
- export type FileSuggestionCommandInput = any;
30
- export const FileSuggestionCommandInput: any = __stub;
7
+ export type FileSuggestionCommandInput = unknown;
8
+ export const FileSuggestionCommandInput = __stub;
31
9
 
32
10
  export default __stub;