ummaya 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/bin/ummaya +10 -1
- package/npm-shrinkwrap.json +253 -2
- package/package.json +5 -1
- package/prompts/manifest.yaml +1 -1
- package/prompts/system_v1.md +1 -0
- package/pyproject.toml +26 -2
- package/specs/2803-document-production-hardening/contracts/document-tools.schema.json +1043 -0
- package/src/ummaya/_canonical/__init__.py +2 -0
- package/src/ummaya/engine/engine.py +29 -132
- package/src/ummaya/evidence/__init__.py +21 -2
- 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 +88 -1
- 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 +81 -212
- package/src/ummaya/evidence/source_provenance.py +246 -0
- package/src/ummaya/evidence/source_provenance_redaction.py +176 -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 +5 -5
- package/src/ummaya/ipc/route_diagnostics.py +73 -0
- package/src/ummaya/ipc/stdio.py +1109 -477
- package/src/ummaya/llm/client.py +102 -3
- package/src/ummaya/llm/config.py +8 -3
- 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 +17 -1
- 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 +29 -0
- package/src/ummaya/tools/live_proxy.py +0 -3
- package/src/ummaya/tools/models.py +5 -1
- package/src/ummaya/tools/register_all.py +8 -0
- package/src/ummaya/tools/registry.py +10 -1
- 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 +34 -746
- package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
- package/tui/package.json +1 -1
- package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
- package/tui/src/QueryEngine.ts +12 -8
- package/tui/src/bridge/inboundAttachments.ts +3 -3
- package/tui/src/cli/handlers/auth.ts +3 -12
- package/tui/src/cli/print.ts +7 -7
- package/tui/src/commands/insights.ts +1 -1
- package/tui/src/commands/install-github-app/types.ts +8 -30
- package/tui/src/commands/plugin/types.ts +6 -28
- package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
- package/tui/src/commands/rename/generateSessionName.ts +1 -1
- 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/ScrollKeybindingHandler.tsx +6 -6
- package/tui/src/components/Spinner/types.ts +6 -28
- 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/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 +3 -3
- package/tui/src/ipc/frames.generated.ts +12 -12
- package/tui/src/ipc/llmClient.ts +151 -27
- package/tui/src/ipc/schema/frame.schema.json +1 -1
- package/tui/src/keybindings/defaultBindings.ts +4 -0
- package/tui/src/main.tsx +29 -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 -2186
- package/tui/src/screens/REPL.tsx +40 -29
- 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 +65 -2
- 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 -418
- 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/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 +1207 -714
- 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 +25 -32
- package/tui/src/tools/LookupPrimitive/prompt.ts +0 -2
- 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 +1 -11
- 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 +27 -10
- 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 +2 -1
- 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/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/pendingCallRegistry.ts +1 -6
- package/tui/src/tools/_shared/rootPrimitiveInput.ts +1 -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 +55 -860
- 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/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/mcp/dateTimeParser.ts +1 -1
- package/tui/src/utils/messages.ts +18 -0
- package/tui/src/utils/migrateSessions.ts +3 -3
- package/tui/src/utils/model/model.ts +6 -6
- 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/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/permissionValidation.ts +14 -2
- package/tui/src/utils/shell/prefix.ts +1 -1
- package/tui/src/utils/sideQuery.ts +1 -1
- package/tui/src/utils/systemThemeWatcher.ts +13 -3
- package/tui/src/utils/teleport.tsx +1 -1
- package/uv.lock +400 -14
- package/tui/src/services/api/claude.ts +0 -3540
- package/tui/src/tools/_shared/directPublicDataGuard.ts +0 -362
- package/tui/src/tools/_shared/kmaAnalysisGuard.ts +0 -197
- package/tui/src/tools/_shared/kmaAviationGuard.ts +0 -70
- package/tui/src/tools/_shared/nmcAedGuard.ts +0 -234
- package/tui/src/tools/_shared/protectedCheckGuard.ts +0 -207
- package/tui/src/tools/_shared/textToolCallGuard.ts +0 -91
|
@@ -12,6 +12,8 @@ depending on the source-tree layout:
|
|
|
12
12
|
* ``checklist_manifest.yaml`` — 50-row plugin validation checklist.
|
|
13
13
|
Loaded by :mod:`ummaya.plugins.checks.framework` and the
|
|
14
14
|
``ummaya-plugin-validate`` CLI.
|
|
15
|
+
* ``document-tools.schema.json`` — Public AX document harness tool
|
|
16
|
+
contract. Loaded by :mod:`ummaya.tools.documents.contracts`.
|
|
15
17
|
|
|
16
18
|
The mapping is in pyproject.toml under
|
|
17
19
|
``[tool.hatch.build.targets.wheel.force-include]``.
|
|
@@ -8,7 +8,6 @@ the standalone ``query()`` async generator.
|
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
-
import json
|
|
12
11
|
import logging
|
|
13
12
|
from collections.abc import AsyncIterator
|
|
14
13
|
from typing import TYPE_CHECKING
|
|
@@ -20,9 +19,13 @@ from ummaya.engine.models import QueryContext, QueryState, SessionBudget
|
|
|
20
19
|
from ummaya.engine.query import query
|
|
21
20
|
from ummaya.llm.client import LLMClient
|
|
22
21
|
from ummaya.llm.models import ChatMessage
|
|
23
|
-
from ummaya.tools.errors import ToolNotFoundError
|
|
24
22
|
from ummaya.tools.executor import ToolExecutor
|
|
25
23
|
from ummaya.tools.registry import ToolRegistry
|
|
24
|
+
from ummaya.tools.routing import (
|
|
25
|
+
RouteDecisionService,
|
|
26
|
+
build_available_adapters_projection,
|
|
27
|
+
selected_concrete_adapter_tools,
|
|
28
|
+
)
|
|
26
29
|
|
|
27
30
|
if TYPE_CHECKING:
|
|
28
31
|
from ummaya.permissions.models import SessionContext
|
|
@@ -31,66 +34,6 @@ logger = logging.getLogger(__name__)
|
|
|
31
34
|
|
|
32
35
|
_INTERNAL_CONTEXT_TOOL_IDS = frozenset({"find", "locate", "check", "send", "search_tools"})
|
|
33
36
|
|
|
34
|
-
_LOCATION_DEPENDENT_SCHEMA_KEYS = frozenset(
|
|
35
|
-
{
|
|
36
|
-
"adm_cd",
|
|
37
|
-
"admcd",
|
|
38
|
-
"admin_code",
|
|
39
|
-
"administrative_code",
|
|
40
|
-
"latitude",
|
|
41
|
-
"lat",
|
|
42
|
-
"longitude",
|
|
43
|
-
"lon",
|
|
44
|
-
"lng",
|
|
45
|
-
"nx",
|
|
46
|
-
"ny",
|
|
47
|
-
"region_cd",
|
|
48
|
-
"region_code",
|
|
49
|
-
}
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def _schema_requires_location_resolution(
|
|
54
|
-
input_schema_json: object,
|
|
55
|
-
required_params: object,
|
|
56
|
-
) -> bool:
|
|
57
|
-
"""Return True when an adapter schema needs prior locate output."""
|
|
58
|
-
|
|
59
|
-
return _contains_location_dependent_key(
|
|
60
|
-
required_params
|
|
61
|
-
) or _schema_required_fields_contain_location_key(input_schema_json)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def _schema_required_fields_contain_location_key(value: object) -> bool:
|
|
65
|
-
"""Return True when JSON Schema required fields demand locate-derived data."""
|
|
66
|
-
|
|
67
|
-
if isinstance(value, dict):
|
|
68
|
-
required = value.get("required")
|
|
69
|
-
if _contains_location_dependent_key(required):
|
|
70
|
-
return True
|
|
71
|
-
return any(
|
|
72
|
-
_schema_required_fields_contain_location_key(nested) for nested in value.values()
|
|
73
|
-
)
|
|
74
|
-
if isinstance(value, list):
|
|
75
|
-
return any(_schema_required_fields_contain_location_key(item) for item in value)
|
|
76
|
-
return False
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def _contains_location_dependent_key(value: object) -> bool:
|
|
80
|
-
"""Recursively detect coordinate/admin-code schema fields."""
|
|
81
|
-
|
|
82
|
-
if isinstance(value, dict):
|
|
83
|
-
for key, nested in value.items():
|
|
84
|
-
if str(key).lower() in _LOCATION_DEPENDENT_SCHEMA_KEYS:
|
|
85
|
-
return True
|
|
86
|
-
if _contains_location_dependent_key(nested):
|
|
87
|
-
return True
|
|
88
|
-
elif isinstance(value, list):
|
|
89
|
-
return any(_contains_location_dependent_key(item) for item in value)
|
|
90
|
-
elif isinstance(value, str):
|
|
91
|
-
return value.lower() in _LOCATION_DEPENDENT_SCHEMA_KEYS
|
|
92
|
-
return False
|
|
93
|
-
|
|
94
37
|
|
|
95
38
|
class QueryEngine:
|
|
96
39
|
"""Per-session orchestrator for the UMMAYA query engine.
|
|
@@ -296,85 +239,39 @@ class QueryEngine:
|
|
|
296
239
|
"""Build dynamic adapter context and per-turn concrete tool exposure."""
|
|
297
240
|
|
|
298
241
|
try:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
candidates = search(
|
|
242
|
+
decision = RouteDecisionService(self._tool_registry).select_adapters(
|
|
302
243
|
user_message,
|
|
303
|
-
self._tool_registry.bm25_index,
|
|
304
|
-
self._tool_registry,
|
|
305
244
|
top_k=15,
|
|
245
|
+
max_selected=5,
|
|
306
246
|
)
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
selected_tool_ids: list[str] = []
|
|
313
|
-
primary_find_without_location = False
|
|
314
|
-
visible_count = 0
|
|
315
|
-
for candidate in candidates:
|
|
316
|
-
try:
|
|
317
|
-
tool = self._tool_registry.find(candidate.tool_id)
|
|
318
|
-
except ToolNotFoundError:
|
|
319
|
-
continue
|
|
320
|
-
if candidate.score <= 0:
|
|
321
|
-
continue
|
|
322
|
-
if tool.id in _INTERNAL_CONTEXT_TOOL_IDS:
|
|
323
|
-
continue
|
|
324
|
-
primitive = candidate.primitive if isinstance(candidate.primitive, str) else None
|
|
325
|
-
requires_location = _schema_requires_location_resolution(
|
|
326
|
-
candidate.input_schema_json,
|
|
327
|
-
candidate.required_params,
|
|
328
|
-
)
|
|
329
|
-
primary_find_without_location = primary_find_without_location or (
|
|
330
|
-
visible_count == 0 and primitive == "find" and not requires_location
|
|
247
|
+
concrete_tools = selected_concrete_adapter_tools(
|
|
248
|
+
decision,
|
|
249
|
+
self._tool_registry,
|
|
250
|
+
exclude_tool_ids=_INTERNAL_CONTEXT_TOOL_IDS,
|
|
251
|
+
max_tools=5,
|
|
331
252
|
)
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
sort_keys=True,
|
|
253
|
+
tool_ids = tuple(tool.id for tool in concrete_tools)
|
|
254
|
+
if not tool_ids:
|
|
255
|
+
return None, ()
|
|
256
|
+
projection_level = (
|
|
257
|
+
decision.schema_projection_level if decision.selected_tools else "summary"
|
|
338
258
|
)
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
f" input_schema_json: {schema_json}",
|
|
347
|
-
f" call_hint: {candidate.tool_id}({{...}})",
|
|
348
|
-
f" policy_url: {candidate.real_classification_url or ''}",
|
|
349
|
-
]
|
|
259
|
+
projection = build_available_adapters_projection(
|
|
260
|
+
decision,
|
|
261
|
+
self._tool_registry,
|
|
262
|
+
query=user_message,
|
|
263
|
+
projection_level=projection_level,
|
|
264
|
+
max_visible=len(tool_ids),
|
|
265
|
+
visible_tool_ids=tool_ids,
|
|
350
266
|
)
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
267
|
+
except Exception: # noqa: BLE001
|
|
268
|
+
logger.exception("available_adapters auto-inject failed")
|
|
269
|
+
return None, ()
|
|
354
270
|
|
|
355
|
-
if
|
|
271
|
+
if projection.content is None:
|
|
356
272
|
return None, ()
|
|
357
273
|
|
|
358
|
-
|
|
359
|
-
[
|
|
360
|
-
"<available_adapters>",
|
|
361
|
-
"Use these adapter candidates for this citizen request. "
|
|
362
|
-
"The model-facing function name is the concrete tool_id shown "
|
|
363
|
-
"below when that function is present in tools[]. Call the "
|
|
364
|
-
"concrete adapter directly with exactly the input_schema_json "
|
|
365
|
-
"fields. Do not wrap tool_id/params inside a concrete adapter "
|
|
366
|
-
"call. The root primitives (find, locate, check, send) are "
|
|
367
|
-
"legacy compatibility wrappers only when a concrete adapter "
|
|
368
|
-
"function is not loaded. "
|
|
369
|
-
"Do not call locate just because the citizen text contains a "
|
|
370
|
-
"city/province name; treat that as the dataset/filter term. "
|
|
371
|
-
"Call locate only when the selected adapter schema requires "
|
|
372
|
-
"coordinates, administrative codes, or a place-to-region conversion.",
|
|
373
|
-
*adapter_lines,
|
|
374
|
-
"</available_adapters>",
|
|
375
|
-
]
|
|
376
|
-
)
|
|
377
|
-
return ChatMessage(role="system", content=content), tuple(selected_tool_ids)
|
|
274
|
+
return ChatMessage(role="system", content=projection.content), tool_ids
|
|
378
275
|
|
|
379
276
|
def set_permission_session(self, session: SessionContext | None) -> None:
|
|
380
277
|
"""Update the permission-pipeline session used for subsequent turns.
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
# SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
"""Evidence Fabric v2 public API."""
|
|
3
3
|
|
|
4
|
-
from ummaya.evidence.
|
|
5
|
-
from ummaya.evidence.
|
|
4
|
+
from ummaya.evidence.dataset_contract import EvidenceContractError
|
|
5
|
+
from ummaya.evidence.models import (
|
|
6
|
+
EvidenceGate,
|
|
7
|
+
EvidenceStatus,
|
|
8
|
+
RunEvidence,
|
|
9
|
+
)
|
|
10
|
+
from ummaya.evidence.runner import run_dataset
|
|
11
|
+
from ummaya.evidence.source_provenance import (
|
|
12
|
+
SourceProvenanceDecision,
|
|
13
|
+
SourceProvenanceLedger,
|
|
14
|
+
SourceProvenanceRecord,
|
|
15
|
+
SourceRedactionMetadata,
|
|
16
|
+
build_source_provenance_record,
|
|
17
|
+
)
|
|
6
18
|
from ummaya.evidence.task_registry import (
|
|
7
19
|
EvidenceDatasetRef,
|
|
8
20
|
EvidenceTask,
|
|
@@ -10,6 +22,7 @@ from ummaya.evidence.task_registry import (
|
|
|
10
22
|
TaskRegistryError,
|
|
11
23
|
load_task_registry,
|
|
12
24
|
)
|
|
25
|
+
from ummaya.evidence.tool_layer_models import ToolLayerEvidenceEvent
|
|
13
26
|
|
|
14
27
|
__all__ = [
|
|
15
28
|
"EvidenceDatasetRef",
|
|
@@ -19,7 +32,13 @@ __all__ = [
|
|
|
19
32
|
"EvidenceTask",
|
|
20
33
|
"EvidenceTaskRegistry",
|
|
21
34
|
"RunEvidence",
|
|
35
|
+
"SourceProvenanceDecision",
|
|
36
|
+
"SourceProvenanceLedger",
|
|
37
|
+
"SourceProvenanceRecord",
|
|
38
|
+
"SourceRedactionMetadata",
|
|
22
39
|
"TaskRegistryError",
|
|
40
|
+
"ToolLayerEvidenceEvent",
|
|
41
|
+
"build_source_provenance_record",
|
|
23
42
|
"load_task_registry",
|
|
24
43
|
"run_dataset",
|
|
25
44
|
]
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""Scenario dataset parsing for Evidence Fabric v2."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import assert_never
|
|
8
|
+
|
|
9
|
+
import yaml
|
|
10
|
+
from pydantic import BaseModel, ConfigDict, Field, ValidationError
|
|
11
|
+
|
|
12
|
+
from ummaya.evidence.json_types import JsonObject, JsonValue, parse_json_object
|
|
13
|
+
|
|
14
|
+
_REPO_ROOT = Path(__file__).resolve().parents[3]
|
|
15
|
+
DEFAULT_SCENARIO_PATH = _REPO_ROOT / "evidence/scenarios/national_ax_citizen_requests_v1.yaml"
|
|
16
|
+
DEFAULT_TASK_REGISTRY_PATH = _REPO_ROOT / "evidence/registry.yaml"
|
|
17
|
+
DEFAULT_DATASET_REF = "ummaya/national-ax-core@local"
|
|
18
|
+
BANNED_MODEL_VISIBLE_KEYS = frozenset(
|
|
19
|
+
{
|
|
20
|
+
"adapter_id",
|
|
21
|
+
"adapter_ids",
|
|
22
|
+
"adapter_family",
|
|
23
|
+
"expected_adapter_id",
|
|
24
|
+
"tool_id",
|
|
25
|
+
"tool_ids",
|
|
26
|
+
"expected_tool_id",
|
|
27
|
+
"expected_tool_ids",
|
|
28
|
+
"expected_adapter_family",
|
|
29
|
+
"expected_route_trace",
|
|
30
|
+
"route_trace",
|
|
31
|
+
"route_selection_assertion",
|
|
32
|
+
"route_selection_assertions",
|
|
33
|
+
"route_adapter_family",
|
|
34
|
+
"selected_adapter_family",
|
|
35
|
+
"selected_adapter_id",
|
|
36
|
+
"selected_tool",
|
|
37
|
+
"selected_tool_id",
|
|
38
|
+
"selected_tool_ids",
|
|
39
|
+
"selected_tools",
|
|
40
|
+
"fixture_refs",
|
|
41
|
+
"fixture_ref",
|
|
42
|
+
"current_adapter_id",
|
|
43
|
+
"assertion_events",
|
|
44
|
+
"assertion_kind",
|
|
45
|
+
"argument_feasibility",
|
|
46
|
+
"clarification_expected",
|
|
47
|
+
"clarification_reason",
|
|
48
|
+
"correlation_id",
|
|
49
|
+
"coverage_tags",
|
|
50
|
+
"evidence_events",
|
|
51
|
+
"expected_domain",
|
|
52
|
+
"expected_primitives",
|
|
53
|
+
"failure_recovery",
|
|
54
|
+
"manifest_hash",
|
|
55
|
+
"prompt_manifest_hash",
|
|
56
|
+
"query_hash",
|
|
57
|
+
"route_source",
|
|
58
|
+
"selected_domain",
|
|
59
|
+
"selected_primitives",
|
|
60
|
+
"status",
|
|
61
|
+
"stop_reason",
|
|
62
|
+
"tool_catalog_hash",
|
|
63
|
+
"trace_id",
|
|
64
|
+
"trace_kind",
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
REQUIRED_DOMAINS = frozenset(
|
|
68
|
+
{
|
|
69
|
+
"tax",
|
|
70
|
+
"civil_affairs",
|
|
71
|
+
"payments",
|
|
72
|
+
"utilities",
|
|
73
|
+
"identity",
|
|
74
|
+
"welfare",
|
|
75
|
+
"healthcare",
|
|
76
|
+
"housing",
|
|
77
|
+
"mobility",
|
|
78
|
+
"business",
|
|
79
|
+
"labor",
|
|
80
|
+
"education",
|
|
81
|
+
"safety",
|
|
82
|
+
"immigration",
|
|
83
|
+
"legal",
|
|
84
|
+
"personal_data",
|
|
85
|
+
"public_data",
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class EvidenceContractError(ValueError):
|
|
91
|
+
"""Raised when a scenario dataset violates the Evidence Fabric contract."""
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class ExpectedStep(BaseModel):
|
|
95
|
+
"""One expected public-service loop step in a scenario."""
|
|
96
|
+
|
|
97
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
98
|
+
|
|
99
|
+
primitive: str
|
|
100
|
+
purpose: str
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class PermissionRequirements(BaseModel):
|
|
104
|
+
"""Permission requirements attached to a citizen scenario."""
|
|
105
|
+
|
|
106
|
+
model_config = ConfigDict(frozen=True, extra="allow")
|
|
107
|
+
|
|
108
|
+
identity_assurance: str
|
|
109
|
+
user_confirmations: tuple[str, ...] = Field(default_factory=tuple)
|
|
110
|
+
sensitive_data: tuple[str, ...] = Field(default_factory=tuple)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class Scenario(BaseModel):
|
|
114
|
+
"""Minimum scenario shape needed by Evidence Fabric v2."""
|
|
115
|
+
|
|
116
|
+
model_config = ConfigDict(frozen=True, extra="allow")
|
|
117
|
+
|
|
118
|
+
id: str
|
|
119
|
+
priority: str = "P2"
|
|
120
|
+
lifecycle_domain: str
|
|
121
|
+
request_ko: str
|
|
122
|
+
request_en: str | None = None
|
|
123
|
+
agencies_or_infrastructure: tuple[str, ...] = Field(default_factory=tuple)
|
|
124
|
+
citizen_intent_verbs: tuple[str, ...] = Field(default_factory=tuple)
|
|
125
|
+
expected_ax_chain: tuple[ExpectedStep, ...]
|
|
126
|
+
permission_requirements: PermissionRequirements
|
|
127
|
+
expected_system_behavior: tuple[str, ...] = Field(default_factory=tuple)
|
|
128
|
+
evaluation_focus: tuple[str, ...] = Field(default_factory=tuple)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class ScenarioDataset(BaseModel):
|
|
132
|
+
"""Versioned citizen-demand scenario dataset."""
|
|
133
|
+
|
|
134
|
+
model_config = ConfigDict(frozen=True, extra="allow")
|
|
135
|
+
|
|
136
|
+
version: int
|
|
137
|
+
dataset_id: str
|
|
138
|
+
source_basis: str | None = None
|
|
139
|
+
target_system: str | None = None
|
|
140
|
+
allowed_primitives: tuple[str, ...] = Field(default_factory=tuple)
|
|
141
|
+
coverage_domains: tuple[str, ...]
|
|
142
|
+
scenarios: tuple[Scenario, ...]
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def parse_dataset(path: Path) -> ScenarioDataset:
|
|
146
|
+
"""Parse and validate a scenario dataset file."""
|
|
147
|
+
raw = _load_yaml_mapping(path)
|
|
148
|
+
banned = _find_banned_keys(raw)
|
|
149
|
+
if banned:
|
|
150
|
+
raise EvidenceContractError(
|
|
151
|
+
"model-visible scenario dataset contains banned implementation keys: "
|
|
152
|
+
+ ", ".join(banned)
|
|
153
|
+
)
|
|
154
|
+
try:
|
|
155
|
+
return ScenarioDataset.model_validate(raw)
|
|
156
|
+
except ValidationError as exc:
|
|
157
|
+
raise EvidenceContractError(str(exc)) from exc
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def resolve_repo_path(path: Path) -> Path:
|
|
161
|
+
"""Resolve a repository-relative path from the Evidence Fabric root."""
|
|
162
|
+
return path if path.is_absolute() else _REPO_ROOT / path
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def _load_yaml_mapping(path: Path) -> JsonObject:
|
|
166
|
+
if not path.exists():
|
|
167
|
+
raise EvidenceContractError(f"scenario dataset not found: {path}")
|
|
168
|
+
loaded = yaml.safe_load(path.read_text(encoding="utf-8"))
|
|
169
|
+
try:
|
|
170
|
+
return parse_json_object(loaded)
|
|
171
|
+
except ValidationError as exc:
|
|
172
|
+
raise EvidenceContractError(f"scenario dataset must be a JSON mapping: {path}") from exc
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _find_banned_keys(value: JsonValue, path: str = "$") -> tuple[str, ...]:
|
|
176
|
+
match value:
|
|
177
|
+
case dict():
|
|
178
|
+
hits: list[str] = []
|
|
179
|
+
for key, nested in value.items():
|
|
180
|
+
nested_path = f"{path}.{key}"
|
|
181
|
+
if key in BANNED_MODEL_VISIBLE_KEYS:
|
|
182
|
+
hits.append(nested_path)
|
|
183
|
+
hits.extend(_find_banned_keys(nested, nested_path))
|
|
184
|
+
return tuple(hits)
|
|
185
|
+
case list():
|
|
186
|
+
hits = []
|
|
187
|
+
for index, nested in enumerate(value):
|
|
188
|
+
hits.extend(_find_banned_keys(nested, f"{path}[{index}]"))
|
|
189
|
+
return tuple(hits)
|
|
190
|
+
case str() | int() | float() | bool() | None:
|
|
191
|
+
return ()
|
|
192
|
+
case unreachable:
|
|
193
|
+
assert_never(unreachable)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict
|
|
7
|
+
|
|
8
|
+
DocumentAuthoringScenarioClass = Literal[
|
|
9
|
+
"public_form_completion",
|
|
10
|
+
"narrative_authoring",
|
|
11
|
+
"unsupported_plausible_writing",
|
|
12
|
+
"protected_field",
|
|
13
|
+
"direct_hwp_path",
|
|
14
|
+
"render_comparison",
|
|
15
|
+
]
|
|
16
|
+
DocumentAuthoringStatus = Literal["ready_for_review", "needs_input", "blocked"]
|
|
17
|
+
DocumentHwpDirectWriteState = Literal["blocked", "promoted", "not_applicable"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DocumentAuthoringCase(BaseModel):
|
|
21
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
22
|
+
|
|
23
|
+
case_id: str
|
|
24
|
+
scenario_class: DocumentAuthoringScenarioClass
|
|
25
|
+
correlation_id: str
|
|
26
|
+
expected_status: DocumentAuthoringStatus
|
|
27
|
+
requires_socratic_loop: bool
|
|
28
|
+
requires_user_approval: bool
|
|
29
|
+
mutation_allowed: bool
|
|
30
|
+
render_comparison_required: bool
|
|
31
|
+
hwp_direct_write_state: DocumentHwpDirectWriteState = "not_applicable"
|
|
32
|
+
fixture_id: str | None = None
|
|
33
|
+
evidence_ref: str
|