ummaya 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -3
- package/bin/ummaya +10 -1
- package/npm-shrinkwrap.json +253 -2
- package/package.json +5 -1
- package/prompts/manifest.yaml +2 -2
- package/prompts/session_guidance_v1.md +3 -1
- package/prompts/system_v1.md +9 -7
- package/pyproject.toml +26 -7
- package/specs/2803-document-production-hardening/contracts/document-tools.schema.json +1043 -0
- package/src/ummaya/_canonical/__init__.py +2 -0
- package/src/ummaya/context/builder.py +17 -11
- package/src/ummaya/engine/engine.py +30 -113
- package/src/ummaya/engine/query.py +20 -0
- package/src/ummaya/evidence/__init__.py +44 -0
- package/src/ummaya/evidence/__main__.py +7 -0
- package/src/ummaya/evidence/dataset_contract.py +193 -0
- package/src/ummaya/evidence/document_authoring_cases.py +33 -0
- package/src/ummaya/evidence/document_harness.py +313 -0
- package/src/ummaya/evidence/document_viewer_ux.py +391 -0
- package/src/ummaya/evidence/gates.py +70 -0
- package/src/ummaya/evidence/json_types.py +20 -0
- package/src/ummaya/evidence/models.py +145 -0
- package/src/ummaya/evidence/output_payload.py +89 -0
- package/src/ummaya/evidence/payload_documents.py +233 -0
- package/src/ummaya/evidence/route_contracts.py +224 -0
- package/src/ummaya/evidence/route_helpers.py +150 -0
- package/src/ummaya/evidence/runner.py +177 -0
- package/src/ummaya/evidence/source_provenance.py +246 -0
- package/src/ummaya/evidence/source_provenance_redaction.py +176 -0
- package/src/ummaya/evidence/task_registry.py +264 -0
- package/src/ummaya/evidence/tool_layer.py +39 -0
- package/src/ummaya/evidence/tool_layer_models.py +151 -0
- package/src/ummaya/ipc/adapter_manifest_emitter.py +26 -10
- package/src/ummaya/ipc/document_intent_normalization.py +185 -0
- package/src/ummaya/ipc/frame_schema.py +52 -5
- package/src/ummaya/ipc/route_diagnostics.py +73 -0
- package/src/ummaya/ipc/stdio.py +2282 -417
- package/src/ummaya/llm/client.py +234 -59
- package/src/ummaya/llm/config.py +8 -3
- package/src/ummaya/llm/reasoning.py +84 -0
- package/src/ummaya/primitives/__init__.py +6 -2
- package/src/ummaya/primitives/delegation.py +1 -1
- package/src/ummaya/primitives/document.py +28 -0
- package/src/ummaya/settings.py +0 -3
- package/src/ummaya/tools/discovery_bridge.py +34 -2
- package/src/ummaya/tools/documents/__init__.py +297 -0
- package/src/ummaya/tools/documents/adapter_registry.py +487 -0
- package/src/ummaya/tools/documents/archive_container_probe.py +167 -0
- package/src/ummaya/tools/documents/artifact_store.py +454 -0
- package/src/ummaya/tools/documents/authoring.py +283 -0
- package/src/ummaya/tools/documents/baselines.py +114 -0
- package/src/ummaya/tools/documents/capability.py +331 -0
- package/src/ummaya/tools/documents/contracts.py +112 -0
- package/src/ummaya/tools/documents/conversion.py +521 -0
- package/src/ummaya/tools/documents/diff.py +275 -0
- package/src/ummaya/tools/documents/engines.py +163 -0
- package/src/ummaya/tools/documents/evaluation.py +291 -0
- package/src/ummaya/tools/documents/explicit_values.py +108 -0
- package/src/ummaya/tools/documents/fixtures.py +174 -0
- package/src/ummaya/tools/documents/format_completion_audit.py +471 -0
- package/src/ummaya/tools/documents/formats/__init__.py +2 -0
- package/src/ummaya/tools/documents/formats/archive.py +528 -0
- package/src/ummaya/tools/documents/formats/base.py +41 -0
- package/src/ummaya/tools/documents/formats/code_file.py +211 -0
- package/src/ummaya/tools/documents/formats/data_file.py +272 -0
- package/src/ummaya/tools/documents/formats/hwp.py +284 -0
- package/src/ummaya/tools/documents/formats/hwpx.py +1837 -0
- package/src/ummaya/tools/documents/formats/odf.py +435 -0
- package/src/ummaya/tools/documents/formats/ooxml.py +1030 -0
- package/src/ummaya/tools/documents/formats/passive.py +766 -0
- package/src/ummaya/tools/documents/formats/pdf.py +702 -0
- package/src/ummaya/tools/documents/formats/text_web.py +268 -0
- package/src/ummaya/tools/documents/hwp_conversion_probe.py +178 -0
- package/src/ummaya/tools/documents/hwp_direct_candidate.py +141 -0
- package/src/ummaya/tools/documents/inspection.py +289 -0
- package/src/ummaya/tools/documents/intake.py +1079 -0
- package/src/ummaya/tools/documents/legacy_office_promotion_probe.py +366 -0
- package/src/ummaya/tools/documents/models.py +1598 -0
- package/src/ummaya/tools/documents/odf_promotion_probe.py +167 -0
- package/src/ummaya/tools/documents/orchestrator.py +96 -0
- package/src/ummaya/tools/documents/passive_capability_probe.py +251 -0
- package/src/ummaya/tools/documents/patch.py +170 -0
- package/src/ummaya/tools/documents/pdfa_conformance.py +284 -0
- package/src/ummaya/tools/documents/pdfa_promotion_probe.py +198 -0
- package/src/ummaya/tools/documents/permissions.py +110 -0
- package/src/ummaya/tools/documents/planner.py +616 -0
- package/src/ummaya/tools/documents/registry.py +2733 -0
- package/src/ummaya/tools/documents/render.py +978 -0
- package/src/ummaya/tools/documents/render_comparison.py +113 -0
- package/src/ummaya/tools/documents/render_comparison_models.py +74 -0
- package/src/ummaya/tools/documents/render_comparison_regions.py +73 -0
- package/src/ummaya/tools/documents/render_comparison_style.py +161 -0
- package/src/ummaya/tools/documents/reread.py +157 -0
- package/src/ummaya/tools/documents/runtime_authoring.py +244 -0
- package/src/ummaya/tools/documents/runtime_authoring_bundle.py +76 -0
- package/src/ummaya/tools/documents/scorecard.py +184 -0
- package/src/ummaya/tools/documents/socratic_planner.py +193 -0
- package/src/ummaya/tools/documents/style.py +48 -0
- package/src/ummaya/tools/documents/tool_defs.py +523 -0
- package/src/ummaya/tools/documents/validate.py +347 -0
- package/src/ummaya/tools/executor.py +61 -12
- package/src/ummaya/tools/geocoding/kakao_client.py +1 -2
- package/src/ummaya/tools/kma/apihub_catalog.py +984 -1
- package/src/ummaya/tools/kma/apihub_structured_adapter.py +86 -6
- package/src/ummaya/tools/kma/apihub_url_adapter.py +593 -0
- package/src/ummaya/tools/kma/apihub_url_catalog.py +296 -0
- package/src/ummaya/tools/live_proxy.py +0 -3
- package/src/ummaya/tools/location_adapters.py +8 -6
- package/src/ummaya/tools/manifest_metadata.py +16 -3
- package/src/ummaya/tools/models.py +5 -1
- package/src/ummaya/tools/mvp_surface.py +2 -2
- package/src/ummaya/tools/nmc/emergency_search.py +8 -6
- package/src/ummaya/tools/register_all.py +17 -0
- package/src/ummaya/tools/registry.py +10 -1
- package/src/ummaya/tools/resolve_location.py +4 -4
- package/src/ummaya/tools/routing/__init__.py +59 -0
- package/src/ummaya/tools/routing/builder.py +105 -0
- package/src/ummaya/tools/routing/cards.py +29 -0
- package/src/ummaya/tools/routing/decision_service.py +534 -0
- package/src/ummaya/tools/routing/decision_types.py +74 -0
- package/src/ummaya/tools/routing/feasibility.py +122 -0
- package/src/ummaya/tools/routing/intent.py +17 -0
- package/src/ummaya/tools/routing/intent_extractor.py +207 -0
- package/src/ummaya/tools/routing/intent_patterns.py +160 -0
- package/src/ummaya/tools/routing/intent_public_data.py +150 -0
- package/src/ummaya/tools/routing/intent_types.py +48 -0
- package/src/ummaya/tools/routing/lint.py +78 -0
- package/src/ummaya/tools/routing/metadata.py +174 -0
- package/src/ummaya/tools/routing/projection.py +340 -0
- package/src/ummaya/tools/routing/retrieval_policy.py +629 -0
- package/src/ummaya/tools/routing/schema.py +81 -0
- package/src/ummaya/tools/routing/types.py +96 -0
- package/src/ummaya/tools/routing_index.py +2 -2
- package/src/ummaya/tools/search.py +40 -106
- package/src/ummaya/tools/verified_data_go_kr/_manifest.py +115 -25
- package/src/ummaya/tools/verified_data_go_kr/airkorea_air_quality.py +109 -4
- package/src/ummaya/tools/verified_data_go_kr/nmc_aed_site.py +108 -2
- package/src/ummaya/tools/verified_data_go_kr/pps_bid_public_info.py +174 -9
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_arrival.py +66 -3
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_location.py +12 -2
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_route.py +8 -2
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_route_station.py +114 -0
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_station.py +14 -3
- package/src/ummaya/tools/verify_canonical_map.py +21 -0
- package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
- package/tui/package.json +1 -2
- package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
- package/tui/src/QueryEngine.ts +12 -4
- package/tui/src/bridge/inboundAttachments.ts +3 -3
- package/tui/src/cli/handlers/auth.ts +4 -13
- package/tui/src/cli/handlers/mcp.tsx +3 -3
- package/tui/src/cli/print.ts +69 -18
- package/tui/src/cli/update.ts +13 -13
- package/tui/src/commands/copy/index.ts +1 -1
- package/tui/src/commands/cost/cost.ts +2 -2
- package/tui/src/commands/init-verifiers.ts +5 -5
- package/tui/src/commands/init.ts +30 -30
- package/tui/src/commands/insights.ts +44 -44
- package/tui/src/commands/install-github-app/install-github-app.tsx +2 -2
- package/tui/src/commands/install-github-app/setupGitHubActions.ts +3 -3
- package/tui/src/commands/install-github-app/types.ts +8 -30
- package/tui/src/commands/install.tsx +5 -5
- package/tui/src/commands/mcp/addCommand.ts +5 -5
- package/tui/src/commands/mcp/xaaIdpCommand.ts +2 -2
- package/tui/src/commands/plugin/ManageMarketplaces.tsx +2 -2
- package/tui/src/commands/plugin/types.ts +6 -28
- package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
- package/tui/src/commands/reasoning/index.ts +13 -0
- package/tui/src/commands/reasoning/reasoning.tsx +177 -0
- package/tui/src/commands/rename/generateSessionName.ts +1 -1
- package/tui/src/commands/thinkback/thinkback.tsx +3 -3
- package/tui/src/commands.ts +2 -0
- package/tui/src/components/Feedback.tsx +1 -1
- package/tui/src/components/LogoV2/EmergencyTip.tsx +11 -2
- package/tui/src/components/LogoV2/WelcomeV2.tsx +1 -3
- package/tui/src/components/Messages.tsx +2 -1
- package/tui/src/components/ScrollKeybindingHandler.tsx +6 -6
- package/tui/src/components/Spinner/types.ts +6 -28
- package/tui/src/components/Spinner.tsx +2 -2
- package/tui/src/components/agents/generateAgent.ts +1 -1
- package/tui/src/components/agents/new-agent-creation/types.ts +4 -26
- package/tui/src/components/config/EnvSecretIsolatedEditor.tsx +1 -1
- package/tui/src/components/design-system/LoadingState.tsx +2 -2
- package/tui/src/components/mcp/types.ts +16 -38
- package/tui/src/components/messages/AssistantToolUseMessage.tsx +3 -2
- package/tui/src/components/messages/UserCrossSessionMessage.ts +16 -4
- package/tui/src/components/messages/UserForkBoilerplateMessage.ts +16 -4
- package/tui/src/components/messages/UserGitHubWebhookMessage.ts +16 -4
- package/tui/src/components/messages/UserToolResultMessage/utils.tsx +3 -2
- package/tui/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +9 -4
- package/tui/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +9 -4
- package/tui/src/components/primitive/DocumentSocraticReviewBlock.tsx +129 -0
- package/tui/src/components/primitive/DocumentToolResultCard.tsx +224 -0
- package/tui/src/components/primitive/documentSocraticReview.ts +215 -0
- package/tui/src/components/primitive/index.tsx +43 -1
- package/tui/src/components/primitive/types.ts +137 -0
- package/tui/src/components/ui/option.ts +4 -26
- package/tui/src/constants/common.ts +0 -2
- package/tui/src/constants/prompts.ts +4 -3
- package/tui/src/constants/querySource.ts +4 -26
- package/tui/src/entrypoints/sdk/controlTypes.ts +26 -48
- package/tui/src/entrypoints/sdk/coreTypes.generated.ts +3 -25
- package/tui/src/entrypoints/sdk/runtimeTypes.ts +38 -60
- package/tui/src/entrypoints/sdk/sdkUtilityTypes.ts +4 -26
- package/tui/src/entrypoints/sdk/settingsTypes.generated.ts +3 -25
- package/tui/src/entrypoints/sdk/toolTypes.ts +3 -25
- package/tui/src/hooks/toolPermission/handlers/interactiveHandler.ts +10 -0
- package/tui/src/hooks/useApiKeyVerification.ts +1 -1
- package/tui/src/hooks/useVirtualScroll.ts +1 -1
- package/tui/src/ink/ink.tsx +33 -14
- package/tui/src/ink/reconciler.ts +2 -3
- package/tui/src/ink/render-to-screen.ts +30 -10
- package/tui/src/ipc/bridge.ts +62 -15
- package/tui/src/ipc/bridgeSingleton.ts +5 -1
- package/tui/src/ipc/codec.ts +29 -3
- package/tui/src/ipc/frames.generated.ts +407 -312
- package/tui/src/ipc/llmClient.ts +279 -76
- package/tui/src/ipc/llmTypes.ts +16 -1
- package/tui/src/ipc/schema/frame.schema.json +1 -3475
- package/tui/src/keybindings/defaultBindings.ts +4 -0
- package/tui/src/main.tsx +32 -11
- package/tui/src/native-ts/file-index/index.ts +33 -3
- package/tui/src/observability/surface.ts +2 -2
- package/tui/src/probes/toolRegistryProbe.tsx +3 -1
- package/tui/src/projectOnboardingState.ts +7 -6
- package/tui/src/query/chatMessageTypes.ts +18 -0
- package/tui/src/query/chatMessagesBuilder.ts +1 -1
- package/tui/src/query/deps.ts +1 -1
- package/tui/src/query/messageGuards.ts +106 -0
- package/tui/src/query/publicDataTerminalRepair.ts +384 -0
- package/tui/src/query/run.ts +1075 -0
- package/tui/src/query/supportBoundary.ts +168 -0
- package/tui/src/query/toolResultErrors.ts +103 -0
- package/tui/src/query/toolRunner.ts +687 -0
- package/tui/src/query/unavailableToolRepair.ts +118 -0
- package/tui/src/query.ts +9 -1721
- package/tui/src/screens/REPL.tsx +42 -31
- package/tui/src/services/api/adapterManifest.ts +4 -0
- package/tui/src/services/api/backendChat/events.ts +117 -0
- package/tui/src/services/api/backendChat/finalMessage.ts +40 -0
- package/tui/src/services/api/backendChat/frame.ts +9 -0
- package/tui/src/services/api/backendChat/streaming.ts +430 -0
- package/tui/src/services/api/backendChat/types.ts +62 -0
- package/tui/src/services/api/backendChat.ts +1 -0
- package/tui/src/services/api/client.ts +98 -14
- package/tui/src/services/api/errorUtils.ts +5 -5
- package/tui/src/services/api/errors.ts +1 -1
- package/tui/src/services/api/logging.ts +1 -1
- package/tui/src/services/api/ummaya/evidence.ts +194 -0
- package/tui/src/services/api/ummaya/messages.ts +255 -0
- package/tui/src/services/api/ummaya/nonStreaming.ts +66 -0
- package/tui/src/services/api/ummaya/provider.ts +200 -0
- package/tui/src/services/api/ummaya/reasoning.ts +24 -0
- package/tui/src/services/api/ummaya/request.ts +200 -0
- package/tui/src/services/api/ummaya/selectionContext.ts +240 -0
- package/tui/src/services/api/ummaya/streaming.ts +365 -0
- package/tui/src/services/api/ummaya/streamingPayload.ts +129 -0
- package/tui/src/services/api/ummaya/streamingReader.ts +40 -0
- package/tui/src/services/api/ummaya/toolSelection.ts +217 -0
- package/tui/src/services/api/ummaya/types.ts +110 -0
- package/tui/src/services/api/ummaya/usage.ts +30 -0
- package/tui/src/services/api/ummaya.ts +26 -364
- package/tui/src/services/api/withRetry.ts +1 -1
- package/tui/src/services/awaySummary.ts +2 -2
- package/tui/src/services/claudeAiLimits.ts +1 -1
- package/tui/src/services/compact/autoCompact.ts +1 -1
- package/tui/src/services/compact/compact.ts +1 -1
- package/tui/src/services/lsp/types.ts +8 -30
- package/tui/src/services/tips/types.ts +6 -28
- package/tui/src/services/tokenEstimation.ts +1 -1
- package/tui/src/services/toolRegistry/bootGuard.ts +5 -5
- package/tui/src/services/toolUseSummary/toolUseSummaryGenerator.ts +1 -1
- package/tui/src/services/tools/toolExecution.ts +94 -1
- package/tui/src/skills/bundled/stuck.ts +12 -12
- package/tui/src/state/AppStateStore.ts +7 -0
- package/tui/src/store/pendingPermissionSlot.ts +1 -1
- package/tui/src/store/session-store.ts +10 -36
- package/tui/src/stubs/any-stub.ts +15 -10
- package/tui/src/stubs/color-diff-napi.ts +37 -23
- package/tui/src/stubs/globals.d.ts +3 -3
- package/tui/src/stubs/macro-preload.ts +23 -12
- package/tui/src/tools/AdapterTool/AdapterTool.ts +1239 -163
- package/tui/src/tools/AdapterTool/routeDiagnostics.ts +75 -0
- package/tui/src/tools/AgentTool/AgentTool.tsx +84 -1371
- package/tui/src/tools/AgentTool/agentToolHandoff.ts +114 -0
- package/tui/src/tools/AgentTool/agentToolPartialResult.ts +16 -0
- package/tui/src/tools/AgentTool/agentToolProgress.ts +32 -0
- package/tui/src/tools/AgentTool/agentToolResolver.ts +161 -0
- package/tui/src/tools/AgentTool/agentToolResult.ts +163 -0
- package/tui/src/tools/AgentTool/agentToolUtils.ts +14 -686
- package/tui/src/tools/AgentTool/asyncAgentLifecycle.ts +208 -0
- package/tui/src/tools/AgentTool/asyncLifecycle.ts +153 -0
- package/tui/src/tools/AgentTool/backgroundedCompletion.ts +126 -0
- package/tui/src/tools/AgentTool/backgroundedLifecycle.ts +174 -0
- package/tui/src/tools/AgentTool/foregroundBackground.ts +83 -0
- package/tui/src/tools/AgentTool/foregroundDrain.tsx +133 -0
- package/tui/src/tools/AgentTool/foregroundFinalize.ts +98 -0
- package/tui/src/tools/AgentTool/foregroundLifecycle.tsx +237 -0
- package/tui/src/tools/AgentTool/foregroundProgress.tsx +169 -0
- package/tui/src/tools/AgentTool/foregroundTask.ts +89 -0
- package/tui/src/tools/AgentTool/forkSubagent.ts +1 -12
- package/tui/src/tools/AgentTool/forkSubagentGate.ts +34 -0
- package/tui/src/tools/AgentTool/launchRouting.ts +203 -0
- package/tui/src/tools/AgentTool/lifecycle.ts +244 -0
- package/tui/src/tools/AgentTool/mcpRouting.ts +73 -0
- package/tui/src/tools/AgentTool/orchestrationSupport.ts +70 -0
- package/tui/src/tools/AgentTool/permissions.ts +39 -0
- package/tui/src/tools/AgentTool/promptSetup.ts +181 -0
- package/tui/src/tools/AgentTool/remoteRouting.ts +62 -0
- package/tui/src/tools/AgentTool/resultMapping.ts +116 -0
- package/tui/src/tools/AgentTool/resumeAgent.ts +39 -107
- package/tui/src/tools/AgentTool/resumeAgentHelpers.ts +140 -0
- package/tui/src/tools/AgentTool/runAgent.ts +1 -1
- package/tui/src/tools/AgentTool/runtimeConfig.ts +57 -0
- package/tui/src/tools/AgentTool/schemas.ts +196 -0
- package/tui/src/tools/AgentTool/sourceVerificationPropagation.ts +263 -0
- package/tui/src/tools/AgentTool/worktreeLifecycle.ts +105 -0
- package/tui/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +174 -202
- package/tui/src/tools/BashTool/BashTool.tsx +71 -1072
- package/tui/src/tools/BashTool/bashCommandHelpers.ts +12 -12
- package/tui/src/tools/BashTool/bashPermissions/astPreflight.ts +173 -0
- package/tui/src/tools/BashTool/bashPermissions/classifierChecks.ts +199 -0
- package/tui/src/tools/BashTool/bashPermissions/compoundGuards.ts +53 -0
- package/tui/src/tools/BashTool/bashPermissions/constants.ts +99 -0
- package/tui/src/tools/BashTool/bashPermissions/index.ts +38 -0
- package/tui/src/tools/BashTool/bashPermissions/legacyMisparsing.ts +62 -0
- package/tui/src/tools/BashTool/bashPermissions/main.ts +135 -0
- package/tui/src/tools/BashTool/bashPermissions/normalizedCommands.ts +33 -0
- package/tui/src/tools/BashTool/bashPermissions/operatorFlow.ts +98 -0
- package/tui/src/tools/BashTool/bashPermissions/permissionChecks.ts +200 -0
- package/tui/src/tools/BashTool/bashPermissions/prefixSuggestions.ts +88 -0
- package/tui/src/tools/BashTool/bashPermissions/promptClassifierRules.ts +125 -0
- package/tui/src/tools/BashTool/bashPermissions/ruleDelegates.ts +19 -0
- package/tui/src/tools/BashTool/bashPermissions/ruleMatching.ts +145 -0
- package/tui/src/tools/BashTool/bashPermissions/sandboxAutoAllow.ts +75 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandFlow.ts +205 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandGuards.ts +73 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandResultHelpers.ts +116 -0
- package/tui/src/tools/BashTool/bashPermissions/types.ts +26 -0
- package/tui/src/tools/BashTool/bashPermissions/wrapperStripping.ts +139 -0
- package/tui/src/tools/BashTool/bashPermissions.ts +26 -2621
- package/tui/src/tools/BashTool/call.ts +202 -0
- package/tui/src/tools/BashTool/callLoader.ts +35 -0
- package/tui/src/tools/BashTool/commandClassification.ts +151 -0
- package/tui/src/tools/BashTool/commandClassificationLoader.ts +40 -0
- package/tui/src/tools/BashTool/cwdReset.ts +33 -0
- package/tui/src/tools/BashTool/lineTruncation.ts +11 -0
- package/tui/src/tools/BashTool/modeValidation.ts +13 -1
- package/tui/src/tools/BashTool/outputPersistence.ts +42 -0
- package/tui/src/tools/BashTool/permissionClassification.ts +66 -0
- package/tui/src/tools/BashTool/permissionLoader.ts +44 -0
- package/tui/src/tools/BashTool/resultLoader.ts +29 -0
- package/tui/src/tools/BashTool/resultMapping.ts +83 -0
- package/tui/src/tools/BashTool/sandboxPolicy.ts +79 -0
- package/tui/src/tools/BashTool/schemas.ts +65 -0
- package/tui/src/tools/BashTool/sedEditExecution.ts +59 -0
- package/tui/src/tools/BashTool/shellExecution.tsx +245 -0
- package/tui/src/tools/BashTool/shellOutputUtils.ts +85 -0
- package/tui/src/tools/BashTool/shellPermissionGauntlet.ts +97 -0
- package/tui/src/tools/BashTool/uiLoader.ts +37 -0
- package/tui/src/tools/BriefTool/upload.ts +1 -1
- package/tui/src/tools/CalculatorTool/parser.ts +2 -2
- package/tui/src/tools/DocumentPrimitive/DocumentPrimitive.ts +262 -0
- package/tui/src/tools/DocumentPrimitive/dispatchNormalization.ts +270 -0
- package/tui/src/tools/DocumentPrimitive/documentDestinationPath.ts +18 -0
- package/tui/src/tools/DocumentPrimitive/documentMutationGuard.ts +22 -0
- package/tui/src/tools/DocumentPrimitive/documentPatchNormalization.ts +248 -0
- package/tui/src/tools/DocumentPrimitive/documentSourceVerification.ts +245 -0
- package/tui/src/tools/DocumentPrimitive/documentSourceVerificationFields.ts +103 -0
- package/tui/src/tools/DocumentPrimitive/modelVisibleOutput.ts +40 -0
- package/tui/src/tools/DocumentPrimitive/prompt.ts +35 -0
- package/tui/src/tools/FileEditTool/FileEditTool.ts +9 -507
- package/tui/src/tools/FileEditTool/call.ts +228 -0
- package/tui/src/tools/FileEditTool/validateInput.ts +196 -0
- package/tui/src/tools/FileReadTool/imageProcessor.ts +13 -0
- package/tui/src/tools/FileWriteTool/FileWriteTool.ts +7 -300
- package/tui/src/tools/FileWriteTool/call.ts +223 -0
- package/tui/src/tools/FileWriteTool/validateInput.ts +80 -0
- package/tui/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +19 -3
- package/tui/src/tools/LookupPrimitive/LookupPrimitive.ts +48 -29
- package/tui/src/tools/LookupPrimitive/prompt.ts +6 -7
- package/tui/src/tools/MCPTool/trustPolicy.ts +118 -0
- package/tui/src/tools/McpAuthTool/McpAuthTool.ts +21 -3
- package/tui/src/tools/NotebookEditTool/NotebookEditTool.ts +7 -326
- package/tui/src/tools/NotebookEditTool/call.ts +254 -0
- package/tui/src/tools/NotebookEditTool/notebookModel.ts +51 -0
- package/tui/src/tools/NotebookEditTool/validateInput.ts +142 -0
- package/tui/src/tools/PowerShellTool/PowerShellTool.tsx +46 -937
- package/tui/src/tools/PowerShellTool/acceptEditsCommandValidation.ts +162 -0
- package/tui/src/tools/PowerShellTool/call.ts +179 -0
- package/tui/src/tools/PowerShellTool/callLoader.ts +37 -0
- package/tui/src/tools/PowerShellTool/commandClassification.ts +86 -0
- package/tui/src/tools/PowerShellTool/modeValidation.ts +25 -332
- package/tui/src/tools/PowerShellTool/outputPersistence.ts +42 -0
- package/tui/src/tools/PowerShellTool/permissionClassification.ts +28 -0
- package/tui/src/tools/PowerShellTool/resultLoader.ts +31 -0
- package/tui/src/tools/PowerShellTool/resultMapping.ts +75 -0
- package/tui/src/tools/PowerShellTool/schemas.ts +40 -0
- package/tui/src/tools/PowerShellTool/shellExecution.tsx +258 -0
- package/tui/src/tools/PowerShellTool/symlinkModeValidation.ts +44 -0
- package/tui/src/tools/PowerShellTool/uiLoader.ts +37 -0
- package/tui/src/tools/PowerShellTool/validation.ts +39 -0
- package/tui/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +19 -3
- package/tui/src/tools/ResolveLocationPrimitive/ResolveLocationPrimitive.ts +30 -19
- package/tui/src/tools/ResolveLocationPrimitive/prompt.ts +2 -6
- package/tui/src/tools/SkillTool/SkillTool.ts +2 -2
- package/tui/src/tools/SubmitPrimitive/SubmitPrimitive.ts +51 -18
- package/tui/src/tools/TaskCreateTool/TaskCreateTool.ts +16 -2
- package/tui/src/tools/TaskGetTool/TaskGetTool.ts +23 -3
- package/tui/src/tools/TaskListTool/TaskListTool.ts +22 -4
- package/tui/src/tools/TaskOutputTool/TaskOutputTool.tsx +46 -547
- package/tui/src/tools/TaskOutputTool/lookup.ts +216 -0
- package/tui/src/tools/TaskOutputTool/render.tsx +257 -0
- package/tui/src/tools/TaskOutputTool/schemas.ts +55 -0
- package/tui/src/tools/TaskOutputTool/serialization.ts +36 -0
- package/tui/src/tools/TaskStopTool/TaskStopTool.ts +10 -0
- package/tui/src/tools/TaskUpdateTool/TaskUpdateTool.ts +14 -364
- package/tui/src/tools/TaskUpdateTool/completion.ts +62 -0
- package/tui/src/tools/TaskUpdateTool/schemas.ts +62 -0
- package/tui/src/tools/TaskUpdateTool/serialization.ts +46 -0
- package/tui/src/tools/TaskUpdateTool/statusUpdate.ts +247 -0
- package/tui/src/tools/TodoWriteTool/TodoWriteTool.ts +21 -2
- package/tui/src/tools/ToolSearchTool/ToolSearchTool.ts +21 -302
- package/tui/src/tools/ToolSearchTool/ccSupportTools.ts +223 -0
- package/tui/src/tools/ToolSearchTool/descriptionCache.ts +50 -0
- package/tui/src/tools/ToolSearchTool/keywordSearch.ts +216 -0
- package/tui/src/tools/ToolSearchTool/prompt.ts +10 -4
- package/tui/src/tools/ToolSearchTool/resultMapping.ts +30 -0
- package/tui/src/tools/ToolSearchTool/schemas.ts +30 -0
- package/tui/src/tools/ToolSearchTool/searchPool.ts +47 -0
- package/tui/src/tools/ToolSearchTool/supportIntentHints.ts +140 -0
- package/tui/src/tools/TranslateTool/TranslateTool.ts +1 -1
- package/tui/src/tools/VerifyPrimitive/VerifyPrimitive.ts +27 -10
- package/tui/src/tools/WebFetchTool/WebFetchTool.ts +43 -138
- package/tui/src/tools/WebFetchTool/call.ts +227 -0
- package/tui/src/tools/WebFetchTool/resolvedAddressSafety.ts +78 -0
- package/tui/src/tools/WebFetchTool/sourceVerification.ts +204 -0
- package/tui/src/tools/WebFetchTool/types.ts +23 -0
- package/tui/src/tools/WebFetchTool/urlSafety.ts +181 -0
- package/tui/src/tools/WebFetchTool/utils.ts +1 -1
- package/tui/src/tools/WebSearchTool/UI.tsx +0 -1
- package/tui/src/tools/WebSearchTool/WebSearchTool.ts +9 -313
- package/tui/src/tools/WebSearchTool/call.ts +33 -0
- package/tui/src/tools/WebSearchTool/responseMapping.ts +190 -0
- package/tui/src/tools/WebSearchTool/resultBlock.ts +47 -0
- package/tui/src/tools/WebSearchTool/schemas.ts +47 -0
- package/tui/src/tools/WebSearchTool/toolSchema.ts +12 -0
- package/tui/src/tools/WorkspaceToolAdapter/WorkspaceToolAdapter.ts +79 -0
- package/tui/src/tools/WorkspaceToolAdapter/allowedRootPolicy.ts +85 -0
- package/tui/src/tools/WorkspaceToolAdapter/documentFormatGuards.ts +73 -0
- package/tui/src/tools/WorkspaceToolAdapter/inputNormalization.ts +105 -0
- package/tui/src/tools/WorkspaceToolAdapter/mcpExposurePolicy.ts +64 -0
- package/tui/src/tools/WorkspaceToolAdapter/toolDefFactory.ts +215 -0
- package/tui/src/tools/WorkspaceToolAdapter/toolNames.ts +6 -0
- package/tui/src/tools/WorkspaceToolAdapter/workspacePolicy.ts +15 -0
- package/tui/src/tools/_shared/citizenUserText.ts +49 -0
- package/tui/src/tools/_shared/dispatchPrimitive.ts +6 -6
- package/tui/src/tools/_shared/documentChangeToPatch.ts +125 -0
- package/tui/src/tools/_shared/documentDispatchArguments.ts +87 -0
- package/tui/src/tools/_shared/documentPrimitiveTimeout.ts +13 -0
- package/tui/src/tools/_shared/documentToolResultRender.ts +98 -0
- package/tui/src/tools/_shared/locationInputRepair.ts +112 -0
- package/tui/src/tools/_shared/pendingCallRegistry.ts +1 -6
- package/tui/src/tools/_shared/rootPrimitiveInput.ts +68 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPatterns.ts +58 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPrompt.ts +271 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentRepair.ts +452 -0
- package/tui/src/tools/_shared/toolChoiceRepair/messageAccess.ts +80 -0
- package/tui/src/tools/_shared/toolChoiceRepair/publicDataRepair.ts +92 -0
- package/tui/src/tools/_shared/toolChoiceRepair/supportRepair.ts +135 -0
- package/tui/src/tools/_shared/toolChoiceRepair.ts +61 -0
- package/tui/src/tools/shared/mockDisclaimer.ts +1 -1
- package/tui/src/tools.ts +39 -190
- package/tui/src/types/fileSuggestion.ts +4 -26
- package/tui/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +186 -148
- package/tui/src/types/generated/events_mono/common/v1/auth.ts +25 -11
- package/tui/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +47 -30
- package/tui/src/types/generated/google/protobuf/timestamp.ts +21 -7
- package/tui/src/types/message.ts +80 -102
- package/tui/src/types/messageQueueTypes.ts +6 -28
- package/tui/src/types/notebook.ts +16 -38
- package/tui/src/types/statusLine.ts +4 -26
- package/tui/src/types/tools.ts +24 -46
- package/tui/src/types/utils.ts +6 -28
- package/tui/src/upstreamproxy/relay.ts +7 -3
- package/tui/src/upstreamproxy/upstreamproxy.ts +1 -1
- package/tui/src/utils/assistantMessageFactories.ts +9 -3
- package/tui/src/utils/attachments.ts +1 -1
- package/tui/src/utils/auth.ts +129 -139
- package/tui/src/utils/bash/ast.ts +23 -23
- package/tui/src/utils/bash/bashParser.ts +5 -5
- package/tui/src/utils/billing.ts +1 -1
- package/tui/src/utils/collapseReadSearch.ts +3 -3
- package/tui/src/utils/cronTasks.ts +1 -1
- package/tui/src/utils/execFileNoThrow.ts +1 -1
- package/tui/src/utils/filePersistence/types.ts +16 -38
- package/tui/src/utils/forkedAgent.ts +1 -1
- package/tui/src/utils/gracefulShutdown.ts +4 -4
- package/tui/src/utils/heapDumpService.ts +12 -8
- package/tui/src/utils/hooks/apiQueryHookHelper.ts +1 -1
- package/tui/src/utils/hooks/execPromptHook.ts +1 -1
- package/tui/src/utils/hooks/skillImprovement.ts +1 -1
- package/tui/src/utils/kExaoneReasoning.ts +138 -0
- package/tui/src/utils/mcp/dateTimeParser.ts +1 -1
- package/tui/src/utils/messages.ts +19 -0
- package/tui/src/utils/migrateSessions.ts +3 -3
- package/tui/src/utils/model/model.ts +6 -6
- package/tui/src/utils/multiToolLayout.ts +13 -0
- package/tui/src/utils/permissions/yoloClassifier.ts +1 -1
- package/tui/src/utils/plugins/headlessPluginInstall.ts +1 -1
- package/tui/src/utils/plugins/mcpPluginIntegration.ts +1 -1
- package/tui/src/utils/plugins/mcpbHandler.ts +1 -1
- package/tui/src/utils/plugins/pluginLoader.ts +8 -8
- package/tui/src/utils/processUserInput/processSlashCommand.tsx +2 -2
- package/tui/src/utils/processUserInput/processUserInput.ts +26 -0
- package/tui/src/utils/protectedNamespace.ts +5 -3
- package/tui/src/utils/rawJsonToolCall.ts +242 -0
- package/tui/src/utils/ripgrep.ts +16 -7
- package/tui/src/utils/sessionTitle.ts +1 -1
- package/tui/src/utils/settings/applySettingsChange.ts +4 -0
- package/tui/src/utils/settings/permissionValidation.ts +14 -2
- package/tui/src/utils/settings/types.ts +9 -3
- package/tui/src/utils/shell/prefix.ts +1 -1
- package/tui/src/utils/sideQuery.ts +1 -1
- package/tui/src/utils/stats.ts +1 -1
- package/tui/src/utils/systemThemeWatcher.ts +13 -3
- package/tui/src/utils/teleport.tsx +1 -1
- package/uv.lock +394 -22
- package/assets/copilot-gate-logo.svg +0 -58
- package/assets/govon-logo.svg +0 -40
- package/src/ummaya/eval/__init__.py +0 -5
- package/src/ummaya/eval/retrieval.py +0 -713
- package/tui/src/services/api/claude.ts +0 -3510
- package/tui/src/utils/messageStream.ts +0 -186
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
export type RawJsonToolCallProposal = {
|
|
2
|
+
readonly name: string
|
|
3
|
+
readonly input: Record<string, unknown>
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const RAW_JSON_REGISTERED_TOOL_USE_ID_PREFIX = 'call_raw_json_tool_'
|
|
7
|
+
export const RAW_JSON_UNREGISTERED_TOOL_USE_ID_PREFIX =
|
|
8
|
+
'call_raw_json_unregistered_tool_'
|
|
9
|
+
|
|
10
|
+
export function isUnregisteredRawJsonToolUseId(id: string): boolean {
|
|
11
|
+
return id.startsWith(RAW_JSON_UNREGISTERED_TOOL_USE_ID_PREFIX)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type RawJsonToolCallMalformedReason =
|
|
15
|
+
| 'invalid_json'
|
|
16
|
+
| 'top_level_contract_mismatch'
|
|
17
|
+
| 'name_contract_mismatch'
|
|
18
|
+
| 'arguments_contract_mismatch'
|
|
19
|
+
|
|
20
|
+
export type RawJsonToolCallNonProposalReason =
|
|
21
|
+
| 'not_exact_top_level_json'
|
|
22
|
+
| 'not_tool_like_json'
|
|
23
|
+
|
|
24
|
+
export type RawJsonToolCallClassification =
|
|
25
|
+
| { readonly kind: 'registered'; readonly executable: true; readonly proposal: RawJsonToolCallProposal }
|
|
26
|
+
| { readonly kind: 'unregistered'; readonly executable: false; readonly proposal: RawJsonToolCallProposal }
|
|
27
|
+
| { readonly kind: 'malformed_input'; readonly executable: false; readonly reason: RawJsonToolCallMalformedReason }
|
|
28
|
+
| { readonly kind: 'non_proposal'; readonly executable: false; readonly reason: RawJsonToolCallNonProposalReason }
|
|
29
|
+
|
|
30
|
+
type ExactRawJsonToolCallParseResult =
|
|
31
|
+
| { readonly kind: 'proposal'; readonly proposal: RawJsonToolCallProposal }
|
|
32
|
+
| { readonly kind: 'malformed_input'; readonly reason: RawJsonToolCallMalformedReason }
|
|
33
|
+
| { readonly kind: 'non_proposal'; readonly reason: RawJsonToolCallNonProposalReason }
|
|
34
|
+
|
|
35
|
+
export type TrailingRawJsonToolCallProposal = {
|
|
36
|
+
readonly prelude: string
|
|
37
|
+
readonly proposal: RawJsonToolCallProposal
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type TextualToolCallProposalExtraction = {
|
|
41
|
+
readonly text: string
|
|
42
|
+
readonly proposals: readonly RawJsonToolCallProposal[]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const TOOL_CALL_OPEN = '<tool_call>'
|
|
46
|
+
const TOOL_CALL_CLOSE = '</tool_call>'
|
|
47
|
+
const RAW_JSON_TOOL_CALL_KEY_START_RE =
|
|
48
|
+
/^\s*\{\s*["'](?:name|tool)["']\s*:\s*["'][^"']+["']/iu
|
|
49
|
+
|
|
50
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
51
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function parseJsonRecord(value: string): Record<string, unknown> | undefined {
|
|
55
|
+
try {
|
|
56
|
+
const parsed: unknown = JSON.parse(value)
|
|
57
|
+
return isRecord(parsed) ? parsed : undefined
|
|
58
|
+
} catch {
|
|
59
|
+
return undefined
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function parseArguments(value: unknown): Record<string, unknown> | undefined {
|
|
64
|
+
if (isRecord(value)) return value
|
|
65
|
+
if (typeof value !== 'string') return undefined
|
|
66
|
+
return parseJsonRecord(value)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function isToolLikeRecord(value: Record<string, unknown>): boolean {
|
|
70
|
+
const topLevelKeys = Object.keys(value)
|
|
71
|
+
return topLevelKeys.includes('name') ||
|
|
72
|
+
topLevelKeys.includes('tool') ||
|
|
73
|
+
topLevelKeys.includes('arguments')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function parseExactRawJsonToolCallProposal(params: {
|
|
77
|
+
readonly text: string
|
|
78
|
+
}): ExactRawJsonToolCallParseResult {
|
|
79
|
+
const trimmed = params.text.trim()
|
|
80
|
+
if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {
|
|
81
|
+
return { kind: 'non_proposal', reason: 'not_exact_top_level_json' }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const parsed = parseJsonRecord(trimmed)
|
|
85
|
+
if (parsed === undefined) {
|
|
86
|
+
if (RAW_JSON_TOOL_CALL_KEY_START_RE.test(trimmed)) {
|
|
87
|
+
return { kind: 'malformed_input', reason: 'invalid_json' }
|
|
88
|
+
}
|
|
89
|
+
return { kind: 'non_proposal', reason: 'not_tool_like_json' }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const topLevelKeys = Object.keys(parsed)
|
|
93
|
+
if (
|
|
94
|
+
topLevelKeys.length !== 2 ||
|
|
95
|
+
!topLevelKeys.includes('name') ||
|
|
96
|
+
!topLevelKeys.includes('arguments')
|
|
97
|
+
) {
|
|
98
|
+
return isToolLikeRecord(parsed)
|
|
99
|
+
? { kind: 'malformed_input', reason: 'top_level_contract_mismatch' }
|
|
100
|
+
: { kind: 'non_proposal', reason: 'not_tool_like_json' }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const name = parsed.name
|
|
104
|
+
if (typeof name !== 'string' || name.trim().length === 0) {
|
|
105
|
+
return { kind: 'malformed_input', reason: 'name_contract_mismatch' }
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const input = parseArguments(parsed.arguments)
|
|
109
|
+
if (input === undefined) {
|
|
110
|
+
return { kind: 'malformed_input', reason: 'arguments_contract_mismatch' }
|
|
111
|
+
}
|
|
112
|
+
return { kind: 'proposal', proposal: { name, input } }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function classifyRawJsonToolCallProposal(params: {
|
|
116
|
+
readonly text: string
|
|
117
|
+
readonly availableToolNames: readonly string[]
|
|
118
|
+
}): RawJsonToolCallClassification {
|
|
119
|
+
const result = parseExactRawJsonToolCallProposal({ text: params.text })
|
|
120
|
+
switch (result.kind) {
|
|
121
|
+
case 'proposal': {
|
|
122
|
+
const availableToolNames = new Set(params.availableToolNames)
|
|
123
|
+
return availableToolNames.has(result.proposal.name)
|
|
124
|
+
? {
|
|
125
|
+
kind: 'registered',
|
|
126
|
+
executable: true,
|
|
127
|
+
proposal: result.proposal,
|
|
128
|
+
}
|
|
129
|
+
: {
|
|
130
|
+
kind: 'unregistered',
|
|
131
|
+
executable: false,
|
|
132
|
+
proposal: result.proposal,
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
case 'malformed_input':
|
|
136
|
+
return { kind: 'malformed_input', executable: false, reason: result.reason }
|
|
137
|
+
case 'non_proposal':
|
|
138
|
+
return { kind: 'non_proposal', executable: false, reason: result.reason }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function parseRawJsonToolCallProposal(params: {
|
|
143
|
+
readonly text: string
|
|
144
|
+
}): RawJsonToolCallProposal | undefined {
|
|
145
|
+
const result = parseExactRawJsonToolCallProposal(params)
|
|
146
|
+
switch (result.kind) {
|
|
147
|
+
case 'proposal':
|
|
148
|
+
return result.proposal
|
|
149
|
+
case 'malformed_input':
|
|
150
|
+
case 'non_proposal':
|
|
151
|
+
return undefined
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function parseTrailingRawJsonToolCallProposal(params: {
|
|
156
|
+
readonly text: string
|
|
157
|
+
}): TrailingRawJsonToolCallProposal | undefined {
|
|
158
|
+
const trimmedEnd = params.text.trimEnd()
|
|
159
|
+
let candidateStart = trimmedEnd.lastIndexOf('{')
|
|
160
|
+
while (candidateStart >= 0) {
|
|
161
|
+
const proposal = parseRawJsonToolCallProposal({
|
|
162
|
+
text: trimmedEnd.slice(candidateStart),
|
|
163
|
+
})
|
|
164
|
+
if (proposal !== undefined) {
|
|
165
|
+
return {
|
|
166
|
+
prelude: trimmedEnd.slice(0, candidateStart).trimEnd(),
|
|
167
|
+
proposal,
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (candidateStart === 0) break
|
|
171
|
+
candidateStart = trimmedEnd.lastIndexOf('{', candidateStart - 1)
|
|
172
|
+
}
|
|
173
|
+
return undefined
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export function extractTextualToolCallProposals(params: {
|
|
177
|
+
readonly text: string
|
|
178
|
+
}): TextualToolCallProposalExtraction | undefined {
|
|
179
|
+
let searchStart = 0
|
|
180
|
+
let cleanedText = ''
|
|
181
|
+
const proposals: RawJsonToolCallProposal[] = []
|
|
182
|
+
|
|
183
|
+
while (searchStart < params.text.length) {
|
|
184
|
+
const openIndex = params.text.indexOf(TOOL_CALL_OPEN, searchStart)
|
|
185
|
+
if (openIndex < 0) {
|
|
186
|
+
cleanedText += params.text.slice(searchStart)
|
|
187
|
+
break
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const payloadStart = openIndex + TOOL_CALL_OPEN.length
|
|
191
|
+
const closeIndex = params.text.indexOf(TOOL_CALL_CLOSE, payloadStart)
|
|
192
|
+
if (closeIndex < 0) {
|
|
193
|
+
return undefined
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const proposal = parseRawJsonToolCallProposal({
|
|
197
|
+
text: params.text.slice(payloadStart, closeIndex),
|
|
198
|
+
})
|
|
199
|
+
if (proposal === undefined) {
|
|
200
|
+
return undefined
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
cleanedText += params.text.slice(searchStart, openIndex)
|
|
204
|
+
proposals.push(proposal)
|
|
205
|
+
searchStart = closeIndex + TOOL_CALL_CLOSE.length
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (proposals.length === 0) return undefined
|
|
209
|
+
return {
|
|
210
|
+
text: cleanedText.trimEnd(),
|
|
211
|
+
proposals,
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export function textContainsToolCallProposal(text: string): boolean {
|
|
216
|
+
return extractTextualToolCallProposals({ text }) !== undefined ||
|
|
217
|
+
parseTrailingRawJsonToolCallProposal({ text }) !== undefined
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function textContainsMalformedToolCallProposal(text: string): boolean {
|
|
221
|
+
if (textContainsToolCallProposal(text)) return false
|
|
222
|
+
if (text.includes(TOOL_CALL_OPEN)) return true
|
|
223
|
+
|
|
224
|
+
const trimmedEnd = text.trimEnd()
|
|
225
|
+
let candidateStart = trimmedEnd.lastIndexOf('{')
|
|
226
|
+
while (candidateStart >= 0) {
|
|
227
|
+
const candidate = trimmedEnd.slice(candidateStart)
|
|
228
|
+
if (RAW_JSON_TOOL_CALL_KEY_START_RE.test(candidate)) {
|
|
229
|
+
return parseJsonRecord(candidate) === undefined
|
|
230
|
+
}
|
|
231
|
+
if (candidateStart === 0) break
|
|
232
|
+
candidateStart = trimmedEnd.lastIndexOf('{', candidateStart - 1)
|
|
233
|
+
}
|
|
234
|
+
return false
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export function stripToolCallProposalText(text: string): string {
|
|
238
|
+
const textual = extractTextualToolCallProposals({ text })
|
|
239
|
+
if (textual !== undefined) return textual.text
|
|
240
|
+
const trailing = parseTrailingRawJsonToolCallProposal({ text })
|
|
241
|
+
return trailing?.prelude ?? text
|
|
242
|
+
}
|
package/tui/src/utils/ripgrep.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ChildProcess, ExecFileException } from 'child_process'
|
|
2
2
|
import { execFile, spawn } from 'child_process'
|
|
3
|
+
import { existsSync } from 'fs'
|
|
3
4
|
import memoize from 'lodash-es/memoize.js'
|
|
4
5
|
import { homedir } from 'os'
|
|
5
6
|
import * as path from 'path'
|
|
@@ -28,6 +29,14 @@ type RipgrepConfig = {
|
|
|
28
29
|
argv0?: string
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
function systemRipgrepConfig(): RipgrepConfig | undefined {
|
|
33
|
+
const { cmd: systemPath } = findExecutable('rg', [])
|
|
34
|
+
if (systemPath === 'rg') return undefined
|
|
35
|
+
// SECURITY: Use command name 'rg' instead of systemPath to prevent PATH hijacking.
|
|
36
|
+
// If we used systemPath, a malicious ./rg.exe in cwd could be executed.
|
|
37
|
+
return { mode: 'system', command: 'rg', args: [] }
|
|
38
|
+
}
|
|
39
|
+
|
|
31
40
|
const getRipgrepConfig = memoize((): RipgrepConfig => {
|
|
32
41
|
const userWantsSystemRipgrep = isEnvDefinedFalsy(
|
|
33
42
|
process.env.USE_BUILTIN_RIPGREP,
|
|
@@ -35,13 +44,8 @@ const getRipgrepConfig = memoize((): RipgrepConfig => {
|
|
|
35
44
|
|
|
36
45
|
// Try system ripgrep if user wants it
|
|
37
46
|
if (userWantsSystemRipgrep) {
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
// SECURITY: Use command name 'rg' instead of systemPath to prevent PATH hijacking
|
|
41
|
-
// If we used systemPath, a malicious ./rg.exe in current directory could be executed
|
|
42
|
-
// Using just 'rg' lets the OS resolve it safely with NoDefaultCurrentDirectoryInExePath protection
|
|
43
|
-
return { mode: 'system', command: 'rg', args: [] }
|
|
44
|
-
}
|
|
47
|
+
const systemConfig = systemRipgrepConfig()
|
|
48
|
+
if (systemConfig) return systemConfig
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
// In bundled (native) mode, ripgrep is statically compiled into bun-internal
|
|
@@ -61,6 +65,11 @@ const getRipgrepConfig = memoize((): RipgrepConfig => {
|
|
|
61
65
|
? path.resolve(rgRoot, `${process.arch}-win32`, 'rg.exe')
|
|
62
66
|
: path.resolve(rgRoot, `${process.arch}-${process.platform}`, 'rg')
|
|
63
67
|
|
|
68
|
+
if (!existsSync(command)) {
|
|
69
|
+
const systemConfig = systemRipgrepConfig()
|
|
70
|
+
if (systemConfig) return systemConfig
|
|
71
|
+
}
|
|
72
|
+
|
|
64
73
|
return { mode: 'builtin', command, args: [] }
|
|
65
74
|
})
|
|
66
75
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { z } from 'zod/v4'
|
|
16
16
|
import { getIsNonInteractiveSession } from '../bootstrap/state.js'
|
|
17
17
|
import { logEvent } from '../services/analytics/index.js'
|
|
18
|
-
import { queryHaiku } from '../services/api/
|
|
18
|
+
import { queryHaiku } from '../services/api/ummaya.js'
|
|
19
19
|
import type { Message } from '../types/message.js'
|
|
20
20
|
import { logForDebugging } from './debug.js'
|
|
21
21
|
import { safeParseJSON } from './json.js'
|
|
@@ -74,6 +74,9 @@ export function applySettingsChange(
|
|
|
74
74
|
const prevEffort = prev.settings.effortLevel
|
|
75
75
|
const newEffort = newSettings.effortLevel
|
|
76
76
|
const effortChanged = prevEffort !== newEffort
|
|
77
|
+
const prevReasoningMode = prev.settings.reasoningMode
|
|
78
|
+
const newReasoningMode = newSettings.reasoningMode
|
|
79
|
+
const reasoningModeChanged = prevReasoningMode !== newReasoningMode
|
|
77
80
|
|
|
78
81
|
return {
|
|
79
82
|
...prev,
|
|
@@ -87,6 +90,7 @@ export function applySettingsChange(
|
|
|
87
90
|
...(effortChanged && newEffort !== undefined
|
|
88
91
|
? { effortValue: newEffort }
|
|
89
92
|
: {}),
|
|
93
|
+
...(reasoningModeChanged ? { reasoningMode: newReasoningMode } : {}),
|
|
90
94
|
}
|
|
91
95
|
})
|
|
92
96
|
}
|
|
@@ -134,8 +134,14 @@ export function validatePermissionRule(rule: string): {
|
|
|
134
134
|
return { valid: false, error: 'Tool name cannot be empty' }
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
// Check tool name starts with uppercase (standard tools)
|
|
138
|
-
|
|
137
|
+
// Check tool name starts with uppercase (Claude Code standard tools).
|
|
138
|
+
// UMMAYA's sanctioned tool-surface swap exposes lowercase primitive and
|
|
139
|
+
// adapter names such as `document` and `workspace_glob`; those are valid
|
|
140
|
+
// first-class tools, not malformed CC tool names.
|
|
141
|
+
if (
|
|
142
|
+
parsed.toolName[0] !== parsed.toolName[0]?.toUpperCase() &&
|
|
143
|
+
!isUmmayaLowercaseToolName(parsed.toolName)
|
|
144
|
+
) {
|
|
139
145
|
return {
|
|
140
146
|
valid: false,
|
|
141
147
|
error: 'Tool names must start with uppercase',
|
|
@@ -238,6 +244,12 @@ export function validatePermissionRule(rule: string): {
|
|
|
238
244
|
return { valid: true }
|
|
239
245
|
}
|
|
240
246
|
|
|
247
|
+
function isUmmayaLowercaseToolName(toolName: string): boolean {
|
|
248
|
+
return /^(?:document(?:_[a-z0-9]+)*|workspace_[a-z0-9_]+|lookup|resolve_location|submit|verify|find|locate|send|check)$/u.test(
|
|
249
|
+
toolName,
|
|
250
|
+
)
|
|
251
|
+
}
|
|
252
|
+
|
|
241
253
|
/**
|
|
242
254
|
* Custom Zod schema for permission rule arrays
|
|
243
255
|
*/
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
PERMISSION_MODES,
|
|
9
9
|
} from '../permissions/PermissionMode.js'
|
|
10
10
|
import { MarketplaceSourceSchema } from '../plugins/schemas.js'
|
|
11
|
+
import { REASONING_MODES } from '../kExaoneReasoning.js'
|
|
11
12
|
import { CLAUDE_CODE_SETTINGS_SCHEMA_URL } from './constants.js'
|
|
12
13
|
import { PermissionRuleSchema } from './permissionValidation.js'
|
|
13
14
|
|
|
@@ -63,7 +64,7 @@ export const PermissionsSchema = lazySchema(() =>
|
|
|
63
64
|
: EXTERNAL_PERMISSION_MODES,
|
|
64
65
|
)
|
|
65
66
|
.optional()
|
|
66
|
-
.describe('Default permission mode when
|
|
67
|
+
.describe('Default permission mode when UMMAYA needs access'),
|
|
67
68
|
disableBypassPermissionsMode: z
|
|
68
69
|
.enum(['disable'])
|
|
69
70
|
.optional()
|
|
@@ -291,7 +292,7 @@ export const SettingsSchema = lazySchema(() =>
|
|
|
291
292
|
.describe('IdP issuer URL for OIDC discovery'),
|
|
292
293
|
clientId: z
|
|
293
294
|
.string()
|
|
294
|
-
.describe("
|
|
295
|
+
.describe("UMMAYA's client_id registered at the IdP"),
|
|
295
296
|
callbackPort: z
|
|
296
297
|
.number()
|
|
297
298
|
.int()
|
|
@@ -332,7 +333,7 @@ export const SettingsSchema = lazySchema(() =>
|
|
|
332
333
|
),
|
|
333
334
|
env: EnvironmentVariablesSchema()
|
|
334
335
|
.optional()
|
|
335
|
-
.describe('Environment variables to set for
|
|
336
|
+
.describe('Environment variables to set for UMMAYA sessions'),
|
|
336
337
|
// Attribution for commits and PRs
|
|
337
338
|
attribution: z
|
|
338
339
|
.object({
|
|
@@ -709,6 +710,11 @@ export const SettingsSchema = lazySchema(() =>
|
|
|
709
710
|
.optional()
|
|
710
711
|
.catch(undefined)
|
|
711
712
|
.describe('Persisted effort level for supported models.'),
|
|
713
|
+
reasoningMode: z
|
|
714
|
+
.enum(REASONING_MODES)
|
|
715
|
+
.optional()
|
|
716
|
+
.catch(undefined)
|
|
717
|
+
.describe('K-EXAONE/FriendliAI reasoning policy mode.'),
|
|
712
718
|
advisorModel: z
|
|
713
719
|
.string()
|
|
714
720
|
.optional()
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
15
15
|
logEvent,
|
|
16
16
|
} from '../../services/analytics/index.js'
|
|
17
|
-
import { queryHaiku } from '../../services/api/
|
|
17
|
+
import { queryHaiku } from '../../services/api/ummaya.js'
|
|
18
18
|
import { startsWithApiErrorPrefix } from '../../services/api/errors.js'
|
|
19
19
|
import { memoizeWithLRU } from '../memoize.js'
|
|
20
20
|
import { jsonStringify } from '../slowOperations.js'
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from '../constants/system.js'
|
|
13
13
|
import { logEvent } from '../services/analytics/index.js'
|
|
14
14
|
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../services/analytics/metadata.js'
|
|
15
|
-
import { getAPIMetadata } from '../services/api/
|
|
15
|
+
import { getAPIMetadata } from '../services/api/ummaya.js'
|
|
16
16
|
import { getAnthropicClient } from '../services/api/client.js'
|
|
17
17
|
import { getModelBetas, modelSupportsStructuredOutputs } from './betas.js'
|
|
18
18
|
import { computeFingerprint } from './fingerprint.js'
|
package/tui/src/utils/stats.ts
CHANGED
|
@@ -634,7 +634,7 @@ function cacheToStats(
|
|
|
634
634
|
}
|
|
635
635
|
|
|
636
636
|
/**
|
|
637
|
-
* Aggregates stats from all
|
|
637
|
+
* Aggregates stats from all UMMAYA sessions across all projects.
|
|
638
638
|
* Uses a disk cache to avoid reprocessing historical data.
|
|
639
639
|
*/
|
|
640
640
|
export async function aggregateClaudeCodeStats(): Promise<ClaudeCodeStats> {
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
// CC consumer references (ThemeProvider.tsx:69) imply CC has runtime equivalents but they're
|
|
5
5
|
// not in restored-src — UMMAYA NO-OP is justified until TUI Fidelity Meta-Epic
|
|
6
6
|
// decides on UMMAYA-original implementation.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import type { TerminalQuerier } from '../ink/terminal-querier.js'
|
|
8
|
+
import type { SystemTheme } from './systemTheme.js'
|
|
9
|
+
|
|
10
|
+
type ThemeChangeHandler = (theme: SystemTheme) => void
|
|
11
|
+
|
|
12
|
+
export function watchSystemTheme(
|
|
13
|
+
_querier: TerminalQuerier,
|
|
14
|
+
_onThemeChange: ThemeChangeHandler,
|
|
15
|
+
): () => void {
|
|
16
|
+
return () => {}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default watchSystemTheme
|
|
@@ -12,7 +12,7 @@ import { getOauthConfig } from '../constants/oauth.js';
|
|
|
12
12
|
import type { SDKMessage } from '../entrypoints/agentSdkTypes.js';
|
|
13
13
|
import type { Root } from '../ink.js';
|
|
14
14
|
import { KeybindingSetup } from '../keybindings/KeybindingProviderSetup.js';
|
|
15
|
-
import { queryHaiku } from '../services/api/
|
|
15
|
+
import { queryHaiku } from '../services/api/ummaya.js';
|
|
16
16
|
import { getSessionLogsViaOAuth, getTeleportEvents } from '../services/api/sessionIngress.js';
|
|
17
17
|
import { getOrganizationUUID } from '../services/oauth/client.js';
|
|
18
18
|
import { AppStateProvider } from '../state/AppState.js';
|