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,242 @@
1
+ export type RawJsonToolCallProposal = {
2
+ readonly name: string
3
+ readonly input: Record<string, unknown>
4
+ }
5
+
6
+ export const RAW_JSON_REGISTERED_TOOL_USE_ID_PREFIX = 'call_raw_json_tool_'
7
+ export const RAW_JSON_UNREGISTERED_TOOL_USE_ID_PREFIX =
8
+ 'call_raw_json_unregistered_tool_'
9
+
10
+ export function isUnregisteredRawJsonToolUseId(id: string): boolean {
11
+ return id.startsWith(RAW_JSON_UNREGISTERED_TOOL_USE_ID_PREFIX)
12
+ }
13
+
14
+ export type RawJsonToolCallMalformedReason =
15
+ | 'invalid_json'
16
+ | 'top_level_contract_mismatch'
17
+ | 'name_contract_mismatch'
18
+ | 'arguments_contract_mismatch'
19
+
20
+ export type RawJsonToolCallNonProposalReason =
21
+ | 'not_exact_top_level_json'
22
+ | 'not_tool_like_json'
23
+
24
+ export type RawJsonToolCallClassification =
25
+ | { readonly kind: 'registered'; readonly executable: true; readonly proposal: RawJsonToolCallProposal }
26
+ | { readonly kind: 'unregistered'; readonly executable: false; readonly proposal: RawJsonToolCallProposal }
27
+ | { readonly kind: 'malformed_input'; readonly executable: false; readonly reason: RawJsonToolCallMalformedReason }
28
+ | { readonly kind: 'non_proposal'; readonly executable: false; readonly reason: RawJsonToolCallNonProposalReason }
29
+
30
+ type ExactRawJsonToolCallParseResult =
31
+ | { readonly kind: 'proposal'; readonly proposal: RawJsonToolCallProposal }
32
+ | { readonly kind: 'malformed_input'; readonly reason: RawJsonToolCallMalformedReason }
33
+ | { readonly kind: 'non_proposal'; readonly reason: RawJsonToolCallNonProposalReason }
34
+
35
+ export type TrailingRawJsonToolCallProposal = {
36
+ readonly prelude: string
37
+ readonly proposal: RawJsonToolCallProposal
38
+ }
39
+
40
+ export type TextualToolCallProposalExtraction = {
41
+ readonly text: string
42
+ readonly proposals: readonly RawJsonToolCallProposal[]
43
+ }
44
+
45
+ const TOOL_CALL_OPEN = '<tool_call>'
46
+ const TOOL_CALL_CLOSE = '</tool_call>'
47
+ const RAW_JSON_TOOL_CALL_KEY_START_RE =
48
+ /^\s*\{\s*["'](?:name|tool)["']\s*:\s*["'][^"']+["']/iu
49
+
50
+ function isRecord(value: unknown): value is Record<string, unknown> {
51
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
52
+ }
53
+
54
+ function parseJsonRecord(value: string): Record<string, unknown> | undefined {
55
+ try {
56
+ const parsed: unknown = JSON.parse(value)
57
+ return isRecord(parsed) ? parsed : undefined
58
+ } catch {
59
+ return undefined
60
+ }
61
+ }
62
+
63
+ function parseArguments(value: unknown): Record<string, unknown> | undefined {
64
+ if (isRecord(value)) return value
65
+ if (typeof value !== 'string') return undefined
66
+ return parseJsonRecord(value)
67
+ }
68
+
69
+ function isToolLikeRecord(value: Record<string, unknown>): boolean {
70
+ const topLevelKeys = Object.keys(value)
71
+ return topLevelKeys.includes('name') ||
72
+ topLevelKeys.includes('tool') ||
73
+ topLevelKeys.includes('arguments')
74
+ }
75
+
76
+ function parseExactRawJsonToolCallProposal(params: {
77
+ readonly text: string
78
+ }): ExactRawJsonToolCallParseResult {
79
+ const trimmed = params.text.trim()
80
+ if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {
81
+ return { kind: 'non_proposal', reason: 'not_exact_top_level_json' }
82
+ }
83
+
84
+ const parsed = parseJsonRecord(trimmed)
85
+ if (parsed === undefined) {
86
+ if (RAW_JSON_TOOL_CALL_KEY_START_RE.test(trimmed)) {
87
+ return { kind: 'malformed_input', reason: 'invalid_json' }
88
+ }
89
+ return { kind: 'non_proposal', reason: 'not_tool_like_json' }
90
+ }
91
+
92
+ const topLevelKeys = Object.keys(parsed)
93
+ if (
94
+ topLevelKeys.length !== 2 ||
95
+ !topLevelKeys.includes('name') ||
96
+ !topLevelKeys.includes('arguments')
97
+ ) {
98
+ return isToolLikeRecord(parsed)
99
+ ? { kind: 'malformed_input', reason: 'top_level_contract_mismatch' }
100
+ : { kind: 'non_proposal', reason: 'not_tool_like_json' }
101
+ }
102
+
103
+ const name = parsed.name
104
+ if (typeof name !== 'string' || name.trim().length === 0) {
105
+ return { kind: 'malformed_input', reason: 'name_contract_mismatch' }
106
+ }
107
+
108
+ const input = parseArguments(parsed.arguments)
109
+ if (input === undefined) {
110
+ return { kind: 'malformed_input', reason: 'arguments_contract_mismatch' }
111
+ }
112
+ return { kind: 'proposal', proposal: { name, input } }
113
+ }
114
+
115
+ export function classifyRawJsonToolCallProposal(params: {
116
+ readonly text: string
117
+ readonly availableToolNames: readonly string[]
118
+ }): RawJsonToolCallClassification {
119
+ const result = parseExactRawJsonToolCallProposal({ text: params.text })
120
+ switch (result.kind) {
121
+ case 'proposal': {
122
+ const availableToolNames = new Set(params.availableToolNames)
123
+ return availableToolNames.has(result.proposal.name)
124
+ ? {
125
+ kind: 'registered',
126
+ executable: true,
127
+ proposal: result.proposal,
128
+ }
129
+ : {
130
+ kind: 'unregistered',
131
+ executable: false,
132
+ proposal: result.proposal,
133
+ }
134
+ }
135
+ case 'malformed_input':
136
+ return { kind: 'malformed_input', executable: false, reason: result.reason }
137
+ case 'non_proposal':
138
+ return { kind: 'non_proposal', executable: false, reason: result.reason }
139
+ }
140
+ }
141
+
142
+ export function parseRawJsonToolCallProposal(params: {
143
+ readonly text: string
144
+ }): RawJsonToolCallProposal | undefined {
145
+ const result = parseExactRawJsonToolCallProposal(params)
146
+ switch (result.kind) {
147
+ case 'proposal':
148
+ return result.proposal
149
+ case 'malformed_input':
150
+ case 'non_proposal':
151
+ return undefined
152
+ }
153
+ }
154
+
155
+ export function parseTrailingRawJsonToolCallProposal(params: {
156
+ readonly text: string
157
+ }): TrailingRawJsonToolCallProposal | undefined {
158
+ const trimmedEnd = params.text.trimEnd()
159
+ let candidateStart = trimmedEnd.lastIndexOf('{')
160
+ while (candidateStart >= 0) {
161
+ const proposal = parseRawJsonToolCallProposal({
162
+ text: trimmedEnd.slice(candidateStart),
163
+ })
164
+ if (proposal !== undefined) {
165
+ return {
166
+ prelude: trimmedEnd.slice(0, candidateStart).trimEnd(),
167
+ proposal,
168
+ }
169
+ }
170
+ if (candidateStart === 0) break
171
+ candidateStart = trimmedEnd.lastIndexOf('{', candidateStart - 1)
172
+ }
173
+ return undefined
174
+ }
175
+
176
+ export function extractTextualToolCallProposals(params: {
177
+ readonly text: string
178
+ }): TextualToolCallProposalExtraction | undefined {
179
+ let searchStart = 0
180
+ let cleanedText = ''
181
+ const proposals: RawJsonToolCallProposal[] = []
182
+
183
+ while (searchStart < params.text.length) {
184
+ const openIndex = params.text.indexOf(TOOL_CALL_OPEN, searchStart)
185
+ if (openIndex < 0) {
186
+ cleanedText += params.text.slice(searchStart)
187
+ break
188
+ }
189
+
190
+ const payloadStart = openIndex + TOOL_CALL_OPEN.length
191
+ const closeIndex = params.text.indexOf(TOOL_CALL_CLOSE, payloadStart)
192
+ if (closeIndex < 0) {
193
+ return undefined
194
+ }
195
+
196
+ const proposal = parseRawJsonToolCallProposal({
197
+ text: params.text.slice(payloadStart, closeIndex),
198
+ })
199
+ if (proposal === undefined) {
200
+ return undefined
201
+ }
202
+
203
+ cleanedText += params.text.slice(searchStart, openIndex)
204
+ proposals.push(proposal)
205
+ searchStart = closeIndex + TOOL_CALL_CLOSE.length
206
+ }
207
+
208
+ if (proposals.length === 0) return undefined
209
+ return {
210
+ text: cleanedText.trimEnd(),
211
+ proposals,
212
+ }
213
+ }
214
+
215
+ export function textContainsToolCallProposal(text: string): boolean {
216
+ return extractTextualToolCallProposals({ text }) !== undefined ||
217
+ parseTrailingRawJsonToolCallProposal({ text }) !== undefined
218
+ }
219
+
220
+ export function textContainsMalformedToolCallProposal(text: string): boolean {
221
+ if (textContainsToolCallProposal(text)) return false
222
+ if (text.includes(TOOL_CALL_OPEN)) return true
223
+
224
+ const trimmedEnd = text.trimEnd()
225
+ let candidateStart = trimmedEnd.lastIndexOf('{')
226
+ while (candidateStart >= 0) {
227
+ const candidate = trimmedEnd.slice(candidateStart)
228
+ if (RAW_JSON_TOOL_CALL_KEY_START_RE.test(candidate)) {
229
+ return parseJsonRecord(candidate) === undefined
230
+ }
231
+ if (candidateStart === 0) break
232
+ candidateStart = trimmedEnd.lastIndexOf('{', candidateStart - 1)
233
+ }
234
+ return false
235
+ }
236
+
237
+ export function stripToolCallProposalText(text: string): string {
238
+ const textual = extractTextualToolCallProposals({ text })
239
+ if (textual !== undefined) return textual.text
240
+ const trailing = parseTrailingRawJsonToolCallProposal({ text })
241
+ return trailing?.prelude ?? text
242
+ }
@@ -1,5 +1,6 @@
1
1
  import type { ChildProcess, ExecFileException } from 'child_process'
2
2
  import { execFile, spawn } from 'child_process'
3
+ import { existsSync } from 'fs'
3
4
  import memoize from 'lodash-es/memoize.js'
4
5
  import { homedir } from 'os'
5
6
  import * as path from 'path'
@@ -28,6 +29,14 @@ type RipgrepConfig = {
28
29
  argv0?: string
29
30
  }
30
31
 
32
+ function systemRipgrepConfig(): RipgrepConfig | undefined {
33
+ const { cmd: systemPath } = findExecutable('rg', [])
34
+ if (systemPath === 'rg') return undefined
35
+ // SECURITY: Use command name 'rg' instead of systemPath to prevent PATH hijacking.
36
+ // If we used systemPath, a malicious ./rg.exe in cwd could be executed.
37
+ return { mode: 'system', command: 'rg', args: [] }
38
+ }
39
+
31
40
  const getRipgrepConfig = memoize((): RipgrepConfig => {
32
41
  const userWantsSystemRipgrep = isEnvDefinedFalsy(
33
42
  process.env.USE_BUILTIN_RIPGREP,
@@ -35,13 +44,8 @@ const getRipgrepConfig = memoize((): RipgrepConfig => {
35
44
 
36
45
  // Try system ripgrep if user wants it
37
46
  if (userWantsSystemRipgrep) {
38
- const { cmd: systemPath } = findExecutable('rg', [])
39
- if (systemPath !== 'rg') {
40
- // SECURITY: Use command name 'rg' instead of systemPath to prevent PATH hijacking
41
- // If we used systemPath, a malicious ./rg.exe in current directory could be executed
42
- // Using just 'rg' lets the OS resolve it safely with NoDefaultCurrentDirectoryInExePath protection
43
- return { mode: 'system', command: 'rg', args: [] }
44
- }
47
+ const systemConfig = systemRipgrepConfig()
48
+ if (systemConfig) return systemConfig
45
49
  }
46
50
 
47
51
  // In bundled (native) mode, ripgrep is statically compiled into bun-internal
@@ -61,6 +65,11 @@ const getRipgrepConfig = memoize((): RipgrepConfig => {
61
65
  ? path.resolve(rgRoot, `${process.arch}-win32`, 'rg.exe')
62
66
  : path.resolve(rgRoot, `${process.arch}-${process.platform}`, 'rg')
63
67
 
68
+ if (!existsSync(command)) {
69
+ const systemConfig = systemRipgrepConfig()
70
+ if (systemConfig) return systemConfig
71
+ }
72
+
64
73
  return { mode: 'builtin', command, args: [] }
65
74
  })
66
75
 
@@ -15,7 +15,7 @@
15
15
  import { z } from 'zod/v4'
16
16
  import { getIsNonInteractiveSession } from '../bootstrap/state.js'
17
17
  import { logEvent } from '../services/analytics/index.js'
18
- import { queryHaiku } from '../services/api/claude.js'
18
+ import { queryHaiku } from '../services/api/ummaya.js'
19
19
  import type { Message } from '../types/message.js'
20
20
  import { logForDebugging } from './debug.js'
21
21
  import { safeParseJSON } from './json.js'
@@ -74,6 +74,9 @@ export function applySettingsChange(
74
74
  const prevEffort = prev.settings.effortLevel
75
75
  const newEffort = newSettings.effortLevel
76
76
  const effortChanged = prevEffort !== newEffort
77
+ const prevReasoningMode = prev.settings.reasoningMode
78
+ const newReasoningMode = newSettings.reasoningMode
79
+ const reasoningModeChanged = prevReasoningMode !== newReasoningMode
77
80
 
78
81
  return {
79
82
  ...prev,
@@ -87,6 +90,7 @@ export function applySettingsChange(
87
90
  ...(effortChanged && newEffort !== undefined
88
91
  ? { effortValue: newEffort }
89
92
  : {}),
93
+ ...(reasoningModeChanged ? { reasoningMode: newReasoningMode } : {}),
90
94
  }
91
95
  })
92
96
  }
@@ -134,8 +134,14 @@ export function validatePermissionRule(rule: string): {
134
134
  return { valid: false, error: 'Tool name cannot be empty' }
135
135
  }
136
136
 
137
- // Check tool name starts with uppercase (standard tools)
138
- if (parsed.toolName[0] !== parsed.toolName[0]?.toUpperCase()) {
137
+ // Check tool name starts with uppercase (Claude Code standard tools).
138
+ // UMMAYA's sanctioned tool-surface swap exposes lowercase primitive and
139
+ // adapter names such as `document` and `workspace_glob`; those are valid
140
+ // first-class tools, not malformed CC tool names.
141
+ if (
142
+ parsed.toolName[0] !== parsed.toolName[0]?.toUpperCase() &&
143
+ !isUmmayaLowercaseToolName(parsed.toolName)
144
+ ) {
139
145
  return {
140
146
  valid: false,
141
147
  error: 'Tool names must start with uppercase',
@@ -238,6 +244,12 @@ export function validatePermissionRule(rule: string): {
238
244
  return { valid: true }
239
245
  }
240
246
 
247
+ function isUmmayaLowercaseToolName(toolName: string): boolean {
248
+ return /^(?:document(?:_[a-z0-9]+)*|workspace_[a-z0-9_]+|lookup|resolve_location|submit|verify|find|locate|send|check)$/u.test(
249
+ toolName,
250
+ )
251
+ }
252
+
241
253
  /**
242
254
  * Custom Zod schema for permission rule arrays
243
255
  */
@@ -8,6 +8,7 @@ import {
8
8
  PERMISSION_MODES,
9
9
  } from '../permissions/PermissionMode.js'
10
10
  import { MarketplaceSourceSchema } from '../plugins/schemas.js'
11
+ import { REASONING_MODES } from '../kExaoneReasoning.js'
11
12
  import { CLAUDE_CODE_SETTINGS_SCHEMA_URL } from './constants.js'
12
13
  import { PermissionRuleSchema } from './permissionValidation.js'
13
14
 
@@ -63,7 +64,7 @@ export const PermissionsSchema = lazySchema(() =>
63
64
  : EXTERNAL_PERMISSION_MODES,
64
65
  )
65
66
  .optional()
66
- .describe('Default permission mode when Claude Code needs access'),
67
+ .describe('Default permission mode when UMMAYA needs access'),
67
68
  disableBypassPermissionsMode: z
68
69
  .enum(['disable'])
69
70
  .optional()
@@ -291,7 +292,7 @@ export const SettingsSchema = lazySchema(() =>
291
292
  .describe('IdP issuer URL for OIDC discovery'),
292
293
  clientId: z
293
294
  .string()
294
- .describe("Claude Code's client_id registered at the IdP"),
295
+ .describe("UMMAYA's client_id registered at the IdP"),
295
296
  callbackPort: z
296
297
  .number()
297
298
  .int()
@@ -332,7 +333,7 @@ export const SettingsSchema = lazySchema(() =>
332
333
  ),
333
334
  env: EnvironmentVariablesSchema()
334
335
  .optional()
335
- .describe('Environment variables to set for Claude Code sessions'),
336
+ .describe('Environment variables to set for UMMAYA sessions'),
336
337
  // Attribution for commits and PRs
337
338
  attribution: z
338
339
  .object({
@@ -709,6 +710,11 @@ export const SettingsSchema = lazySchema(() =>
709
710
  .optional()
710
711
  .catch(undefined)
711
712
  .describe('Persisted effort level for supported models.'),
713
+ reasoningMode: z
714
+ .enum(REASONING_MODES)
715
+ .optional()
716
+ .catch(undefined)
717
+ .describe('K-EXAONE/FriendliAI reasoning policy mode.'),
712
718
  advisorModel: z
713
719
  .string()
714
720
  .optional()
@@ -14,7 +14,7 @@ import {
14
14
  type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
15
15
  logEvent,
16
16
  } from '../../services/analytics/index.js'
17
- import { queryHaiku } from '../../services/api/claude.js'
17
+ import { queryHaiku } from '../../services/api/ummaya.js'
18
18
  import { startsWithApiErrorPrefix } from '../../services/api/errors.js'
19
19
  import { memoizeWithLRU } from '../memoize.js'
20
20
  import { jsonStringify } from '../slowOperations.js'
@@ -12,7 +12,7 @@ import {
12
12
  } from '../constants/system.js'
13
13
  import { logEvent } from '../services/analytics/index.js'
14
14
  import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../services/analytics/metadata.js'
15
- import { getAPIMetadata } from '../services/api/claude.js'
15
+ import { getAPIMetadata } from '../services/api/ummaya.js'
16
16
  import { getAnthropicClient } from '../services/api/client.js'
17
17
  import { getModelBetas, modelSupportsStructuredOutputs } from './betas.js'
18
18
  import { computeFingerprint } from './fingerprint.js'
@@ -634,7 +634,7 @@ function cacheToStats(
634
634
  }
635
635
 
636
636
  /**
637
- * Aggregates stats from all Claude Code sessions across all projects.
637
+ * Aggregates stats from all UMMAYA sessions across all projects.
638
638
  * Uses a disk cache to avoid reprocessing historical data.
639
639
  */
640
640
  export async function aggregateClaudeCodeStats(): Promise<ClaudeCodeStats> {
@@ -4,6 +4,16 @@
4
4
  // CC consumer references (ThemeProvider.tsx:69) imply CC has runtime equivalents but they're
5
5
  // not in restored-src — UMMAYA NO-OP is justified until TUI Fidelity Meta-Epic
6
6
  // decides on UMMAYA-original implementation.
7
- const __stub: any = undefined
8
- export default __stub
9
- export {}
7
+ import type { TerminalQuerier } from '../ink/terminal-querier.js'
8
+ import type { SystemTheme } from './systemTheme.js'
9
+
10
+ type ThemeChangeHandler = (theme: SystemTheme) => void
11
+
12
+ export function watchSystemTheme(
13
+ _querier: TerminalQuerier,
14
+ _onThemeChange: ThemeChangeHandler,
15
+ ): () => void {
16
+ return () => {}
17
+ }
18
+
19
+ export default watchSystemTheme
@@ -12,7 +12,7 @@ import { getOauthConfig } from '../constants/oauth.js';
12
12
  import type { SDKMessage } from '../entrypoints/agentSdkTypes.js';
13
13
  import type { Root } from '../ink.js';
14
14
  import { KeybindingSetup } from '../keybindings/KeybindingProviderSetup.js';
15
- import { queryHaiku } from '../services/api/claude.js';
15
+ import { queryHaiku } from '../services/api/ummaya.js';
16
16
  import { getSessionLogsViaOAuth, getTeleportEvents } from '../services/api/sessionIngress.js';
17
17
  import { getOrganizationUUID } from '../services/oauth/client.js';
18
18
  import { AppStateProvider } from '../state/AppState.js';