ummaya 0.2.4 → 0.2.6

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 (482) hide show
  1. package/README.md +15 -2
  2. package/bin/ummaya +10 -1
  3. package/bun.lock +180 -244
  4. package/npm-shrinkwrap.json +760 -1760
  5. package/package.json +39 -22
  6. package/prompts/manifest.yaml +1 -1
  7. package/prompts/system_v1.md +1 -0
  8. package/pyproject.toml +27 -2
  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/_canonical/baselines.yaml +113 -0
  12. package/src/ummaya/engine/engine.py +29 -132
  13. package/src/ummaya/evidence/__init__.py +21 -2
  14. package/src/ummaya/evidence/dataset_contract.py +193 -0
  15. package/src/ummaya/evidence/document_authoring_cases.py +33 -0
  16. package/src/ummaya/evidence/document_harness.py +313 -0
  17. package/src/ummaya/evidence/document_viewer_ux.py +391 -0
  18. package/src/ummaya/evidence/gates.py +70 -0
  19. package/src/ummaya/evidence/json_types.py +20 -0
  20. package/src/ummaya/evidence/models.py +88 -1
  21. package/src/ummaya/evidence/output_payload.py +89 -0
  22. package/src/ummaya/evidence/payload_documents.py +233 -0
  23. package/src/ummaya/evidence/route_contracts.py +224 -0
  24. package/src/ummaya/evidence/route_helpers.py +150 -0
  25. package/src/ummaya/evidence/runner.py +81 -212
  26. package/src/ummaya/evidence/source_provenance.py +246 -0
  27. package/src/ummaya/evidence/source_provenance_redaction.py +176 -0
  28. package/src/ummaya/evidence/tool_layer.py +39 -0
  29. package/src/ummaya/evidence/tool_layer_models.py +151 -0
  30. package/src/ummaya/ipc/adapter_manifest_emitter.py +26 -10
  31. package/src/ummaya/ipc/document_intent_normalization.py +185 -0
  32. package/src/ummaya/ipc/frame_schema.py +5 -5
  33. package/src/ummaya/ipc/route_diagnostics.py +73 -0
  34. package/src/ummaya/ipc/stdio.py +1109 -477
  35. package/src/ummaya/llm/client.py +102 -3
  36. package/src/ummaya/llm/config.py +8 -3
  37. package/src/ummaya/primitives/__init__.py +6 -2
  38. package/src/ummaya/primitives/delegation.py +1 -1
  39. package/src/ummaya/primitives/document.py +28 -0
  40. package/src/ummaya/settings.py +0 -3
  41. package/src/ummaya/tools/discovery_bridge.py +17 -1
  42. package/src/ummaya/tools/documents/__init__.py +297 -0
  43. package/src/ummaya/tools/documents/adapter_registry.py +487 -0
  44. package/src/ummaya/tools/documents/archive_container_probe.py +167 -0
  45. package/src/ummaya/tools/documents/artifact_store.py +454 -0
  46. package/src/ummaya/tools/documents/authoring.py +283 -0
  47. package/src/ummaya/tools/documents/baselines.py +132 -0
  48. package/src/ummaya/tools/documents/capability.py +331 -0
  49. package/src/ummaya/tools/documents/contracts.py +112 -0
  50. package/src/ummaya/tools/documents/conversion.py +521 -0
  51. package/src/ummaya/tools/documents/diff.py +275 -0
  52. package/src/ummaya/tools/documents/engines.py +163 -0
  53. package/src/ummaya/tools/documents/evaluation.py +291 -0
  54. package/src/ummaya/tools/documents/explicit_values.py +108 -0
  55. package/src/ummaya/tools/documents/fixtures.py +174 -0
  56. package/src/ummaya/tools/documents/format_completion_audit.py +471 -0
  57. package/src/ummaya/tools/documents/formats/__init__.py +2 -0
  58. package/src/ummaya/tools/documents/formats/archive.py +528 -0
  59. package/src/ummaya/tools/documents/formats/base.py +41 -0
  60. package/src/ummaya/tools/documents/formats/code_file.py +211 -0
  61. package/src/ummaya/tools/documents/formats/data_file.py +272 -0
  62. package/src/ummaya/tools/documents/formats/hwp.py +284 -0
  63. package/src/ummaya/tools/documents/formats/hwpx.py +1837 -0
  64. package/src/ummaya/tools/documents/formats/odf.py +435 -0
  65. package/src/ummaya/tools/documents/formats/ooxml.py +1030 -0
  66. package/src/ummaya/tools/documents/formats/passive.py +766 -0
  67. package/src/ummaya/tools/documents/formats/pdf.py +702 -0
  68. package/src/ummaya/tools/documents/formats/text_web.py +268 -0
  69. package/src/ummaya/tools/documents/hwp_conversion_probe.py +178 -0
  70. package/src/ummaya/tools/documents/hwp_direct_candidate.py +141 -0
  71. package/src/ummaya/tools/documents/inspection.py +289 -0
  72. package/src/ummaya/tools/documents/intake.py +1079 -0
  73. package/src/ummaya/tools/documents/legacy_office_promotion_probe.py +366 -0
  74. package/src/ummaya/tools/documents/models.py +1598 -0
  75. package/src/ummaya/tools/documents/odf_promotion_probe.py +167 -0
  76. package/src/ummaya/tools/documents/orchestrator.py +96 -0
  77. package/src/ummaya/tools/documents/passive_capability_probe.py +251 -0
  78. package/src/ummaya/tools/documents/patch.py +170 -0
  79. package/src/ummaya/tools/documents/pdfa_conformance.py +284 -0
  80. package/src/ummaya/tools/documents/pdfa_promotion_probe.py +198 -0
  81. package/src/ummaya/tools/documents/permissions.py +110 -0
  82. package/src/ummaya/tools/documents/planner.py +616 -0
  83. package/src/ummaya/tools/documents/registry.py +2733 -0
  84. package/src/ummaya/tools/documents/render.py +978 -0
  85. package/src/ummaya/tools/documents/render_comparison.py +113 -0
  86. package/src/ummaya/tools/documents/render_comparison_models.py +74 -0
  87. package/src/ummaya/tools/documents/render_comparison_regions.py +73 -0
  88. package/src/ummaya/tools/documents/render_comparison_style.py +161 -0
  89. package/src/ummaya/tools/documents/reread.py +157 -0
  90. package/src/ummaya/tools/documents/runtime_authoring.py +244 -0
  91. package/src/ummaya/tools/documents/runtime_authoring_bundle.py +76 -0
  92. package/src/ummaya/tools/documents/scorecard.py +184 -0
  93. package/src/ummaya/tools/documents/socratic_planner.py +193 -0
  94. package/src/ummaya/tools/documents/style.py +48 -0
  95. package/src/ummaya/tools/documents/tool_defs.py +523 -0
  96. package/src/ummaya/tools/documents/validate.py +347 -0
  97. package/src/ummaya/tools/executor.py +29 -0
  98. package/src/ummaya/tools/live_proxy.py +0 -3
  99. package/src/ummaya/tools/models.py +5 -1
  100. package/src/ummaya/tools/register_all.py +8 -0
  101. package/src/ummaya/tools/registry.py +10 -1
  102. package/src/ummaya/tools/routing/__init__.py +59 -0
  103. package/src/ummaya/tools/routing/builder.py +105 -0
  104. package/src/ummaya/tools/routing/cards.py +29 -0
  105. package/src/ummaya/tools/routing/decision_service.py +534 -0
  106. package/src/ummaya/tools/routing/decision_types.py +74 -0
  107. package/src/ummaya/tools/routing/feasibility.py +122 -0
  108. package/src/ummaya/tools/routing/intent.py +17 -0
  109. package/src/ummaya/tools/routing/intent_extractor.py +207 -0
  110. package/src/ummaya/tools/routing/intent_patterns.py +160 -0
  111. package/src/ummaya/tools/routing/intent_public_data.py +150 -0
  112. package/src/ummaya/tools/routing/intent_types.py +48 -0
  113. package/src/ummaya/tools/routing/lint.py +78 -0
  114. package/src/ummaya/tools/routing/metadata.py +174 -0
  115. package/src/ummaya/tools/routing/projection.py +340 -0
  116. package/src/ummaya/tools/routing/retrieval_policy.py +629 -0
  117. package/src/ummaya/tools/routing/schema.py +81 -0
  118. package/src/ummaya/tools/routing/types.py +96 -0
  119. package/src/ummaya/tools/routing_index.py +2 -2
  120. package/src/ummaya/tools/search.py +34 -746
  121. package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
  122. package/tui/bun.lock +126 -305
  123. package/tui/package.json +35 -22
  124. package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
  125. package/tui/src/QueryEngine.ts +12 -8
  126. package/tui/src/bridge/inboundAttachments.ts +3 -3
  127. package/tui/src/cli/handlers/auth.ts +3 -12
  128. package/tui/src/cli/handlers/mcp.tsx +0 -1
  129. package/tui/src/cli/print.ts +8 -9
  130. package/tui/src/commands/insights.ts +1 -1
  131. package/tui/src/commands/install-github-app/types.ts +8 -30
  132. package/tui/src/commands/plugin/types.ts +6 -28
  133. package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
  134. package/tui/src/commands/rename/generateSessionName.ts +1 -1
  135. package/tui/src/components/Feedback.tsx +1 -1
  136. package/tui/src/components/LogoV2/EmergencyTip.tsx +11 -2
  137. package/tui/src/components/LogoV2/WelcomeV2.tsx +1 -3
  138. package/tui/src/components/ScrollKeybindingHandler.tsx +6 -6
  139. package/tui/src/components/Spinner/types.ts +6 -28
  140. package/tui/src/components/agents/generateAgent.ts +1 -1
  141. package/tui/src/components/agents/new-agent-creation/types.ts +4 -26
  142. package/tui/src/components/config/EnvSecretIsolatedEditor.tsx +1 -1
  143. package/tui/src/components/mcp/types.ts +16 -38
  144. package/tui/src/components/messages/AssistantToolUseMessage.tsx +3 -2
  145. package/tui/src/components/messages/UserCrossSessionMessage.ts +16 -4
  146. package/tui/src/components/messages/UserForkBoilerplateMessage.ts +16 -4
  147. package/tui/src/components/messages/UserGitHubWebhookMessage.ts +16 -4
  148. package/tui/src/components/messages/UserToolResultMessage/utils.tsx +3 -2
  149. package/tui/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +9 -4
  150. package/tui/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +9 -4
  151. package/tui/src/components/primitive/DocumentSocraticReviewBlock.tsx +129 -0
  152. package/tui/src/components/primitive/DocumentToolResultCard.tsx +224 -0
  153. package/tui/src/components/primitive/documentSocraticReview.ts +215 -0
  154. package/tui/src/components/primitive/index.tsx +43 -1
  155. package/tui/src/components/primitive/types.ts +137 -0
  156. package/tui/src/components/ui/option.ts +4 -26
  157. package/tui/src/constants/common.ts +0 -2
  158. package/tui/src/constants/prompts.ts +4 -3
  159. package/tui/src/constants/querySource.ts +4 -26
  160. package/tui/src/entrypoints/sdk/controlTypes.ts +26 -48
  161. package/tui/src/entrypoints/sdk/coreTypes.generated.ts +3 -25
  162. package/tui/src/entrypoints/sdk/runtimeTypes.ts +38 -60
  163. package/tui/src/entrypoints/sdk/sdkUtilityTypes.ts +4 -26
  164. package/tui/src/entrypoints/sdk/settingsTypes.generated.ts +3 -25
  165. package/tui/src/entrypoints/sdk/toolTypes.ts +3 -25
  166. package/tui/src/hooks/toolPermission/handlers/interactiveHandler.ts +10 -0
  167. package/tui/src/hooks/useApiKeyVerification.ts +1 -1
  168. package/tui/src/hooks/useVirtualScroll.ts +1 -1
  169. package/tui/src/ink/ink.tsx +33 -14
  170. package/tui/src/ink/reconciler.ts +2 -3
  171. package/tui/src/ink/render-to-screen.ts +30 -10
  172. package/tui/src/ipc/bridge.ts +62 -15
  173. package/tui/src/ipc/bridgeSingleton.ts +5 -1
  174. package/tui/src/ipc/codec.ts +3 -3
  175. package/tui/src/ipc/frames.generated.ts +12 -12
  176. package/tui/src/ipc/llmClient.ts +151 -27
  177. package/tui/src/ipc/schema/frame.schema.json +1 -1
  178. package/tui/src/keybindings/defaultBindings.ts +4 -0
  179. package/tui/src/main.tsx +32 -15
  180. package/tui/src/native-ts/file-index/index.ts +33 -3
  181. package/tui/src/observability/surface.ts +2 -2
  182. package/tui/src/probes/toolRegistryProbe.tsx +3 -1
  183. package/tui/src/projectOnboardingState.ts +7 -6
  184. package/tui/src/query/chatMessageTypes.ts +18 -0
  185. package/tui/src/query/chatMessagesBuilder.ts +1 -1
  186. package/tui/src/query/deps.ts +1 -1
  187. package/tui/src/query/messageGuards.ts +106 -0
  188. package/tui/src/query/publicDataTerminalRepair.ts +384 -0
  189. package/tui/src/query/run.ts +1075 -0
  190. package/tui/src/query/supportBoundary.ts +168 -0
  191. package/tui/src/query/toolResultErrors.ts +103 -0
  192. package/tui/src/query/toolRunner.ts +687 -0
  193. package/tui/src/query/unavailableToolRepair.ts +118 -0
  194. package/tui/src/query.ts +9 -2186
  195. package/tui/src/screens/REPL.tsx +40 -29
  196. package/tui/src/services/api/adapterManifest.ts +4 -0
  197. package/tui/src/services/api/backendChat/events.ts +117 -0
  198. package/tui/src/services/api/backendChat/finalMessage.ts +40 -0
  199. package/tui/src/services/api/backendChat/frame.ts +9 -0
  200. package/tui/src/services/api/backendChat/streaming.ts +430 -0
  201. package/tui/src/services/api/backendChat/types.ts +62 -0
  202. package/tui/src/services/api/backendChat.ts +1 -0
  203. package/tui/src/services/api/client.ts +65 -2
  204. package/tui/src/services/api/errorUtils.ts +5 -5
  205. package/tui/src/services/api/errors.ts +1 -1
  206. package/tui/src/services/api/logging.ts +1 -1
  207. package/tui/src/services/api/ummaya/evidence.ts +194 -0
  208. package/tui/src/services/api/ummaya/messages.ts +255 -0
  209. package/tui/src/services/api/ummaya/nonStreaming.ts +66 -0
  210. package/tui/src/services/api/ummaya/provider.ts +200 -0
  211. package/tui/src/services/api/ummaya/reasoning.ts +24 -0
  212. package/tui/src/services/api/ummaya/request.ts +200 -0
  213. package/tui/src/services/api/ummaya/selectionContext.ts +240 -0
  214. package/tui/src/services/api/ummaya/streaming.ts +365 -0
  215. package/tui/src/services/api/ummaya/streamingPayload.ts +129 -0
  216. package/tui/src/services/api/ummaya/streamingReader.ts +40 -0
  217. package/tui/src/services/api/ummaya/toolSelection.ts +217 -0
  218. package/tui/src/services/api/ummaya/types.ts +110 -0
  219. package/tui/src/services/api/ummaya/usage.ts +30 -0
  220. package/tui/src/services/api/ummaya.ts +26 -418
  221. package/tui/src/services/api/withRetry.ts +1 -1
  222. package/tui/src/services/awaySummary.ts +2 -2
  223. package/tui/src/services/claudeAiLimits.ts +1 -1
  224. package/tui/src/services/compact/autoCompact.ts +1 -1
  225. package/tui/src/services/compact/compact.ts +1 -1
  226. package/tui/src/services/lsp/types.ts +8 -30
  227. package/tui/src/services/tips/types.ts +6 -28
  228. package/tui/src/services/tokenEstimation.ts +1 -1
  229. package/tui/src/services/toolRegistry/bootGuard.ts +5 -5
  230. package/tui/src/services/toolUseSummary/toolUseSummaryGenerator.ts +1 -1
  231. package/tui/src/services/tools/toolExecution.ts +94 -1
  232. package/tui/src/store/pendingPermissionSlot.ts +1 -1
  233. package/tui/src/store/session-store.ts +10 -36
  234. package/tui/src/stubs/any-stub.ts +15 -10
  235. package/tui/src/stubs/color-diff-napi.ts +37 -23
  236. package/tui/src/stubs/globals.d.ts +3 -3
  237. package/tui/src/stubs/macro-preload.ts +23 -12
  238. package/tui/src/tools/AdapterTool/AdapterTool.ts +1207 -714
  239. package/tui/src/tools/AdapterTool/routeDiagnostics.ts +75 -0
  240. package/tui/src/tools/AgentTool/AgentTool.tsx +84 -1371
  241. package/tui/src/tools/AgentTool/agentToolHandoff.ts +114 -0
  242. package/tui/src/tools/AgentTool/agentToolPartialResult.ts +16 -0
  243. package/tui/src/tools/AgentTool/agentToolProgress.ts +32 -0
  244. package/tui/src/tools/AgentTool/agentToolResolver.ts +161 -0
  245. package/tui/src/tools/AgentTool/agentToolResult.ts +163 -0
  246. package/tui/src/tools/AgentTool/agentToolUtils.ts +14 -686
  247. package/tui/src/tools/AgentTool/asyncAgentLifecycle.ts +208 -0
  248. package/tui/src/tools/AgentTool/asyncLifecycle.ts +153 -0
  249. package/tui/src/tools/AgentTool/backgroundedCompletion.ts +126 -0
  250. package/tui/src/tools/AgentTool/backgroundedLifecycle.ts +174 -0
  251. package/tui/src/tools/AgentTool/foregroundBackground.ts +83 -0
  252. package/tui/src/tools/AgentTool/foregroundDrain.tsx +133 -0
  253. package/tui/src/tools/AgentTool/foregroundFinalize.ts +98 -0
  254. package/tui/src/tools/AgentTool/foregroundLifecycle.tsx +237 -0
  255. package/tui/src/tools/AgentTool/foregroundProgress.tsx +169 -0
  256. package/tui/src/tools/AgentTool/foregroundTask.ts +89 -0
  257. package/tui/src/tools/AgentTool/forkSubagent.ts +1 -12
  258. package/tui/src/tools/AgentTool/forkSubagentGate.ts +34 -0
  259. package/tui/src/tools/AgentTool/launchRouting.ts +203 -0
  260. package/tui/src/tools/AgentTool/lifecycle.ts +244 -0
  261. package/tui/src/tools/AgentTool/mcpRouting.ts +73 -0
  262. package/tui/src/tools/AgentTool/orchestrationSupport.ts +70 -0
  263. package/tui/src/tools/AgentTool/permissions.ts +39 -0
  264. package/tui/src/tools/AgentTool/promptSetup.ts +181 -0
  265. package/tui/src/tools/AgentTool/remoteRouting.ts +62 -0
  266. package/tui/src/tools/AgentTool/resultMapping.ts +116 -0
  267. package/tui/src/tools/AgentTool/resumeAgent.ts +39 -107
  268. package/tui/src/tools/AgentTool/resumeAgentHelpers.ts +140 -0
  269. package/tui/src/tools/AgentTool/runAgent.ts +1 -1
  270. package/tui/src/tools/AgentTool/runtimeConfig.ts +57 -0
  271. package/tui/src/tools/AgentTool/schemas.ts +196 -0
  272. package/tui/src/tools/AgentTool/sourceVerificationPropagation.ts +263 -0
  273. package/tui/src/tools/AgentTool/worktreeLifecycle.ts +105 -0
  274. package/tui/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +174 -202
  275. package/tui/src/tools/BashTool/BashTool.tsx +71 -1072
  276. package/tui/src/tools/BashTool/bashCommandHelpers.ts +12 -12
  277. package/tui/src/tools/BashTool/bashPermissions/astPreflight.ts +173 -0
  278. package/tui/src/tools/BashTool/bashPermissions/classifierChecks.ts +199 -0
  279. package/tui/src/tools/BashTool/bashPermissions/compoundGuards.ts +53 -0
  280. package/tui/src/tools/BashTool/bashPermissions/constants.ts +99 -0
  281. package/tui/src/tools/BashTool/bashPermissions/index.ts +38 -0
  282. package/tui/src/tools/BashTool/bashPermissions/legacyMisparsing.ts +62 -0
  283. package/tui/src/tools/BashTool/bashPermissions/main.ts +135 -0
  284. package/tui/src/tools/BashTool/bashPermissions/normalizedCommands.ts +33 -0
  285. package/tui/src/tools/BashTool/bashPermissions/operatorFlow.ts +98 -0
  286. package/tui/src/tools/BashTool/bashPermissions/permissionChecks.ts +200 -0
  287. package/tui/src/tools/BashTool/bashPermissions/prefixSuggestions.ts +88 -0
  288. package/tui/src/tools/BashTool/bashPermissions/promptClassifierRules.ts +125 -0
  289. package/tui/src/tools/BashTool/bashPermissions/ruleDelegates.ts +19 -0
  290. package/tui/src/tools/BashTool/bashPermissions/ruleMatching.ts +145 -0
  291. package/tui/src/tools/BashTool/bashPermissions/sandboxAutoAllow.ts +75 -0
  292. package/tui/src/tools/BashTool/bashPermissions/subcommandFlow.ts +205 -0
  293. package/tui/src/tools/BashTool/bashPermissions/subcommandGuards.ts +73 -0
  294. package/tui/src/tools/BashTool/bashPermissions/subcommandResultHelpers.ts +116 -0
  295. package/tui/src/tools/BashTool/bashPermissions/types.ts +26 -0
  296. package/tui/src/tools/BashTool/bashPermissions/wrapperStripping.ts +139 -0
  297. package/tui/src/tools/BashTool/bashPermissions.ts +26 -2621
  298. package/tui/src/tools/BashTool/call.ts +202 -0
  299. package/tui/src/tools/BashTool/callLoader.ts +35 -0
  300. package/tui/src/tools/BashTool/commandClassification.ts +151 -0
  301. package/tui/src/tools/BashTool/commandClassificationLoader.ts +40 -0
  302. package/tui/src/tools/BashTool/cwdReset.ts +33 -0
  303. package/tui/src/tools/BashTool/lineTruncation.ts +11 -0
  304. package/tui/src/tools/BashTool/modeValidation.ts +13 -1
  305. package/tui/src/tools/BashTool/outputPersistence.ts +42 -0
  306. package/tui/src/tools/BashTool/permissionClassification.ts +66 -0
  307. package/tui/src/tools/BashTool/permissionLoader.ts +44 -0
  308. package/tui/src/tools/BashTool/resultLoader.ts +29 -0
  309. package/tui/src/tools/BashTool/resultMapping.ts +83 -0
  310. package/tui/src/tools/BashTool/sandboxPolicy.ts +79 -0
  311. package/tui/src/tools/BashTool/schemas.ts +65 -0
  312. package/tui/src/tools/BashTool/sedEditExecution.ts +59 -0
  313. package/tui/src/tools/BashTool/shellExecution.tsx +245 -0
  314. package/tui/src/tools/BashTool/shellOutputUtils.ts +85 -0
  315. package/tui/src/tools/BashTool/shellPermissionGauntlet.ts +97 -0
  316. package/tui/src/tools/BashTool/uiLoader.ts +37 -0
  317. package/tui/src/tools/BriefTool/upload.ts +1 -1
  318. package/tui/src/tools/CalculatorTool/parser.ts +2 -2
  319. package/tui/src/tools/DocumentPrimitive/DocumentPrimitive.ts +262 -0
  320. package/tui/src/tools/DocumentPrimitive/dispatchNormalization.ts +270 -0
  321. package/tui/src/tools/DocumentPrimitive/documentDestinationPath.ts +18 -0
  322. package/tui/src/tools/DocumentPrimitive/documentMutationGuard.ts +22 -0
  323. package/tui/src/tools/DocumentPrimitive/documentPatchNormalization.ts +248 -0
  324. package/tui/src/tools/DocumentPrimitive/documentSourceVerification.ts +245 -0
  325. package/tui/src/tools/DocumentPrimitive/documentSourceVerificationFields.ts +103 -0
  326. package/tui/src/tools/DocumentPrimitive/modelVisibleOutput.ts +40 -0
  327. package/tui/src/tools/DocumentPrimitive/prompt.ts +35 -0
  328. package/tui/src/tools/FileEditTool/FileEditTool.ts +9 -507
  329. package/tui/src/tools/FileEditTool/call.ts +228 -0
  330. package/tui/src/tools/FileEditTool/validateInput.ts +196 -0
  331. package/tui/src/tools/FileReadTool/imageProcessor.ts +13 -0
  332. package/tui/src/tools/FileWriteTool/FileWriteTool.ts +7 -300
  333. package/tui/src/tools/FileWriteTool/call.ts +223 -0
  334. package/tui/src/tools/FileWriteTool/validateInput.ts +80 -0
  335. package/tui/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +19 -3
  336. package/tui/src/tools/LookupPrimitive/LookupPrimitive.ts +25 -32
  337. package/tui/src/tools/LookupPrimitive/prompt.ts +0 -2
  338. package/tui/src/tools/MCPTool/trustPolicy.ts +118 -0
  339. package/tui/src/tools/McpAuthTool/McpAuthTool.ts +21 -3
  340. package/tui/src/tools/NotebookEditTool/NotebookEditTool.ts +7 -326
  341. package/tui/src/tools/NotebookEditTool/call.ts +254 -0
  342. package/tui/src/tools/NotebookEditTool/notebookModel.ts +51 -0
  343. package/tui/src/tools/NotebookEditTool/validateInput.ts +142 -0
  344. package/tui/src/tools/PowerShellTool/PowerShellTool.tsx +46 -937
  345. package/tui/src/tools/PowerShellTool/acceptEditsCommandValidation.ts +162 -0
  346. package/tui/src/tools/PowerShellTool/call.ts +179 -0
  347. package/tui/src/tools/PowerShellTool/callLoader.ts +37 -0
  348. package/tui/src/tools/PowerShellTool/commandClassification.ts +86 -0
  349. package/tui/src/tools/PowerShellTool/modeValidation.ts +25 -332
  350. package/tui/src/tools/PowerShellTool/outputPersistence.ts +42 -0
  351. package/tui/src/tools/PowerShellTool/permissionClassification.ts +28 -0
  352. package/tui/src/tools/PowerShellTool/resultLoader.ts +31 -0
  353. package/tui/src/tools/PowerShellTool/resultMapping.ts +75 -0
  354. package/tui/src/tools/PowerShellTool/schemas.ts +40 -0
  355. package/tui/src/tools/PowerShellTool/shellExecution.tsx +258 -0
  356. package/tui/src/tools/PowerShellTool/symlinkModeValidation.ts +44 -0
  357. package/tui/src/tools/PowerShellTool/uiLoader.ts +37 -0
  358. package/tui/src/tools/PowerShellTool/validation.ts +39 -0
  359. package/tui/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +19 -3
  360. package/tui/src/tools/ResolveLocationPrimitive/ResolveLocationPrimitive.ts +1 -11
  361. package/tui/src/tools/ResolveLocationPrimitive/prompt.ts +2 -6
  362. package/tui/src/tools/SkillTool/SkillTool.ts +2 -2
  363. package/tui/src/tools/SubmitPrimitive/SubmitPrimitive.ts +27 -10
  364. package/tui/src/tools/TaskCreateTool/TaskCreateTool.ts +16 -2
  365. package/tui/src/tools/TaskGetTool/TaskGetTool.ts +23 -3
  366. package/tui/src/tools/TaskListTool/TaskListTool.ts +22 -4
  367. package/tui/src/tools/TaskOutputTool/TaskOutputTool.tsx +46 -547
  368. package/tui/src/tools/TaskOutputTool/lookup.ts +216 -0
  369. package/tui/src/tools/TaskOutputTool/render.tsx +257 -0
  370. package/tui/src/tools/TaskOutputTool/schemas.ts +55 -0
  371. package/tui/src/tools/TaskOutputTool/serialization.ts +36 -0
  372. package/tui/src/tools/TaskStopTool/TaskStopTool.ts +10 -0
  373. package/tui/src/tools/TaskUpdateTool/TaskUpdateTool.ts +14 -364
  374. package/tui/src/tools/TaskUpdateTool/completion.ts +62 -0
  375. package/tui/src/tools/TaskUpdateTool/schemas.ts +62 -0
  376. package/tui/src/tools/TaskUpdateTool/serialization.ts +46 -0
  377. package/tui/src/tools/TaskUpdateTool/statusUpdate.ts +247 -0
  378. package/tui/src/tools/TodoWriteTool/TodoWriteTool.ts +21 -2
  379. package/tui/src/tools/ToolSearchTool/ToolSearchTool.ts +21 -302
  380. package/tui/src/tools/ToolSearchTool/ccSupportTools.ts +223 -0
  381. package/tui/src/tools/ToolSearchTool/descriptionCache.ts +50 -0
  382. package/tui/src/tools/ToolSearchTool/keywordSearch.ts +216 -0
  383. package/tui/src/tools/ToolSearchTool/prompt.ts +10 -4
  384. package/tui/src/tools/ToolSearchTool/resultMapping.ts +30 -0
  385. package/tui/src/tools/ToolSearchTool/schemas.ts +30 -0
  386. package/tui/src/tools/ToolSearchTool/searchPool.ts +47 -0
  387. package/tui/src/tools/ToolSearchTool/supportIntentHints.ts +140 -0
  388. package/tui/src/tools/TranslateTool/TranslateTool.ts +1 -1
  389. package/tui/src/tools/VerifyPrimitive/VerifyPrimitive.ts +2 -1
  390. package/tui/src/tools/WebFetchTool/WebFetchTool.ts +43 -138
  391. package/tui/src/tools/WebFetchTool/call.ts +227 -0
  392. package/tui/src/tools/WebFetchTool/resolvedAddressSafety.ts +78 -0
  393. package/tui/src/tools/WebFetchTool/sourceVerification.ts +204 -0
  394. package/tui/src/tools/WebFetchTool/types.ts +23 -0
  395. package/tui/src/tools/WebFetchTool/urlSafety.ts +181 -0
  396. package/tui/src/tools/WebFetchTool/utils.ts +1 -1
  397. package/tui/src/tools/WebSearchTool/UI.tsx +0 -1
  398. package/tui/src/tools/WebSearchTool/WebSearchTool.ts +9 -313
  399. package/tui/src/tools/WebSearchTool/call.ts +33 -0
  400. package/tui/src/tools/WebSearchTool/responseMapping.ts +190 -0
  401. package/tui/src/tools/WebSearchTool/resultBlock.ts +47 -0
  402. package/tui/src/tools/WebSearchTool/schemas.ts +47 -0
  403. package/tui/src/tools/WebSearchTool/toolSchema.ts +12 -0
  404. package/tui/src/tools/WorkspaceToolAdapter/WorkspaceToolAdapter.ts +79 -0
  405. package/tui/src/tools/WorkspaceToolAdapter/allowedRootPolicy.ts +85 -0
  406. package/tui/src/tools/WorkspaceToolAdapter/documentFormatGuards.ts +73 -0
  407. package/tui/src/tools/WorkspaceToolAdapter/inputNormalization.ts +105 -0
  408. package/tui/src/tools/WorkspaceToolAdapter/mcpExposurePolicy.ts +64 -0
  409. package/tui/src/tools/WorkspaceToolAdapter/toolDefFactory.ts +215 -0
  410. package/tui/src/tools/WorkspaceToolAdapter/toolNames.ts +6 -0
  411. package/tui/src/tools/WorkspaceToolAdapter/workspacePolicy.ts +15 -0
  412. package/tui/src/tools/_shared/dispatchPrimitive.ts +6 -6
  413. package/tui/src/tools/_shared/documentChangeToPatch.ts +125 -0
  414. package/tui/src/tools/_shared/documentDispatchArguments.ts +87 -0
  415. package/tui/src/tools/_shared/documentPrimitiveTimeout.ts +13 -0
  416. package/tui/src/tools/_shared/documentToolResultRender.ts +98 -0
  417. package/tui/src/tools/_shared/pendingCallRegistry.ts +1 -6
  418. package/tui/src/tools/_shared/rootPrimitiveInput.ts +1 -0
  419. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPatterns.ts +58 -0
  420. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPrompt.ts +271 -0
  421. package/tui/src/tools/_shared/toolChoiceRepair/documentRepair.ts +452 -0
  422. package/tui/src/tools/_shared/toolChoiceRepair/messageAccess.ts +80 -0
  423. package/tui/src/tools/_shared/toolChoiceRepair/publicDataRepair.ts +92 -0
  424. package/tui/src/tools/_shared/toolChoiceRepair/supportRepair.ts +135 -0
  425. package/tui/src/tools/_shared/toolChoiceRepair.ts +55 -860
  426. package/tui/src/tools/shared/mockDisclaimer.ts +1 -1
  427. package/tui/src/tools.ts +39 -190
  428. package/tui/src/types/fileSuggestion.ts +4 -26
  429. package/tui/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +186 -148
  430. package/tui/src/types/generated/events_mono/common/v1/auth.ts +25 -11
  431. package/tui/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +47 -30
  432. package/tui/src/types/generated/google/protobuf/timestamp.ts +21 -7
  433. package/tui/src/types/message.ts +80 -102
  434. package/tui/src/types/messageQueueTypes.ts +6 -28
  435. package/tui/src/types/notebook.ts +16 -38
  436. package/tui/src/types/statusLine.ts +4 -26
  437. package/tui/src/types/tools.ts +24 -46
  438. package/tui/src/types/utils.ts +6 -28
  439. package/tui/src/upstreamproxy/relay.ts +7 -3
  440. package/tui/src/upstreamproxy/upstreamproxy.ts +1 -1
  441. package/tui/src/utils/assistantMessageFactories.ts +9 -3
  442. package/tui/src/utils/auth.ts +129 -139
  443. package/tui/src/utils/bash/ast.ts +23 -23
  444. package/tui/src/utils/bash/bashParser.ts +5 -5
  445. package/tui/src/utils/billing.ts +1 -1
  446. package/tui/src/utils/claudeDesktop.ts +4 -4
  447. package/tui/src/utils/collapseReadSearch.ts +3 -3
  448. package/tui/src/utils/cronTasks.ts +1 -1
  449. package/tui/src/utils/execFileNoThrow.ts +1 -1
  450. package/tui/src/utils/filePersistence/types.ts +16 -38
  451. package/tui/src/utils/forkedAgent.ts +1 -1
  452. package/tui/src/utils/gracefulShutdown.ts +4 -4
  453. package/tui/src/utils/heapDumpService.ts +12 -8
  454. package/tui/src/utils/hooks/apiQueryHookHelper.ts +1 -1
  455. package/tui/src/utils/hooks/execPromptHook.ts +1 -1
  456. package/tui/src/utils/hooks/skillImprovement.ts +1 -1
  457. package/tui/src/utils/mcp/dateTimeParser.ts +1 -1
  458. package/tui/src/utils/messages.ts +18 -0
  459. package/tui/src/utils/migrateSessions.ts +3 -3
  460. package/tui/src/utils/model/model.ts +6 -6
  461. package/tui/src/utils/permissions/yoloClassifier.ts +1 -1
  462. package/tui/src/utils/plugins/headlessPluginInstall.ts +1 -1
  463. package/tui/src/utils/plugins/mcpPluginIntegration.ts +1 -1
  464. package/tui/src/utils/plugins/mcpbHandler.ts +1 -1
  465. package/tui/src/utils/plugins/pluginLoader.ts +8 -8
  466. package/tui/src/utils/protectedNamespace.ts +5 -3
  467. package/tui/src/utils/rawJsonToolCall.ts +242 -0
  468. package/tui/src/utils/ripgrep.ts +16 -7
  469. package/tui/src/utils/sessionTitle.ts +1 -1
  470. package/tui/src/utils/settings/permissionValidation.ts +14 -2
  471. package/tui/src/utils/shell/prefix.ts +1 -1
  472. package/tui/src/utils/sideQuery.ts +1 -1
  473. package/tui/src/utils/systemThemeWatcher.ts +13 -3
  474. package/tui/src/utils/teleport.tsx +1 -1
  475. package/uv.lock +426 -45
  476. package/tui/src/services/api/claude.ts +0 -3540
  477. package/tui/src/tools/_shared/directPublicDataGuard.ts +0 -362
  478. package/tui/src/tools/_shared/kmaAnalysisGuard.ts +0 -197
  479. package/tui/src/tools/_shared/kmaAviationGuard.ts +0 -70
  480. package/tui/src/tools/_shared/nmcAedGuard.ts +0 -234
  481. package/tui/src/tools/_shared/protectedCheckGuard.ts +0 -207
  482. package/tui/src/tools/_shared/textToolCallGuard.ts +0 -91
@@ -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'
@@ -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
  */
@@ -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'
@@ -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';