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
@@ -1,418 +1,26 @@
1
- import { randomUUID } from 'crypto'
2
- import { APIUserAbortError } from 'src/sdk-compat.js'
3
- import {
4
- getOrCreateUmmayaBridge,
5
- getUmmayaBridgeSessionId,
6
- } from '../../ipc/bridgeSingleton.js'
7
- import type {
8
- ChatRequestFrame,
9
- IPCFrame,
10
- } from '../../ipc/frames.generated.js'
11
- import { getToolDefinitionsForFrame } from '../../query/toolSerialization.js'
12
- import { SYNTHETIC_MODEL } from '../../utils/messageText.js'
13
- import { createAssistantMessage } from '../../utils/assistantMessageFactories.js'
14
- import { buildChatMessagesFromTranscript } from '../../query/chatMessagesBuilder.js'
15
- import { assertFriendliApiKeyForUse } from '../../utils/auth.js'
16
-
17
- export async function* queryModelWithStreaming(params: {
18
- messages: readonly unknown[]
19
- systemPrompt: unknown
20
- thinkingConfig?: unknown
21
- tools?: unknown
22
- signal?: AbortSignal
23
- options?: { model?: string; querySource?: string; [k: string]: unknown }
24
- }): AsyncGenerator<unknown> {
25
- const { messages, signal } = params
26
- assertFriendliApiKeyForUse()
27
-
28
- const correlationId = randomUUID()
29
- const messageUuid = randomUUID()
30
- const innerMessageId = randomUUID()
31
- const turnStartedAt = performance.now()
32
- const chatMessages = buildChatMessagesFromTranscript(messages)
33
- const bridge = getOrCreateUmmayaBridge()
34
- const sessionId = getUmmayaBridgeSessionId()
35
- const tools = await getToolDefinitionsForFrame()
36
-
37
- const frame: ChatRequestFrame = {
38
- session_id: sessionId,
39
- correlation_id: correlationId,
40
- ts: new Date().toISOString(),
41
- role: 'tui',
42
- kind: 'chat_request',
43
- messages: chatMessages as ChatRequestFrame['messages'],
44
- tools: tools as ChatRequestFrame['tools'],
45
- }
46
-
47
- yield { type: 'stream_request_start' as const }
48
-
49
- const sent = bridge.send(frame as unknown as IPCFrame)
50
- if (!sent) {
51
- throw new Error('UMMAYA bridge send failed (backend exited)')
52
- }
53
-
54
- let accumulated = ''
55
- const persistThinking = process.env.UMMAYA_PERSIST_THINKING === '1'
56
- let accumulatedThinking = ''
57
- let messageStartEmitted = false
58
- let nextContentBlockIndex = 0
59
- let textBlockIndex: number | null = null
60
- let textBlockStopped = false
61
- let thinkingBlockIndex: number | null = null
62
- let thinkingBlockStopped = false
63
- const pendingContentBlocks: Array<{
64
- type: 'tool_use'
65
- id: string
66
- name: string
67
- input: unknown
68
- }> = []
69
-
70
- const hasAssistantPayload = (): boolean =>
71
- accumulated.trimStart().length > 0 ||
72
- pendingContentBlocks.length > 0 ||
73
- (persistThinking && accumulatedThinking.length > 0)
74
-
75
- for await (const f of bridge.frames()) {
76
- if (signal?.aborted) {
77
- throw new APIUserAbortError()
78
- }
79
-
80
- const frameAny = f as {
81
- kind?: string
82
- correlation_id?: string
83
- delta?: string
84
- thinking?: string
85
- done?: boolean
86
- message?: string
87
- call_id?: string
88
- name?: string
89
- arguments?: unknown
90
- envelope?: { kind?: string; [k: string]: unknown }
91
- }
92
-
93
- if (frameAny.correlation_id !== correlationId) continue
94
-
95
- if (frameAny.kind === 'assistant_chunk') {
96
- const deltaText = frameAny.delta ?? ''
97
- const thinkingText = frameAny.thinking ?? ''
98
-
99
- if (!messageStartEmitted) {
100
- const ttftMs = performance.now() - turnStartedAt
101
- yield {
102
- type: 'stream_event' as const,
103
- event: {
104
- type: 'message_start' as const,
105
- message: {
106
- id: innerMessageId,
107
- type: 'message',
108
- role: 'assistant',
109
- content: [],
110
- model: SYNTHETIC_MODEL,
111
- stop_reason: null,
112
- stop_sequence: null,
113
- usage: {
114
- input_tokens: 0,
115
- output_tokens: 0,
116
- cache_creation_input_tokens: 0,
117
- cache_read_input_tokens: 0,
118
- },
119
- },
120
- },
121
- ttftMs,
122
- }
123
- messageStartEmitted = true
124
- }
125
- if (thinkingText.length > 0 && thinkingBlockIndex === null) {
126
- yield {
127
- type: 'stream_event' as const,
128
- event: {
129
- type: 'content_block_start' as const,
130
- index: nextContentBlockIndex,
131
- content_block: { type: 'thinking' as const, thinking: '' },
132
- },
133
- }
134
- thinkingBlockIndex = nextContentBlockIndex
135
- nextContentBlockIndex += 1
136
- }
137
-
138
- if (thinkingText.length > 0) {
139
- if (persistThinking) {
140
- accumulatedThinking += thinkingText
141
- }
142
- yield {
143
- type: 'stream_event' as const,
144
- event: {
145
- type: 'content_block_delta' as const,
146
- index: thinkingBlockIndex ?? 0,
147
- delta: { type: 'thinking_delta' as const, thinking: thinkingText },
148
- },
149
- }
150
- }
151
-
152
- accumulated += deltaText
153
- if (deltaText.length > 0) {
154
- if (thinkingBlockIndex !== null && !thinkingBlockStopped) {
155
- yield {
156
- type: 'stream_event' as const,
157
- event: {
158
- type: 'content_block_stop' as const,
159
- index: thinkingBlockIndex,
160
- },
161
- }
162
- thinkingBlockStopped = true
163
- }
164
- if (textBlockIndex === null) {
165
- yield {
166
- type: 'stream_event' as const,
167
- event: {
168
- type: 'content_block_start' as const,
169
- index: nextContentBlockIndex,
170
- content_block: { type: 'text' as const, text: '' },
171
- },
172
- }
173
- textBlockIndex = nextContentBlockIndex
174
- nextContentBlockIndex += 1
175
- }
176
- yield {
177
- type: 'stream_event' as const,
178
- event: {
179
- type: 'content_block_delta' as const,
180
- index: textBlockIndex,
181
- delta: { type: 'text_delta' as const, text: deltaText },
182
- },
183
- }
184
- }
185
-
186
- if (frameAny.done) {
187
- if (thinkingBlockIndex !== null && !thinkingBlockStopped) {
188
- yield {
189
- type: 'stream_event' as const,
190
- event: { type: 'content_block_stop' as const, index: thinkingBlockIndex },
191
- }
192
- thinkingBlockStopped = true
193
- }
194
- if (textBlockIndex !== null && !textBlockStopped) {
195
- yield {
196
- type: 'stream_event' as const,
197
- event: { type: 'content_block_stop' as const, index: textBlockIndex },
198
- }
199
- textBlockStopped = true
200
- }
201
- if (hasAssistantPayload() || !messageStartEmitted) {
202
- const finalMessage = createFinalAssistantMessage({
203
- accumulated,
204
- accumulatedThinking,
205
- messageUuid,
206
- innerMessageId,
207
- pendingContentBlocks,
208
- persistThinking,
209
- })
210
- yield finalMessage
211
- }
212
- yield {
213
- type: 'stream_event' as const,
214
- event: {
215
- type: 'message_delta' as const,
216
- delta: { stop_reason: 'end_turn', stop_sequence: null },
217
- usage: { output_tokens: 0 },
218
- },
219
- }
220
- yield {
221
- type: 'stream_event' as const,
222
- event: { type: 'message_stop' as const },
223
- }
224
- return
225
- }
226
- } else if (frameAny.kind === 'tool_call') {
227
- if (!messageStartEmitted) {
228
- const ttftMs = performance.now() - turnStartedAt
229
- yield {
230
- type: 'stream_event' as const,
231
- event: {
232
- type: 'message_start' as const,
233
- message: {
234
- id: innerMessageId,
235
- type: 'message',
236
- role: 'assistant',
237
- content: [],
238
- model: SYNTHETIC_MODEL,
239
- stop_reason: null,
240
- stop_sequence: null,
241
- usage: {
242
- input_tokens: 0,
243
- output_tokens: 0,
244
- cache_creation_input_tokens: 0,
245
- cache_read_input_tokens: 0,
246
- },
247
- },
248
- },
249
- ttftMs,
250
- }
251
- messageStartEmitted = true
252
- }
253
- if (thinkingBlockIndex !== null && !thinkingBlockStopped) {
254
- yield {
255
- type: 'stream_event' as const,
256
- event: { type: 'content_block_stop' as const, index: thinkingBlockIndex },
257
- }
258
- thinkingBlockStopped = true
259
- }
260
- if (textBlockIndex !== null && !textBlockStopped) {
261
- yield {
262
- type: 'stream_event' as const,
263
- event: { type: 'content_block_stop' as const, index: textBlockIndex },
264
- }
265
- textBlockStopped = true
266
- }
267
- const toolUseBlock = {
268
- type: 'tool_use' as const,
269
- id: frameAny.call_id ?? '',
270
- name: frameAny.name ?? '(unknown tool)',
271
- input: frameAny.arguments ?? {},
272
- }
273
-
274
- pendingContentBlocks.push(toolUseBlock)
275
- const toolBlockIndex = nextContentBlockIndex
276
- nextContentBlockIndex += 1
277
-
278
- yield {
279
- type: 'stream_event' as const,
280
- event: {
281
- type: 'content_block_start' as const,
282
- index: toolBlockIndex,
283
- content_block: toolUseBlock,
284
- },
285
- }
286
- yield {
287
- type: 'stream_event' as const,
288
- event: { type: 'content_block_stop' as const, index: toolBlockIndex },
289
- }
290
-
291
- yield createFinalAssistantMessage({
292
- accumulated,
293
- accumulatedThinking,
294
- messageUuid,
295
- innerMessageId,
296
- pendingContentBlocks,
297
- persistThinking,
298
- })
299
- yield {
300
- type: 'stream_event' as const,
301
- event: {
302
- type: 'message_delta' as const,
303
- delta: { stop_reason: 'tool_use', stop_sequence: null },
304
- usage: { output_tokens: 0 },
305
- },
306
- }
307
- yield {
308
- type: 'stream_event' as const,
309
- event: { type: 'message_stop' as const },
310
- }
311
- return
312
- } else if (frameAny.kind === 'error') {
313
- const reason = frameAny.message ?? 'UMMAYA backend error'
314
- yield createAssistantMessage({ content: `[UMMAYA backend error] ${reason}` })
315
- if (thinkingBlockIndex !== null && !thinkingBlockStopped) {
316
- yield {
317
- type: 'stream_event' as const,
318
- event: { type: 'content_block_stop' as const, index: thinkingBlockIndex },
319
- }
320
- thinkingBlockStopped = true
321
- }
322
- if (textBlockIndex !== null && !textBlockStopped) {
323
- yield {
324
- type: 'stream_event' as const,
325
- event: { type: 'content_block_stop' as const, index: textBlockIndex },
326
- }
327
- textBlockStopped = true
328
- }
329
- if (messageStartEmitted) {
330
- yield {
331
- type: 'stream_event' as const,
332
- event: { type: 'message_stop' as const },
333
- }
334
- }
335
- return
336
- }
337
- }
338
-
339
- if (hasAssistantPayload() || !messageStartEmitted) {
340
- yield createFinalAssistantMessage({
341
- accumulated,
342
- accumulatedThinking,
343
- messageUuid,
344
- innerMessageId,
345
- pendingContentBlocks,
346
- persistThinking,
347
- })
348
- }
349
- if (messageStartEmitted) {
350
- if (thinkingBlockIndex !== null && !thinkingBlockStopped) {
351
- yield {
352
- type: 'stream_event' as const,
353
- event: { type: 'content_block_stop' as const, index: thinkingBlockIndex },
354
- }
355
- }
356
- if (textBlockIndex !== null && !textBlockStopped) {
357
- yield {
358
- type: 'stream_event' as const,
359
- event: { type: 'content_block_stop' as const, index: textBlockIndex },
360
- }
361
- }
362
- yield {
363
- type: 'stream_event' as const,
364
- event: { type: 'message_stop' as const },
365
- }
366
- }
367
- }
368
-
369
- function createFinalAssistantMessage({
370
- accumulated,
371
- accumulatedThinking,
372
- messageUuid,
373
- innerMessageId,
374
- pendingContentBlocks,
375
- persistThinking,
376
- }: {
377
- accumulated: string
378
- accumulatedThinking: string
379
- messageUuid: string
380
- innerMessageId: string
381
- pendingContentBlocks: Array<{
382
- type: 'tool_use'
383
- id: string
384
- name: string
385
- input: unknown
386
- }>
387
- persistThinking: boolean
388
- }): unknown {
389
- const trimmedText = accumulated.trimStart()
390
- type AssistantBlock =
391
- | { type: 'thinking'; thinking: string }
392
- | { type: 'text'; text: string }
393
- | { type: 'tool_use'; id: string; name: string; input: unknown }
394
-
395
- const blocks: AssistantBlock[] = []
396
- if (persistThinking && accumulatedThinking.length > 0) {
397
- blocks.push({ type: 'thinking', thinking: accumulatedThinking })
398
- }
399
- if (trimmedText.length > 0) {
400
- blocks.push({ type: 'text', text: trimmedText })
401
- }
402
- for (const toolUse of pendingContentBlocks) {
403
- blocks.push(toolUse)
404
- }
405
-
406
- const finalContent =
407
- blocks.length > 0
408
- ? (blocks as Parameters<typeof createAssistantMessage>[0]['content'])
409
- : trimmedText
410
-
411
- const finalMessage = createAssistantMessage({ content: finalContent }) as {
412
- uuid: string
413
- message: { id: string }
414
- }
415
- finalMessage.uuid = messageUuid
416
- finalMessage.message.id = innerMessageId
417
- return finalMessage
418
- }
1
+ export {
2
+ addCacheBreakpoints,
3
+ assistantMessageToMessageParam,
4
+ buildSystemPromptBlocks,
5
+ getCacheControl,
6
+ getPromptCachingEnabled,
7
+ stripExcessMediaItems,
8
+ userMessageToMessageParam,
9
+ } from './ummaya/messages.js'
10
+ export {
11
+ adjustParamsForNonStreaming,
12
+ executeNonStreamingRequest,
13
+ getMaxOutputTokensForModel,
14
+ MAX_NON_STREAMING_TOKENS,
15
+ queryHaiku,
16
+ queryModelWithoutStreaming,
17
+ queryWithModel,
18
+ } from './ummaya/nonStreaming.js'
19
+ export {
20
+ configureTaskBudgetParams,
21
+ getAPIMetadata,
22
+ getExtraBodyParams,
23
+ queryModelWithStreaming,
24
+ verifyApiKey,
25
+ } from './ummaya/provider.js'
26
+ export { accumulateUsage, cleanupStream, updateUsage } from './ummaya/usage.js'
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // UMMAYA keeps Claude Code's query/provider boundary: query.ts owns the
3
3
  // agentic loop and this helper preserves the SDK-shaped retry generator used
4
- // by services/api/claude.ts. Provider-specific retry policy can be widened
4
+ // by services/api/ummaya.ts. Provider-specific retry policy can be widened
5
5
  // later, but the control-flow shape must stay generator-based so query.ts sees
6
6
  // the same stream/system-message contract as the CC restored source.
7
7
 
@@ -2,7 +2,7 @@
2
2
  // Research use — adapted from Claude Code 2.1.88 src/services/awaySummary.ts
3
3
  //
4
4
  // UMMAYA Epic #2077 — awaySummary restored from CC source. Now that
5
- // services/api/claude.ts is restored with queryModelWithoutStreaming routing
5
+ // services/api/ummaya.ts is restored with queryModelWithoutStreaming routing
6
6
  // through the stdio bridge, this file can call it directly as in CC 2.1.88.
7
7
  // Prior stub (Epic #1633) returned null unconditionally.
8
8
 
@@ -14,7 +14,7 @@ import { getAssistantMessageText } from '../utils/messageContent.js'
14
14
  import { createUserMessage } from '../utils/userMessageFactories.js'
15
15
  import { getSmallFastModel } from '../utils/model/model.js'
16
16
  import { asSystemPrompt } from '../utils/systemPromptType.js'
17
- import { queryModelWithoutStreaming } from './api/claude.js'
17
+ import { queryModelWithoutStreaming } from './api/ummaya.js'
18
18
  import { getSessionMemoryContent } from './SessionMemory/sessionMemoryUtils.js'
19
19
 
20
20
  // Recap only needs recent context — truncate to avoid "prompt too long" on
@@ -10,7 +10,7 @@ import { getSmallFastModel } from '../utils/model/model.js'
10
10
  import { isEssentialTrafficOnly } from '../utils/privacyLevel.js'
11
11
  import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from './analytics/index.js'
12
12
  import { logEvent } from './analytics/index.js'
13
- import { getAPIMetadata } from './api/claude.js'
13
+ import { getAPIMetadata } from './api/ummaya.js'
14
14
  import { getAnthropicClient } from './api/client.js'
15
15
  import {
16
16
  processRateLimitHeaders,
@@ -13,7 +13,7 @@ import type { CacheSafeParams } from '../../utils/forkedAgent.js'
13
13
  import { logError } from '../../utils/log.js'
14
14
  import { tokenCountWithEstimation } from '../../utils/tokens.js'
15
15
  import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
16
- import { getMaxOutputTokensForModel } from '../api/claude.js'
16
+ import { getMaxOutputTokensForModel } from '../api/ummaya.js'
17
17
  import { notifyCompaction } from '../api/promptCacheBreakDetection.js'
18
18
  import { setLastSummarizedMessageId } from '../SessionMemory/sessionMemoryUtils.js'
19
19
  import {
@@ -99,7 +99,7 @@ import {
99
99
  import {
100
100
  getMaxOutputTokensForModel,
101
101
  queryModelWithStreaming,
102
- } from '../api/claude.js'
102
+ } from '../api/ummaya.js'
103
103
  import {
104
104
  getPromptTooLongTokenGap,
105
105
  PROMPT_TOO_LONG_ERROR_MESSAGE,
@@ -1,36 +1,14 @@
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 LspServerConfig = any;
30
- export const LspServerConfig: any = __stub;
31
- export type LspServerState = any;
32
- export const LspServerState: any = __stub;
33
- export type ScopedLspServerConfig = any;
34
- export const ScopedLspServerConfig: any = __stub;
7
+ export type LspServerConfig = unknown;
8
+ export const LspServerConfig = __stub;
9
+ export type LspServerState = unknown;
10
+ export const LspServerState = __stub;
11
+ export type ScopedLspServerConfig = unknown;
12
+ export const ScopedLspServerConfig = __stub;
35
13
 
36
14
  export default __stub;
@@ -1,34 +1,12 @@
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 Tip = any;
30
- export const Tip: any = __stub;
31
- export type TipContext = any;
32
- export const TipContext: any = __stub;
7
+ export type Tip = unknown;
8
+ export const Tip = __stub;
9
+ export type TipContext = unknown;
10
+ export const TipContext = __stub;
33
11
 
34
12
  export default __stub;
@@ -23,7 +23,7 @@ import {
23
23
  } from '../utils/model/model.js'
24
24
  import { jsonStringify } from '../utils/slowOperations.js'
25
25
  import { isToolReferenceBlock } from '../utils/toolSearch.js'
26
- import { getAPIMetadata, getExtraBodyParams } from './api/claude.js'
26
+ import { getAPIMetadata, getExtraBodyParams } from './api/ummaya.js'
27
27
  import { getAnthropicClient } from './api/client.js'
28
28
  import { withTokenCountVCR } from './vcr.js'
29
29
 
@@ -2,7 +2,7 @@
2
2
  // Epic γ #2294 · T004 · ToolRegistry boot guard.
3
3
  //
4
4
  // Walks every active registered UMMAYA primitive (find / locate /
5
- // send / check) at process boot and asserts that
5
+ // send / check / document) at process boot and asserts that
6
6
  // each one exposes the full `Tool<>` 10-member surface from
7
7
  // `tui/src/Tool.ts` (byte-identical to CC `Tool.ts`). Fails closed with a
8
8
  // Korean diagnostic if any member is missing.
@@ -22,7 +22,7 @@
22
22
 
23
23
  import type { Tool } from '../../Tool.js'
24
24
 
25
- const PRIMITIVE_NAMES = ['find', 'locate', 'send', 'check'] as const
25
+ const PRIMITIVE_NAMES = ['find', 'locate', 'send', 'check', 'document'] as const
26
26
  export type PrimitiveName = (typeof PRIMITIVE_NAMES)[number]
27
27
 
28
28
  const REQUIRED_MEMBERS = [
@@ -58,8 +58,8 @@ export type BootResult =
58
58
  * structured `BootResult`. Caller decides whether to `process.exit(1)` or
59
59
  * throw — the guard itself has no side effects beyond reading the registry.
60
60
  *
61
- * Performance: O(P × M) where P = number of active primitives (4) and M = required
62
- * member count (9) — bounded at 36 property reads. Wall-clock budget on a
61
+ * Performance: O(P × M) where P = number of active primitives (5) and M = required
62
+ * member count (10) — bounded at 50 property reads. Wall-clock budget on a
63
63
  * developer laptop: ≤ 200 ms (Spec SC-002).
64
64
  */
65
65
  export function verifyBootRegistry(registry: readonly Tool[]): BootResult {
@@ -82,7 +82,7 @@ export function verifyBootRegistry(registry: readonly Tool[]): BootResult {
82
82
  diagnostic:
83
83
  `[UMMAYA][bootGuard] 활성 primitive 중 일부가 ToolRegistry에 등록되지 않았습니다. ` +
84
84
  `누락: ${missingNames.join(', ')}.\n` +
85
- `UMMAYA는 활성 primitive(find/locate/send/check) 모두 등록되어야 부팅을 허용합니다.\n` +
85
+ `UMMAYA는 활성 primitive(find/locate/send/check/document) 모두 등록되어야 부팅을 허용합니다.\n` +
86
86
  `참조: specs/2294-5-primitive-align/contracts/registry-boot-guard.md`,
87
87
  }
88
88
  }
@@ -10,7 +10,7 @@ import { toError } from '../../utils/errors.js'
10
10
  import { logError } from '../../utils/log.js'
11
11
  import { jsonStringify } from '../../utils/slowOperations.js'
12
12
  import { asSystemPrompt } from '../../utils/systemPromptType.js'
13
- import { queryHaiku } from '../api/claude.js'
13
+ import { queryHaiku } from '../api/ummaya.js'
14
14
 
15
15
  const TOOL_USE_SUMMARY_SYSTEM_PROMPT = `Write a short summary label describing what these tool calls accomplished. It appears as a single-line row in a mobile app and truncates around 30 characters, so think git-commit-subject, not sentence.
16
16