ummaya 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +15 -2
  2. package/bin/ummaya +10 -1
  3. package/npm-shrinkwrap.json +253 -2
  4. package/package.json +5 -1
  5. package/prompts/manifest.yaml +1 -1
  6. package/prompts/system_v1.md +1 -0
  7. package/pyproject.toml +26 -2
  8. package/specs/2803-document-production-hardening/contracts/document-tools.schema.json +1043 -0
  9. package/src/ummaya/_canonical/__init__.py +2 -0
  10. package/src/ummaya/engine/engine.py +29 -132
  11. package/src/ummaya/evidence/__init__.py +21 -2
  12. package/src/ummaya/evidence/dataset_contract.py +193 -0
  13. package/src/ummaya/evidence/document_authoring_cases.py +33 -0
  14. package/src/ummaya/evidence/document_harness.py +313 -0
  15. package/src/ummaya/evidence/document_viewer_ux.py +391 -0
  16. package/src/ummaya/evidence/gates.py +70 -0
  17. package/src/ummaya/evidence/json_types.py +20 -0
  18. package/src/ummaya/evidence/models.py +88 -1
  19. package/src/ummaya/evidence/output_payload.py +89 -0
  20. package/src/ummaya/evidence/payload_documents.py +233 -0
  21. package/src/ummaya/evidence/route_contracts.py +224 -0
  22. package/src/ummaya/evidence/route_helpers.py +150 -0
  23. package/src/ummaya/evidence/runner.py +81 -212
  24. package/src/ummaya/evidence/source_provenance.py +246 -0
  25. package/src/ummaya/evidence/source_provenance_redaction.py +176 -0
  26. package/src/ummaya/evidence/tool_layer.py +39 -0
  27. package/src/ummaya/evidence/tool_layer_models.py +151 -0
  28. package/src/ummaya/ipc/adapter_manifest_emitter.py +26 -10
  29. package/src/ummaya/ipc/document_intent_normalization.py +185 -0
  30. package/src/ummaya/ipc/frame_schema.py +5 -5
  31. package/src/ummaya/ipc/route_diagnostics.py +73 -0
  32. package/src/ummaya/ipc/stdio.py +1109 -477
  33. package/src/ummaya/llm/client.py +102 -3
  34. package/src/ummaya/llm/config.py +8 -3
  35. package/src/ummaya/primitives/__init__.py +6 -2
  36. package/src/ummaya/primitives/delegation.py +1 -1
  37. package/src/ummaya/primitives/document.py +28 -0
  38. package/src/ummaya/settings.py +0 -3
  39. package/src/ummaya/tools/discovery_bridge.py +17 -1
  40. package/src/ummaya/tools/documents/__init__.py +297 -0
  41. package/src/ummaya/tools/documents/adapter_registry.py +487 -0
  42. package/src/ummaya/tools/documents/archive_container_probe.py +167 -0
  43. package/src/ummaya/tools/documents/artifact_store.py +454 -0
  44. package/src/ummaya/tools/documents/authoring.py +283 -0
  45. package/src/ummaya/tools/documents/baselines.py +114 -0
  46. package/src/ummaya/tools/documents/capability.py +331 -0
  47. package/src/ummaya/tools/documents/contracts.py +112 -0
  48. package/src/ummaya/tools/documents/conversion.py +521 -0
  49. package/src/ummaya/tools/documents/diff.py +275 -0
  50. package/src/ummaya/tools/documents/engines.py +163 -0
  51. package/src/ummaya/tools/documents/evaluation.py +291 -0
  52. package/src/ummaya/tools/documents/explicit_values.py +108 -0
  53. package/src/ummaya/tools/documents/fixtures.py +174 -0
  54. package/src/ummaya/tools/documents/format_completion_audit.py +471 -0
  55. package/src/ummaya/tools/documents/formats/__init__.py +2 -0
  56. package/src/ummaya/tools/documents/formats/archive.py +528 -0
  57. package/src/ummaya/tools/documents/formats/base.py +41 -0
  58. package/src/ummaya/tools/documents/formats/code_file.py +211 -0
  59. package/src/ummaya/tools/documents/formats/data_file.py +272 -0
  60. package/src/ummaya/tools/documents/formats/hwp.py +284 -0
  61. package/src/ummaya/tools/documents/formats/hwpx.py +1837 -0
  62. package/src/ummaya/tools/documents/formats/odf.py +435 -0
  63. package/src/ummaya/tools/documents/formats/ooxml.py +1030 -0
  64. package/src/ummaya/tools/documents/formats/passive.py +766 -0
  65. package/src/ummaya/tools/documents/formats/pdf.py +702 -0
  66. package/src/ummaya/tools/documents/formats/text_web.py +268 -0
  67. package/src/ummaya/tools/documents/hwp_conversion_probe.py +178 -0
  68. package/src/ummaya/tools/documents/hwp_direct_candidate.py +141 -0
  69. package/src/ummaya/tools/documents/inspection.py +289 -0
  70. package/src/ummaya/tools/documents/intake.py +1079 -0
  71. package/src/ummaya/tools/documents/legacy_office_promotion_probe.py +366 -0
  72. package/src/ummaya/tools/documents/models.py +1598 -0
  73. package/src/ummaya/tools/documents/odf_promotion_probe.py +167 -0
  74. package/src/ummaya/tools/documents/orchestrator.py +96 -0
  75. package/src/ummaya/tools/documents/passive_capability_probe.py +251 -0
  76. package/src/ummaya/tools/documents/patch.py +170 -0
  77. package/src/ummaya/tools/documents/pdfa_conformance.py +284 -0
  78. package/src/ummaya/tools/documents/pdfa_promotion_probe.py +198 -0
  79. package/src/ummaya/tools/documents/permissions.py +110 -0
  80. package/src/ummaya/tools/documents/planner.py +616 -0
  81. package/src/ummaya/tools/documents/registry.py +2733 -0
  82. package/src/ummaya/tools/documents/render.py +978 -0
  83. package/src/ummaya/tools/documents/render_comparison.py +113 -0
  84. package/src/ummaya/tools/documents/render_comparison_models.py +74 -0
  85. package/src/ummaya/tools/documents/render_comparison_regions.py +73 -0
  86. package/src/ummaya/tools/documents/render_comparison_style.py +161 -0
  87. package/src/ummaya/tools/documents/reread.py +157 -0
  88. package/src/ummaya/tools/documents/runtime_authoring.py +244 -0
  89. package/src/ummaya/tools/documents/runtime_authoring_bundle.py +76 -0
  90. package/src/ummaya/tools/documents/scorecard.py +184 -0
  91. package/src/ummaya/tools/documents/socratic_planner.py +193 -0
  92. package/src/ummaya/tools/documents/style.py +48 -0
  93. package/src/ummaya/tools/documents/tool_defs.py +523 -0
  94. package/src/ummaya/tools/documents/validate.py +347 -0
  95. package/src/ummaya/tools/executor.py +29 -0
  96. package/src/ummaya/tools/live_proxy.py +0 -3
  97. package/src/ummaya/tools/models.py +5 -1
  98. package/src/ummaya/tools/register_all.py +8 -0
  99. package/src/ummaya/tools/registry.py +10 -1
  100. package/src/ummaya/tools/routing/__init__.py +59 -0
  101. package/src/ummaya/tools/routing/builder.py +105 -0
  102. package/src/ummaya/tools/routing/cards.py +29 -0
  103. package/src/ummaya/tools/routing/decision_service.py +534 -0
  104. package/src/ummaya/tools/routing/decision_types.py +74 -0
  105. package/src/ummaya/tools/routing/feasibility.py +122 -0
  106. package/src/ummaya/tools/routing/intent.py +17 -0
  107. package/src/ummaya/tools/routing/intent_extractor.py +207 -0
  108. package/src/ummaya/tools/routing/intent_patterns.py +160 -0
  109. package/src/ummaya/tools/routing/intent_public_data.py +150 -0
  110. package/src/ummaya/tools/routing/intent_types.py +48 -0
  111. package/src/ummaya/tools/routing/lint.py +78 -0
  112. package/src/ummaya/tools/routing/metadata.py +174 -0
  113. package/src/ummaya/tools/routing/projection.py +340 -0
  114. package/src/ummaya/tools/routing/retrieval_policy.py +629 -0
  115. package/src/ummaya/tools/routing/schema.py +81 -0
  116. package/src/ummaya/tools/routing/types.py +96 -0
  117. package/src/ummaya/tools/routing_index.py +2 -2
  118. package/src/ummaya/tools/search.py +34 -746
  119. package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
  120. package/tui/package.json +1 -1
  121. package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
  122. package/tui/src/QueryEngine.ts +12 -8
  123. package/tui/src/bridge/inboundAttachments.ts +3 -3
  124. package/tui/src/cli/handlers/auth.ts +3 -12
  125. package/tui/src/cli/print.ts +7 -7
  126. package/tui/src/commands/insights.ts +1 -1
  127. package/tui/src/commands/install-github-app/types.ts +8 -30
  128. package/tui/src/commands/plugin/types.ts +6 -28
  129. package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
  130. package/tui/src/commands/rename/generateSessionName.ts +1 -1
  131. package/tui/src/components/Feedback.tsx +1 -1
  132. package/tui/src/components/LogoV2/EmergencyTip.tsx +11 -2
  133. package/tui/src/components/LogoV2/WelcomeV2.tsx +1 -3
  134. package/tui/src/components/ScrollKeybindingHandler.tsx +6 -6
  135. package/tui/src/components/Spinner/types.ts +6 -28
  136. package/tui/src/components/agents/generateAgent.ts +1 -1
  137. package/tui/src/components/agents/new-agent-creation/types.ts +4 -26
  138. package/tui/src/components/config/EnvSecretIsolatedEditor.tsx +1 -1
  139. package/tui/src/components/mcp/types.ts +16 -38
  140. package/tui/src/components/messages/AssistantToolUseMessage.tsx +3 -2
  141. package/tui/src/components/messages/UserCrossSessionMessage.ts +16 -4
  142. package/tui/src/components/messages/UserForkBoilerplateMessage.ts +16 -4
  143. package/tui/src/components/messages/UserGitHubWebhookMessage.ts +16 -4
  144. package/tui/src/components/messages/UserToolResultMessage/utils.tsx +3 -2
  145. package/tui/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +9 -4
  146. package/tui/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +9 -4
  147. package/tui/src/components/primitive/DocumentSocraticReviewBlock.tsx +129 -0
  148. package/tui/src/components/primitive/DocumentToolResultCard.tsx +224 -0
  149. package/tui/src/components/primitive/documentSocraticReview.ts +215 -0
  150. package/tui/src/components/primitive/index.tsx +43 -1
  151. package/tui/src/components/primitive/types.ts +137 -0
  152. package/tui/src/components/ui/option.ts +4 -26
  153. package/tui/src/constants/common.ts +0 -2
  154. package/tui/src/constants/prompts.ts +4 -3
  155. package/tui/src/constants/querySource.ts +4 -26
  156. package/tui/src/entrypoints/sdk/controlTypes.ts +26 -48
  157. package/tui/src/entrypoints/sdk/coreTypes.generated.ts +3 -25
  158. package/tui/src/entrypoints/sdk/runtimeTypes.ts +38 -60
  159. package/tui/src/entrypoints/sdk/sdkUtilityTypes.ts +4 -26
  160. package/tui/src/entrypoints/sdk/settingsTypes.generated.ts +3 -25
  161. package/tui/src/entrypoints/sdk/toolTypes.ts +3 -25
  162. package/tui/src/hooks/toolPermission/handlers/interactiveHandler.ts +10 -0
  163. package/tui/src/hooks/useApiKeyVerification.ts +1 -1
  164. package/tui/src/hooks/useVirtualScroll.ts +1 -1
  165. package/tui/src/ink/ink.tsx +33 -14
  166. package/tui/src/ink/reconciler.ts +2 -3
  167. package/tui/src/ink/render-to-screen.ts +30 -10
  168. package/tui/src/ipc/bridge.ts +62 -15
  169. package/tui/src/ipc/bridgeSingleton.ts +5 -1
  170. package/tui/src/ipc/codec.ts +3 -3
  171. package/tui/src/ipc/frames.generated.ts +12 -12
  172. package/tui/src/ipc/llmClient.ts +151 -27
  173. package/tui/src/ipc/schema/frame.schema.json +1 -1
  174. package/tui/src/keybindings/defaultBindings.ts +4 -0
  175. package/tui/src/main.tsx +29 -11
  176. package/tui/src/native-ts/file-index/index.ts +33 -3
  177. package/tui/src/observability/surface.ts +2 -2
  178. package/tui/src/probes/toolRegistryProbe.tsx +3 -1
  179. package/tui/src/projectOnboardingState.ts +7 -6
  180. package/tui/src/query/chatMessageTypes.ts +18 -0
  181. package/tui/src/query/chatMessagesBuilder.ts +1 -1
  182. package/tui/src/query/deps.ts +1 -1
  183. package/tui/src/query/messageGuards.ts +106 -0
  184. package/tui/src/query/publicDataTerminalRepair.ts +384 -0
  185. package/tui/src/query/run.ts +1075 -0
  186. package/tui/src/query/supportBoundary.ts +168 -0
  187. package/tui/src/query/toolResultErrors.ts +103 -0
  188. package/tui/src/query/toolRunner.ts +687 -0
  189. package/tui/src/query/unavailableToolRepair.ts +118 -0
  190. package/tui/src/query.ts +9 -2186
  191. package/tui/src/screens/REPL.tsx +40 -29
  192. package/tui/src/services/api/adapterManifest.ts +4 -0
  193. package/tui/src/services/api/backendChat/events.ts +117 -0
  194. package/tui/src/services/api/backendChat/finalMessage.ts +40 -0
  195. package/tui/src/services/api/backendChat/frame.ts +9 -0
  196. package/tui/src/services/api/backendChat/streaming.ts +430 -0
  197. package/tui/src/services/api/backendChat/types.ts +62 -0
  198. package/tui/src/services/api/backendChat.ts +1 -0
  199. package/tui/src/services/api/client.ts +65 -2
  200. package/tui/src/services/api/errorUtils.ts +5 -5
  201. package/tui/src/services/api/errors.ts +1 -1
  202. package/tui/src/services/api/logging.ts +1 -1
  203. package/tui/src/services/api/ummaya/evidence.ts +194 -0
  204. package/tui/src/services/api/ummaya/messages.ts +255 -0
  205. package/tui/src/services/api/ummaya/nonStreaming.ts +66 -0
  206. package/tui/src/services/api/ummaya/provider.ts +200 -0
  207. package/tui/src/services/api/ummaya/reasoning.ts +24 -0
  208. package/tui/src/services/api/ummaya/request.ts +200 -0
  209. package/tui/src/services/api/ummaya/selectionContext.ts +240 -0
  210. package/tui/src/services/api/ummaya/streaming.ts +365 -0
  211. package/tui/src/services/api/ummaya/streamingPayload.ts +129 -0
  212. package/tui/src/services/api/ummaya/streamingReader.ts +40 -0
  213. package/tui/src/services/api/ummaya/toolSelection.ts +217 -0
  214. package/tui/src/services/api/ummaya/types.ts +110 -0
  215. package/tui/src/services/api/ummaya/usage.ts +30 -0
  216. package/tui/src/services/api/ummaya.ts +26 -418
  217. package/tui/src/services/api/withRetry.ts +1 -1
  218. package/tui/src/services/awaySummary.ts +2 -2
  219. package/tui/src/services/claudeAiLimits.ts +1 -1
  220. package/tui/src/services/compact/autoCompact.ts +1 -1
  221. package/tui/src/services/compact/compact.ts +1 -1
  222. package/tui/src/services/lsp/types.ts +8 -30
  223. package/tui/src/services/tips/types.ts +6 -28
  224. package/tui/src/services/tokenEstimation.ts +1 -1
  225. package/tui/src/services/toolRegistry/bootGuard.ts +5 -5
  226. package/tui/src/services/toolUseSummary/toolUseSummaryGenerator.ts +1 -1
  227. package/tui/src/services/tools/toolExecution.ts +94 -1
  228. package/tui/src/store/pendingPermissionSlot.ts +1 -1
  229. package/tui/src/store/session-store.ts +10 -36
  230. package/tui/src/stubs/any-stub.ts +15 -10
  231. package/tui/src/stubs/color-diff-napi.ts +37 -23
  232. package/tui/src/stubs/globals.d.ts +3 -3
  233. package/tui/src/stubs/macro-preload.ts +23 -12
  234. package/tui/src/tools/AdapterTool/AdapterTool.ts +1207 -714
  235. package/tui/src/tools/AdapterTool/routeDiagnostics.ts +75 -0
  236. package/tui/src/tools/AgentTool/AgentTool.tsx +84 -1371
  237. package/tui/src/tools/AgentTool/agentToolHandoff.ts +114 -0
  238. package/tui/src/tools/AgentTool/agentToolPartialResult.ts +16 -0
  239. package/tui/src/tools/AgentTool/agentToolProgress.ts +32 -0
  240. package/tui/src/tools/AgentTool/agentToolResolver.ts +161 -0
  241. package/tui/src/tools/AgentTool/agentToolResult.ts +163 -0
  242. package/tui/src/tools/AgentTool/agentToolUtils.ts +14 -686
  243. package/tui/src/tools/AgentTool/asyncAgentLifecycle.ts +208 -0
  244. package/tui/src/tools/AgentTool/asyncLifecycle.ts +153 -0
  245. package/tui/src/tools/AgentTool/backgroundedCompletion.ts +126 -0
  246. package/tui/src/tools/AgentTool/backgroundedLifecycle.ts +174 -0
  247. package/tui/src/tools/AgentTool/foregroundBackground.ts +83 -0
  248. package/tui/src/tools/AgentTool/foregroundDrain.tsx +133 -0
  249. package/tui/src/tools/AgentTool/foregroundFinalize.ts +98 -0
  250. package/tui/src/tools/AgentTool/foregroundLifecycle.tsx +237 -0
  251. package/tui/src/tools/AgentTool/foregroundProgress.tsx +169 -0
  252. package/tui/src/tools/AgentTool/foregroundTask.ts +89 -0
  253. package/tui/src/tools/AgentTool/forkSubagent.ts +1 -12
  254. package/tui/src/tools/AgentTool/forkSubagentGate.ts +34 -0
  255. package/tui/src/tools/AgentTool/launchRouting.ts +203 -0
  256. package/tui/src/tools/AgentTool/lifecycle.ts +244 -0
  257. package/tui/src/tools/AgentTool/mcpRouting.ts +73 -0
  258. package/tui/src/tools/AgentTool/orchestrationSupport.ts +70 -0
  259. package/tui/src/tools/AgentTool/permissions.ts +39 -0
  260. package/tui/src/tools/AgentTool/promptSetup.ts +181 -0
  261. package/tui/src/tools/AgentTool/remoteRouting.ts +62 -0
  262. package/tui/src/tools/AgentTool/resultMapping.ts +116 -0
  263. package/tui/src/tools/AgentTool/resumeAgent.ts +39 -107
  264. package/tui/src/tools/AgentTool/resumeAgentHelpers.ts +140 -0
  265. package/tui/src/tools/AgentTool/runAgent.ts +1 -1
  266. package/tui/src/tools/AgentTool/runtimeConfig.ts +57 -0
  267. package/tui/src/tools/AgentTool/schemas.ts +196 -0
  268. package/tui/src/tools/AgentTool/sourceVerificationPropagation.ts +263 -0
  269. package/tui/src/tools/AgentTool/worktreeLifecycle.ts +105 -0
  270. package/tui/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +174 -202
  271. package/tui/src/tools/BashTool/BashTool.tsx +71 -1072
  272. package/tui/src/tools/BashTool/bashCommandHelpers.ts +12 -12
  273. package/tui/src/tools/BashTool/bashPermissions/astPreflight.ts +173 -0
  274. package/tui/src/tools/BashTool/bashPermissions/classifierChecks.ts +199 -0
  275. package/tui/src/tools/BashTool/bashPermissions/compoundGuards.ts +53 -0
  276. package/tui/src/tools/BashTool/bashPermissions/constants.ts +99 -0
  277. package/tui/src/tools/BashTool/bashPermissions/index.ts +38 -0
  278. package/tui/src/tools/BashTool/bashPermissions/legacyMisparsing.ts +62 -0
  279. package/tui/src/tools/BashTool/bashPermissions/main.ts +135 -0
  280. package/tui/src/tools/BashTool/bashPermissions/normalizedCommands.ts +33 -0
  281. package/tui/src/tools/BashTool/bashPermissions/operatorFlow.ts +98 -0
  282. package/tui/src/tools/BashTool/bashPermissions/permissionChecks.ts +200 -0
  283. package/tui/src/tools/BashTool/bashPermissions/prefixSuggestions.ts +88 -0
  284. package/tui/src/tools/BashTool/bashPermissions/promptClassifierRules.ts +125 -0
  285. package/tui/src/tools/BashTool/bashPermissions/ruleDelegates.ts +19 -0
  286. package/tui/src/tools/BashTool/bashPermissions/ruleMatching.ts +145 -0
  287. package/tui/src/tools/BashTool/bashPermissions/sandboxAutoAllow.ts +75 -0
  288. package/tui/src/tools/BashTool/bashPermissions/subcommandFlow.ts +205 -0
  289. package/tui/src/tools/BashTool/bashPermissions/subcommandGuards.ts +73 -0
  290. package/tui/src/tools/BashTool/bashPermissions/subcommandResultHelpers.ts +116 -0
  291. package/tui/src/tools/BashTool/bashPermissions/types.ts +26 -0
  292. package/tui/src/tools/BashTool/bashPermissions/wrapperStripping.ts +139 -0
  293. package/tui/src/tools/BashTool/bashPermissions.ts +26 -2621
  294. package/tui/src/tools/BashTool/call.ts +202 -0
  295. package/tui/src/tools/BashTool/callLoader.ts +35 -0
  296. package/tui/src/tools/BashTool/commandClassification.ts +151 -0
  297. package/tui/src/tools/BashTool/commandClassificationLoader.ts +40 -0
  298. package/tui/src/tools/BashTool/cwdReset.ts +33 -0
  299. package/tui/src/tools/BashTool/lineTruncation.ts +11 -0
  300. package/tui/src/tools/BashTool/modeValidation.ts +13 -1
  301. package/tui/src/tools/BashTool/outputPersistence.ts +42 -0
  302. package/tui/src/tools/BashTool/permissionClassification.ts +66 -0
  303. package/tui/src/tools/BashTool/permissionLoader.ts +44 -0
  304. package/tui/src/tools/BashTool/resultLoader.ts +29 -0
  305. package/tui/src/tools/BashTool/resultMapping.ts +83 -0
  306. package/tui/src/tools/BashTool/sandboxPolicy.ts +79 -0
  307. package/tui/src/tools/BashTool/schemas.ts +65 -0
  308. package/tui/src/tools/BashTool/sedEditExecution.ts +59 -0
  309. package/tui/src/tools/BashTool/shellExecution.tsx +245 -0
  310. package/tui/src/tools/BashTool/shellOutputUtils.ts +85 -0
  311. package/tui/src/tools/BashTool/shellPermissionGauntlet.ts +97 -0
  312. package/tui/src/tools/BashTool/uiLoader.ts +37 -0
  313. package/tui/src/tools/BriefTool/upload.ts +1 -1
  314. package/tui/src/tools/CalculatorTool/parser.ts +2 -2
  315. package/tui/src/tools/DocumentPrimitive/DocumentPrimitive.ts +262 -0
  316. package/tui/src/tools/DocumentPrimitive/dispatchNormalization.ts +270 -0
  317. package/tui/src/tools/DocumentPrimitive/documentDestinationPath.ts +18 -0
  318. package/tui/src/tools/DocumentPrimitive/documentMutationGuard.ts +22 -0
  319. package/tui/src/tools/DocumentPrimitive/documentPatchNormalization.ts +248 -0
  320. package/tui/src/tools/DocumentPrimitive/documentSourceVerification.ts +245 -0
  321. package/tui/src/tools/DocumentPrimitive/documentSourceVerificationFields.ts +103 -0
  322. package/tui/src/tools/DocumentPrimitive/modelVisibleOutput.ts +40 -0
  323. package/tui/src/tools/DocumentPrimitive/prompt.ts +35 -0
  324. package/tui/src/tools/FileEditTool/FileEditTool.ts +9 -507
  325. package/tui/src/tools/FileEditTool/call.ts +228 -0
  326. package/tui/src/tools/FileEditTool/validateInput.ts +196 -0
  327. package/tui/src/tools/FileReadTool/imageProcessor.ts +13 -0
  328. package/tui/src/tools/FileWriteTool/FileWriteTool.ts +7 -300
  329. package/tui/src/tools/FileWriteTool/call.ts +223 -0
  330. package/tui/src/tools/FileWriteTool/validateInput.ts +80 -0
  331. package/tui/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +19 -3
  332. package/tui/src/tools/LookupPrimitive/LookupPrimitive.ts +25 -32
  333. package/tui/src/tools/LookupPrimitive/prompt.ts +0 -2
  334. package/tui/src/tools/MCPTool/trustPolicy.ts +118 -0
  335. package/tui/src/tools/McpAuthTool/McpAuthTool.ts +21 -3
  336. package/tui/src/tools/NotebookEditTool/NotebookEditTool.ts +7 -326
  337. package/tui/src/tools/NotebookEditTool/call.ts +254 -0
  338. package/tui/src/tools/NotebookEditTool/notebookModel.ts +51 -0
  339. package/tui/src/tools/NotebookEditTool/validateInput.ts +142 -0
  340. package/tui/src/tools/PowerShellTool/PowerShellTool.tsx +46 -937
  341. package/tui/src/tools/PowerShellTool/acceptEditsCommandValidation.ts +162 -0
  342. package/tui/src/tools/PowerShellTool/call.ts +179 -0
  343. package/tui/src/tools/PowerShellTool/callLoader.ts +37 -0
  344. package/tui/src/tools/PowerShellTool/commandClassification.ts +86 -0
  345. package/tui/src/tools/PowerShellTool/modeValidation.ts +25 -332
  346. package/tui/src/tools/PowerShellTool/outputPersistence.ts +42 -0
  347. package/tui/src/tools/PowerShellTool/permissionClassification.ts +28 -0
  348. package/tui/src/tools/PowerShellTool/resultLoader.ts +31 -0
  349. package/tui/src/tools/PowerShellTool/resultMapping.ts +75 -0
  350. package/tui/src/tools/PowerShellTool/schemas.ts +40 -0
  351. package/tui/src/tools/PowerShellTool/shellExecution.tsx +258 -0
  352. package/tui/src/tools/PowerShellTool/symlinkModeValidation.ts +44 -0
  353. package/tui/src/tools/PowerShellTool/uiLoader.ts +37 -0
  354. package/tui/src/tools/PowerShellTool/validation.ts +39 -0
  355. package/tui/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +19 -3
  356. package/tui/src/tools/ResolveLocationPrimitive/ResolveLocationPrimitive.ts +1 -11
  357. package/tui/src/tools/ResolveLocationPrimitive/prompt.ts +2 -6
  358. package/tui/src/tools/SkillTool/SkillTool.ts +2 -2
  359. package/tui/src/tools/SubmitPrimitive/SubmitPrimitive.ts +27 -10
  360. package/tui/src/tools/TaskCreateTool/TaskCreateTool.ts +16 -2
  361. package/tui/src/tools/TaskGetTool/TaskGetTool.ts +23 -3
  362. package/tui/src/tools/TaskListTool/TaskListTool.ts +22 -4
  363. package/tui/src/tools/TaskOutputTool/TaskOutputTool.tsx +46 -547
  364. package/tui/src/tools/TaskOutputTool/lookup.ts +216 -0
  365. package/tui/src/tools/TaskOutputTool/render.tsx +257 -0
  366. package/tui/src/tools/TaskOutputTool/schemas.ts +55 -0
  367. package/tui/src/tools/TaskOutputTool/serialization.ts +36 -0
  368. package/tui/src/tools/TaskStopTool/TaskStopTool.ts +10 -0
  369. package/tui/src/tools/TaskUpdateTool/TaskUpdateTool.ts +14 -364
  370. package/tui/src/tools/TaskUpdateTool/completion.ts +62 -0
  371. package/tui/src/tools/TaskUpdateTool/schemas.ts +62 -0
  372. package/tui/src/tools/TaskUpdateTool/serialization.ts +46 -0
  373. package/tui/src/tools/TaskUpdateTool/statusUpdate.ts +247 -0
  374. package/tui/src/tools/TodoWriteTool/TodoWriteTool.ts +21 -2
  375. package/tui/src/tools/ToolSearchTool/ToolSearchTool.ts +21 -302
  376. package/tui/src/tools/ToolSearchTool/ccSupportTools.ts +223 -0
  377. package/tui/src/tools/ToolSearchTool/descriptionCache.ts +50 -0
  378. package/tui/src/tools/ToolSearchTool/keywordSearch.ts +216 -0
  379. package/tui/src/tools/ToolSearchTool/prompt.ts +10 -4
  380. package/tui/src/tools/ToolSearchTool/resultMapping.ts +30 -0
  381. package/tui/src/tools/ToolSearchTool/schemas.ts +30 -0
  382. package/tui/src/tools/ToolSearchTool/searchPool.ts +47 -0
  383. package/tui/src/tools/ToolSearchTool/supportIntentHints.ts +140 -0
  384. package/tui/src/tools/TranslateTool/TranslateTool.ts +1 -1
  385. package/tui/src/tools/VerifyPrimitive/VerifyPrimitive.ts +2 -1
  386. package/tui/src/tools/WebFetchTool/WebFetchTool.ts +43 -138
  387. package/tui/src/tools/WebFetchTool/call.ts +227 -0
  388. package/tui/src/tools/WebFetchTool/resolvedAddressSafety.ts +78 -0
  389. package/tui/src/tools/WebFetchTool/sourceVerification.ts +204 -0
  390. package/tui/src/tools/WebFetchTool/types.ts +23 -0
  391. package/tui/src/tools/WebFetchTool/urlSafety.ts +181 -0
  392. package/tui/src/tools/WebFetchTool/utils.ts +1 -1
  393. package/tui/src/tools/WebSearchTool/UI.tsx +0 -1
  394. package/tui/src/tools/WebSearchTool/WebSearchTool.ts +9 -313
  395. package/tui/src/tools/WebSearchTool/call.ts +33 -0
  396. package/tui/src/tools/WebSearchTool/responseMapping.ts +190 -0
  397. package/tui/src/tools/WebSearchTool/resultBlock.ts +47 -0
  398. package/tui/src/tools/WebSearchTool/schemas.ts +47 -0
  399. package/tui/src/tools/WebSearchTool/toolSchema.ts +12 -0
  400. package/tui/src/tools/WorkspaceToolAdapter/WorkspaceToolAdapter.ts +79 -0
  401. package/tui/src/tools/WorkspaceToolAdapter/allowedRootPolicy.ts +85 -0
  402. package/tui/src/tools/WorkspaceToolAdapter/documentFormatGuards.ts +73 -0
  403. package/tui/src/tools/WorkspaceToolAdapter/inputNormalization.ts +105 -0
  404. package/tui/src/tools/WorkspaceToolAdapter/mcpExposurePolicy.ts +64 -0
  405. package/tui/src/tools/WorkspaceToolAdapter/toolDefFactory.ts +215 -0
  406. package/tui/src/tools/WorkspaceToolAdapter/toolNames.ts +6 -0
  407. package/tui/src/tools/WorkspaceToolAdapter/workspacePolicy.ts +15 -0
  408. package/tui/src/tools/_shared/dispatchPrimitive.ts +6 -6
  409. package/tui/src/tools/_shared/documentChangeToPatch.ts +125 -0
  410. package/tui/src/tools/_shared/documentDispatchArguments.ts +87 -0
  411. package/tui/src/tools/_shared/documentPrimitiveTimeout.ts +13 -0
  412. package/tui/src/tools/_shared/documentToolResultRender.ts +98 -0
  413. package/tui/src/tools/_shared/pendingCallRegistry.ts +1 -6
  414. package/tui/src/tools/_shared/rootPrimitiveInput.ts +1 -0
  415. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPatterns.ts +58 -0
  416. package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPrompt.ts +271 -0
  417. package/tui/src/tools/_shared/toolChoiceRepair/documentRepair.ts +452 -0
  418. package/tui/src/tools/_shared/toolChoiceRepair/messageAccess.ts +80 -0
  419. package/tui/src/tools/_shared/toolChoiceRepair/publicDataRepair.ts +92 -0
  420. package/tui/src/tools/_shared/toolChoiceRepair/supportRepair.ts +135 -0
  421. package/tui/src/tools/_shared/toolChoiceRepair.ts +55 -860
  422. package/tui/src/tools/shared/mockDisclaimer.ts +1 -1
  423. package/tui/src/tools.ts +39 -190
  424. package/tui/src/types/fileSuggestion.ts +4 -26
  425. package/tui/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +186 -148
  426. package/tui/src/types/generated/events_mono/common/v1/auth.ts +25 -11
  427. package/tui/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +47 -30
  428. package/tui/src/types/generated/google/protobuf/timestamp.ts +21 -7
  429. package/tui/src/types/message.ts +80 -102
  430. package/tui/src/types/messageQueueTypes.ts +6 -28
  431. package/tui/src/types/notebook.ts +16 -38
  432. package/tui/src/types/statusLine.ts +4 -26
  433. package/tui/src/types/tools.ts +24 -46
  434. package/tui/src/types/utils.ts +6 -28
  435. package/tui/src/upstreamproxy/relay.ts +7 -3
  436. package/tui/src/upstreamproxy/upstreamproxy.ts +1 -1
  437. package/tui/src/utils/assistantMessageFactories.ts +9 -3
  438. package/tui/src/utils/auth.ts +129 -139
  439. package/tui/src/utils/bash/ast.ts +23 -23
  440. package/tui/src/utils/bash/bashParser.ts +5 -5
  441. package/tui/src/utils/billing.ts +1 -1
  442. package/tui/src/utils/collapseReadSearch.ts +3 -3
  443. package/tui/src/utils/cronTasks.ts +1 -1
  444. package/tui/src/utils/execFileNoThrow.ts +1 -1
  445. package/tui/src/utils/filePersistence/types.ts +16 -38
  446. package/tui/src/utils/forkedAgent.ts +1 -1
  447. package/tui/src/utils/gracefulShutdown.ts +4 -4
  448. package/tui/src/utils/heapDumpService.ts +12 -8
  449. package/tui/src/utils/hooks/apiQueryHookHelper.ts +1 -1
  450. package/tui/src/utils/hooks/execPromptHook.ts +1 -1
  451. package/tui/src/utils/hooks/skillImprovement.ts +1 -1
  452. package/tui/src/utils/mcp/dateTimeParser.ts +1 -1
  453. package/tui/src/utils/messages.ts +18 -0
  454. package/tui/src/utils/migrateSessions.ts +3 -3
  455. package/tui/src/utils/model/model.ts +6 -6
  456. package/tui/src/utils/permissions/yoloClassifier.ts +1 -1
  457. package/tui/src/utils/plugins/headlessPluginInstall.ts +1 -1
  458. package/tui/src/utils/plugins/mcpPluginIntegration.ts +1 -1
  459. package/tui/src/utils/plugins/mcpbHandler.ts +1 -1
  460. package/tui/src/utils/plugins/pluginLoader.ts +8 -8
  461. package/tui/src/utils/protectedNamespace.ts +5 -3
  462. package/tui/src/utils/rawJsonToolCall.ts +242 -0
  463. package/tui/src/utils/ripgrep.ts +16 -7
  464. package/tui/src/utils/sessionTitle.ts +1 -1
  465. package/tui/src/utils/settings/permissionValidation.ts +14 -2
  466. package/tui/src/utils/shell/prefix.ts +1 -1
  467. package/tui/src/utils/sideQuery.ts +1 -1
  468. package/tui/src/utils/systemThemeWatcher.ts +13 -3
  469. package/tui/src/utils/teleport.tsx +1 -1
  470. package/uv.lock +400 -14
  471. package/tui/src/services/api/claude.ts +0 -3540
  472. package/tui/src/tools/_shared/directPublicDataGuard.ts +0 -362
  473. package/tui/src/tools/_shared/kmaAnalysisGuard.ts +0 -197
  474. package/tui/src/tools/_shared/kmaAviationGuard.ts +0 -70
  475. package/tui/src/tools/_shared/nmcAedGuard.ts +0 -234
  476. package/tui/src/tools/_shared/protectedCheckGuard.ts +0 -207
  477. package/tui/src/tools/_shared/textToolCallGuard.ts +0 -91
@@ -54,7 +54,7 @@ export type SearchOrReadResult = {
54
54
  isMemoryWrite: boolean
55
55
  /**
56
56
  * True for meta-operations that should be absorbed into a collapse group
57
- * without incrementing any count (Snip, ToolSearch). They remain visible
57
+ * without incrementing the count (Snip, ToolSearch). They remain visible
58
58
  * in verbose mode via the groupMessages iteration.
59
59
  */
60
60
  isAbsorbedSilently: boolean
@@ -212,7 +212,7 @@ export function getToolSearchOrReadInfo(
212
212
  }
213
213
  // The tool's isSearchOrReadCommand method handles its own input validation via safeParse,
214
214
  // so passing the raw input is safe. The type assertion is necessary because Tool[] uses
215
- // the default generic which expects { [x: string]: any }, but we receive unknown at runtime.
215
+ // the default generic expects a loose record, but we receive unknown at runtime.
216
216
  const result = tool.isSearchOrReadCommand(
217
217
  toolInput as { [x: string]: unknown },
218
218
  )
@@ -481,7 +481,7 @@ export function getToolUseIdsFromCollapsedGroup(
481
481
  }
482
482
 
483
483
  /**
484
- * Check if any tool in a collapsed group is in progress.
484
+ * Check if a tool in a collapsed group is in progress.
485
485
  */
486
486
  export function hasAnyToolInProgress(
487
487
  message: CollapsedReadSearchGroup,
@@ -140,7 +140,7 @@ export async function readCronTasks(dir?: string): Promise<CronTask[]> {
140
140
  }
141
141
 
142
142
  /**
143
- * Sync check for whether the cron file has any valid tasks. Used by
143
+ * Sync check for whether the cron file includes valid tasks. Used by
144
144
  * cronScheduler.start() to decide whether to auto-enable. One file read.
145
145
  */
146
146
  export function hasCronTasksSync(dir?: string): boolean {
@@ -109,7 +109,7 @@ export function execFileNoThrowWithCwd(
109
109
  // Use execa for cross-platform .bat/.cmd compatibility on Windows
110
110
  execa(file, args, {
111
111
  maxBuffer,
112
- signal: abortSignal,
112
+ cancelSignal: abortSignal,
113
113
  timeout: finalTimeout,
114
114
  cwd: finalCwd,
115
115
  env: finalEnv,
@@ -1,44 +1,22 @@
1
1
  // [P0 reconstructed · rebuild-stubs.ts · symbol-complete stub]
2
2
  // Aggregated from every consumer import across src/.
3
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import { createStub } from '../../stubs/any-stub'
4
4
 
5
- const __noop = (..._args: unknown[]): any => undefined as any;
6
- const __stub: any = new Proxy(function () {} as any, {
7
- get(_t, p) {
8
- if (p === Symbol.toPrimitive) return () => ""
9
- if (p === Symbol.iterator) return function* () {}
10
- if (p === Symbol.asyncIterator) return async function* () {}
11
- if (p === Symbol.toStringTag) return "Stub"
12
- if (p === Symbol.for("nodejs.util.inspect.custom")) return () => "<Stub>"
13
- if (p === "inspect") return () => "<Stub>"
14
- if (p === "then") return undefined
15
- if (p === "toString") return () => ""
16
- if (p === "valueOf") return () => undefined
17
- if (p === "toJSON") return () => null
18
- if (p === "length") return 0
19
- if (p === "name") return "Stub"
20
- if (p === "message") return ""
21
- if (p === "stack") return ""
22
- if (p === "constructor") return Object
23
- return __stub
24
- },
25
- apply() { return __stub },
26
- construct() { return __stub },
27
- });
5
+ const __stub = createStub()
28
6
 
29
- export type DEFAULT_UPLOAD_CONCURRENCY = any;
30
- export const DEFAULT_UPLOAD_CONCURRENCY: any = __stub;
31
- export type FILE_COUNT_LIMIT = any;
32
- export const FILE_COUNT_LIMIT: any = __stub;
33
- export type FailedPersistence = any;
34
- export const FailedPersistence: any = __stub;
35
- export type FilesPersistedEventData = any;
36
- export const FilesPersistedEventData: any = __stub;
37
- export type OUTPUTS_SUBDIR = any;
38
- export const OUTPUTS_SUBDIR: any = __stub;
39
- export type PersistedFile = any;
40
- export const PersistedFile: any = __stub;
41
- export type TurnStartTime = any;
42
- export const TurnStartTime: any = __stub;
7
+ export type DEFAULT_UPLOAD_CONCURRENCY = unknown;
8
+ export const DEFAULT_UPLOAD_CONCURRENCY = __stub;
9
+ export type FILE_COUNT_LIMIT = unknown;
10
+ export const FILE_COUNT_LIMIT = __stub;
11
+ export type FailedPersistence = unknown;
12
+ export const FailedPersistence = __stub;
13
+ export type FilesPersistedEventData = unknown;
14
+ export const FilesPersistedEventData = __stub;
15
+ export type OUTPUTS_SUBDIR = unknown;
16
+ export const OUTPUTS_SUBDIR = __stub;
17
+ export type PersistedFile = unknown;
18
+ export const PersistedFile = __stub;
19
+ export type TurnStartTime = unknown;
20
+ export const TurnStartTime = __stub;
43
21
 
44
22
  export default __stub;
@@ -18,7 +18,7 @@ import {
18
18
  type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
19
19
  logEvent,
20
20
  } from '../services/analytics/index.js'
21
- import { accumulateUsage, updateUsage } from '../services/api/claude.js'
21
+ import { accumulateUsage, updateUsage } from '../services/api/ummaya.js'
22
22
  import { EMPTY_USAGE, type NonNullableUsage } from '../services/api/logging.js'
23
23
  import type { ToolUseContext } from '../Tool.js'
24
24
  import type { AgentDefinition } from '../tools/AgentTool/loadAgentsDir.js'
@@ -197,7 +197,7 @@ function forceExit(exitCode: number): never {
197
197
  failsafeTimer = undefined
198
198
  }
199
199
  // Drain stdin LAST, right before exit. cleanupTerminalModes() sent
200
- // DISABLE_MOUSE_TRACKING early, but the terminal round-trip plus any
200
+ // DISABLE_MOUSE_TRACKING early, but the terminal round-trip plus queued
201
201
  // events already in flight means bytes can arrive during the seconds
202
202
  // of async cleanup between then and now. Draining here catches them.
203
203
  // Use the Ink class method (not the standalone drainStdin()) so we
@@ -240,7 +240,7 @@ export const setupGracefulShutdown = memoize(() => {
240
240
  // the signal then falls back to its default action (terminate) and our
241
241
  // process.on('SIGTERM') handler never runs.
242
242
  //
243
- // Trigger: any short-lived signal-exit v4 subscriber (e.g. execa per child
243
+ // Trigger: a short-lived signal-exit v4 subscriber (e.g. execa per child
244
244
  // process, or an Ink instance that unmounts). When its unsubscribe runs and
245
245
  // it was the last v4 subscriber, v4.unload() calls removeListener on every
246
246
  // signal in its list (SIGTERM, SIGINT, SIGHUP, …), tripping the Bun bug and
@@ -380,7 +380,7 @@ export function resetShutdownState(): void {
380
380
  }
381
381
 
382
382
  /**
383
- * Returns the in-flight shutdown promise, if any. Only for use in tests
383
+ * Returns the in-flight shutdown promise when present. Only for use in tests
384
384
  * to await completion before restoring mocks.
385
385
  */
386
386
  export function getPendingShutdownForTesting(): Promise<void> | undefined {
@@ -428,7 +428,7 @@ export async function gracefulShutdown(
428
428
  // Set the exit code that will be used when process naturally exits
429
429
  process.exitCode = exitCode
430
430
 
431
- // Exit alt screen and print resume hint FIRST, before any async operations.
431
+ // Exit alt screen and print resume hint FIRST, before async operations.
432
432
  // This ensures the hint is visible even if the process is killed during
433
433
  // cleanup (e.g., SIGKILL during macOS reboot). Without this, the resume
434
434
  // hint would only appear after cleanup functions, hooks, and analytics
@@ -22,6 +22,15 @@ import { getFsImplementation } from './fsOperations.js'
22
22
  import { logError } from './log.js'
23
23
  import { jsonStringify } from './slowOperations.js'
24
24
 
25
+ declare global {
26
+ namespace NodeJS {
27
+ interface Process {
28
+ _getActiveHandles(): unknown[]
29
+ _getActiveRequests(): unknown[]
30
+ }
31
+ }
32
+ }
33
+
25
34
  export type HeapDumpResult = {
26
35
  success: boolean
27
36
  heapPath?: string
@@ -103,12 +112,8 @@ export async function captureMemoryDiagnostics(
103
112
  }
104
113
 
105
114
  // Get active handles/requests count (these are internal APIs but stable)
106
- const activeHandles = (
107
- process as unknown as { _getActiveHandles: () => unknown[] }
108
- )._getActiveHandles().length
109
- const activeRequests = (
110
- process as unknown as { _getActiveRequests: () => unknown[] }
111
- )._getActiveRequests().length
115
+ const activeHandles = process._getActiveHandles().length
116
+ const activeRequests = process._getActiveRequests().length
112
117
 
113
118
  // Try to count open file descriptors (Linux/macOS)
114
119
  let openFileDescriptors: number | undefined
@@ -287,8 +292,7 @@ async function writeHeapSnapshot(filepath: string): Promise<void> {
287
292
  // Use synchronous I/O despite potentially large filesize so that we avoid cloning the string for cross-thread usage.
288
293
  //
289
294
  /* eslint-disable custom-rules/no-sync-fs -- intentionally sync to avoid cloning large heap snapshot string for cross-thread usage */
290
- // @ts-expect-error 2nd argument is in the next version of Bun
291
- writeFileSync(filepath, Bun.generateHeapSnapshot('v8', 'arraybuffer'), {
295
+ writeFileSync(filepath, new Uint8Array(Bun.generateHeapSnapshot('v8', 'arraybuffer')), {
292
296
  mode: 0o600,
293
297
  })
294
298
  /* eslint-enable custom-rules/no-sync-fs */
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from 'crypto'
2
2
  import type { QuerySource } from '../../constants/querySource.js'
3
- import { queryModelWithoutStreaming } from '../../services/api/claude.js'
3
+ import { queryModelWithoutStreaming } from '../../services/api/ummaya.js'
4
4
  import type { Message } from '../../types/message.js'
5
5
  import { createAbortController } from '../../utils/abortController.js'
6
6
  import { logError } from '../../utils/log.js'
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from 'crypto'
2
2
  import type { HookEvent } from 'src/entrypoints/agentSdkTypes.js'
3
- import { queryModelWithoutStreaming } from '../../services/api/claude.js'
3
+ import { queryModelWithoutStreaming } from '../../services/api/ummaya.js'
4
4
  import type { ToolUseContext } from '../../Tool.js'
5
5
  import type { Message } from '../../types/message.js'
6
6
  import { createAttachmentMessage } from '../attachments.js'
@@ -6,7 +6,7 @@ import {
6
6
  type AnalyticsMetadata_I_VERIFIED_THIS_IS_PII_TAGGED,
7
7
  logEvent,
8
8
  } from '../../services/analytics/index.js'
9
- import { queryModelWithoutStreaming } from '../../services/api/claude.js'
9
+ import { queryModelWithoutStreaming } from '../../services/api/ummaya.js'
10
10
  import { getEmptyToolPermissionContext } from '../../Tool.js'
11
11
  import type { Message } from '../../types/message.js'
12
12
  import { createAbortController } from '../abortController.js'
@@ -1,4 +1,4 @@
1
- import { queryHaiku } from '../../services/api/claude.js'
1
+ import { queryHaiku } from '../../services/api/ummaya.js'
2
2
  import { logError } from '../log.js'
3
3
  import { extractTextContent } from '../messages.js'
4
4
  import { asSystemPrompt } from '../systemPromptType.js'
@@ -432,6 +432,24 @@ export function createAssistantMessage({
432
432
  })
433
433
  }
434
434
 
435
+ export function finalizeStreamingAssistantMessage(params: {
436
+ readonly messages: readonly Message[]
437
+ readonly streamingText: string | null
438
+ readonly turnStartMessageCount: number
439
+ }): readonly Message[] {
440
+ const { messages, streamingText, turnStartMessageCount } = params
441
+ if (streamingText === null || streamingText.trim() === '') {
442
+ return messages
443
+ }
444
+
445
+ const turnMessages = messages.slice(turnStartMessageCount)
446
+ if (turnMessages.some(message => message.type === 'assistant')) {
447
+ return messages
448
+ }
449
+
450
+ return [...messages, createAssistantMessage({ content: streamingText })]
451
+ }
452
+
435
453
  export function createAssistantAPIErrorMessage({
436
454
  content,
437
455
  apiError,
@@ -15,7 +15,7 @@
15
15
  // - copyFile(src, dest, COPYFILE_EXCL) — fails if dest already exists;
16
16
  // skips rather than overwriting.
17
17
  // - fsync(dest fd) — durability before unlink.
18
- // - --prune: any error during unlink phase throws + aborts (no partial-prune).
18
+ // - --prune: an unlink-phase error throws + aborts (no partial-prune).
19
19
  // - src JSONL never truncated: if copyFile throws, src is untouched.
20
20
  //
21
21
  // Zero new runtime dependencies (AGENTS.md hard rule).
@@ -33,7 +33,7 @@ import { getUmmayaSessionsDir } from './ummayaPaths.js'
33
33
  export interface MigrateSessionsOpts {
34
34
  /**
35
35
  * When true, unlink each successfully copied source file after fsync.
36
- * If any unlink fails, the entire prune phase aborts and throws — no
36
+ * If an unlink fails, the entire prune phase aborts and throws — no
37
37
  * partial-prune state is left.
38
38
  */
39
39
  prune?: boolean
@@ -248,7 +248,7 @@ export async function migrateSessions(
248
248
  }
249
249
 
250
250
  // --- Prune phase (only runs when prune: true) ---
251
- // Invariant: any unlink failure aborts the entire prune phase and throws.
251
+ // Invariant: unlink failure aborts the entire prune phase and throws.
252
252
  // This prevents partial-prune state.
253
253
  if (prune && copied.length > 0) {
254
254
  for (const src of copied) {
@@ -1,5 +1,5 @@
1
1
  // UMMAYA Epic #2112: legacy model-dispatch matrix removed; collapsed to K-EXAONE single branch.
2
- // Public function signatures preserved per FR-006 caller-reach rule (callers in services/api/claude.ts,
2
+ // Public function signatures preserved per FR-006 caller-reach rule (callers in services/api/ummaya.ts,
3
3
  // memdir/findRelevantMemories.ts, utils/attachments.ts, commands/insights.ts, services/tokenEstimation.ts,
4
4
  // components/messages/AssistantTextMessage.tsx are bucket B — kept alive until P2 issue #2147 lands).
5
5
  //
@@ -77,19 +77,19 @@ export function getBestModel(): ModelName {
77
77
  return getDefaultMainLoopModel()
78
78
  }
79
79
 
80
- // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/claude.ts
81
- // import-graph stability. Removed together with services/api/claude.ts in Phase P2.
80
+ // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/ummaya.ts
81
+ // import-graph stability. Removed together with services/api/ummaya.ts in Phase P2.
82
82
  export function getDefaultOpusModel(): ModelName {
83
83
  return getDefaultMainLoopModel()
84
84
  }
85
85
 
86
- // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/claude.ts
86
+ // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/ummaya.ts
87
87
  // import-graph stability.
88
88
  export function getDefaultSonnetModel(): ModelName {
89
89
  return getDefaultMainLoopModel()
90
90
  }
91
91
 
92
- // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/claude.ts
92
+ // [Deferred to P2 — issue #2147]: thin alias preserved for services/api/ummaya.ts
93
93
  // import-graph stability.
94
94
  export function getDefaultHaikuModel(): ModelName {
95
95
  return getDefaultMainLoopModel()
@@ -130,7 +130,7 @@ export function getDefaultMainLoopModel(): ModelName {
130
130
  * fail-safe single branch keyed on K-EXAONE detection.
131
131
  *
132
132
  * [Deferred to P2 — issue #2147]: this function is preserved as an export for
133
- * services/api/claude.ts callers; removed together with that file in Phase P2.
133
+ * services/api/ummaya.ts callers; removed together with that file in Phase P2.
134
134
  */
135
135
  export function firstPartyNameToCanonical(name: ModelName): ModelShortName {
136
136
  const lowered = name.toLowerCase()
@@ -13,7 +13,7 @@ import {
13
13
  import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
14
14
  import { logEvent } from '../../services/analytics/index.js'
15
15
  import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/metadata.js'
16
- import { getCacheControl } from '../../services/api/claude.js'
16
+ import { getCacheControl } from '../../services/api/ummaya.js'
17
17
  import { parsePromptTooLongTokenCounts } from '../../services/api/errors.js'
18
18
  import { getDefaultMaxRetries } from '../../services/api/withRetry.js'
19
19
  import type { Tool, ToolPermissionContext, Tools } from '../../Tool.js'
@@ -69,7 +69,7 @@ export async function installPluginsForHeadless(): Promise<boolean> {
69
69
 
70
70
  // Declared now includes an implicit claude-plugins-official entry when any
71
71
  // enabled plugin references it (see getDeclaredMarketplaces). This routes
72
- // the official marketplace through the same reconciler path as any other
72
+ // the official marketplace through the same reconciler path as the others
73
73
  // which composes correctly with CLAUDE_CODE_PLUGIN_SEED_DIR: seed registers
74
74
  // it in known_marketplaces.json, reconciler diff sees it as upToDate, no clone.
75
75
  const declaredCount = Object.keys(getDeclaredMarketplaces()).length
@@ -434,7 +434,7 @@ export async function extractMcpServersFromPlugins(
434
434
  * config (assistant-mode channels). Channel-specific wins on collision so
435
435
  * plugins that declare the same key at both levels get the more specific value.
436
436
  *
437
- * Returns undefined when neither source has anything — resolvePluginMcpEnvironment
437
+ * Returns undefined when neither source provides values — resolvePluginMcpEnvironment
438
438
  * skips substituteUserConfigVariables in that case.
439
439
  */
440
440
  function buildMcpUserConfig(
@@ -132,7 +132,7 @@ function serverSecretsKey(pluginId: string, serverName: string): string {
132
132
  * collision shouldn't happen, but if a user hand-edits settings.json we
133
133
  * trust the more secure source.
134
134
  *
135
- * Returns null only if NEITHER source has anything — callers skip
135
+ * Returns null only if NEITHER source provides values — callers skip
136
136
  * ${user_config.X} substitution in that case.
137
137
  *
138
138
  * @param pluginId - Plugin identifier in "plugin@marketplace" format
@@ -680,7 +680,7 @@ async function installFromGitHub(
680
680
  /**
681
681
  * Resolve a git-subdir `url` field to a clonable git URL.
682
682
  * Accepts GitHub owner/repo shorthand (converted to ssh or https depending on
683
- * CLAUDE_CODE_REMOTE) or any URL that passes validateGitUrl (https, http,
683
+ * CLAUDE_CODE_REMOTE) or a URL that passes validateGitUrl (https, http,
684
684
  * file, git@ ssh).
685
685
  */
686
686
  function resolveGitSubdirUrl(url: string): string {
@@ -1335,7 +1335,7 @@ async function validatePluginPaths(
1335
1335
  * - Hooks: Loads from hooks/hooks.json if present
1336
1336
  *
1337
1337
  * The function is tolerant of missing components - a plugin can have
1338
- * any combination of the above directories/files. Missing component files
1338
+ * whichever combination of the above directories/files exists. Missing component files
1339
1339
  * are reported as errors but don't prevent plugin loading.
1340
1340
  *
1341
1341
  * @param pluginPath - Absolute path to the plugin directory
@@ -1343,7 +1343,7 @@ async function validatePluginPaths(
1343
1343
  * @param enabled - Initial enabled state (may be overridden by settings)
1344
1344
  * @param fallbackName - Name to use if manifest doesn't specify one
1345
1345
  * @param strict - When true, adds errors for duplicate hook files (default: true)
1346
- * @returns Object containing the LoadedPlugin and any errors encountered
1346
+ * @returns Object containing the LoadedPlugin and errors encountered
1347
1347
  */
1348
1348
  export async function createPluginFromPath(
1349
1349
  pluginPath: string,
@@ -1464,7 +1464,7 @@ export async function createPluginFromPath(
1464
1464
  if (validPaths.length > 0) {
1465
1465
  plugin.commandsPaths = validPaths
1466
1466
  }
1467
- // Set commandsMetadata if there are any commands (file-based or inline)
1467
+ // Set commandsMetadata when commands exist (file-based or inline)
1468
1468
  if (Object.keys(commandsMetadata).length > 0) {
1469
1469
  plugin.commandsMetadata = commandsMetadata
1470
1470
  }
@@ -1928,7 +1928,7 @@ async function loadPluginsFromMarketplaces({
1928
1928
  // loads the plugin unchecked — a silent fail-open. This guard restores
1929
1929
  // fail-closed: unknown source + active policy → block.
1930
1930
  //
1931
- // Allowlist: any value (including []) is active — empty allowlist = deny all.
1931
+ // Allowlist: a configured value (including []) is active — empty allowlist = deny all.
1932
1932
  // Blocklist: empty [] is a semantic no-op — only non-empty counts as active.
1933
1933
  const strictAllowlist = getStrictKnownMarketplaces()
1934
1934
  const blocklist = getBlockedMarketplaces()
@@ -2185,7 +2185,7 @@ async function loadPluginFromMarketplaceEntryCacheOnly(
2185
2185
  * omits `version`. Avoids re-cloning external plugins just to discover the
2186
2186
  * version we already recorded at install time.
2187
2187
  *
2188
- * Returns both the loaded plugin and any errors encountered during loading.
2188
+ * Returns both the loaded plugin and errors encountered during loading.
2189
2189
  * Errors include missing component files and hook load failures.
2190
2190
  */
2191
2191
  async function loadPluginFromMarketplaceEntry(
@@ -2923,7 +2923,7 @@ async function finishLoadingPluginFromPath(
2923
2923
  * They appear with source='plugin-name@inline' and are always enabled for the current session.
2924
2924
  *
2925
2925
  * @param sessionPluginPaths - Array of plugin directory paths from CLI
2926
- * @returns LoadedPlugin objects and any errors encountered
2926
+ * @returns LoadedPlugin objects and encountered errors
2927
2927
  */
2928
2928
  async function loadSessionOnlyPlugins(
2929
2929
  sessionPluginPaths: Array<string>,
@@ -3056,7 +3056,7 @@ export function mergePluginSources(sources: {
3056
3056
  })
3057
3057
  // Session first, then non-overridden marketplace, then builtin.
3058
3058
  // Downstream first-match consumers see session plugins before
3059
- // installed ones for any that slipped past the name filter.
3059
+ // installed ones for entries that slipped past the name filter.
3060
3060
  return {
3061
3061
  plugins: [...sessionPlugins, ...marketplacePlugins, ...sources.builtin],
3062
3062
  errors,
@@ -4,6 +4,8 @@
4
4
  // CC consumer references (envUtils.ts:142) 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
+ export function checkProtectedNamespace(): boolean {
8
+ return false
9
+ }
10
+
11
+ export default checkProtectedNamespace