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
|
@@ -338,3 +338,7 @@ export const DEFAULT_BINDINGS: KeybindingBlock[] = [
|
|
|
338
338
|
},
|
|
339
339
|
},
|
|
340
340
|
]
|
|
341
|
+
|
|
342
|
+
// Backwards-compatible name used by older focused TUI tests and snapshot
|
|
343
|
+
// harnesses. The active runtime import remains DEFAULT_BINDINGS.
|
|
344
|
+
export const DEFAULT_BINDING_BLOCKS = DEFAULT_BINDINGS
|
package/tui/src/main.tsx
CHANGED
|
@@ -23,6 +23,7 @@ import { checkHasTrustDialogAccepted, getGlobalConfig, getRemoteControlAtStartup
|
|
|
23
23
|
import { seedEarlyInput, stopCapturingEarlyInput } from './utils/earlyInput.js';
|
|
24
24
|
import { getInitialEffortSetting, parseEffortValue } from './utils/effort.js';
|
|
25
25
|
import { getInitialFastModeSetting, isFastModeEnabled, prefetchFastModeStatus, resolveFastModeStatusFromCache } from './utils/fastMode.js';
|
|
26
|
+
import { getInitialReasoningModeSetting } from './utils/kExaoneReasoning.js';
|
|
26
27
|
import { applyConfigEnvironmentVariables } from './utils/managedEnv.js';
|
|
27
28
|
import { createSystemMessage } from './utils/systemMessageFactories.js';
|
|
28
29
|
import { createUserMessage } from './utils/userMessageFactories.js';
|
|
@@ -91,8 +92,8 @@ import { validateUuid } from './utils/uuid.js';
|
|
|
91
92
|
|
|
92
93
|
import { registerMcpAddCommand } from 'src/commands/mcp/addCommand.js';
|
|
93
94
|
import { registerMcpXaaIdpCommand } from 'src/commands/mcp/xaaIdpCommand.js';
|
|
94
|
-
//
|
|
95
|
-
//
|
|
95
|
+
// Managed MCP proxy removed in P1+P2 (Spec 1633); UMMAYA does not consume
|
|
96
|
+
// upstream enterprise MCP configs. The eligibility check is now a no-op.
|
|
96
97
|
const fetchClaudeAIMcpConfigsIfEligible = async (): Promise<Record<string, never>> => ({});
|
|
97
98
|
import { clearServerCache } from 'src/services/mcp/client.js';
|
|
98
99
|
import { areMcpConfigsAllowedWithEnterpriseMcpConfig, dedupClaudeAiMcpServers, doesEnterpriseMcpConfigExist, filterMcpServersByPolicy, getClaudeCodeMcpConfigs, getMcpServerSignature, parseMcpConfig, parseMcpConfigFromFilePath } from 'src/services/mcp/config.js';
|
|
@@ -136,6 +137,27 @@ import { getTmuxInstallInstructions, isTmuxAvailable, parsePRReference } from '.
|
|
|
136
137
|
|
|
137
138
|
|
|
138
139
|
|
|
140
|
+
type ModuleRequire = (specifier: string) => unknown
|
|
141
|
+
type InspectorModule = {
|
|
142
|
+
url: () => string | undefined
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function isModuleRequire(value: unknown): value is ModuleRequire {
|
|
146
|
+
return typeof value === 'function'
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function isInspectorModule(value: unknown): value is InspectorModule {
|
|
150
|
+
return typeof value === 'object' && value !== null && 'url' in value && typeof value.url === 'function'
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function getInspectorFromGlobal(): InspectorModule | undefined {
|
|
154
|
+
const globalRequire: unknown = Reflect.get(globalThis, 'require')
|
|
155
|
+
if (!isModuleRequire(globalRequire)) return undefined
|
|
156
|
+
|
|
157
|
+
const inspector = globalRequire('inspector')
|
|
158
|
+
return isInspectorModule(inspector) ? inspector : undefined
|
|
159
|
+
}
|
|
160
|
+
|
|
139
161
|
// Check if running in debug/inspection mode
|
|
140
162
|
function isBeingDebugged() {
|
|
141
163
|
const isBun = isRunningWithBun();
|
|
@@ -160,9 +182,8 @@ function isBeingDebugged() {
|
|
|
160
182
|
// Check if inspector is available and active (indicates debugging)
|
|
161
183
|
try {
|
|
162
184
|
// Dynamic import would be better but is async - use global object instead
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
const hasInspectorUrl = !!inspector.url();
|
|
185
|
+
const inspector = getInspectorFromGlobal();
|
|
186
|
+
const hasInspectorUrl = !!inspector?.url();
|
|
166
187
|
return hasInspectorUrl || hasInspectArg || hasInspectEnv;
|
|
167
188
|
} catch {
|
|
168
189
|
// Ignore error and fall back to argument detection
|
|
@@ -1094,12 +1115,12 @@ async function run(): Promise<CommanderCommand> {
|
|
|
1094
1115
|
});
|
|
1095
1116
|
void assertMinVersion();
|
|
1096
1117
|
|
|
1097
|
-
//
|
|
1118
|
+
// UMMAYA connector config fetch: -p mode only (interactive uses useManageMCPConnections
|
|
1098
1119
|
// two-phase loading). Kicked off here to overlap with setup(); awaited
|
|
1099
1120
|
// before runHeadless so single-turn -p sees connectors. Skipped under
|
|
1100
1121
|
// enterprise/strict MCP to preserve policy boundaries.
|
|
1101
1122
|
const claudeaiConfigPromise: Promise<Record<string, ScopedMcpServerConfig>> = isNonInteractiveSession && !strictMcpConfig && !doesEnterpriseMcpConfigExist() &&
|
|
1102
|
-
// --bare / SIMPLE: skip
|
|
1123
|
+
// --bare / SIMPLE: skip managed connector proxy servers (datadog, Gmail,
|
|
1103
1124
|
// Slack, BigQuery, PubMed — 6-14s each to connect). Scripted calls
|
|
1104
1125
|
// that need MCP pass --mcp-config explicitly.
|
|
1105
1126
|
!isBareMode() ? fetchClaudeAIMcpConfigsIfEligible().then(configs => {
|
|
@@ -1108,7 +1129,7 @@ async function run(): Promise<CommanderCommand> {
|
|
|
1108
1129
|
blocked
|
|
1109
1130
|
} = filterMcpServersByPolicy(configs);
|
|
1110
1131
|
if (blocked.length > 0) {
|
|
1111
|
-
process.stderr.write(`Warning:
|
|
1132
|
+
process.stderr.write(`Warning: UMMAYA MCP ${plural(blocked.length, 'server')} blocked by enterprise policy: ${blocked.join(', ')}\n`);
|
|
1112
1133
|
}
|
|
1113
1134
|
return allowed;
|
|
1114
1135
|
}) : Promise.resolve({});
|
|
@@ -1774,6 +1795,7 @@ async function run(): Promise<CommanderCommand> {
|
|
|
1774
1795
|
},
|
|
1775
1796
|
toolPermissionContext,
|
|
1776
1797
|
effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
|
|
1798
|
+
reasoningMode: getInitialReasoningModeSetting(),
|
|
1777
1799
|
...(isFastModeEnabled() && {
|
|
1778
1800
|
fastMode: getInitialFastModeSetting(effectiveModel ?? null)
|
|
1779
1801
|
}),
|
|
@@ -2105,6 +2127,7 @@ async function run(): Promise<CommanderCommand> {
|
|
|
2105
2127
|
})
|
|
2106
2128
|
} : null,
|
|
2107
2129
|
effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
|
|
2130
|
+
reasoningMode: getInitialReasoningModeSetting(),
|
|
2108
2131
|
activeOverlays: new Set<string>(),
|
|
2109
2132
|
fastMode: getInitialFastModeSetting(resolvedInitialModel),
|
|
2110
2133
|
...(isAdvisorEnabled() && advisorModel && {
|
|
@@ -2474,16 +2497,14 @@ async function run(): Promise<CommanderCommand> {
|
|
|
2474
2497
|
|
|
2475
2498
|
|
|
2476
2499
|
const auth = program.command('auth').description('Show UMMAYA FriendliAI session-auth status').configureHelp(createSortedHelpConfig());
|
|
2477
|
-
auth.command('login').description('Show how to log in with /login inside the TUI').option('--email <email>', 'Ignored in UMMAYA').option('--sso', 'Ignored in UMMAYA').option('--console', 'Ignored in UMMAYA').
|
|
2500
|
+
auth.command('login').description('Show how to log in with /login inside the TUI').option('--email <email>', 'Ignored in UMMAYA').option('--sso', 'Ignored in UMMAYA').option('--console', 'Ignored in UMMAYA').action(async ({
|
|
2478
2501
|
email,
|
|
2479
2502
|
sso,
|
|
2480
2503
|
console: useConsole,
|
|
2481
|
-
claudeai
|
|
2482
2504
|
}: {
|
|
2483
2505
|
email?: string;
|
|
2484
2506
|
sso?: boolean;
|
|
2485
2507
|
console?: boolean;
|
|
2486
|
-
claudeai?: boolean;
|
|
2487
2508
|
}) => {
|
|
2488
2509
|
const {
|
|
2489
2510
|
authLogin
|
|
@@ -49,6 +49,7 @@ export class FileIndex {
|
|
|
49
49
|
// During async build, tracks how many paths have bitmap/lowerPath filled.
|
|
50
50
|
// search() uses this to search the ready prefix while build continues.
|
|
51
51
|
private readyCount = 0
|
|
52
|
+
private buildGeneration = 0
|
|
52
53
|
|
|
53
54
|
/**
|
|
54
55
|
* Load paths from an array of strings.
|
|
@@ -56,6 +57,7 @@ export class FileIndex {
|
|
|
56
57
|
* Automatically deduplicates paths.
|
|
57
58
|
*/
|
|
58
59
|
loadFromFileList(fileList: string[]): void {
|
|
60
|
+
const generation = this.startBuild()
|
|
59
61
|
// Deduplicate and filter empty strings (matches Rust HashSet behavior)
|
|
60
62
|
const seen = new Set<string>()
|
|
61
63
|
const paths: string[] = []
|
|
@@ -66,7 +68,7 @@ export class FileIndex {
|
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
|
|
69
|
-
this.buildIndex(paths)
|
|
71
|
+
this.buildIndex(paths, generation)
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
/**
|
|
@@ -88,18 +90,24 @@ export class FileIndex {
|
|
|
88
90
|
const queryable = new Promise<void>(resolve => {
|
|
89
91
|
markQueryable = resolve
|
|
90
92
|
})
|
|
91
|
-
const
|
|
93
|
+
const generation = this.startBuild()
|
|
94
|
+
const done = this.buildAsync(fileList, markQueryable, generation)
|
|
92
95
|
return { queryable, done }
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
private async buildAsync(
|
|
96
99
|
fileList: string[],
|
|
97
100
|
markQueryable: () => void,
|
|
101
|
+
generation: number,
|
|
98
102
|
): Promise<void> {
|
|
99
103
|
const seen = new Set<string>()
|
|
100
104
|
const paths: string[] = []
|
|
101
105
|
let chunkStart = performance.now()
|
|
102
106
|
for (let i = 0; i < fileList.length; i++) {
|
|
107
|
+
if (generation !== this.buildGeneration) {
|
|
108
|
+
markQueryable()
|
|
109
|
+
return
|
|
110
|
+
}
|
|
103
111
|
const line = fileList[i]!
|
|
104
112
|
if (line.length > 0 && !seen.has(line)) {
|
|
105
113
|
seen.add(line)
|
|
@@ -112,11 +120,19 @@ export class FileIndex {
|
|
|
112
120
|
}
|
|
113
121
|
}
|
|
114
122
|
|
|
123
|
+
if (generation !== this.buildGeneration) {
|
|
124
|
+
markQueryable()
|
|
125
|
+
return
|
|
126
|
+
}
|
|
115
127
|
this.resetArrays(paths)
|
|
116
128
|
|
|
117
129
|
chunkStart = performance.now()
|
|
118
130
|
let firstChunk = true
|
|
119
131
|
for (let i = 0; i < paths.length; i++) {
|
|
132
|
+
if (generation !== this.buildGeneration) {
|
|
133
|
+
markQueryable()
|
|
134
|
+
return
|
|
135
|
+
}
|
|
120
136
|
this.indexPath(i)
|
|
121
137
|
if ((i & 0xff) === 0xff && performance.now() - chunkStart > CHUNK_MS) {
|
|
122
138
|
this.readyCount = i + 1
|
|
@@ -125,21 +141,35 @@ export class FileIndex {
|
|
|
125
141
|
firstChunk = false
|
|
126
142
|
}
|
|
127
143
|
await yieldToEventLoop()
|
|
144
|
+
if (generation !== this.buildGeneration) {
|
|
145
|
+
return
|
|
146
|
+
}
|
|
128
147
|
chunkStart = performance.now()
|
|
129
148
|
}
|
|
130
149
|
}
|
|
150
|
+
if (generation !== this.buildGeneration) {
|
|
151
|
+
return
|
|
152
|
+
}
|
|
131
153
|
this.readyCount = paths.length
|
|
132
154
|
markQueryable()
|
|
133
155
|
}
|
|
134
156
|
|
|
135
|
-
private buildIndex(paths: string[]): void {
|
|
157
|
+
private buildIndex(paths: string[], generation: number): void {
|
|
136
158
|
this.resetArrays(paths)
|
|
137
159
|
for (let i = 0; i < paths.length; i++) {
|
|
160
|
+
if (generation !== this.buildGeneration) {
|
|
161
|
+
return
|
|
162
|
+
}
|
|
138
163
|
this.indexPath(i)
|
|
139
164
|
}
|
|
140
165
|
this.readyCount = paths.length
|
|
141
166
|
}
|
|
142
167
|
|
|
168
|
+
private startBuild(): number {
|
|
169
|
+
this.buildGeneration += 1
|
|
170
|
+
return this.buildGeneration
|
|
171
|
+
}
|
|
172
|
+
|
|
143
173
|
private resetArrays(paths: string[]): void {
|
|
144
174
|
const n = paths.length
|
|
145
175
|
this.paths = paths
|
|
@@ -32,11 +32,11 @@ const SURFACE_ATTRIBUTE_KEY = 'ummaya.ui.surface';
|
|
|
32
32
|
const TRACER_NAME = 'ummaya/ui-l2';
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Emit `ummaya.ui.surface=<surface>` on the active span
|
|
35
|
+
* Emit `ummaya.ui.surface=<surface>` on the active span when present. When no span
|
|
36
36
|
* is active (e.g., outside a tracing context), open and immediately close a
|
|
37
37
|
* one-shot span so the surface activation is recorded.
|
|
38
38
|
*
|
|
39
|
-
* The function is fail-soft:
|
|
39
|
+
* The function is fail-soft: OTEL provider failures become a console
|
|
40
40
|
* warning rather than a crash so a logging fault never blocks the UI.
|
|
41
41
|
*/
|
|
42
42
|
export function emitSurfaceActivation(surface: UiSurface, attrs?: Record<string, string | number | boolean>): void {
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
// bun run probe:tool-registry
|
|
10
10
|
//
|
|
11
11
|
// Expected success output:
|
|
12
|
-
// tool_registry: <N> entries verified (
|
|
12
|
+
// tool_registry: <N> entries verified (5 primitives) in <D>ms
|
|
13
13
|
|
|
14
14
|
import { LookupPrimitive } from '../tools/LookupPrimitive/LookupPrimitive.js'
|
|
15
15
|
import { ResolveLocationPrimitive } from '../tools/ResolveLocationPrimitive/ResolveLocationPrimitive.js'
|
|
16
16
|
import { SubmitPrimitive } from '../tools/SubmitPrimitive/SubmitPrimitive.js'
|
|
17
17
|
import { VerifyPrimitive } from '../tools/VerifyPrimitive/VerifyPrimitive.js'
|
|
18
|
+
import { DocumentPrimitive } from '../tools/DocumentPrimitive/DocumentPrimitive.js'
|
|
18
19
|
import { verifyBootRegistry } from '../services/toolRegistry/bootGuard.js'
|
|
19
20
|
import type { Tool } from '../Tool.js'
|
|
20
21
|
|
|
@@ -23,6 +24,7 @@ const primitiveRegistry: readonly Tool[] = [
|
|
|
23
24
|
ResolveLocationPrimitive as unknown as Tool,
|
|
24
25
|
SubmitPrimitive as unknown as Tool,
|
|
25
26
|
VerifyPrimitive as unknown as Tool,
|
|
27
|
+
DocumentPrimitive as unknown as Tool,
|
|
26
28
|
]
|
|
27
29
|
|
|
28
30
|
const result = verifyBootRegistry(primitiveRegistry)
|
|
@@ -47,17 +47,18 @@ export function isProjectOnboardingComplete(): boolean {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export function maybeMarkProjectOnboardingComplete(): void {
|
|
50
|
-
// Short-circuit on cached config — isProjectOnboardingComplete() hits
|
|
51
|
-
// the filesystem, and REPL.tsx calls this on every prompt submit.
|
|
52
50
|
if (getCurrentProjectConfig().hasCompletedProjectOnboarding) {
|
|
53
51
|
return
|
|
54
52
|
}
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
saveCurrentProjectConfig(current => {
|
|
54
|
+
if (current.hasCompletedProjectOnboarding) {
|
|
55
|
+
return current
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
57
58
|
...current,
|
|
58
59
|
hasCompletedProjectOnboarding: true,
|
|
59
|
-
}
|
|
60
|
-
}
|
|
60
|
+
}
|
|
61
|
+
})
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
export const shouldShowProjectOnboarding = memoize((): boolean => {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ChatMessageRole = 'system' | 'user' | 'assistant' | 'tool'
|
|
2
|
+
|
|
3
|
+
export type ChatMessageToolCall = {
|
|
4
|
+
readonly id: string
|
|
5
|
+
readonly type: 'function'
|
|
6
|
+
readonly function: {
|
|
7
|
+
readonly name: string
|
|
8
|
+
readonly arguments: string
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ChatMessage = {
|
|
13
|
+
readonly role: ChatMessageRole
|
|
14
|
+
readonly content: string
|
|
15
|
+
readonly name?: string | null
|
|
16
|
+
readonly tool_call_id?: string | null
|
|
17
|
+
readonly tool_calls?: readonly ChatMessageToolCall[] | null
|
|
18
|
+
}
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
import type {
|
|
45
45
|
ChatMessage,
|
|
46
46
|
ChatMessageToolCall,
|
|
47
|
-
} from '
|
|
47
|
+
} from './chatMessageTypes.js'
|
|
48
48
|
|
|
49
49
|
// ---------------------------------------------------------------------------
|
|
50
50
|
// Loose input types — mirror the CC ``Message`` shape WITHOUT importing
|
package/tui/src/query/deps.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from 'crypto'
|
|
2
|
-
import { queryModelWithStreaming } from '../services/api/
|
|
2
|
+
import { queryModelWithStreaming } from '../services/api/ummaya.js'
|
|
3
3
|
import { autoCompactIfNeeded } from '../services/compact/autoCompact.js'
|
|
4
4
|
import { microcompactMessages } from '../services/compact/microCompact.js'
|
|
5
5
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AssistantMessage,
|
|
3
|
+
Message,
|
|
4
|
+
UserMessage,
|
|
5
|
+
} from '../types/message.js'
|
|
6
|
+
|
|
7
|
+
export type TextBlock = {
|
|
8
|
+
readonly type: 'text'
|
|
9
|
+
readonly text: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ToolUseBlock = {
|
|
13
|
+
readonly type: 'tool_use'
|
|
14
|
+
readonly id: string
|
|
15
|
+
readonly name: string
|
|
16
|
+
readonly input: Record<string, unknown>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type ContentBlock = TextBlock | ToolUseBlock | Record<string, unknown>
|
|
20
|
+
type MessageContentCarrier = {
|
|
21
|
+
readonly message?: {
|
|
22
|
+
readonly content?: unknown
|
|
23
|
+
}
|
|
24
|
+
readonly content?: unknown
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
28
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function contentBlocks(message: Message): readonly ContentBlock[] {
|
|
32
|
+
const content = messageContent(message)
|
|
33
|
+
return Array.isArray(content) ? content.filter(isRecord) : []
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function messageText(message: Message): string {
|
|
37
|
+
const content = messageContent(message)
|
|
38
|
+
if (typeof content === 'string') return content
|
|
39
|
+
if (!Array.isArray(content)) return ''
|
|
40
|
+
return content
|
|
41
|
+
.filter(isRecord)
|
|
42
|
+
.filter((block): block is TextBlock => block.type === 'text')
|
|
43
|
+
.map(block => block.text)
|
|
44
|
+
.join('')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function messageContent(message: Message): unknown {
|
|
48
|
+
const candidate = message as MessageContentCarrier
|
|
49
|
+
return candidate.message?.content ?? candidate.content
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function toolUseBlocks(message: Message): readonly ToolUseBlock[] {
|
|
53
|
+
return contentBlocks(message).filter(
|
|
54
|
+
(block): block is ToolUseBlock =>
|
|
55
|
+
block.type === 'tool_use' &&
|
|
56
|
+
typeof block.id === 'string' &&
|
|
57
|
+
typeof block.name === 'string' &&
|
|
58
|
+
isRecord(block.input),
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function isAssistantMessage(message: Message): message is AssistantMessage {
|
|
63
|
+
return message.type === 'assistant'
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function isUserMessage(message: Message): message is UserMessage {
|
|
67
|
+
return message.type === 'user'
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function hasVisibleUserText(message: Message): boolean {
|
|
71
|
+
return isUserMessage(message) && message.isMeta !== true &&
|
|
72
|
+
messageText(message).trim().length > 0
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function latestTextUserMessageIndex(messages: readonly Message[]): number {
|
|
76
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
77
|
+
const message = messages[index]
|
|
78
|
+
if (message && hasVisibleUserText(message)) return index
|
|
79
|
+
}
|
|
80
|
+
return -1
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function hasAssistantToolUseNamedAfterLatestTextUser(
|
|
84
|
+
messages: readonly Message[],
|
|
85
|
+
toolName: string,
|
|
86
|
+
): boolean {
|
|
87
|
+
const latestUserIndex = latestTextUserMessageIndex(messages)
|
|
88
|
+
return messages.slice(latestUserIndex + 1).some(
|
|
89
|
+
message =>
|
|
90
|
+
isAssistantMessage(message) &&
|
|
91
|
+
toolUseBlocks(message).some(block => block.name === toolName),
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function cloneAssistantWithoutText(
|
|
96
|
+
message: AssistantMessage,
|
|
97
|
+
): AssistantMessage {
|
|
98
|
+
const blocks = contentBlocks(message).filter(block => block.type !== 'text')
|
|
99
|
+
return {
|
|
100
|
+
...message,
|
|
101
|
+
message: {
|
|
102
|
+
...message.message,
|
|
103
|
+
content: blocks,
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
|
+
}
|