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
@@ -51,7 +51,9 @@ import {
51
51
  import {
52
52
  getAdapterToolByName,
53
53
  isAdapterToolName,
54
+ isRootPrimitiveToolName,
54
55
  } from '../../tools/AdapterTool/AdapterTool.js'
56
+ import { appendRouteDiagnostic } from '../../tools/AdapterTool/routeDiagnostics.js'
55
57
  import { getAllBaseTools } from '../../tools.js'
56
58
  import type { HookProgress } from '../../types/hooks.js'
57
59
  import type {
@@ -356,7 +358,15 @@ export async function* runToolUse(
356
358
  // Only use fallback if the tool was found via alias (deprecated name)
357
359
  if (
358
360
  fallbackTool &&
359
- (fallbackTool.aliases?.includes(toolName) || isAdapterToolName(toolName))
361
+ (fallbackTool.aliases?.includes(toolName) ||
362
+ isAdapterToolName(toolName) ||
363
+ (
364
+ isDeferredTool(fallbackTool) &&
365
+ isToolSearchToolAvailable(toolUseContext.options.tools) &&
366
+ extractDiscoveredToolNames(toolUseContext.messages ?? []).has(
367
+ fallbackTool.name,
368
+ )
369
+ ))
360
370
  ) {
361
371
  tool = fallbackTool
362
372
  }
@@ -366,6 +376,21 @@ export async function* runToolUse(
366
376
  }
367
377
  const messageId = assistantMessage.message.id
368
378
  const requestId = assistantMessage.requestId
379
+ const isAdapterTool = isAdapterToolName(toolName)
380
+ const isRouteTool = isAdapterTool || isRootPrimitiveToolName(toolName)
381
+ const routeTargetToolId = extractRouteTargetToolId(toolUse.input)
382
+ if (isRouteTool) {
383
+ appendRouteDiagnostic('route_tool_dispatch', {
384
+ tool_name: toolName,
385
+ tool_surface: isAdapterTool ? 'concrete_adapter' : 'root_primitive',
386
+ target_tool_id: routeTargetToolId,
387
+ tool_use_id: toolUse.id,
388
+ message_id: messageId,
389
+ request_id: requestId ?? null,
390
+ query_chain_id: toolUseContext.queryTracking?.chainId ?? null,
391
+ query_depth: toolUseContext.queryTracking?.depth ?? null,
392
+ })
393
+ }
369
394
  const mcpServerType = getMcpServerType(
370
395
  toolName,
371
396
  toolUseContext.options.mcpClients,
@@ -762,6 +787,9 @@ async function checkPermissionsAndCallTool(
762
787
  }
763
788
 
764
789
  const resultingMessages = []
790
+ const isAdapterTool = isAdapterToolName(tool.name)
791
+ const isRouteTool = isAdapterTool || isRootPrimitiveToolName(tool.name)
792
+ const toolSurface = isAdapterTool ? 'concrete_adapter' : 'root_primitive'
765
793
 
766
794
  // Defense-in-depth: strip _simulatedSedEdit from model-provided Bash input.
767
795
  // This field is internal-only — it must only be injected by the permission
@@ -1003,6 +1031,21 @@ async function checkPermissionsAndCallTool(
1003
1031
  }
1004
1032
 
1005
1033
  if (permissionDecision.behavior !== 'allow') {
1034
+ if (isRouteTool) {
1035
+ appendRouteDiagnostic('route_tool_permission', {
1036
+ tool_name: tool.name,
1037
+ tool_surface: toolSurface,
1038
+ target_tool_id: extractRouteTargetToolId(processedInput),
1039
+ tool_use_id: toolUseID,
1040
+ message_id: messageId,
1041
+ request_id: requestId ?? null,
1042
+ query_chain_id: toolUseContext.queryTracking?.chainId ?? null,
1043
+ query_depth: toolUseContext.queryTracking?.depth ?? null,
1044
+ permission_mode: permissionMode,
1045
+ permission_behavior: permissionDecision.behavior,
1046
+ result_status: 'blocked',
1047
+ })
1048
+ }
1006
1049
  logForDebugging(`${tool.name} tool permission denied`)
1007
1050
  const decisionInfo = toolUseContext.toolDecisions?.get(toolUseID)
1008
1051
  endToolBlockedOnUserSpan('reject', decisionInfo?.source || 'unknown')
@@ -1214,6 +1257,20 @@ async function checkPermissionsAndCallTool(
1214
1257
  callInput = processedInput
1215
1258
  }
1216
1259
  try {
1260
+ if (isRouteTool) {
1261
+ appendRouteDiagnostic('route_tool_call_start', {
1262
+ tool_name: tool.name,
1263
+ tool_surface: toolSurface,
1264
+ target_tool_id: extractRouteTargetToolId(callInput),
1265
+ tool_use_id: toolUseID,
1266
+ message_id: messageId,
1267
+ request_id: requestId ?? null,
1268
+ query_chain_id: toolUseContext.queryTracking?.chainId ?? null,
1269
+ query_depth: toolUseContext.queryTracking?.depth ?? null,
1270
+ permission_mode: permissionMode,
1271
+ permission_behavior: permissionDecision.behavior,
1272
+ })
1273
+ }
1217
1274
  const result = await tool.call(
1218
1275
  callInput,
1219
1276
  {
@@ -1309,6 +1366,21 @@ async function checkPermissionsAndCallTool(
1309
1366
  : typeof mappedContent === 'string'
1310
1367
  ? mappedContent.length
1311
1368
  : jsonStringify(mappedContent).length
1369
+ if (isRouteTool) {
1370
+ appendRouteDiagnostic('route_tool_result', {
1371
+ tool_name: tool.name,
1372
+ tool_surface: toolSurface,
1373
+ target_tool_id: extractRouteTargetToolId(callInput),
1374
+ tool_use_id: toolUseID,
1375
+ message_id: messageId,
1376
+ request_id: requestId ?? null,
1377
+ query_chain_id: toolUseContext.queryTracking?.chainId ?? null,
1378
+ query_depth: toolUseContext.queryTracking?.depth ?? null,
1379
+ duration_ms: durationMs,
1380
+ result_status: 'success',
1381
+ tool_result_size_bytes: toolResultSizeBytes,
1382
+ })
1383
+ }
1312
1384
 
1313
1385
  // Extract file extension for file-related tools
1314
1386
  let fileExtension: ReturnType<typeof getFileExtensionForAnalytics>
@@ -1605,6 +1677,21 @@ async function checkPermissionsAndCallTool(
1605
1677
  error: errorMessage(error),
1606
1678
  })
1607
1679
  endToolSpan()
1680
+ if (isRouteTool) {
1681
+ appendRouteDiagnostic('route_tool_result', {
1682
+ tool_name: tool.name,
1683
+ tool_surface: toolSurface,
1684
+ target_tool_id: extractRouteTargetToolId(callInput),
1685
+ tool_use_id: toolUseID,
1686
+ message_id: messageId,
1687
+ request_id: requestId ?? null,
1688
+ query_chain_id: toolUseContext.queryTracking?.chainId ?? null,
1689
+ query_depth: toolUseContext.queryTracking?.depth ?? null,
1690
+ duration_ms: durationMs,
1691
+ result_status: 'error',
1692
+ error_kind: classifyToolError(error),
1693
+ })
1694
+ }
1608
1695
 
1609
1696
  // Handle MCP auth errors by updating the client status to 'needs-auth'
1610
1697
  // This updates the /mcp display to show the server needs re-authorization
@@ -1753,3 +1840,9 @@ async function checkPermissionsAndCallTool(
1753
1840
  }
1754
1841
  }
1755
1842
  }
1843
+
1844
+ function extractRouteTargetToolId(input: unknown): string | null {
1845
+ if (!input || typeof input !== 'object') return null
1846
+ const value = (input as { tool_id?: unknown }).tool_id
1847
+ return typeof value === 'string' ? value : null
1848
+ }
@@ -26,7 +26,7 @@ import type { PermissionDecision } from '../ipc/codec.js'
26
26
  /** The shape exposed to PermissionGauntletModal (no resolver, no enqueued_at) */
27
27
  export interface PendingPermissionRequest {
28
28
  request_id: string
29
- primitive_kind: 'find' | 'locate' | 'check' | 'send'
29
+ primitive_kind: 'find' | 'locate' | 'check' | 'send' | 'document'
30
30
  description_ko: string
31
31
  description_en: string
32
32
  risk_level: 'low' | 'medium' | 'high'
@@ -219,7 +219,7 @@ function sessionReducer(
219
219
  }
220
220
  const messages = new Map(state.messages)
221
221
  messages.set(action.message_id, updated)
222
- return { ...state, messages }
222
+ return { ...state, messages, message_order: state.messages.has(action.message_id) ? state.message_order : [...state.message_order, action.message_id] }
223
223
  }
224
224
 
225
225
  case 'TOOL_RESULT': {
@@ -454,32 +454,9 @@ export const resolvePermissionDecision = _resolvePermissionDecision
454
454
  export const getActivePermission = _getActivePermission
455
455
 
456
456
  // ---------------------------------------------------------------------------
457
- // Derived agent-loop probes — Spec 288 Codex P1 regression fix.
458
- //
459
- // The `message_order` array is only appended to by `USER_INPUT`, the first
460
- // `ASSISTANT_CHUNK` for a given message_id, and `ERROR`. `TOOL_CALL` reaches
461
- // the reducer with its own `msg-${call_id}` message_id and creates a synthetic
462
- // assistant message via `getOrCreateAssistantMessage()` — but the reducer does
463
- // NOT push that id onto `message_order` (see lines 206-215). That means a
464
- // tool call that arrives before any assistant chunk lives in `messages` but
465
- // not in `message_order`, so a probe that only peeks the last entry of
466
- // `message_order` misreports the loop as idle.
467
- //
468
- // The previous in-tree probes in `tui.tsx` had exactly this bug:
469
- // - `isAgentLoopActive` returned false when the in-flight work was a
470
- // tool-call-only message (no streamed delta yet). Downstream consumers
471
- // read idle:
472
- // * `session-exit` (ctrl+d) skipped its FR-015 active-loop confirmation.
473
- // * `agent-interrupt` (ctrl+c) armed exit instead of cancelling.
474
- // - `currentToolCallId` had the same iteration bug and returned null even
475
- // when a tool call was genuinely in flight.
476
- //
477
- // The fix below derives both values from the full `messages` map so a message
478
- // that only exists in the map (not yet in `message_order`) still participates.
479
- // These helpers are pure functions — callers memoise them with
480
- // `React.useCallback` against the map reference, which the reducer already
481
- // rebuilds on every relevant mutation. They are exported so unit tests can
482
- // exercise the probes without mounting the full provider tree.
457
+ // Derived agent-loop probes — keep liveness tied to actual message state, not
458
+ // only render order, so cancellation/exit checks keep working if ordering and
459
+ // execution state ever diverge again.
483
460
  // ---------------------------------------------------------------------------
484
461
 
485
462
  /**
@@ -490,10 +467,9 @@ export const getActivePermission = _getActivePermission
490
467
  * visible to this probe even when no `ASSISTANT_CHUNK` has pushed its id into
491
468
  * the order array.
492
469
  *
493
- * Intentionally scans the full map (O(n) in message count). Session size is
494
- * bounded in practice by the ring buffer Spec 032 caps on the IPC layer, and
495
- * each call site (`agent-interrupt`, `session-exit`) only runs on a citizen
496
- * keystroke — not on every render.
470
+ * Intentionally scans the full map (O(n) in message count). Session size is
471
+ * bounded in practice, and each call site runs on a citizen keystroke rather
472
+ * than every render.
497
473
  */
498
474
  export function computeIsAgentLoopActive(
499
475
  messages: ReadonlyMap<string, Message>,
@@ -518,11 +494,9 @@ export function computeIsAgentLoopActive(
518
494
  * Returns the `call_id` of the most recently registered tool call that has no
519
495
  * matching `tool_result`, or null when no tool call is in flight.
520
496
  *
521
- * Uses `messages` map insertion order the reducer inserts a new assistant
522
- * message for `TOOL_CALL` via `messages.set(id, ...)`, which appends for a
523
- * fresh key and preserves position for an existing key (JS `Map` contract).
524
- * That matches the intent of "most recent" without relying on
525
- * `message_order`, which `TOOL_CALL` does not update.
497
+ * Uses `messages` map insertion order, which appends for a fresh key and
498
+ * preserves position for an existing key (JS `Map` contract). That matches the
499
+ * intent of "most recent" without depending on render ordering.
526
500
  */
527
501
  export function computeCurrentToolCallId(
528
502
  messages: ReadonlyMap<string, Message>,
@@ -2,14 +2,18 @@
2
2
  // Stage-1 NO-OP stub — resolves unreachable CC-only module imports so the
3
3
  // runtime bundle loads. Real implementations are tracked in the CC TUI
4
4
  // Fidelity Meta-Epic (Epic #1633).
5
- /* eslint-disable @typescript-eslint/no-explicit-any */
6
5
 
7
- const __noop = (..._args: unknown[]): any => undefined as any
6
+ export type StubFunction = (..._args: readonly unknown[]) => unknown
7
+
8
+ const __noop = (..._args: readonly unknown[]): undefined => undefined
8
9
 
9
10
  // Smart Proxy that cooperates with primitive coercion / iteration / JSON
10
- const makeStub = (): any => {
11
- const target = function () {} as any
12
- return new Proxy(target, {
11
+ export function createStub(): StubFunction {
12
+ let stub: StubFunction
13
+ const target = function stubTarget(..._args: readonly unknown[]): unknown {
14
+ return stub
15
+ }
16
+ stub = new Proxy(target, {
13
17
  get(_t, p) {
14
18
  // Well-known symbols used by JS engine during coercion
15
19
  if (p === Symbol.toPrimitive) return () => ''
@@ -28,19 +32,20 @@ const makeStub = (): any => {
28
32
  if (p === 'message') return ''
29
33
  if (p === 'stack') return ''
30
34
  if (p === 'constructor') return Object
31
- return __stub
35
+ return stub
32
36
  },
33
- apply() { return __stub },
34
- construct() { return __stub },
37
+ apply() { return stub },
38
+ construct() { return stub },
35
39
  })
40
+ return stub
36
41
  }
37
42
 
38
- const __stub: any = makeStub()
43
+ const __stub = createStub()
39
44
 
40
45
  export default __stub
41
46
 
42
47
  // Common utility exports for lodash-es-style consumers
43
- export const memoize = <T extends (...args: any[]) => any>(fn: T): T => fn
48
+ export const memoize = <T>(fn: T): T => fn
44
49
  export const sample = <T>(arr: readonly T[]): T | undefined =>
45
50
  arr[Math.floor(Math.random() * arr.length)]
46
51
  export const tokenize = (input: string): unknown[] => [input]
@@ -2,33 +2,47 @@
2
2
  // Anthropic's internal native module is not publicly available. UMMAYA disables
3
3
  // syntax highlighting at the source level (CLAUDE_CODE_SYNTAX_HIGHLIGHT=0 is
4
4
  // the documented gate); these exports keep consumer types honest.
5
- /* eslint-disable @typescript-eslint/no-explicit-any */
6
5
 
7
6
  export type SyntaxTheme = {
8
- name: string;
9
- colors: Record<string, string>;
10
- };
11
-
12
- export const ColorDiff: any = class {
13
- constructor(..._args: unknown[]) {}
14
- diff() { return []; }
15
- // Audit-3 P0-1 fix: CC StructuredDiff (TrustDialog 의 CLAUDE.md preview)
16
- // 가 `colorDiff.render(theme, width, dim)` 를 호출. stub 에 render 가
17
- // 없어서 fresh-install boot 시 `undefined is not a function` → React
18
- // render error → process crash. UMMAYA 는 syntax highlighting 비활성
19
- // 이므로 빈 배열 반환 (StructuredDiff 가 raw text fallback 으로 그림).
20
- render(..._args: unknown[]) { return []; }
21
- };
22
-
23
- export const ColorFile: any = class {
24
- constructor(..._args: unknown[]) {}
25
- read() { return ''; }
26
- render(..._args: unknown[]) { return []; }
27
- };
7
+ readonly name: string
8
+ readonly colors: Record<string, string>
9
+ }
10
+
11
+ export class ColorDiff {
12
+ constructor(
13
+ _hunk: unknown,
14
+ _firstLine: string | null,
15
+ _filePath: string,
16
+ _prefixContent?: string | null,
17
+ ) {}
18
+
19
+ diff(): string[] {
20
+ return []
21
+ }
22
+
23
+ render(_themeName: string, _width: number, _dim: boolean): string[] | null {
24
+ return []
25
+ }
26
+ }
27
+
28
+ export class ColorFile {
29
+ constructor(
30
+ _code: string,
31
+ _filePath: string,
32
+ ) {}
33
+
34
+ read(): string {
35
+ return ''
36
+ }
37
+
38
+ render(_themeName: string, _width: number, _dim: boolean): string[] | null {
39
+ return []
40
+ }
41
+ }
28
42
 
29
43
  export const getSyntaxTheme = (..._args: unknown[]): SyntaxTheme => ({
30
44
  name: 'no-op',
31
45
  colors: {},
32
- });
46
+ })
33
47
 
34
- export default { ColorDiff, ColorFile, getSyntaxTheme };
48
+ export default { ColorDiff, ColorFile, getSyntaxTheme }
@@ -3,8 +3,6 @@
3
3
  // TypeScript needs these to type-check the bare `MACRO.VERSION` references
4
4
  // throughout the CC 2.1.88 source.
5
5
 
6
- /* eslint-disable @typescript-eslint/no-explicit-any */
7
-
8
6
  declare const MACRO: {
9
7
  VERSION: string
10
8
  VERSION_CHANGELOG: string
@@ -30,7 +28,9 @@ declare type PromiseWithResolvers<T> = ReturnType<PromiseConstructor['withResolv
30
28
 
31
29
  // lodash-es sub-path modules don't ship their own .d.ts files — declare them.
32
30
  declare module 'lodash-es/memoize.js' {
33
- const memoize: <T extends (...args: any[]) => any>(fn: T) => T
31
+ const memoize: <Args extends unknown[], Result>(
32
+ fn: (...args: Args) => Result,
33
+ ) => (...args: Args) => Result
34
34
  export default memoize
35
35
  }
36
36
  declare module 'lodash-es/mapValues.js' {
@@ -7,7 +7,16 @@
7
7
  // succeeds and the splash renders.
8
8
  //
9
9
  // Referenced from `bunfig.toml` `preload = ["./src/stubs/macro-preload.ts"]`.
10
- /* eslint-disable @typescript-eslint/no-explicit-any */
10
+
11
+ type ProcessExit = typeof process.exit
12
+
13
+ declare global {
14
+ namespace NodeJS {
15
+ interface Process {
16
+ _origExit?: ProcessExit
17
+ }
18
+ }
19
+ }
11
20
 
12
21
  // ═══════════════════════════════════════════════════════════════════════
13
22
  // bun:bundle virtual module plugin
@@ -17,10 +26,8 @@
17
26
  // implementation when the bundler path supports plugin-time resolution.
18
27
  // ═══════════════════════════════════════════════════════════════════════
19
28
  try {
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- const bunGlobal = (globalThis as any).Bun
22
- if (bunGlobal && typeof bunGlobal.plugin === 'function') {
23
- bunGlobal.plugin({
29
+ if (typeof Bun !== 'undefined' && typeof Bun.plugin === 'function') {
30
+ Bun.plugin({
24
31
  name: 'ummaya-bun-bundle-shim',
25
32
  setup(build: {
26
33
  onResolve: (
@@ -56,7 +63,7 @@ try {
56
63
  // byte-stable across machines.
57
64
  import pkg from '../../package.json' with { type: 'json' }
58
65
 
59
- ;(globalThis as any).MACRO = {
66
+ const runtimeMacro = {
60
67
  VERSION: pkg.version,
61
68
  VERSION_CHANGELOG: 'https://github.com/umyunsang/UMMAYA/releases',
62
69
  BUILD_TIME: process.env.UMMAYA_BUILD_TIME ?? new Date(0).toISOString(),
@@ -65,7 +72,9 @@ import pkg from '../../package.json' with { type: 'json' }
65
72
  'Please open a GitHub issue at https://github.com/umyunsang/UMMAYA/issues',
66
73
  PACKAGE_URL: 'https://github.com/umyunsang/UMMAYA',
67
74
  NATIVE_PACKAGE_URL: 'https://github.com/umyunsang/UMMAYA',
68
- }
75
+ } satisfies typeof MACRO
76
+
77
+ Reflect.set(globalThis, 'MACRO', runtimeMacro)
69
78
 
70
79
  // ═══════════════════════════════════════════════════════════════════════
71
80
  // TTY detection shim
@@ -147,9 +156,10 @@ if (process.env.UMMAYA_DEBUG_PRELOAD === '1') {
147
156
  // the documented isTTY exit but a downstream caller is still firing
148
157
  // process.exit(1) without a stack trace). Wraps once per process; the
149
158
  // original is preserved on `process._origExit`.
150
- if (!(process as any)._origExit) {
151
- ;(process as any)._origExit = process.exit.bind(process)
152
- process.exit = ((code?: number) => {
159
+ if (!process._origExit) {
160
+ const originalExit: ProcessExit = process.exit.bind(process)
161
+ process._origExit = originalExit
162
+ const patchedExit: ProcessExit = code => {
153
163
  try {
154
164
  const stack = new Error('process.exit caller').stack ?? ''
155
165
  require('fs').writeSync(
@@ -159,7 +169,8 @@ if (process.env.UMMAYA_DEBUG_PRELOAD === '1') {
159
169
  } catch {
160
170
  /* stderr torn down */
161
171
  }
162
- return (process as any)._origExit(code)
163
- }) as typeof process.exit
172
+ return originalExit(code)
173
+ }
174
+ process.exit = patchedExit
164
175
  }
165
176
  }